CentOS 7
 

Firewalld : IPマスカレードの設定
2016/04/10
 
Firewalld における IPマスカレードの設定方法です。以下のような環境を前提に例示します。
          ---------+---------
            Gateway|192.168.0.1
                   |
      External     |
               eth1|192.168.0.30
          +--------+---------+
          |                  |
          | dlp.srv.world |
          |                  |
          +--------+---------+
               eth0|10.0.0.30
      Internal     |

[1] それぞれのインターフェースのゾーン設定を変更します。
# 現在の状態を表示

[root@dlp ~]#
firewall-cmd --get-active-zone

public
  interfaces: eth0 eth1

# ゾーン変更

[root@dlp ~]#
nmcli c mod eth0 connection.zone internal

[root@dlp ~]#
nmcli c mod eth1 connection.zone external
[root@dlp ~]#
firewall-cmd --get-active-zone

internal
  interfaces: eth0
external
  interfaces: eth1
[2] External 側のゾーンに IPマスカレードの設定をします。
# IPマスカレードを設定

[root@dlp ~]#
firewall-cmd --zone=external --add-masquerade --permanent

success
[root@dlp ~]#
firewall-cmd --reload

success
# 確認

[root@dlp ~]#
firewall-cmd --zone=external --query-masquerade

yes
# ip_forward はマスカレーディング有効化により自動的に有効となる

[root@dlp ~]#
cat /proc/sys/net/ipv4/ip_forward

1
[3] 例として、External 側のゾーンへ来た 22番ポート宛てのパケットをローカルの 1234番ポートへ転送する設定です。
(以下全て、永続化する場合は「--permanent」オプションを付加)
[root@dlp ~]#
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=1234

success
[root@dlp ~]#
firewall-cmd --list-all --zone=external

external (active)
  interfaces: eth1
  sources:
  services: ssh
  ports:
  masquerade: yes
  forward-ports: port=22:proto=tcp:toport=1234:toaddr=
  icmp-blocks:
  rich rules:
[4] 例として、External 側のゾーンへ来た 22番ポート宛てのパケットを、他ホスト(192.168.0.31) の 22番ポートへ転送する設定です。
[root@dlp ~]#
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=22:toaddr=192.168.0.31

success
[root@dlp ~]#
firewall-cmd --list-all --zone=external

external (active)
  interfaces: eth1
  sources:
  services: ssh
  ports:
  masquerade: yes
  forward-ports: port=22:proto=tcp:toport=22:toaddr=10.0.0.31
  icmp-blocks:
  rich rules:
[5] 例として、Internal ネットワーク (10.0.0.0/24) 内の任意のコンピュータから dlp.srv.world を経由して External 側へ出ていくパケットの転送/許可設定です。
# internal ゾーンにIPマスカレードを設定

[root@dlp ~]#
firewall-cmd --zone=internal --add-masquerade --permanent

success
[root@dlp ~]#
firewall-cmd --reload

success
[root@dlp ~]#
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth1 -j MASQUERADE

[root@dlp ~]#
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -j ACCEPT

[root@dlp ~]#
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

 
Tweet