NEC IXはNATを有効にする場合、インターネットからの接続は全て拒否されるネットワーク初学者に優しい仕様になっています。ですので、場合によってはファイアウォール(ACL)を設定する必要はありません。ですが、「LANからWAN方向へのOutBoundセキュリティを実装したい」「WANからの接続を許可するNATP serviceを使用している」という状況ではファイアウォール(ACL)の実装が必要になります。
NEC IXで実装されているACLは「ステートレスファイアウォール」に相当する機能です。戻り通信を明示的に許可する必要があります。戻り通信を動的に許可する方法として「Dynamic ACL」と呼ばれる機能がNEC IXには備わっていますが、私が手元にあるバージョンではDynamic ACLは意図せぬ通信まで許可する挙動でした(最新バージョンではバグ修正されている可能性はあります)
設定まとめ
コマンド一覧
ACLに関するコマンド一覧は以下の通りです。
Router(config)# ip access-list <acl_name> {permit|deny} tcp src <src> dest <dest> dport eq <dport> Router(config)# ip access-list <acl_name> {permit|deny} udp src <src> dest <dest> dport eq <dport> Router(config)# ip access-list <acl_name> {permit|deny} icmp src <src> dest <dest> Router(config-GigaEthernet0.0)# ip filter <acl_name> 1 {in|out} Router(config-GigaEthernet0.0)# ip filter <acl_name> 1 {in|out}
ACLの定義
ACLを定義する構文は以下の通りです。TCP, UDP, ICMPそれぞれの使用頻度の高い構文は以下の通りです。
ACLはtcp flag, tosなど様々なパラメタを用いた定義が可能です。以下は使用可能なパラメタの極一部である事を留意ください。
Router(config)# ip access-list <acl_name> {permit|deny} tcp src <src> dest <dest> dport eq <dport> Router(config)# ip access-list <acl_name> {permit|deny} udp src <src> dest <dest> dport eq <dport> Router(config)# ip access-list <acl_name> {permit|deny} icmp src <src> dest <dest>
シーケンス番号の運用
他のルータ機器と異なり、NEC IXのACLはシーケンス番号を指定する事ができません。NEC IXはACLの設定を入力した順にアクセスリストが作成されます。操作例は以下のようになります。
Router(config)# ip access-list test permit ip src 1.1.1.1/32 dest any Router(config)# ip access-list test permit ip src 2.2.2.2/32 dest any Router(config)# ip access-list test deny ip src any dest any Router(config)# Router(config)# Router(config)# show ip access-list test IPv4 access list test - 3 entries, 0 hits, 0 refs Codes: p - Permit, d - Deny p 1.1.1.1/32 > any ip, tos any, 0 hits p 2.2.2.2/32 > any ip, tos any, 0 hits d any > any ip, tos any, 0 hits Router(config)#
NEC IXはACLに対してシーケンス番号を適用する事はできませんが、インターフェースに対する適用時にシーケンス番号を設定する事ができます。ですので、以下の設定は書き方は異なるものの全く同じ挙動です。
ip access-list test permit ip src 1.1.1.1/32 dest any ip access-list test permit ip src 2.2.2.2/32 dest any ip access-list test deny ip src any dest any ! interface GigaEthernet0.0 ip filter test 1 in
ip access-list test01 permit ip src 1.1.1.1/32 dest any ip access-list test02 permit ip src 2.2.2.2/32 dest any ip access-list test03 deny ip src any dest any ! interface GigaEthernet0.0 ip filter test01 1 in ip filter test02 2 in ip filter test03 3 in
前者の運用ならばACLをまとめて削除できるので操作は楽かもしれません。後者の運用ならばACLを1行ずつメンテナンスできるため、設定の手間は多いものの通信断なしの移行作業ができるかもしれません。
両者の書き方はメリット・デメリットがありますので、組織にあった運用方法を選択してください。
動作確認
動作確認の構成
以下の環境で動作確認を行います。検証の都合上、実際のインターネットではなく擬似的なインターネットを使用します。
+-----------------+ +-----------------+ | Rocky Linux 8.4 | | Rocky Linux 8.4 | | host200 | | host201 | +-------+---------+ +-------+---------+ eth0 | .200 eth0 | .201 | | +-----------+---------+ | | | 200.0.0.0/24 | Gi0.0 | .1 +---------+-------+ | NEC IX 2015 | | R1 | +---------+-------+ Gi1.0 | .254 | | 192.168.1.0/24 | ens192 | .dhcp +---------+-------+ | Rocky Linux 8.4 | | host100 | +-----------------+
初期設定
IX2015の初期設定は以下の通りとします。設定はIPアドレスのみです。
動作確認 (1) OutBoundセキュリティ
NATを有効にします。
[R1:IX2015] interface GigaEthernet0.0 ip napt enable
この状況でWAN方向へのACLの動作確認をしてみましょう。検証シナリオとして、host201以外へのsshを禁止する方法を考えます。設定例は以下の通りです。
[R1:IX2015] ip access-list g00_out permit tcp src any dest 200.0.0.201/32 dport eq 22 ip access-list g00_out deny tcp src any dest any dport eq 22 ip access-list g00_out permit ip src any dest any ! interface GigaEthernet0.0 ip filter g00_out 1 out
host200(200.0.0.200)へのsshが拒否され、host201(200.0.0.201)へのsshが許可される事を確認します。
[host100:RockyLinux8.4] [root@host100 ~]# ssh 200.0.0.200 ssh: connect to host 200.0.0.200 port 22: Connection timed out [root@host100 ~]# [root@host100 ~]# [root@host100 ~]# [root@host100 ~]# ssh 200.0.0.201 Warning: Permanently added '200.0.0.201' (ECDSA) to the list of known hosts. Last login: Sat Nov 20 15:57:11 2021 from 200.0.0.1 [root@rocky201 ~]#
動作確認 (2) NATP Serviceに対する対策
NAPT serviceはWAN側からのtelnet, sshなどを許容する設定です。この設定はインターネットに対してtelnet, sshを公開する事になりますので、セキュリティ対策と併せた検討が必要になります。
telnet, sshなどをWAN方向から許可する設定を入れます。
[R1:IX2015] telnet-server ip enable ssh-server ip enable http-server ip enable ! pki private-key generate rsa http-server username admin ! interface GigaEthernet0.0 ip napt enable ip napt service ping 200.0.0.1 ip napt service telnet 200.0.0.1 ip napt service ssh 200.0.0.1 ip napt service http 200.0.0.1
この状況で、host201(200.0.0.201)からのhttpのみを許可する設定を投入します。
[R1:IX2015] ip access-list g00_in permit tcp src 200.0.0.201/32 dest any dport eq 80 ip access-list g00_in deny tcp src any dest any dport eq 80 ip access-list g00_in permit ip src any dest any ! interface GigaEthernet0.0 ip filter g00_in 1 in
host200(200.0.0.200)からのhttpは許容されないものの、host201(200.0.0.201)からのhttpが許可される事を確認します。
[host200:RockyLinux8.4] [root@rocky200 ~]# curl --connect-timeout 3 -I http://200.0.0.1 curl: (28) Connection timed out after 3001 milliseconds [root@rocky200 ~]#
[host201:RockyLinux8.4] [root@rocky201 ~]# curl --connect-timeout 3 -I http://200.0.0.1 HTTP/1.1 302 Found Cache-Control: no-cache Connection: close Date: Sat, 20 Nov 2021 06:44:02 GMT Location: /guest_top.html Server: IX Series IX2105 (magellan-sec) Software, Version 8.10.11, RELEASE SOFTWARE Allow: GET, HEAD, POST Content-Length: 0 Content-Type: text/html; charset=EUC-JP [root@rocky201 ~]#