4.5 ファイアウォール ipfw 設定

2017年7月1日

 お家サーバについては、何らかのファイアウォールを導入する必要があるので、ここでは、FreeBSD に古くからある ipfw を導入します。最近は pf や ipf などFreeBSDで使用できる各種のF/Wが出ていますのでご自分にあったものを選択しても良いと思います。
 なお、当サーバは、以前はLAN2ポート持ちでF/W,NATルータの位置づけだった為、F/Wルールもその際の記載が残っており、冗長な部分や非効率なところもあると思いますが、ご容赦ください。あくまで参考程度と言う事で。
 また、どこから、どんなポートへ接続が着ているのか知るために iplog をインストールします。

1.カーネルへの組込み
 FreeBSD もモジュール化が進み ipfw もモジュール提供されていますが、ここでは、カーネルに組込みカスタムカーネル(と言っても使用しないドライバ等を外しただけ)を作成します。
 64bit 版カーネルを作成しますので、/usr/src/sys/amd64/conf に移動し、デフォルトカーネルコンフィグファイルの GENERIC を任意の名称でコピーします。

 コピーしたファイルをエディタで開き以下を追記します。下2行のコメント化している部分は追加不要です。(不要なドライバ等もこの時削除してしまいます)

 NAT(NAPT)を使用する場合は、最後の IPDIVERT のコメントを外しNAT設定を行います。今回はNATは前段のルータで行われるのでF/W のみ有効化します。
 新カーネルを作成する前に、インストール時に入ったGENERICカーネルを保存しておきます。

 ハンドブックを参考に以下の様にカーネルの再構築とインストールを行います。

2.ルール作成と起動設定
 F/Wルールの大まかな方針は次の様にしました。
 (1)使用するポート以外は拒否
 (2)拒否するIPアドレスはipfwのテーブルで管理し、table1 はサブネット単位の指定、table2 は個別IP単位の指定とする(リジェクトするIPは /etc/rejectip.fw1 及び/etc/rejectip.fw2 の2つのファイルへ改行区切りで記載して準備します、
 (3)F/W以降のLAN内マシンから当サーバへはIPv6、netbios の通信も通す。
外部に出す必要のあるのは、メールやWEBくらいですので、以下の様なルールとしました。
設定ファイルは、/etc/ipfw.myrule として保存します。

 システム起動時に有効となるように、/etc/rc.conf へ以下を追記します。

 これで、リブートすれば、新しいカーネルでF/Wが有効になった状態で起動します。

3.運用
 フィルタした通信は、/var/log/security に出力されます。以下のコマンドで状況確認が出来ます。
 ipfw show                 現在までの各ルールの適用状況(対象パケット数、バイト数)を表示
 ipfw list      登録されているルールをリストする。
 ipfw table n list   登録されている n 番目の table を表示する。

 このままですと、各ルールの適用数は増えるばかりなので、日に一回カウンタをリセットする様にします。次の様なカウンタリセットのコマンドを記載したシェルを作り、毎晩3時に動く daily ルーチンに追加してカウンタリセットしてもらいます。

 現在設定している rejectip.fw[12] の件数は現時点(2016/8/1)でサブネット単位が1419,IP単位が70となっています。iplog 等を参照して、随時メンテしていきます。

4.iplog の導入
 どこからどのポートへの接続があったか記録してくれる iplog をついでに導入します。

  pkg で iplog-2.2.3_3 が入りました。設定ファイルは、/usr/local/etc/iplog.conf.sample をコピーし /usr/local/etc/iplog.conf として追加・修正します。 
 (1)対象LANインタフェースを指定(今は、em0)
   # Listen on eth0 and eth1
   interface em0
 (2)自身のLAN内は取得しない
   # Ignore all from starlink.jp(192.168.XXX.0/24)
   ignore udp from 192.168.XXX.0/24
   ignore tcp from 192.168.XXX.0/24
   ignore icmp from 192.168.XXX.0/24
 (3)DNSのやり取りは取得しない
   ignore udp sport 53
   ignore udp dport 53

 httpd(80)ポートはデフォルトで取得しない設定になっていますが、こちらは、httpd 側のログで確認するので、このままとします。
 smtpd(25)ポートは、不埒な輩が連続してアクセスしていきているか確認の為、logging しておきます。
 起動の為、/etc/rc.conf へ以下を追加して、起動します。
 iplog は、 ipfw でフィルタする前にロギングしてくれます。

 ログは、/var/log/iplog に出力されます。ログローテーションの為、以下の様に newsyslog.conf へ追加します。

 指定内容は、容量300KBでローテーション、バックアップは10世代、ローテーション後、iplog を再起動となります。

【参考にさせて頂いたサイト様】
iplog.confファイルの設定


FreeBSDへ  サイトTOPへ

Posted by null-a