firewalld の使い方
ファイアウォールサービスである Fireawalld について、基本的な操作や設定方法について記載する。
サービスの確認
firewalld
の現在の状態は以下のようにして確認できる(デフォルトは有効なはず)。
$ sudo systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor p>
Active: active (running) since Wed 2019-09-24 23:16:35 JST; 18min ago
Docs: man:firewalld(1)
Main PID: 801 (firewalld)
Tasks: 2 (limit: 25025)
Memory: 30.9M
CGroup: /system.slice/firewalld.service
└─801 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork ->
Sep 24 23:16:34 localhost.localdomain systemd[1]: Starting firewalld - dynamic >
Sep 24 23:16:35 localhost.localdomain systemd[1]: Started firewalld - dynamic f>
この時、Active: active (running)
と表示されている場合は、firewalld
は稼働中であること示している。
firewalld
を動かすと、デフォルトではインバウンドの通信はほぼ許可されていないため、 サーバに設定/公開するサービス/アプリケーションに応じて許可設定を行う必要がある。
もしサーバの上位にファイアウォール機器が設置されており、 サーバ側でファイアウォールは必要ないといった場合は以下のようにして停止することも可能。
sudo systemctl stop firewalld
自動起動設定も無効にする場合は下記。
sudo systemctl disable firewalld
基本操作
firewalld
における各種サービスの定義はゾーンに対して設定する。
設定したゾーンとネットワークインターフェースを関連付けることで設定が有効となる。
サービスが停止している場合は、起動してついでに自動起動するように設定しておく。
sudo systemctl enable --now firewalld
今回環境のデフォルトでは以下のように public
ゾーンがデフォルトゾーンとしてネットワークインターフェースに適用され、cockpit
,dhcpv6-client
,ssh
サービスが許可されている。
firewall-cmd
コマンドで様々な操作を行う際に、適用先のゾーン指定(--zone=***
)を省略した場合は、このデフォルトゾーンに対して設定が適用される。
デフォルトゾーンを表示
$ sudo firewall-cmd --get-default-zone
public
現在の設定を表示
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens2
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
定義されている全てのゾーンを表示
$ sudo firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
... 省略 ...
ゾーンを指定して許可されているサービスを表示
$ sudo firewall-cmd --list-service --zone=external
ssh
デフォルトゾーンを変更
$ sudo firewall-cmd --set-default-zone=external
success
特定インターフェースのゾーンを変更
change-interface
では--permanent
を付加しても永続化されず再起動すると戻る。
永続化する場合はnmcli
を使用する。
$ sudo firewall-cmd --change-interface=ens8 --zone=external
success
$ sudo firewall-cmd --list-all --zone=external
external (active)
target: default
icmp-block-inversion: no
interfaces: ens8
sources:
services: ssh
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
$ sudo nmcli connection modify ens8 connection.zone external
$ sudo firewall-cmd --get-active-zone
external
interfaces: ens8
public
interfaces: ens2
現在定義されているサービス一覧を表示
$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
定義されているサービスの定義ファイルは以下の場所に保管されている。
独自に定義を追加する場合は当該ディレクトリに XML ファイルを保存する。
$ ls /usr/lib/firewalld/services
amanda-client.xml jenkins.xml redis.xml
amanda-k5-client.xml kadmin.xml RH-Satellite-6.xml
amqps.xml kerberos.xml rpc-bind.xml
amqp.xml kibana.xml rsh.xml
apcupsd.xml klogin.xml rsyncd.xml
...省略...
ipsec.xml ptp.xml xmpp-server.xml
ircs.xml pulseaudio.xml zabbix-agent.xml
irc.xml puppetmaster.xml zabbix-server.xml
iscsi-target.xml quassel.xml
isns.xml radius.xml
サービスの追加/削除
サービスを追加する場合は --add-service
オプション、削除を行う場合は --remove-service
オプションを指定する。
恒久的に変更する場合は --permanent
オプションを指定する。
--permanent
を指定しなかった場合、システムを再起動すると設定は実行前の状態に戻ってしまうので注意。
[http] を追加(設定は即時有効になる)
$ sudo firewall-cmd --add-service=http
success
$ sudo firewall-cmd --list-service
cockpit dhcpv6-client http ssh
[http] を削除
$ sudo firewall-cmd --remove-service=http
success
$ sudo firewall-cmd --list-service
cockpit dhcpv6-client ssh
[http] を恒久的に追加(設定を反映させるために要リロード)
$ sudo firewall-cmd --add-service=http --permanent
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-service
cockpit dhcpv6-client http ssh
ポートの追加/削除
ポートを追加する場合は --add-port
オプション、削除を行う場合は --remove-port
オプションを指定する。
[TCP 465] を追加
$ sudo firewall-cmd --add-port=465/tcp
success
$ sudo firewall-cmd --list-port
465/tcp
[TCP 465] を削除
$ sudo firewall-cmd --remove-port=465/tcp
success
$ sudo firewall-cmd --list-port
[TCP 465] を恒久的に追加(設定を反映させるために要リロード)
$ sudo firewall-cmd --add-port=465/tcp --permanent
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-port
465/tcp
ICMPの追加と削除
ICMP のタイプを追加する場合は--add-icmp-block
オプション、削除を行う場合は--remove-icmp-block
オプションを指定する。
[echo-request] を追加
$ sudo firewall-cmd --add-icmp-block=echo-request
success
$ sudo firewall-cmd --list-icmp-blocks
echo-request
[echo-request] を削除
$ sudo firewall-cmd --remove-icmp-block=echo-request
success
$ sudo firewall-cmd --list-icmp-blocks
指定可能な ICMP タイプの一覧を表示
$ sudo firewall-cmd --get-icmptypes
address-unreachable bad-header beyond-scope communication-prohibited destination-unreachable echo-reply echo-request failed-policy fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect reject-route required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
Discussion