Cisco社のルータではACLを使用してパケットフィルタリングを行います。 ACLはパケットをテストしてあて先に転送するか否かを決定します。
一言でACLといってもTimeBased ACL、ContextBased ACLなどがあり、CatalystスイッチにおいてはRACL、VACL、PACLなど複数の種類が存在します。
ルータ・スイッチにおいてセキュリティをガチガチに固めるというのは実務においてあまりなく、セキュリティはセキュリティ製品にやらしておいてルータ、スイッチはルーティング・スイッチングに専念する、といった設計をすることが多いです。( セキュリティ製品を経由しない通信においてはルータ、スイッチでやらざるをえませんが・・・ )
下に記載する標準ACL、拡張ACLだけでも大半のケースにおいて事足りるのではと思います。
■標準ACL(1~99 / 1300~1999)
パケット送信元のアドレスをチェックします。そして送信元のネットワーク、サブネット、ホストIPに基づいてプロトコルスイート全体の出力が許可または拒否されます。主にスイッチ自身に対するアクセス制限やSNMPのアクセス制限、ルーティングプロトコルの制御等に使用することが多いです。
構文
access-list LIST CONTROL SRC |
LIST | アクセスリストの番号(1~99) |
CONTROL | permit(許可) または deny(拒 否) |
SRC | 発信元アドレス |
以下、実際の使用例でline vty(telnet or ssh)に対して192.168.1.0/24および192.168.2.0/24に制限しています。
access-list 1 permit 192.168.1.0 0.0.0.255 access-list 1 permit 192.168.2.0 0.0.0.255 access-list 1 deny any line vty 0 4 access-class 1 in |
上記のaccess-list 1において最後の行で明示的にdenyを指定しておりますが、CiscoのACLの場合、最後の行には明示的な指定がなくともすべてDenyという構文が自動的に有効になります。これを暗黙のDenyと呼びます。
またIPアドレスを設定する際には一般的にサブネットマスクを合わせて設定しま すがCiscoのACLを作成するときはサブネットマスクではなくワイルドカードマスクというのを使用します。これはサブネットマスクを反転さした値であ り逆サブネットマスクなどとも呼ばれます。
初めてACLを触る人には少し違和感がありますが、簡単に考えれば 255.255.255.255からサブネットマスクの各々の値を引き算すれば算出することができます。
・255.255.255.255 – 255.255.255.0
– | 255 | 255 | 255 | 255 |
サブネットマスク | 255 | 255 | 255 | 0 |
=ワイルドカードマスク | 0 | 0 | 0 | 255 |
■拡張アクセスリスト(100~199 / 2000~2699)
標準ACLでは管理系のパケットを制御するのが主な役割ですが拡張ACLでは実際の通信を制御するケースが多いと思います。
拡張ACLではパケットの送信元のアドレスと送信先アドレスをチェックします。 また特定のプロトコル、ポート番号などをチェックすることができます。拡張アクセスリストではユーザがLANにはアクセスできるけど特定のサービスが利用 できないといったことが行えます。基本的な構文は標準ACLとほぼ同一です。拡張ACLでは送信元IPだけではなく宛先IPやプロトコルなども指定することが可能です。
簡易FirewallとしてACLを適用することがよくありますが二つの考え方 があります。
・必要なパケットのみを許可してそれ以外を拒否
・明らかに不要なパケットのみを拒否してそれ以外を許可
ファイアウォールであれば当然ながら前者ですが、ルータやスイッチでACLを実装する場合、個人的には後者をオススメしたいです。というのもファイア ウォールであればステートフルインスペクションという便利な機能がありセッション情報の管理まで自動で行ってくれますが、ルータスイッチには基本的に実装 されておらず戻りパケットまで気にしながらACLを作成する必要があります。机上の理論でいけるはずと思っても実際に適用すると必要な通信まで弾かれてし まうという経験を過去に何度もしてきました。
そういうわけでACLでは明らかな不要パケットのみ拒否で良いと思います。
構文
access-list LIST CONTROL PROTO SRC DEST OPTION |
LIST | アクセスリストの番号(100~199) |
CONTROL | permit(許可) または deny(拒 否) |
PROTO | プロトコル tcp udp icmp ip など |
SRC | 発信元アドレス(およびポート) |
DEST | 宛先アドレス(およびポート) |
OPTION | ACKが立っているパケットを指定する場合はestablished(tcpに限る) logキーワードがある場合はパケットのログを採取する その他オプション多数 |
アクセスリストは許可および拒否のステートメントリストで構成されます。パケットはアクセスリスト上から下へ1行ずつテストされます。パケットの中のIPアドレスなどの情報とアクセスリストステートメントが一致する場合そのリストの 残りの行は飛ばされ一致したステートメントの指示に従ってパケットが許可または拒否されます。
よく他サイトでACLはかなりの負荷がかかるのでなるべく行数を少なくする、 マッチするのが多い順に並べるべきという記事を目にしますが、数十行程度のACLであれば目に見えてCPU負荷が上がるといった経験はなく、そのあたりは 特に気にしなくとも良いと思います。ただし、ACLをインターフェイスに適用する際にoutでかけた場合においてCPUが跳ね上がった経験がありますので、基本的にはinでかけたほうが無難だと思います。
以下、設定例です。
access-list 100 deny ip 192.168.0.0 0.0.255.255 access-list 100 deny ip 172.16.0.0 0.0.15.255 access-list 100 deny ip 10.0.0.0 0.0.0.255 access-list 100 deny tcp any any eq 135 access-list 100 deny tcp any any eq 137 access-list 100 deny tcp any any eq 445 access-list 100 deny udp any any eq 135 access-list 100 deny udp any any eq 137 access-list 100 deny udp any any eq 445 access-list 100 permit ip any any interface GigabitEthernet 0/0 ip access-group 100 in |
最後にインターフェイスに適用しており、これを設定しなければいくらACLを定義したところで発動されることはありませんので注意してください。
■名前付きアクセスリスト
ACLを番号で管理するのが管理しにくいという場合に名前をつけて定義することができます。こちらも標準と拡張の2種類あり、若干記載の違いがあります。以下、標準アクセスリストの例です。
(config)# ip access-list standard standard-example (config-std-nacl)# permit 192.168.1.0 0.0.0.255 (config-std-nacl)# permit host 10.0.0.1 |
以下は拡張アクセスリストの記載例です。
(config)# ip access-list extended extend-example (config-ext-nacl)# permit tcp any host 1.1.1.1 eq www (config-ext-nacl)# permit udp any any eq 53 (config-)# interface Vlan100 (config-if)# ip access-group extend-example in |
両者とも細かい構文は番号で管理するACLと同様です。管理という面においてはこちらのほうが管理しやすいかもしれません。
■タイマーベースアクセスリスト
タイマーベースのアクセスリストでは特定の時刻に基づくトラフィック制御を行うことが可能です。下記の設定例では土日の9:00~20:00のみHTTPトラフィックを許可する設定を行なっています。なお、時刻を元に制御を行うので当然ながらルータの時刻は正確に合わせるようNTPの設定を行なっておくことが必須のものです。
(config)# time-range TimeACL (config-time-range)# periodic weekend 9:00 to 20:00 (config)# access-list 100 permit tcp any any eq www time-range TimeACL (config)# access-list 100 deny ip any any |
periodicで指定できるのもに以下のものがあります。
Friday | 金曜日 |
Monday | 月曜日 |
Saturday | 土曜日 |
Sunday | 日曜日 |
Thursday | 木曜日 |
Tuesday | 火曜日 |
Wednesday | 水曜日 |
daily | 毎日 |
weekdays | 月曜日~金曜日 |
weekend | 土日曜日 |
■アクセスリストの編集
一昔前のIOSであれば一旦定義したACLは全てを消して最初から定義しなおす必要がありましたが最近のものですと以下のように編集することが可能です。show access-listsでシーケンス番号が表示されますので挿入の場合は挿入したい位置の番号を指定します。(以下では30と40の間に挿入したいので35を指定)また削除を行いたい場合はno シーケンス番号とコマンドをうちます。
# show access-lists 100 Extended IP access list 100 10 deny ip 192.168.0.0 0.0.255.255 20 deny ip 172.16.0.0 0.0.15.255 30 deny ip 10.0.0.0 0.0.0.255 40 deny tcp any any eq 135 50 deny tcp any any eq 137 60 deny tcp any any eq 445 70 deny udp any any eq 135 80 deny udp any any eq 137 90 deny udp any any eq 445 100 permit ip any any (config)# ip access-list extended 100 ※追加の場合 ( 30と40の間に挿入 ) (config-ext-nacl)# 35 deny tcp any any eq telnet ※削除の場合 ( 90を削除 ) (config-ext-nacl)# no 90 (config-ext-nacl)# end # show runn | b access-list access-list 100 deny ip 192.168.0.0 0.0.255.255 access-list 100 deny ip 172.16.0.0 0.0.15.255 access-list 100 deny ip 10.0.0.0 0.0.0.255 access-list 100 deny tcp any any eq telnet ←追加された access-list 100 deny tcp any any eq 135 access-list 100 deny tcp any any eq 137 access-list 100 deny tcp any any eq 445 access-list 100 deny udp any any eq 135 access-list 100 deny udp any any eq 137 ←削除された access-list 100 permit ip any any |
■ACL Object Group
PIX/ASAで利用できるObject Groupですがルータでも利用可能です。ただし、スイッチではサポートされません。以下、設定例です。
object-group network XXX 192.168.0.0 255.255.255.0 192.168.1.0 255.255.255.0 192.168.2.0 255.255.255.0 object-group network YYY 192.168.3.0 255.255.255.0 192.168.4.0 255.255.255.0 object-group service WEB tcp www tcp 8080 object-group service MAIL tcp smtp tcp pop3 access-list permit object-group WEB object-group XXX object-group YYY access-list permit object-group MAIL object-group XXX object-group YYY |
通常のACLと比べて少しだけ並びが違います。通常のACLでは送信元IP – 送信先IP – プロトコルという並びですがObject-Groupを用いた場合プロトコル – 送信元IP – 送信先IPという並びになります。但し、ネットワーク・アドレスのみObject-Groupを用いた場合は通常の並びとなります。