ipfwによるパケットフィルタリングの仕方

概要

手順

  1. kernelを再構築してFirewall機能をつける
    % su
    root# cd /sys/i386/conf
    root# cp GENERIC FIREWALL
    root# vi FIREWALL
    
    options IPFIREWALL
    
    を追加。
    root# config FIREWALL
    root# cd ../../compile
    root# make depend;make
    root# make install
    (ここで、kern.securelevelが0以上になっているとエラーが出るが、
    そのときはシングルユーザーモードで起動してmake installを行う。)
    カーネルの変更を有効にするために再起動
    root# reboot
    
  2. ipfwに読ませるファイルを書く
    • $oip: 外部に面しているほうのIPアドレス
    • $omask: 外部のネットマスク
    • $oif: 外部に面しているほうのデバイス
    • $iip: 内部に面しているほうのIPアドレス
    • $imask: 内部のネットマスク
    • $iif: 内部に面しているほうのデバイス
    とする。
    root# vi /etc/ipfw.conf
    以下を書く。
    --/etc/ipfw.conf--
    
    # 外部からの内部アドレスのカタリを禁止
    add deny ip from $iip:$imask to any in via $oip
    
    # NetBIOS,SunRPC,NFS,Fingerは全面禁止
    # NetBIOS
    add deny tcp from any to any 137-139
    add deny udp from any to any 137-139
    
    # SunRPC
    add deny udp from any to any 111
    add deny udp from any to any 111
    
    # NFS
    add deny tcp from any to any 2049
    add deny tcp from any to any 2049
    add deny udp from any to any 2049
    add deny udp from any to any 4045
    
    # Finger
    add deny udp from any to any 79
    add deny udp from any to any 79
    
    # 外部からはSMTP,HTTP,DNSのみを許可
    # Establishedなものはチェックしない
    add allow tcp from any to any established
    # SMTP
    add allow tcp from any to any 25 setup via $oif
    # HTTP
    add allow tcp from any to any 80 setup via $oif
    # DNS
    add allow udp from any to any 53 via $oif
    add allow udp from any 53 to any via $oif
    #それ以外を拒否
    add deny tcp from any to any setup in via $oif
    add deny udp from any to any in via $oif
    # 内部からの接続はすべて許可
    add allow tcp from any to any via $oif
    add allow udp from any to any via $oif
    # DefaultでDenyされたものをlogに取る
    add deny log ip from any to any
    
    --
    
  3. ひとまず上で書いてみたものを読み込ませてみて思ったように動作するか調べる
    root# ipfw -f flush
    root# ipfw /etc/ipfw.conf
    
  4. 次回起動時からもipfwを使うようrc.confにて設定する。
    % su
    root# vi /etc/rc.conf
    下記の2行を追加。
    
    firewall_enable="YES"
    firewall_type="/etc/ipfw.conf"
    
    

参考文献

変更履歴


© 2001-2002 Yoshisato YANAGISAWA PCC-Software.org. All rights reserved.