CentOS 7のfirewalldでネットワークインタフェースにゾーン定義を割り当てる

firewalldで、ゾーン定義の作成まで完了したら、最後にネットワークインタフェースにゾーン定義を割り当ててファイアウォールを使えるようにします。

設定方法ですが、以下のコマンドが用意されています。

[root@sakura ~]# firewall-cmd --zone=vpn --change-interface=tun0
success
[root@sakura ~]#

ゾーンのinterfaceを変更しています。半永久的に追加するには、以下のコマンドも用意されています。

[root@tk2-219-19107 ~]# firewall-cmd --add-interface=tun0 --zone=vpn
The interface is under control of NetworkManager, setting zone to 'vpn'.
success
[root@tk2-219-19107 ~]#

いちおうこれでsuccessと出ましたので、ゾーン定義を確認してみます。

[root@tk2-219-19107 ~]# firewall-cmd --permanent --list-all --zone=vpn
vpn
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: http https db2
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

うーん、interfaceがブランクのままですね。

[root@tk2-219-19107 ~]# firewall-cmd --get-zone-of-interface=tun0
no zone
[root@tk2-219-19107 ~]#

インタフェースのゾーン定義をとってみましたが、no zoneと表示されてしまいました。firewalldやネットワークインタフェースの再起動、マシンの再起動を試してみましたが、いずれもインタフェースの定義が反映されないようです。

仕方がないのでゾーンの定義ファイル(XML)を直接編集します。

/etc/firewalld/の直下に、/zonesディレクトリが存在し、独自定義を行ったゾーンの情報はここに格納されていますので、これを編集します。ちなみに、同じ階層にはサービスのディレクトリもあり、そこにはサービス定義が保存されています。

[root@sakura ~]# cd /etc/firewalld/zones/
[root@sakura zones]#
[root@sakura zones]# ls
public.xml  public.xml.old  vpn.xml  vpn.xml.old
[root@sakura zones]#
[root@sakura zones]# vi vpn.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>VPN</short>
  <description>For OpenVPN</description>
  <interface name="tun0" />
  <service name="http"/>
  <service name="https"/>
  <service name="db2"/>
</zone> [root@sakura zones]#

エディタなどで<interface name=”tun0″ />を追加します。編集したら、保存してリロードを行って定義を反映させます。

[root@tk2-219-19107 zones]# firewall-cmd --get-active-zone
vpn
  interfaces: tun0
public
  interfaces: eth0
[root@tk2-219-19107 zones]#

アクティブなゾーン定義を確認するとvpn用のゾーンにtun0(OpenVPNのTUNインタフェース)が追加されたことがわかります。

[root@sakura zones]# firewall-cmd --permanent --list-all --zone=vpn
vpn (active)
  target: default
  icmp-block-inversion: no
  interfaces: tun0
  sources:
  services: http https db2
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[root@sakura zones]#

こちらでも確認できました。上の定義を見てみるとわかりますが、わざとsshdをserviceから外しています。

この状態で、OpenVPN経由のSSHが接続不可、インターネット経由のSSHが接続OKならば設定成功です。

これで、インターネット経由の接続とOpenVPN経由の接続でFirewallの定義を分けることができました。インターネット経由の場合はsshとopenvpnのみ、firewall経由で各ポートを制御するようにします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください