さて、では、いよいよfirewallの設定に入りますが、この設定はポリシーやネットワーク環境などにより、さまざまです。ここでの例はあくまで参考にとどめておいてください。(また私がこのような設定をしてるとも限りません。)
ipchainsを用いたfirewallingは柔軟な設定を可能としています。というと、設定は複雑になるのでは…と思われるかもしれませんが、それほどではありません。どちらかというと、どう設定するかよりも、どのような設定をすればいいかの方で悩むことでしょう…
では、いくつかの例をあげながら説明を試みてみます。
# ipchains -A input -p tcp -s ! 192.168.1.2 -i eth0 -d 192.168.1.1 6000:6010 -j REJECT自ホストが192.168.1.1であるとします。-Aは追加、inputはinput chainへの追加を表します。以降がruleの指定ですが、-pがprotocol(TCP)、-sがsource(192.168.1.2以外)、-iがinterface(eth0)、-dがdestination(192.168.1.1 のport 6000-6010)、最後の-jがjump to target(REJECT)となります。つまり192.168.1.2以外からport 6000などにeth0経由でconnectしようとするとREJECTされる、という設定になります。オプションの詳細はipchains -hやman、HOWTOを御覧ください。
IPアドレスを適当に変更して、このruleを設定して実際に接続をこころみてみましょう。telnetをたたくだけでいいです。どうでしょうか、すぐ切られてしまうはずです。次にpacketがcountされてるか確認してみましょう。
# ipchains -L input -n -v Chain input (policy ACCEPT: 40983 packets, 11807637 bytes): pkts bytes target(略) 14 1518 REJECT(略)細かな数字はどうでもいいのですが、pktsやbytesが0でなければ、そのruleにmatchするpacketがそれだけ来た、ということになります。
# ipchains -P input REJECT # ipchains -A input -p tcp -d 192.168.1.1 80 -j ACCEPT
なお、ftpのクライアントになる場合は注意が必要です。1024以上のport(X等の予約分のぞく)をひらかない場合、passive modeでないとserverからclientにデータを送れません。
# ipchains -P input REJECT # ipchains -N localnet # ipchains -A input -s 192.168.0.0/24 -d 192.168.0.1 -j localnet # ipchains -A localnet -p tcp -d 192.168.0.1 6000:6010 -j ACCEPT # ipchains -A localnet -p tcp -d 192.168.0.1 sunrpc -j ACCEPT
もうちょっとipchainsっぽい定義(?)をしてみます。localnetからのアクセスがあると、ユーザ定義chainであるlocalnetのrule群をみるように設定します。-N localnetで新しいchainを作り、Xに対するアクセス、rpcに対するアクセスをACCEPTするように設定します。