AlmaLinux 8.7でfirewalldの通信許可を設定
目次
概要
家の検証環境ではLinuxをインストールしたあと、毎回問答無用でSELinuxとfirewalldをオフっており、 標準で入っている割にあまりにも使わなさすぎて全然使い方を知らない事態に陥っていました。 自身のセキュリティ意識向上のためにもfirewalldぐらいは普通に設定しておこうと心に決めたので、 今後よく使いそうな初歩的なコマンドとオプションだけメモとして残しておきます。
構成
サーバ構成
ハードウェア
Raspberry Pi 4 Model B - 4GB
OS
AlmaLinux release 8.7 (Stone Smilodon)
ソフトウェア・パッケージ
- firewalld-0.9.3-13.el8.noarch
手順
アクティブなゾーンの確認
ファイアウォールの設定はゾーンに対して行います。今回のサーバ(といってもラズパイ4)のネットワークインタフェースは1つだけ実装されており、eth0という名前です。 ネットワークインタフェースはいずれかのゾーンに属しているので、ゾーン名を確認します。 以下の例ではeth0はpublicという名のゾーンに属している事が分かります。 以降ではファイアウォールの設定はがpublicゾーンに対して実施します。
# firewall-cmd --get-active-zones
public ←ゾーン名
interfaces: eth0
指定したゾーンの設定確認
publicゾーンの設定を確認します。 servicesに通信が許可されているサービス名が、portsに通信が許可されているポート番号が表示されています。
# firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client samba ssh ←eth0インタフェースに対して許可されているサービス ports: 22/tcp ←eth0インタフェースに対して許可されているポート protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
firewalldがサポートしているサービス名の確認
新たに通信を許可するサービスを追加する際に、指定可能なサービスの一覧を確認します。
# firewall-cmd --get-services RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit collectd condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger foreman foreman-proxy freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp galera ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell kube-apiserver ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nbd nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rquotad rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 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
ゾーンに対して許可するサービスを追加
publicゾーンに対してhttpサービスの通信を許可する設定を追加します。 リロードすると設定が反映されます。
--permanentオプションは設定の永続化を行うときに指定します。 firewalldやLinuxを再起動しても設定が消えずに残るようになります。 --permanentオプションを指定しない場合はリロードしなくても設定が反映されますが、一時的な設定変更となり、 firewalldやLinuxを再起動すると変更した設定が消えてしまいます。以降で登場する--permanentオプションは同じ意味です。
# firewall-cmd --add-service=http --zone=public --permanent success # firewall-cmd --reload success
ゾーンに対して許可するポートを追加
publicゾーンに対して8089/tcpポートの通信を許可する設定を追加します。 リロードすると設定が反映されます。
# firewall-cmd --add-port=8089/tcp --zone=public --permanent success # firewall-cmd --reload success
通信許可追加後の確認
サービスとポートをそれぞれ1つずつ追加したので、設定が反映されているか確認します。
# firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client http samba ssh ←httpが追加された ports: 22/tcp 8089/tcp ←8089/tcpが追加された protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
ゾーンに対して許可するサービスを削除
publicゾーンに対してhttpサービスの通信を許可する設定を削除します。 リロードすると設定が反映されます。
# firewall-cmd --remove-service=http --zone=public --permanent success # firewall-cmd --reload success
ゾーンに対して許可するポートを削除
publicゾーンに対して8089/tcpポートの通信を許可する設定を削除します。 リロードすると設定が反映されます。
# firewall-cmd --remove-port=8089/tcp --zone=public --permanent success # firewall-cmd --reload success
通信許可削除後の確認
サービスとポートをそれぞれ1つずつ削除したので、設定が反映されているか確認します。
# firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client samba ssh ←httpが削除された ports: 22/tcp ←8089/tcpが削除された protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: