firewalldサービスの操作
サービスを有効化する (ホスト起動時にfirewalldサービスを起動する)
# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
サービスを起動する
# systemctl start firewalld
サービスが起動していない状態でfirewall-cmd
コマンドを使用するとFirewallD is not running
というエラーが発生します。サービスを起動してからコマンドを使用して下さい。
サービスを停止する
# systemctl stop firewalld
サービスをリロードする
--permanent
オプションを利用して追加した永続的な設定を有効にするには、firewalldのリロードが必要となります。
一方、--permanent
を付与せずに設定した一時的(runtime)な設定は、リロードを行うと設定が無効になることに留意が必要です。
# systemctl reload firewalld
firewall-cmdコマンドの--reload
オプションでもリロードできます。
# firewall-cmd --reload
サービスを再起動する
# systemctl restart firewalld
サービスのステータスを確認する
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 20XX-12-26 10:52:08 UTC; 2s ago
Docs: man:firewalld(1)
Main PID: 8141 (firewalld)
CGroup: /system.slice/firewalld.service
└─8141 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Dec 26 10:52:08 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
Dec 26 10:52:08 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
設定状況を確認確認
firewall-cmd --list-all
コマンドで現在有効になっているfirewalldの設定を表示します。通常デフォルトのゾーンがpublicゾーンのため、特に何も指定しない場合は、publicゾーンの設定が表示されます。--zone=dmz
のように特定のゾーンを指定することもできます。
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh dhcpv6-client http https
ports: 24224/tcp 24224/udp 50000-50030/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
特定サービスを公開する (publicゾーン)
Apache(httpd)などのWebサーバをインストールしたと想定して、
http(80番ポート)、https(443番ポート)を公開する(publicゾーンに永続的にpermanent
に登録する)。firewalldをreloadして設定を反映します。
# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=https --zone=public --permanent
# systemctl reload firewalld
# firewall-cmd --list-services
ssh dhcpv6-client http https
firewall-cmdで設定を変更する
firewall-cmd
コマンドを使用した具体的なfirewalldの設定について説明します。
ここでは、基本的に一時的な設定ではなく、--permanent
を指定した永続的な設定について説明します。一時的な設定では、サーバを再起動、firewalldを再起動・リロードすると設定が消えてしまいますが、永続的な設定ではそれらの操作をした後も設定が残ります。
また、永続的設定を変更した後に、その設定を有効にするためにはfirewalldサービスのリロードが必要となります。
These changes are not effective immediately, only after service restart/reload or system reboot.
firewall-cmd(1) Permanent Options –permanent
特定サービスを永続的に公開停止する (publicゾーン)
http、httpsサービスを公開停止にする(publicゾーンから永続的permanent
に削除する)。firewalldをreloadして設定を反映します。
# firewall-cmd --remove-service=http --zone=public --permanent
# firewall-cmd --remove-service=https --zone=public --permanent
# systemctl reload firewalld
# firewall-cmd --list-services
ssh dhcpv6-client
firewall-cmdで指定できるサービス名を確認する
firewall-cmd
コマンドの--add-service
、--remove-service
オプションで指定できるサービス名の一覧を表示します。
# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
代表的なサービスを以下に挙げておきます。
- ログイン: ssh, ftp
- Web: http, https
- メール: smtp, smtps, pop3 pop3s, imap, imaps
- DNS: dns
サービスの情報を確認する
サービス名からポート番号やプロトコルなどを確認する場合は、--info-service
オプションを使います。
# firewall-cmd --info-service=dns
dns
ports: 53/tcp 53/udp
protocols:
source-ports:
modules:
destination:
includes:
helpers:
firewall-cmd
コマンドでdns
サービスを追加・削除すると、ポート番号53、プロトコルtcpとudpのルールが追加・削除されることが分かります。
特定ポートを永続的に公開する (publicゾーン)
サービス名ではなく直接ポート番号を指定して公開する場合はプロトコル(tcpもしくはudp)も指定してfirewall-cmd --add-port
を実行します。
ポート番号24224のtcpとudpの両方を公開します。
# firewall-cmd --add-port=24224/tcp --zone=public --permanent
# firewall-cmd --add-port=24224/udp --zone=public --permanent
# systemctl reload firewalld
# firewall-cmd --list-ports
24224/tcp 24224/udp
ポート番号の範囲を指定する場合はハイフンを使って50000-50030/tcp
のように記述します。
# firewall-cmd --zone=public --add-port=50000-50030/tcp --permanent
# systemctl reload firewalld
# firewall-cmd --list-ports
24224/tcp 24224/udp 50000-50030/tcp
特定ポートを永続的に公開停止する (publicゾーン)
ポート番号を指定して公開停止する場合はプロトコル(tcpもしくはudp)も指定してfirewall-cmd --remove-port
を実行します。
# firewall-cmd --remove-port=24224/tcp --zone=public --permanent
# firewall-cmd --remove-port=24224/udp --zone=public --permanent
# systemctl reload firewalld
# firewall-cmd --list-ports
50000-50030/tcp
ポート番号の範囲を指定する場合は同様に次のとおりです。
# firewall-cmd --zone=public --remove-port=50000-50030/tcp --permanent
# systemctl reload firewalld
# firewall-cmd --list-ports
(何も表示されない)
一時的に特定IPアドレス・ネットワークをブロックする (runtime configurations)
公開されているサーバを運用しているとよく分かりますが、ログをみると各種サービスに対して攻撃を受けることが思ったよりも頻繁にあります。
特定のIPアドレスから攻撃を受けていることがわかり、とりあえずの処置として一時的(runtime
)にブロックしたいという状況があります。
block
ゾーンに--add-source
オプションでIPアドレスを追加することで、該当IPアドレスからのアクセスをブロックすることができます。
一時的な設定(runtime configurations)の場合はすぐに設定が反映されるため、firewalldサービスのリロードは必要ありません。逆にサーバの再起動、firewalldサービスの再起動・リロード後には設定が消えますのでご注意下さい。
# firewall-cmd --zone=block --add-source=198.51.100.177
success
# firewall-cmd --list-sources --zone=block
198.51.100.177
--add-source
オプションにはネットワークを指定することもできます。
# firewall-cmd --zone=block --add-source=198.51.100.0/24
success
# firewall-cmd --list-sources --zone=block
198.51.100.177 198.51.100.0/24
設定を削除したい場合は--add-source
オプションを使います。
特定IPアドレス・ネットワークからのアクセスを永続的に許可する
自分が管理しているサーバやネットワークからのアクセスを許可したい場合は、trusted
ゾーンにIPアドレスやネットワークを追加します。
監視サーバは様々なポートへのアクセスが必要なため、個人的には監視サーバのIPアドレスをtrusted
ゾーンに追加しています。
IPアドレスではなくネットワークを追加するには203.0.113.0/24
のように設定します。
trusted
ゾーンはpublic
ゾーンよりも優先度が高いため、trusted
ゾーンに追加されたIPアドレス・ネットワークからはpublic
ゾーンに許可されていないポートへのアクセスも可能です。
# firewall-cmd --zone=trusted --permanent --add-source=203.0.113
.1
# systemctl reload firewalld
# firewall-cmd --list-sources --zone=trusted
203.0.113
.1
設定を削除したい場合は--remove-source
オプションを使います。