筆者はもとよりネットワークの専門家ではないので,パケットフィルタをそれほど使ったことはないのですが,これまでに使ったことのある3comとAllied TelesisのパケットフィルタのAccess Control Listの例を記します. ただし,実際に運用している設定ではありません.
ここでは,自ネットワークを 192.168.1.0/24 として,以下の方針でファイアウォールを設定するとします. (この場合,ftpクライアントはpassiveモードでなければ通信できません.)
筆者の所属する組織が以前にネットワークに接続するルータとして使っていた3comのルータにはパケットフィルタの機能があったので,グローバルネットワーク側からの入力パケットをすべてデフォルトで遮断するよう設定した後,以下のような許可するパケットを書いたフィルタファイルをグローバルネットワーク側のポートの入力フィルタとして実行して,パケットフィルタとしていました. (レイヤー3スイッチではなくルータであり,ローカル側が1ポートしかなかったので,ローカルネットワーク内の通信がパケットフィルタを通らないことがポイントです.)
Permit TCP Estab Permit To 192.168.1.1/32 TCP Dst = 22 Permit To 192.168.1.1/32 TCP Dst = 25 Permit To 192.168.1.1/32 TCP Dst = 80 Permit To 192.168.1.1/32 UDP Dst = 53 Permit From 192.168.60.0/24 To 192.168.1.0/24 TCP Dst = 6000 Permit From 192.168.100.0/24 To 192.168.1.0/24 TCP Dst = 6000 Permit From 192.168.0.0/16 To 192.168.1.0/24 UDP Src = 53 Permit From 192.168.0.0/16 To 192.168.1.0/24 UDP Src = 123
1番ポートをグローバルネットワーク側につなぐとし,上記のフィルタファイルをfilter.cmdとしてルータに転送したとするとすると,ルータで実行する具体的なコマンドは以下となります.
SETDefault !1 -FireWall DefActionIn = Deny SETDefault !1 -FireWall InFilter = filter.cmd
Allied TelesisのハードウェアIPフィルタは,レイヤー3やレイヤー2plusのスイッチに標準で搭載されているのが長所なのですが,処理するチップの命令セットに合わせて文法を決めているようで非常に文法が貧弱です. また,同じハードウェアIPフィルタという名称でも,アドバンスドと呼ばれているスイッチやギガビット対応のスイッチと100Mのスイッチでは,処理するチップが異なるためか命令体系が異なります. (筆者が使ったことがあるのは100Mの普通のスイッチだけなので,以下の記述は100Mの普通のスイッチに関するものです.)
このハードウェアIPフィルタでは,IPアドレスの指定に該当しない場合といったルールが作れず,vlanもフィルタリング・ルールに使えないので,組織のバックボーン・スイッチとして運用している場合には以下の方針のどちらかを取るしかないようです.
上記の1.ではフィルタのルールが多くなり,またハードウェアIPフィルタがワイヤスピードといっても組織内での通信でもフィルタのチェックが行われ,スイッチの負担が重くなるような気がしますので,筆者は2.のアプローチの方が良いのではと考えています.
レイヤー3のルーティングをしておらず,Port1を外部への接続ポートとした場合,上記の設定例を実現するためにスイッチで実行するコマンドはこのようになります. 繁雑なので別ファイルとしました.
こんなコマンドを間違いなくエディタで書くことと,フィルタルールを書き換える時に既存のフィルタを消すことはどちらも大変なので,普通はスクリプトを書いて処理すると思います. 参考として,筆者が作成したスクリプトのリンクをつけておきます. ただし,Allied Telesisのデフォルトの管理者アカウントのユーザ名とパスワードによる認証が必要なので,注意して下さい. (MkFilterScript, DelFilterScript)
Last update: 2010.6.30