« FreeBSD の操作を効率的に(tcsh:後編) | トップページ | シングルユーザモードの忘備録 »

セキュリティの小技(TCP/IP 編)

 FreeBSD のセキュリティ向上に役立つ… かもしれない(^^;小技を紹介します。

(10月に、試験を2つも受けなくてはならないことをすっかり忘れていて、急遽(きゅうきょ)、詰め込みモードに入ったので、しばらく縮小営業します… あと少しで、この FreeBSD 解説シリーズも終わるはずだったんですけど(^^;

 サーバをインターネットに公開しておくと、招かざるお客さんも、もれなくやってくるので(^^;、サーバのセキュリティを高めておくことが大切になります。

 そんな時に、ここで紹介する設定をやっておけば、多少はセキュリティ向上に役に立つかもしれません。
プライベートなサーバなら、お勧めの設定を全てやっておいてもいいですが、一般に広く公開しているサーバでは使えないワザもあるので、そのあたりは様子を見ながら、設定してみて下さい。)


 ちなみに、私が今回立てた Squid サーバは、ADSL ルータの内部にあるので、ここで紹介した設定は、まったくやってません(^-^;(^^;;ぉぃ。


● /etc/rc.conf で設定できるもの

 tcp_drop_synfin="YES"

 SYNFIN の両方を含んだ TCPパケットを、受け付けない(無視する)ようにします。

 こんなパケットは、当然ながらデータ送受信の役には立ちませんが、一方で、これにどう反応するかによって動いている OS の種類が特定できてしまうらしいので、安全のため、無視(無反応)を決め込んでもよいでしょう。

 ちなみに、TCP の処理には手間ひまがかかるため、これを設定しておくと、(実際に SYNFIN パケットが送られてくる環境では)CPU の負荷を下げるのにも役立つようです。

 icmp_drop_redirect="YES"

 ICMPリダイレクト要求を受け付けない(無視する)ようにします。

 インターネット上で問題が起きたため、正常に動いている別ルートに誘導してくれている、という可能性もなくはないですが、実際問題、アヤしいルートへと誘われている可能性の方が高いので、安全をとって無視してしまってもよいでしょう。

 icmp_log_redirect="YES"

 前述の ICMP のリダイレクト要求があったら、ログ(/var/log/messages)に記録します。

 log_in_vain="YES"

 開いていないポートにパケットが届いたら、ログ(/var/log/messages)に記録します。

 ただし、ポートスキャンDoS 攻撃を受けた場合、大量のログが出力されることがあるので、ネットワークの速度が飛躍的に向上した現在では、あまり使われない設定です。

 icmp_bmcastecho="NO"

 ブロードキャスト/マルチキャストされた ICMP に対し、応答を返さないようにします。
 (FreeBSD は、デフォルト"NO" になっています。)

 これは、悪意のある PC が、被害者のIPアドレスを騙って(かたって)、ブロードキャスト/マルチキャスト ICMP を送信し、その応答を被害者の PC に集中させて、身動きをとれなくする… という攻撃に利用されることがあるので、自分が加害者にならないよう、禁止("NO")にしておきます。


● /etc/sysctl.conf で設定できるもの

 /etc/sysctl.conf は、FreeBSD のカーネルの設定を変更するために使われる設定ファイルです。

 net.inet.tcp.log_in_vain=2
 net.inet.udp.log_in_vain=1

 開いていないポートにアクセスがあったら、ログ(/var/log/messages)に記録します。

 特に、tcp.log_in_vain=2 とすることで、/etc/rc.conf で log_in_vain="YES" としたときよりも多くのログを残すことができます。

 なお、「より多くのログが残る」ということは、当然、これも現在はやらない方がいい設定です(^^;;

 net.inet.tcp.blackhole=2
 net.inet.udp.blackhole=1

 開いていないポートにパケットが届いても、応答を返さないようにします。

 net.inet.tcp.blackhole の方は、ポートスキャンの対策になるとともに、前述の tcp_drop_synfin と同じ理由で、CPU 負荷を低くするのにも役立つはずです。

 一方で、net.inet.udp.blackhole については、ポートスキャンの対策には有効ですが、これを設定した場合、外部からの traceroute にも応答しなくなるので、一般に広く公開しているサーバでは、できるだけ使わない方がよいでしょう。

 net.inet.icmp.icmplim=200

 ポートスキャン、あるいは DoS 攻撃があった場合に、ログ(/var/log/messages)に記録を残します。

 もう少し詳しく言うと、開いていないポートにパケットが届いた場合、TCP/IP の約束では、パケットの送信元に ICMP の Unreachable メッセージ、または TCP の RST パケットを返すようになっています。

 しかし、広範囲のポートに対してポートスキャンを受けたような場合には、返すべき応答パケットの数が異常に増えるので(最悪の場合、自分が DoS 状態におちいってしまう(^^;)、net.inet.icmp.icmplim の設定値に達したところで、応答を返すのをやめてログに記録を残します

 なお、FreeBSD のデフォルトでは、上に挙げた例と同じ "200" に設定され、1秒間に 200 個以上、上記のような応答が発生したら、ログに記録するようになっています。

|

« FreeBSD の操作を効率的に(tcsh:後編) | トップページ | シングルユーザモードの忘備録 »

コメント

Yes! Finally something about tracert.

投稿: meine ip | 2013/05/24 00:45

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: セキュリティの小技(TCP/IP 編):

« FreeBSD の操作を効率的に(tcsh:後編) | トップページ | シングルユーザモードの忘備録 »