Vyatta(VyOS) Firewall設定 Zone Based編

スポンサーリンク

Vyatta(VyOS)で、Zone Based Firewallを設定する方法をまとめます。Zoneを定義する事によって複数のインターフェースをまとめたりZoneからZoneへの通信ルールを定義したり、設定の管理が容易になります。単純なFirewallと実装可能な事は変わりませんが、管理負荷を下げる目的で使用されます。ほとんどのファイアウォール製品やルータで備わっている機能です。

設定まとめ

以下のようなコマンドでファイアウォールルールのデフォルト挙動を定義できます。drop, rejectならばホワイトリスト形式の運用で、acceptならばブラックリスト形式の運用になります。

set firewall name <ルール名> default-action {accept|reject|drop}

以下のようなコマンドで、どのインターフェースがどのゾーンに属すかを定義します。

set zone-policy zone <ゾーン名> dmz interface <インターフェース名>

各ゾーンへパケットが入った時のデフォルトの挙動を指定します。指定可能なのはrejectかdropのみで、acceptは指定できません(省略時はdropになる)。

set zone-policy zone <ゾーン名> default-action {reject|drop}

ゾーンからゾーンへパケットが転送されるときに、どのようなファイアウォールルールを適用するかを指定します。

set zone-policy zone <ゾーン名> from <ゾーン名> firewall name <ファイアウォールルール名>

動作確認

動作確認の構成

以下の環境で動作確認を行います。社内端末向けの環境を想定し、クライアント端末からプロキシサーバ(squid)を経由してWeb(apache)へ通信する要件を想定します。

+-----------------------+
|        host010        |
|     apache (tcp80)    |
+-----------+-----------+
     ens224 | .10
            | 
            | 192.168.10.0/24
            | (擬似untrusted)
            | 
       eth0 | .1
+-----------+-----------+                 +-----------------------+
|         vy001         |                 |        host020        |
|                       +-----------------|    squid (tcp3128)    |
+-----------+-----------+ 192.168.20.0/24 +-----------------------+
       eth1 | .1             (擬似DNZ)           
            | 
            | 192.168.30.0/24
            |  (擬似trusted)
     ens224 | .20
+-----------+-----------+
|        host030        |
|       (client)        |
+-----------------------+

初期設定

初期設定はIPアドレスのみとします。

vy001 : VyOS 1.4
set interfaces ethernet eth0 address '192.168.10.1/24'
set interfaces ethernet eth0 hw-id '00:50:56:8e:74:ec'
set interfaces ethernet eth1 address '192.168.20.1/24'
set interfaces ethernet eth1 hw-id '00:50:56:8e:3a:92'
set interfaces ethernet eth2 address '192.168.30.1/24'
set interfaces ethernet eth2 hw-id '00:50:56:90:51:28'
set interfaces loopback lo
set service ssh disable-host-validation
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy001'
set system login user vyos authentication encrypted-password '$6$QxPS.uk6mfo$9QBSo8u1FkH16gMyAVhus6fU3LOzvLR9Z9.82m3tiHFAxTtIkhaZSWssSgzt4v4dGAL8rhVQxTg0oAG9/q11h/'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'

動作確認 Zone Based Firewallの設定

Zoneの定義

どのインターフェースがどのゾーンに属するかを定義します。

[vy001:VyOS1.4]
set zone-policy zone untrust default-action 'reject'
set zone-policy zone untrust interface 'eth0'
set zone-policy zone dmz default-action 'reject'
set zone-policy zone dmz interface 'eth1'
set zone-policy zone trust default-action 'reject'
set zone-policy zone trust interface 'eth2'

ファイアウォールルールの定義

trustからdmzへのプロキシサーバ(tcp3128)の疎通を許可するルールを作成します。

[vy001:VyOS1.4]
set firewall name trust-dmz default-action 'reject'
set firewall name trust-dmz rule 10 action 'accept'
set firewall name trust-dmz rule 10 destination port '3128'
set firewall name trust-dmz rule 10 log 'enable'
set firewall name trust-dmz rule 10 protocol 'tcp'

dmzからuntrustへのWebサーバ(tcp80)の疎通を許可するルールを作成します。

[vy001:VyOS1.4]
set firewall name dmz-untrust default-action 'reject'
set firewall name dmz-untrust rule 10 action 'accept'
set firewall name dmz-untrust rule 10 destination port '80'
set firewall name dmz-untrust rule 10 log 'enable'
set firewall name dmz-untrust rule 10 protocol 'tcp'

Vyatta(VyOS)は戻り方向の通信を自動的に許可しないstateless firewallです。戻り方向を明示的に許可するルールを作成します。

[vy001:VyOS1.4]
set firewall name permit_return default-action 'reject'
set firewall name permit_return rule 10 action 'accept'
set firewall name permit_return rule 10 log 'enable'
set firewall name permit_return rule 10 protocol 'tcp'
set firewall name permit_return rule 10 state established 'enable'
[/code]

ファイアウォールルールの適用

ゾーン間に対してファイアウォールルールを適用します。

[vy001:VyOS1.4]
set zone-policy zone dmz from trust firewall name 'trust-dmz'
set zone-policy zone dmz from untrust firewall name 'permit_return'
set zone-policy zone untrust from dmz firewall name 'dmz-untrust'
set zone-policy zone trust from dmz firewall name 'permit_return'

疎通確認

host030からプロキシサーバ(host020)を経由してWebサーバ(host010)へ疎通可能である事を確認します。

[host030:RockyLinux8.4]
[root@host030 ~]# export http_proxy=http://192.168.20.20:3128/
[root@host030 ~]# curl -I http://192.168.10.10/
HTTP/1.1 200 OK
Last-Modified: Tue, 28 Aug 2021 07:59:45 GMT
Accept-Ranges: bytes
Content-Length: 3
Content-Type: text/html; charset=UTF-8
Date: Tue, 28 Aug 2021 10:27:06 GMT
Server: Apache/2.4.37 (rocky)
ETag: "3-5cad655385366"
Age: 510
X-Cache: HIT from host020.gokatei.go
X-Cache-Lookup: HIT from host020.gokatei.go:3128
Via: 1.1 host020.gokatei.go (squid/4.11)
Connection: keep-alive

[root@host030 ~]# 

想定通りのファイアウォールログが出力されている事を確認します。

[vy001:VyOS1.4]
vyos@vy001:~$ tail -f /var/log/messages | grep '] IN'
Aug 28 19:35:36 vy001 kernel: [ 3843.223030] [trust-dmz-10-A] IN=eth2 OUT=eth1 MAC=00:50:56:90:51:28:00:50:56:90:09:cc:08:00 SRC=192.168.30.30 DST=192.168.20.20 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48532 DF PROTO=TCP SPT=33522 DPT=3128 WINDOW=29200 RES=0x00 SYN URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.223591] [permit_return-10-A] IN=eth1 OUT=eth2 MAC=00:50:56:8e:3a:92:00:50:56:90:85:c3:08:00 SRC=192.168.20.20 DST=192.168.30.30 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=3128 DPT=33522 WINDOW=28960 RES=0x00 ACK SYN URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.223873] [trust-dmz-10-A] IN=eth2 OUT=eth1 MAC=00:50:56:90:51:28:00:50:56:90:09:cc:08:00 SRC=192.168.30.30 DST=192.168.20.20 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=48533 DF PROTO=TCP SPT=33522 DPT=3128 WINDOW=229 RES=0x00 ACK URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.224027] [trust-dmz-10-A] IN=eth2 OUT=eth1 MAC=00:50:56:90:51:28:00:50:56:90:09:cc:08:00 SRC=192.168.30.30 DST=192.168.20.20 LEN=180 TOS=0x00 PREC=0x00 TTL=63 ID=48534 DF PROTO=TCP SPT=33522 DPT=3128 WINDOW=229 RES=0x00 ACK PSH URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.224240] [permit_return-10-A] IN=eth1 OUT=eth2 MAC=00:50:56:8e:3a:92:00:50:56:90:85:c3:08:00 SRC=192.168.20.20 DST=192.168.30.30 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=31642 DF PROTO=TCP SPT=3128 DPT=33522 WINDOW=235 RES=0x00 ACK URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.225085] [permit_return-10-A] IN=eth1 OUT=eth2 MAC=00:50:56:8e:3a:92:00:50:56:90:85:c3:08:00 SRC=192.168.20.20 DST=192.168.30.30 LEN=455 TOS=0x00 PREC=0x00 TTL=63 ID=31643 DF PROTO=TCP SPT=3128 DPT=33522 WINDOW=235 RES=0x00 ACK PSH URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.225232] [trust-dmz-10-A] IN=eth2 OUT=eth1 MAC=00:50:56:90:51:28:00:50:56:90:09:cc:08:00 SRC=192.168.30.30 DST=192.168.20.20 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=48535 DF PROTO=TCP SPT=33522 DPT=3128 WINDOW=237 RES=0x00 ACK URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.225495] [trust-dmz-10-A] IN=eth2 OUT=eth1 MAC=00:50:56:90:51:28:00:50:56:90:09:cc:08:00 SRC=192.168.30.30 DST=192.168.20.20 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=48536 DF PROTO=TCP SPT=33522 DPT=3128 WINDOW=237 RES=0x00 ACK FIN URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.225863] [permit_return-10-A] IN=eth1 OUT=eth2 MAC=00:50:56:8e:3a:92:00:50:56:90:85:c3:08:00 SRC=192.168.20.20 DST=192.168.30.30 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=31644 DF PROTO=TCP SPT=3128 DPT=33522 WINDOW=235 RES=0x00 ACK FIN URGP=0 
Aug 28 19:35:36 vy001 kernel: [ 3843.226053] [trust-dmz-10-A] IN=eth2 OUT=eth1 MAC=00:50:56:90:51:28:00:50:56:90:09:cc:08:00 SRC=192.168.30.30 DST=192.168.20.20 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=48537 DF PROTO=TCP SPT=33522 DPT=3128 WINDOW=237 RES=0x00 ACK URGP=0 
タイトルとURLをコピーしました