Pingに返答しなくするには?
最近のサーバやルータは、Pingに返答しない設定になっていることが多い。
市販のルータ(ブロードバンド・ルータ)であれば簡単に設定できるが、
自分が利用するネットワークのサーバやルータは FreeBSDなのでそう簡単に設定できない。(実は知らないだけかも。(^_^;))
そこで "Ipfilter"を使って「Pingを返さない」ように設定してみました。
「Ipfilter」を設定する!
当大学のネットワークは、ルータでセグメントごとにパケットがフィルタされており,
申請したプロトコル以外は通らないようになっている。
しかし,サーバー本体でも同様にパケットフィルタをかけて2重に設定すれば,
何らかの理由によってルータで穴が開いても,サーバ本体でブロックすることができる。
FreeBSDでは,「ipfilter」を使った設定例が示されていたので,これを参考にした。
ちなみに 「ipfilter」は,「カーネルを再構築して組み込む方法」と
「カーネルにモジュールをロードする方法」の2種類があるようだ。
1,「Ipfilter」を有効にする
どちらの方法を利用する場合も、 /etc/rc.conf (システム環境設定ファイル)に
以下を追記し、有効にしておく。
ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.rules"
ipfilter_flags=""
ipmon_enable="YES"
ipmon_flags="-D /var/log/ipflog"
@,カーネルの再構築する方法
・カーネルソースを準備する
まず、カーネルソースがあるかどうかを確認し、 もし無い時は、
# /stand/sysinstall
を実行してメニューの
Configure -->Distribution --> src --> DES以外のkernel srcで
ソースをインストールする。
・カーネル設定用ファイルを作成する
新しいカーネルの設定用ファイルは、現在のカーネル設定用ファイルをベースにして作る。
# cd /usr/src/sys/i386/conf
# cp GENERIC NEWKERNEL ←(これから作るカーネルの名前)
・IPFILTERの設定を追加する
設定ファイル(NEWKERNEL)の最後に以下を追加する。
options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCK
・カーネルを make する
設定ファイルをコンフィグレーションする。
# config NEWKERNEL
成功すると次のような表示があるので、
カーネル構築のためのディレクトリに移動して、
コンパイルする。
Dont't forget to do a ``make depend''
kernel build directory is ../../compile/NEWKERNEL
# cd ../../compile/NEWKERNEL ←ディレクトリを移動
# make depend ; make ←コンパイル
・新しいカーネルをインストールする
# make install
新しいカーネルは、 /kernel にインストールされ、
一つ前のカーネルは、 /kernel.old にリネームされる。
・新しいカーネルを有効にする
新しいカーネルを有効にするにはリブートする必要がある。
#reboot
A,モジュールをロードする方法
・モジュールをカーネルに組み込む
rootから、カーネルにモジュールをロードして組み込む。
# kldstat ←カーネルの状態を表示
Id Refs Address Size Name
1 2 0xc0100000 204ffc kernel
2 1 0xc1314000 15000 linux.ko
# kldload ipl ←モジュールをカーネルにロード
# kldstat
Id Refs Address Size Name
1 3 0xc0100000 204ffc kernel
2 1 0xc1314000 15000 linux.ko
3 1 0xc196c000 18000 ipl.ko ← 追加されている
これだけではリブートすると元に戻ってしまうので、ブート時に自動組込されるよう、/boot/loader.conf に下記を追記する。
ipl_load="YES"
2,ルールを設定する
・ルールを作成する
設定ファイル : /etc/ipf.rules にルールを記述します。
以下に設定例を記述します。
#
# The following routes should be configured, if not already:
# route add "aaa.bbb.ccc.ddd" localhost 0
#
# 不正なIPパケットをすべて拒否してログに記録
block in log quick from any to any with ipopts frag
block in log quick proto tcp from any to any with short
########################################################
# 外部(Internet)からの入力(グループ 100)
pass in quick on fxp0 all head 100
# アドレス偽装防止
block in from 127.0.0.0/8 to any group 100
block in from aaa.bbb.ccc.ddd/32 to any group 100
# UDP パケットもデフォルトで拒否
block in proto udp all group 100
# 接続が確立されたパケットの通過を許可
pass in quick proto tcp all flags A/A group 100
# 外部からの SSH接続を許可する
pass in quick proto tcp from any to any port = 22 flags S/SA group 100
# 外部からの SMTP接続を許可する
pass in quick proto tcp from any to any port = 25 flags S/SA group 100
# IDENT には答えない
block return-rst in quick proto tcp from any to any port = 113 group 100
# DNS サーバを立てている場合
pass in quick proto tcp from any to any port = 53 flags S/SA group 100
pass in quick proto udp from any to any port = 53 group 100
# WWW サーバを立てている場合
pass in quick proto tcp from any to any port = 80 flags S/SA group 100
pass in quick proto tcp from any to any port = 443 flags S/SA group 100
# NTP サーバを立てている場合
pass in quick proto tcp from any to any port = 123 flags S/SA group 100
pass in quick proto udp from any to any port = 123 group 100
# それ以外の外部からの TCP 接続を拒否し、ログに残す
block in log quick proto tcp all flags S/SA group 100
# 外部の DNS に問い合わせた帰りのパケット
pass in proto udp from any port = 53 to any group 100
# 外部NTPサーバからの帰りは許可
pass in proto udp from any port = 123 to any group 100
# 内部から外部への ping は許可
block in log quick proto icmp all group 100
pass in log quick proto icmp all icmp-type 0 group 100
# RFC2979
pass in proto icmp all icmp-type 3 group 100
########################################################
# 外部への出力(グループ 200)
pass out quick on fxp0 all head 200
# アドレス偽造防止
block out from 127.0.0.0/8 to any group 200
block out from any to 127.0.0.0/8 group 200
block out from any to aaa.bbb.ccc.ddd/32 group 200
# 接続された TCP パケットを許可
#pass out proto tcp all flags A/A group 200
# 内部から外部へ出ていくパケットを許可
pass out log quick proto icmp all keep state group 200
pass out log quick all
# 外部への接続開始を許可
pass out proto tcp all flags S/SA group 200
# 外部の NTP サーバへの問い合わせを許可
pass out proto udp from any to any port = 123 group 200
########################################################
# ループバックへのルール(グループ 0)
# (最後にあっても OK)
pass in quick on lo0 all
pass out quick on lo0 all
・ルールを反映する
記述したルールを反映します。
# ipf -Fa -Z -f /etc/ipf.rules (設定の反映)
input packets: blocked 2 passed 2 nomatch 0 counted 0
output packets: blocked 5 passed 2 nomatch 1 counted 0
input packets logged: blocked 2 passed 0
output packets logged: blocked 0 passed 0
packets logged: input 0-0 output 0-0
・ルールを確認する
ルールがちゃんと反映されているか確認します。
#ipfstat -i 入力側のルールの確認
#ipfstat -o 出力側のルールの確認