パケットフィルタリングを使用したファイアウォール


参考URL
FreeBSD によるダイアルアップ式防火壁の構築

IPFWを使用して、ダイアルアップPPP接続の時にファイアウォールが機能するように設定をします。
ここで使用するファイアウォールは、パケットフィルタリングと呼ばれているIPFWを使用したファイアウォールです。IPFWを使用するにはカーネルの再構築が必要ですが、「NATDを使用したppp接続」のところを参考にしてください。

/etc/rc.confの書き換え
以下のようにrc.confを書き換えます。
NATは、PPPに内蔵されているNAT機能を使用せずに、NATDを使用します。PPPでNATの機能をONにされている方は、OFFにしておくことが必要です。
firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic"


フィルタリングルールの設定

次に、パケットフィルタリングのルールを設定します。
rc.confでは/etc/firewall/fwrulesのファイルから、パケットフィルタリングのルールを参照するように設定をしましたので、/etc/firewall/のディレクトリにfwrulesというファイルを作成して、そこにルールーを記述します。

hoge# mkdir /etc/firewall
hoge# touch /etc/firewall/fwrules

fwrulesのファイルを作成したら、エデイタでfwrulesを開いて以下のように編集します。
# Firewall rules
    # Written by Marc Silver (marcs@draenor.org)
    # http://draenor.org/ipfw
    # Freely distributable 
    
    
    # (/etc/rc.firewall にあるように) 参照を簡単にするために防火壁のコマンドを定義します. 
    # 読みやすくするのに役立ちます.
    fwcmd="/sbin/ipfw"
    
    # 再読込みする前に現在のルールの消去を強制します.
    $fwcmd -f flush
    
    # トンネルインターフェースを通じてすべてのパケットを divert します.
    $fwcmd add divert natd all from any to any via tun0
    
    # 自分のネットワークとローカルホストからのデータをすべて許可します.
    # 再起動する前に自分のネットワークカード (私のは ed1 です) に変更するのを確認しましょう. :)
    $fwcmd add allow ip from any to any via lo0
    $fwcmd add allow ip from any to any via ed1
    
    # 自分が着手したすべての接続を許可します.
    $fwcmd add allow tcp from any to any out xmit tun0 setup
    
    # 接続がいったん作成されると, それを許可して開けておきます.
    $fwcmd add allow tcp from any to any via tun0 established
    
    # 以下のサービスへ接続することをインターネット上のすべての人に許可します.
    # この例では人々は ssh と apache に接続してよいということを示しています.
    $fwcmd add allow tcp from any to any 80 setup
    $fwcmd add allow tcp from any to any 22 setup
    #
    #外部からSMTP(メール)の使用を許可するには以下のポートを開けます。
    #$fwcmd add allow tcp from any to any 25 setup
    #IDENTには答えない(RSTフラグを返す)
    #$fwcmd add reset tcp from any to any 113

  #外部からのFTP接続は20、21番ポートの使用を許可すれば良いと思います。
   #$fwcmd add allow tcp from any to any 20 setup
    #$fwcmd add allow tcp from any to any 21 setup

  #外部からのTELNETの接続許可は23番ポートを許可すれば良いと思います。
   #$fwcmd add allow tcp from any to any 23 setup

    # すべての ident パケットに RESET を送ります.
    $fwcmd add reset log tcp from any to any 113 in recv tun0
    
    # 規定されたサーバに対して *のみ* 外部 DNS の問い合わせを許可します.
    $fwcmd add allow udp from any to x.x.x.x 53 out xmit tun0
    
    # 応答とともに戻ってくることを許可します.  :)
    $fwcmd add allow udp from x.x.x.x 53 to any in recv tun0
    
    # (ping と traceroute を動作させるために) ICMP を許可します.
    # これを非許可にしたいと思うかもしれませんが,
    # 需要を保ちつづけるには適していると感じています.
    $fwcmd add 65435 allow icmp from any to any
    
    # 残りの全てを拒否します.
    $fwcmd add 65435 deny log ip from any to any
上記のファイルに、許可する内部のネットワークカード名1カ所と、外部のネームサーバーのを指定するところ2カ所を書き換えるだけで、外部からはWWW(ポート80)とSSH(ポート22)以外は受け付けなくなります。
尚、各ポート番号は/etc/servicesのファイルの中に定義されていますので、参考にしてください。

※内部から外部へのファイアウォール越しのFTP接続は、pasvモードでしか接続できなくなります。

BACK