CentOS7 Firewalld 設定のポイント

こんにちは、汐留みずほです。普段はインフラエンジニアとして仕事をしています。

Firewalldを設定するとき、コマンドを忘れていてついついググってしまうことありませんか?私はあります。なので、今回ブログにまとめたいと思います。

本記事では、以下のようにeth0というインタフェースを持ち、グローバルIPアドレスが割り当てられているサーバーを例に解説してまいります。

eth0の所属しているゾーンを確認する

Firewalldには「ゾーン」という概念があり、ファイアウォール設定はゾーンに対しておこないます。インタフェースはゾーンに所属することになります。以下のコマンドでインタフェースの所属しているゾーンを確認します。

# firewall-cmd --get-active-zones
public
  interfaces: eth0

インタフェースeth0はゾーンpublicに所属していることがわかりました。ゾーンpublicに対して設定をおこなうことで、eth0を経由する通信の制御ができるようになります。

ゾーンの設定を確認する

続いて、以下のコマンドでゾーンpublicの設定を確認します。

# firewall-cmd --list-all --zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

services: ssh dhcpv6-clientとあるので、インターネットからeth0への通信はsshとdhcpv6-clientのみが許可されている状態であることがわかります。

Firewalldはサーバの外部から内部に対しての通信のみを制御します。サーバの内部から外部への通信は全て許可するようになっています。

ゾーンの設定を変更する

サービス名で通信を許可する

以下のコマンドでは、サービスhttpに対しての通信許可設定をゾーンpublicにおこなっています。この設定をおこなうことで、インターネット上からサーバーのhttp(TCP/80)に対して通信ができるようになります。

# firewall-cmd --add-service=http --zone=public --permanent
success
# firewall-cmd --reload
success
--permanentを付与することで、永続的な設定変更とすることができます。また、設定を反映させるためのfirewall-cmd --reloadを忘れないようにしてください。

また、登録可能なサービスの確認は以下のコマンドでおこなうことができます。

# 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

ポート番号/プロトコルで通信を許可する

以下のコマンドでは、TCPプロトコルの10050番ポートに対しての通信許可設定をゾーンpublicにおこなっています。この設定をおこなうことで、インターネット上からサーバーの10050/tcpに対して通信ができるようになります。

# firewall-cmd --add-port=10050/tcp --zone=public --permanent
success
# firewall-cmd --reload
success
ここで例として挙げたTCPプロトコルの10050番ポートは、Zabbixという監視ソフトウェアのサーバーからエージェントに対して通信する際に使用されているポートです。

通信許可設定の削除

上記で許可した設定を削除します。

サービス名で通信許可した場合の削除は以下のコマンドです。

# firewall-cmd --remove-service=http --zone=public --permanent
success
# firewall-cmd --reload
success

ポート番号/プロトコルで通信許可した場合の削除は以下のコマンドです。

# firewall-cmd --remove-port=10050/tcp --zone=public --permanent
success
# firewall-cmd --reload
success

おわりに

いかがでしたでしょうか。一見簡単な設定でも、たまにしかおこなわないと忘れがちです。本記事がそんな際にお役に立てれば幸いです。