【Cisco】 ルータのACL設定
ACL(Access Control List)
IPパケットをフィルタリングし、許可された通信のみ転送する制御のこと。
ルータに着信したパケットは、ACLの1行目から順番に条件に合致するかどうかを確認していき、最初に合致した条件に従ってパケット通過が「許可」または「拒否」される。
条件に合致した後は以降の条件は適用されないので、条件をどの順番にし作成していくのかが重要となる。
また、ACLには暗黙の deny any というルールがあり、deny any が作成したACLの最終行に自動で追加されている。
※このdenyは表示されていない
作業ログ
種類
標準ACL:送信元IPアドレスをチェックする。また番号付きと名前付きに分けることができ、ACL作成時に指定できる。番号は1〜99(IOSにより他の番号も設定できる)、名前は任意のものをつけられる。
拡張ACL:送信元IPアドレス、宛先IPアドレス、プロトコル番号、送信元ポート番号、宛先ポート番号をチェックする。番号付きは100〜199、名前付きは標準と同様。
ワイルドカードマスク
ACLの条件文のなかでIPアドレスの範囲を指定する。
例えば、ACLの条件文で「192.168.3.0/24」のネットワークを示したい場合、ACLは「192.168.3.0 0.0.0.255」と入力し、これによって「192.168.3.0 ~ 172.16.3.255」範囲を示すことになる。
他にも、「172.16.0.0/16」のネットワークを示したい場合、ACLは「172.16.0.0 0.0.255.255」とし、「172.16.0.0 ~ 172.16.255.255」範囲を示す。
また省略形が存在し、全てのIPアドレスを指定するためには「0.0.0.0 255.255.255.255」とし、この省略形は anyになる。
「172.16.1.1 0.0.0.0」の省略形としてhostキーワードを指定し「host 172.16.1.1」となる。
ACLの適用
インバウンド
インターフェースに着信してくるパケットにACLが適用され、ACLで許可された場合はパケットがルーティングされる。拒否された場合はパケットは破棄される。
アウトバウンド
インターフェースに着信してくるパケットがルーティングテーブルに従ってルーティングされたあと、インターフェースから発信していくパケットにACLが適用される。ルータ自身の通信は対象外になる。
1つのインターフェイスにはインバンドとアウトバウンドはそれぞれ1つずつしか設定できない。
各種設定
標準ACLの作成
グローバルコンフィグレーションモードで次のコマンドを入力。
# 番号付き
(config)#access-list <ACL-number> {permit|deny} <source-address> [<wildcard>]
permit/deny:許可と拒否
<ACL-number> : アクセスコントロールリスト番号 1~99または1300~1999
<source-address> : 送信元IPアドレス
# 名前付き
(config)#ip sccess-list standard <ACL Name> # モードが変わる
(config-std-nacl)#{permit|deny} <source-address> [<wildcard>]
インターフェイスへの適用
インターフェイスコンフィグレーションモードで以下のコマンドを実行する。宛先に近いインターフェイスに設定することが推奨される。
(config)# interface FastEthernet 0/0
(config-if)# ip access-group <ACL Number or Name> <in / out>
<in / out>:インバンドかアウトバウンド
設定例
Router(config)# access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)# interface FastEthernet 0/0
Router(config-if)# ip access-group 10 in
ACL番号10が作成され、その中に「192.168.1.0 0.0.0.255」という送信元アドレスからの通信を許可。次に、FastEthernetインターフェイス0/0に対して、このACLが適用されるように「ip access-group 10 in」という設定が追加されている。ACLの最後に「deny any」が含まれていることを忘れない。
Router(config)# access-list 100 deny 192.168.1.0 0.0.0.255
Router(config)# access-list 100 permit any
Router(config)# interface Ethernet0
Router(config-if)# ip access-group 100 in
192.168.1.0/24のIPアドレス範囲を拒否し、それ以外のすべてのアドレスを許可する標準ACLを設定。Ethernet0インターフェースでこのACLを適用している。
# 名前付き
Router(config)#ip sccess-list standard TEST
Router(config-std-nacl)#deny 192.168.1.0 0.0.0.255
Router(config-std-nacl)#permit any
Router(config-std-nacl)#exit
Router(config)# interface Ethernet0
Router(config-if)# ip access-group TEST in
標準ACLの確認
show access-listを実行する。
#show access-lists <ACL Number or Name>
-------------------------------------------
Standard IP access list <ACL Number or Name>
10 deny 192.168.1.0, wildcard bits 0.0.0.255
20 permit any
# 10,20はシーケンス番号
-------------------------------------------
インターフェイスの確認
# show ip interfaceを実行する。
#Router# show ip interface <interface name>
--------------------------------------------------
FastEthernet0/0 is up, line protocol is up
Internet address is 192.168.1.1/24
Broadcast address is 255.255.255.255
Address determined by setup command
MTU is 1500 bytes
Helper address is not set
Directed broadcast forwarding is disabled
Outgoing access list is not set
Inbound access list is not set
.
.
.
--------------------------------------------------
show running-configでの確認
Router# show running-config
--------------------------------------------------
Building configuration...
Current configuration : 885 bytes
!
interface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
!
access-list 100 permit ip any any
access-list 101 deny tcp host 192.168.1.100 any eq 80
access-list 101 permit ip any any
!
end
Router#
--------------------------------------------------
ACLの削除
no access-listを実行する。
# 全てのエントリを削除
Router(config)# no access-list <ACL Number or Name>
# 特定の行を削除する
Router(config)#interface [interface name]
Router(config)#ip access-list [ACL name or number]
Router(config-std-nacl)#no [シーケンス番号]
write memory # 保存してコミット
VTYアクセス制御
特定のインターフェイスに対するリモートアクセスを制限する。
access-class <ACL Number or Name> <in / out>を実行する。
Router(config)#access-list VTY_ACCESS_CLASS permit 192.168.1.0 0.0.0.255
Router(config)#access-list VTY_ACCESS_CLASS deny any
Router(config)#line vty 0 15
Router(config-line)#login local
Router(config-line)#access-class VTY_ACCESS_CLASS in
拡張ACLの作成
access-listを実行する。
書式
access-list <ACL番号> <permit/deny> <プロトコル> <ソースIPアドレス> <wildcard>
<ソースポート> <宛先IPアドレス> <wildcard> <宛先ポート> [ established | log | log-input ]
ACL番号
拡張ACLの番号を 100 ~ 199、2000 ~ 2699 の範囲で指定する。通常は100 ~ 199を使用。
protocol
プロトコル名を指定する。( 例 : ip / icmp / tcp / udp )
port
以下の演算子の後にポート番号を指定する。
・ eq ( equal = 等しい)
・ neq ( not equal = 等しくない)
・ gt ( greater than = より大きい )
・ lt ( less than = より小さい )
・ range ( ポート番号の範囲 )
established
このキーワードをACLで指定することにより、ACKまたはRSTビットの立っているパケットがACLの合致対象となる。
log
ACLの条件文の最後にこのキーワードを指定することで、その条件文に合致するパケットがあればログが出力される。
log-input
入力インターフェイスと送信元MACアドレス(該当する場合)も含まれる。
設定例
# 192.168.1.0/24 は 10.1.1.0/24 の tcp 80 を拒否するが、
# それ以外のプロトコルは許可されている。
# 番号付き(番号は100〜199)
(config)# access-list 110 deny tcp 192.168.1.0 0.0.0.255 10.1.1.0 0.0.0.255 eq 80
(config)# access-list 110 permit ip 192.168.0.0 0.0.255.255 10.1.1.0 0.0.0.255
(deny ip any any)
(config)# interface fastEthernet 0/1
(config-if)# ip access-group 110 in
# 名前付き
(config)# ip access-list extended GIJUTSUBU
(config-ext-nacl)# deny tcp 192.168.1.0 0.0.0.255 10.1.1.0 0.255.255.255 eq 80
(config-ext-nacl)# permit ip 192.168.0.0 0.0.255.255 10.1.1.0 0.255.255.255
(deny ip any any)
(config-ext-nacl)# exit
(config)# interface fastEthernet 0/1
(config-if)# ip access-group EIGYOUBU in
その他
# 192.168.1.1 から 10.1.1.1 へのIP通信を許可
access-list 100 permit ip host 192.168.1.1 host 10.1.1.1
# 192.168.1.0/24 から 10.1.1.0/24 へのIP通信を許可
access-list 100 permit ip 192.168.1.0 0.0.0.255 10.1.1.0 0.0.0.255
# 192.168.1.0/24 から 10.1.1.1 へのIP通信を拒否
access-list 100 deny ip 192.168.1.0 0.0.0.255 host 10.1.1.1
# 192.168.1.0/24 から全ての宛先へのIP通信を拒否
access-list 100 deny ip 192.168.1.0 0.0.0.255 any
# 全ての送信元から 10.1.1.1 へのHTTP通信を許可
access-list 100 permit tcp any host 10.1.1.1 eq 80
# 192.168.0.0/24 から 10.1.1.1 へのTFTP通信を拒否
access-list 100 deny udp 192.168.0.0 0.0.0.255 host 10.1.1.1 eq 69
# 192.168.1.0/24 から 10.1.1.1 へのtelnet通信を拒否
access-list 100 deny tcp 192.168.1.0 0.0.0.255 host 10.1.1.1 eq 23
# 全てのICMP通信を許可
access-list 100 permit icmp any any
# 192.168.1.1 から 10.1.1.0/24 へのICMP通信を許可
access-list 100 permit icmp host 192.168.1.1 10.1.1.0 0.0.0.255
# 全てのIP通信を許可
access-list 100 permit ip any any
インターフェイスへの適用と確認
標準ACLと同じだが、送信元に近いインターフェイスに設定されることが推奨される。
最後に
設定について色々と書いているが、プロジェクトなどによって方法は様々であり、ポリシーも違うので基本的にはそれに従うようにすること。