前回の記事 「1 Ciscoルーターをブロードバンドルーターとして使う PPPOE NATの設定など」 では、インターネット接続までが可能となりましたがこれではセキュリティ的にとても運用できる状態ではないため今回はFirewallの設定方法を紹介します。
一般的なFirewallの設定方法
まずは一般的なFirewallの設定方法から紹介します。CiscoのFirewall(以下アクセスリスト)は条件に一致したものがあればその後のACLは無視するという仕様です。おそらく一般的なブロードバンドルーターも同じような仕様になっているとおもいますが、気をつけなければいけないのは何もACLに記載していない場合、全ての通信を拒否するという暗黙のDenyがCiscoには定義されているということです。よって、まず拒否するACLを記載していき最後に全てのパケットを許可する設定を記載する必要があります。
では、具体的なACLを記載してきます。今回は勿論ですが拡張アクセスリスト100番台~を設定します。
アクセスリスト100の設定
access-list 100 deny ip 0.0.0.0 0.255.255.255 any
access-list 100 deny ip 10.0.0.0 0.255.255.255 any
access-list 100 deny ip 127.0.0.0 0.255.255.255 any
access-list 100 deny ip 169.254.0.0 0.0.255.255 any
access-list 100 deny ip 172.16.0.0 0.15.255.255 any
access-list 100 deny ip 192.0.2.0 0.0.0.255 any
access-list 100 deny ip 192.168.0.0 0.0.0.255 any
access-list 100 deny ip 224.0.0.0 15.255.255.255 any
access-list 100 deny ip 240.0.0.0 15.255.255.255 any
access-list 100 deny tcp any any range 137 139
access-list 100 deny tcp any range 137 139 any
access-list 100 deny udp any any range netbios-ns netbios-ss
access-list 100 deny udp any range netbios-ns netbios-ss any
access-list 100 deny tcp any any eq 445
access-list 100 deny tcp any eq 445 any
access-list 100 deny udp any any eq 445
access-list 100 deny udp any eq 445 any
access-list 100 deny tcp any any eq telnet
access-list 100 permit ip any any
・ローカルIPアドレスからWAN側への着信を拒否する
・Microsofot ファイル共有サービスを拒否する・NetBiosのリクエストを拒否する
・445番ポートでのアクセスを拒否する
・Telnetを拒否する
・これら以外のパケットは全て通過させる
かなりカラフルになってしまいましたが、アクセスリスト100というものを作成し、初めに拒否したい通信、最後に拒否した通信以外は全て許可するという設定をいれています。
インタフェースに適用する
ACLを作成したら終わりではありません。どのインタフェースに適用させるかというのが非常に重要です。今回はPPPOEを接続しているDialer1にACL100をIN側として適用します。
interface dialer 1
ip access-group 100 in
これで、一般的なブロードバンドルーターで適用されているFirewallの設定ができました。
再帰ACL ( Reflexive ACL )
先ほどは、WAN側のインタフェースにIN方向にアクセスリストを適用しました。しかしもっと効率的にフィルタリングする方法がこの再帰ACLです。再帰ACLはIPパケットを上層セッション情報に基づいてフィルタリングすることができます。ネットワーク内部(今回はNATの内側)から発生するIP通信を outbound で許可して 再帰 の準備をし外部ネットワークから発生するIP通信を inbound で 評価 します。もっと簡単に説明すると再帰ACLを適用した場合、外部ネットワークから許可されるトラフィックは内部ネットワークから発信された戻りのトラフィックだけということです。サーバーを公開するわけではなくインターネットの閲覧などであればこの再帰ACLで十分ですね。フィルタ条件としては送信元アドレスや宛先アドレス、ポート番号、ACK、RSTビットに基づいています。再帰ACLはEstablishedと異なりTCP、UDP、ICMPをその上位層として対象とすることが出来ます。
設定方法としては以下の通りです。
1) セッション開始のトラフィックの ACL に evaluate をつける
ip access-list extended ACL名
evaluate name
2) 戻りのトラフィックに reflect のキーワードをつけて ACL を設定
ip access-list extended ACL名
permit protocol any any reflect name [fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][timeout seconds]
3)名前付きACL
ip access-list extended INACL
evaluate ICMP
deny icmp any any
permit ip any any
ip access-list extended OUTACL
permit icmp any any reflect ICMP
permit ip any any
4)インタフェースに適用
interface vlan 1
ip access-group INACL in
ip access-group OUTACL out
VLAN 1 (NATの内側)から外側への ICMP は許可していますが、外側から内側への ICMP は拒否しています。
再帰ACLは、動的にACLを生成します。タイムアウトまではデフォルトで300秒のようです。
CBACという万能Firewall
さて、一般的なACLと動的に戻りのパケットをみてACLを作成してくれる再帰ACLを紹介しましたが、もっと万能で設定が簡単なFirewallがCisco独自の機能で存在します。
CBAC ( Context-Based Access Control )とはreflexive ACLと実装が似ていますが、一般的にステートフルインスペクションという機能です。reflexive ACLには不可能であったFTPのようなポート番号が動的に変更するプロトコルもその検査対象とすることができるという特徴があります。CISCOでは様々なセキュリティ設定がありますが、CBACの機能が最も優れておりブロードバンドルーターやインターネットと接続しているルーターのセキュリティ対策ではこちらを強くおすすめします。
それでは実際の設定を紹介します。まず初めにどの通信をCBACに監査させるかというものを定義します。今回はTCP UDP FTPを対象として設定します。
ip inspect name CBAC tcp
ip inspect name CBAC udp
ip inspect name CBAC ftp
※ name の後のCBACという文字は好きな名前を設定できます。
次にCBACをWAN側のインタフェースDialer 1に適用します。
interface dialer 1ip inspect CBAC out
次にポリシー違反した際にログに残すように設定をします。
ip inspect log drop-pkt
ip inspect audit-trail
はい。これで最低限の設定は終了です。ACLを全く書かなくてもインターネットをするだけであれば、この設定を適用することでTCPもUDP通信もセキュリティを保つことが出来ます。このようにCBACの設定はACLの簡略化にもなり管理が大変楽になります。
ACLの余談
ACLを定義する際に、どのような通信がACLにマッチしたのかを確認するためにはACLの最後にlog とオプションを付けるだけでマッチした通信がログに記録されます。
例 access-list 100 permit ip any any log
つまり暗黙のDenyにlogオプションをつけておけば拒否された通信をログに記録することができます。
※注意 これは大変はまりやすい?のですが、PATで利用するACLに関してはCISCOの仕様上logオプションを付けることが出来ません。コマンドではlogオプションが付けられ適用もできますが正しい挙動ではなくなり通信できなかったりします。前回の例では ACL1に対してlogオプションを付けていないのはこれらの理由のためです。
以下CISCOのサイトから
Q. Cisco IOS の NAT では、「log」キーワードを使用する ACL はサポートされていますか。
A. ダイナミック NAT 変換を行うために Cisco IOS NAT を設定する場合、変換可能なパケットを判別するために ACL が使用されます。現在の NAT アーキテクチャでは、「log」キーワードを使用した ACL はサポートされていません。
http://www.cisco.com/JP/support/public/ht/q_a/100/1006395/nat-faq-j.shtml
ここまでで、インターネット通信とセキュリティ向上のためのFirewallの設定まで完了しました。次回は、NAT配下にサーバーを置いて公開するような所謂CISCOのルーターでポート開放を行う設定について紹介します。
[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]