Fedora 28: Firewalldでファイアウォール制御

Firewalldでファイアウォールを制御する手順を記載します。

1 Firewalldのインストール

firewalldパッケージをインストールします。

$ sudo dnf install firewalld
$ sudo systemctl enable firewalld
$ sudo systemctl start firewalld

2 ルールの追加

–add-portオプションあるいは–add-serviceオプションでルールを追加します。–permanentオプションがない場合は一時的にルールを反映します。

$ sudo firewall-cmd --add-port=80/tcp
$ sudo firewall-cmd --add-service=http

–add-serviceオプションで指定できる引数は/usr/lib/firewalld/services/と/etc/firewalld/services/のファイルです。

$ sudo cat /usr/lib/firewalld/services/http.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages. If you
plan to make your Web server publicly available, enable this option.
This option is not required for viewing pages locally or developing
Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>

–permanentオプションで恒久的にルールを反映します。ただし、ルールの追加後にfirewall-cmd –reloadを実行しないと反映されません。

$ sudo firewall-cmd --add-port=80/tcp --permanent
$ sudo firewall-cmd --add-service=https --permanent
$ sudo firewall-cmd --reload

3 ルールの表示

–list-allオプションですべてのルールを表示します。

$ sudo firewall-cmd --list-all
FedoraWorkstation (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client ssh mdns samba-client http
  ports: 1025-65535/udp 1025-65535/tcp 80/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

–list-portsで–add-portで追加されたルールを表示します。

$ sudo firewall-cmd --list-ports
1025-65535/udp 1025-65535/tcp 80/tcp

–list-servicesで–add-serviceで追加されたルールを表示します。

$ sudo firewall-cmd --list-services
dhcpv6-client ssh mdns samba-client http

4 ルールの削除

–remove-portオプションあるいは–remove-serviceオプションでルールを削除します。–permanentオプションがない場合は一時的にルールを反映します。

$ sudo firewall-cmd --remove-port=80/tcp
$ sudo firewall-cmd --remove-service=http

–permanentオプションで恒久的にルールを反映します。ただし、ルールの追加後にfirewall-cmd –reloadを実行しないと反映されません。

$ sudo firewall-cmd --remove-port=80/tcp --permanent
$ sudo firewall-cmd --remove-service=https --permanent
$ sudo firewall-cmd --reload

5 /etc/firewalld/servicesでserviceのカスタマイズ

既存のserviceを変更したり、独自のserviceを追加する場合は/etc/firewalld/servicesに保存します。

/usr/lib/firewalld/servicesと/etc/firealld/servicesに同名のserviceがある場合は/etc/firewalld/servicesのものが使われます。

例えば、既存のtestというサービスがあったとします。

$ cat <<EOF | sudo tee /usr/lib/firewalld/services/test.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>test</short>
  <description>Test for firewalld</description>
  <port protocol="tcp" port="100"/>
</service>
EOF
$ sudo firewall-cmd --reload > /dev/null

このserviceを追加すると100/tcpへアクセスできるようになります。

$ sudo firewall-cmd --add-service=test --permanent > /dev/null
$ sudo firewall-cmd --reload > /dev/null

ここでtestというserviceを上書きする/etc/firewalld/services/test.xmlを追加した場合、100/tcpへはアクセスできなくなり、101/tcpへアクセスできるようになります。

$ cat <<EOF | sudo tee /etc/firewalld/services/test.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>test</short>
  <description>Another test for firewalld</description>
  <port protocol="tcp" port="101"/>
</service>
EOF
$ sudo firewall-cmd --reload > /dev/null