- 1. 概要
- 2. 拒否のフィルタを追加
- 3. コンフィグレーションファイルへの記述
- 4. フィルタ設定のオプション
- 5. リスト表示のオプション
1. 概要
仮に、わたしと同じ設定をここまでやってきたとして、前ページの末尾の設定まで終えた時点で、ほぼすべてのポートを開放した状態で「ipfw」が機能しているはずです。
この状態で、フィルタを追加したりしていきます。
2. 拒否のフィルタを追加
わたしが、「ipfw」を使い始めたのは、ルータが非力で。
「ssh」で侵入しようとする外部からの通信を遮断しようと思ったときです。
実現するには例えば以下のように設定します。
「123.0.0.0」(これが何かは 聞かないで(笑))のネットワークからの「ssh」の侵入を防ぐには。
ipfw add 10000 deny tcp from 123.0.0.0/8 to me 22
ここで「10000」はフィルタの番号です。デフォルトの設定と重ならないようにするので「1001~65534」の番号にします。
「tcp」 はプロトコルです。
「123.0.0.0/8 to me」は、「123.0.0.0」~「123.255.255.255」の自分に向かってくるアドレスです。
「22」は、「ssh」のポート番号です。
ここのアドレス部を「試験的に使用するクライアントマシン」にすれば試験できますが。
もし、誤った設定を行った場合、手元にサーバマシンのコンソールがないと何もできなくなることがありますのでご注意を。
3. コンフィグレーションファイルへの記述
前項の設定を拒否したいプロトコル・アドレス・方向・ポートを組み合わせて追加していけば、やりたいことは実現できるわけですが。
コマンドで設定したものは、マシンを再起動するとリセットされてしまいます。
再起動しても、その状態をキープするために、前ページの。
/usr/local/etc/firewall.conf
を作成したわけです。
冒頭から順に設定してきたならば、この時点で、上記ファイルの中身は、からっぽなはずです。
前項の設定をキープするには、以下のように記述します。
add 10000 deny tcp from 123.0.0.0/8 to me 22
前項のコマンドから「ipfw」というモジュール名をはずしただけです。
ファイアウォールを再起動します。
service ipfw restart
でコンフィグレーションファイルの設定が反映されるようになります。
$ ipfw -aN list
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00400 0 0 deny ip from any to localhost
00500 0 0 deny ip from localhost to any
00600 0 0 allow ipv6-icmp from :: to ff02::/16
00700 0 0 allow ipv6-icmp from fe80::/10 to fe80::/10
00800 0 0 allow ipv6-icmp from fe80::/10 to ff02::/16
00900 0 0 allow ipv6-icmp from any to any icmp6types 1
01000 0 0 allow ipv6-icmp from any to any icmp6types 2,135,136
10000 0 0 deny tcp from 123.0.0.0/8 to me ssh
65535 5019 756274 allow ip from any to any
4. フィルタ設定のオプション
フィルタを設定する際の主なパラメータ・オプションを提示しておきます。
ipfw [-N] command [index] action [log] protocol from アドレス [port] to アドレス [port] [via interface] [option]
| パラメータ | 意 味 | 備考 |
| -N | アドレスやサービス名を 文字列に変換して表示します。 | |
| command | add | ルールを追加します。 | |
| delete | ルールを削除します。 | |
| index | ルールの番号を指定します。 | |
| log | カーネルを IPFIREWALL_VERBOSE つきでコンパイルしていれば、マッチしたルールをログに出力します。 | |
| action | reject | パケットを捨て、ICMP ホスト / ポート到達不能パケットの適切な方を発信元へ送ります。 | |
| allow | パケットを通過させます。 | |
| deny | パケットを捨てます。reject と違うのは ICMP を返さないので、相手には何が起こっているかわかりません。 付き合いたくない相手にはこちらの方が有効かと思います。 | |
| count | パケットカウンタを更新するのみです。 ログと組み合わせると分析に便利なのかしら? | |
| protocol | all | 任意のプロトコル。 | |
| icmp | icmp 。ping に使われるプロトコルですね。 | |
| tcp | tcp | |
| udp | udp | |
| アドレス | アドレスの直接表記とアドレス/ビットマスクでの指定が可能です。 | |
| ポート番号 | ポート番号-ポート番号と範囲指定することもできるし、ポート番号をカンマで区切って複数記述することができます。両方を記述することもできますが、両方指定する場合は範囲指定を先に記述しなければなりません。 また ssh のように文字列で指定することもできます。 文字列の方が意図的に何を指定しているかがわかって良いように思います。 文字列は /etc/services に定義してあります。 | |
| interface | 複数の NIC を使用してルーティングしているときに便利ですね。 | |
| option | in | 入力パケット。 | |
| out | 出力パケット。 | |
| established | パケットが既に確立されている TCP コネクションの一部であれば (RST または ACK ビットがセットされていれば) マッチします。 このをチェーンの最初の方に置くと通過させたいパケットのチェックでファイアウォールの負担をかけないようにできます。 | |
5. リスト表示のオプション
リストを表示する際の主なオプションを提示しておきます。
ipfw [-a] [-c] [-d] [-e] [-t] [-N] [-S] list
| オプション | 意 味 | 備考 |
| -a | リスト表示の際にカウンタの値も表示します。 | |
| -c | コンパクトな形式でルールの一覧を表示します。 | |
| -d | 静的ルールに加え動的ルールも表示します。 | |
| -e | -d が指定されているときには、 期限が切れた動的ルールも表示します。 | |
| -t | 各チェーンエントリが最後に マッチした時刻を表示します。 | |
| -N | アドレスやサービス名を文字列に変換して表示します。 | |
| -S | 各ルールが所属しているセットを表示します。 このフラグが設定されていない場合には、 無効にされているルールは一覧に表示されません。 | |
わたしがよく使用するのは、以下の使い方です。
ipfw -aN list
|
|