ライン

ポイント:ipfとどっちが使いやすいか

ライン

 はじめに

 FreeBSDのファイアーウォールの設定はいくつかあります。
個人的には、ipfwはあまり使っていません*1でしたが、このあたりで勉強がてら導入してみることにしました。
利用するのは、FreeBSD 9.0-RELEASEです。

*1 pfやipfなどが利用できます。どちらかを使えば十分です

 設定

カーネル

 freebsd-updateを使うようになってからあまりカーネルを変更するようなことはしなくなっていました。
ipfwはあまり興味がなかったので、カーネルにどう組み込まれているか意識していませんでした。
/usr/src/sys/i386/confの下とか眺めてみたけど、覚えている時代とは違うなぁ…。

 そのままでは使えないよな。

# ipfw -a list
ipfw: getsockopt(IP_FW_GET): Protocol not available

 まぁ。ダメだね、と。
/etc/rc.firewall を眺めて考えることにする。この辺りは変わってないな。
/etc/defaults/rc.conf を見て、変更できるものを再考。

 指定できそうなものをあたりをつける。

# grep firewall_ /etc/defaults/rc.conf
firewall_enable="NO"            # Set to YES to enable firewall functionality
firewall_script="/etc/rc.firewall" # Which script to run to set up the firewall
firewall_type="UNKNOWN"         # Firewall type (see /etc/rc.firewall)
firewall_quiet="NO"             # Set to YES to suppress rule display
firewall_logging="NO"           # Set to YES to enable events logging
firewall_flags=""               # Flags passed to ipfw when type is a file
firewall_coscripts=""           # List of executables/scripts to run after
firewall_client_net="192.0.2.0/24" # IPv4 Network address for "client"
#firewall_client_net_ipv6="2001:db8:2:1::/64" # IPv6 network prefix for
firewall_simple_iif="ed1"       # Inside network interface for "simple"
firewall_simple_inet="192.0.2.16/28" # Inside network address for "simple"
firewall_simple_oif="ed0"       # Outside network interface for "simple"
firewall_simple_onet="192.0.2.0/28" # Outside network address for "simple"
#firewall_simple_iif_ipv6="ed1" # Inside IPv6 network interface for "simple"
#firewall_simple_inet_ipv6="2001:db8:2:800::/56" # Inside IPv6 network prefix
#firewall_simple_oif_ipv6="ed0" # Outside IPv6 network interface for "simple"
#firewall_simple_onet_ipv6="2001:db8:2:0::/56" # Outside IPv6 network prefix
firewall_myservices=""          # List of TCP ports on which this host
firewall_allowservices=""       # List of IPs which have access to
                                # $firewall_myservices for "workstation"
firewall_trusted=""             # List of IPs which have full access to this
firewall_logdeny="NO"           # Set to YES to log default denied incoming
firewall_nologports="135-139,445 1026,1027 1433,1434" # List of TCP/UDP ports
firewall_nat_enable="NO"        # Enable kernel NAT (if firewall_enable == YES)
firewall_nat_interface=""       # Public interface or IPaddress to use
firewall_nat_flags=""           # Additional configuration parameters
natd_enable="NO"                # Enable natd (if firewall_enable == YES).

 まずは、無難に

firewall_enable="YES"
firewall_type="/etc/ipfw.conf"

あたりを加えておく。

/etc/ipfw.conf に追加

 何を動かしているサーバか見る人がみればすぐにわかりそうですが。
いろいろウェブ検索して寄せ集めてみました。

add 100         pass all        from any to any via lo0
add 200         deny all        from any to 127.0.0.0/8
add 300         deny ip         from 127.0.0.0/8 to any
add 400         deny tcp        from any to any frag

add 1010        allow ip        from 自分のネットワーク/xx to me
add 1020        allow ip        from me to 自分のネットワーク/xx

add 2010        allow tcp       from any to me 22
add 2020        allow tcp       from any to me 80 setup
add 2030        allow tcp       from any to me 443 setup
add 2110        allow udp       from me to any  53
add 2120        allow udp       from any 53 to me
add 2130        allow udp       from me to any 123

add 2500        allow icmp      from any to any
add 2510        allow icmp      from any to any via em0 icmptypes 8
add 2520        allow icmp      from any to any via em0 icmptypes 0

add 3010        pass tcp        from any to me 5060 keep-state
add 3020        pass tcp        from me to any 5060 keep-state
add 3030        pass udp        from any to me 5060 keep-state
add 3040        pass udp        from any to me 4569 keep-state
add 3050        pass udp        from any to me 2727 keep-state
add 3060        pass udp        from any to me 9999-20001 keep-state
add 3070        pass udp        from me to any keep-state

add 64000       allow udp       from me to any setup
add 64100       pass tcp        from any to any established

add 65000       deny ip         from any to any

これで完了。
別にルータやゲートウェイ設定をしているわけでもないので、シンプルなドラフト設定のようにしました。

設定を変更した場合には、/etc/rc.d/ipfw restartで更新します。
(リブートしてももちろんOKです)


【改訂履歴】作成:2012/ 1/14  改訂: 2012/ 1/15
【参考リンク】

Making Fail2ban with IPFW firewall on FreeBSD work Luka? Lalinsky…書かれているLuka? Lalinskyさんのブログのコメント他を参照しています。

*
Copyright © 1996,1997-2006,2007- by F.Kimura,