CentOS 7では、ファイアウォールの設定をfirewalldというデーモンが管理しています。firewalldの設定はfirewall-cmdというコマンドを使います。
firewalldにはWebサーバーやメールサーバーなどの標準的な設定が、サービスと言う形で登録されています。
–add-serviceでサービスの許可を設定し、–remove-serviceでサービスの許可を取り消すことができます。
サービスが登録されていない場合は、ポートを指定する–add-portや–remove-portといったオプションを使うこともできます。

CentOSがインストールされた初期の状態は、セキュリティ確保のためファイアウォールが設定されており、サーバーへの接続ができないようになっています。

許可されているサービスは以下コマンドで確認できます。

# firewall-cmd --list-services
dhcpv6-client ssh

次に、すべてのサービスを表示します。

# firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

たくさん出力されますが、このひとつひとつの単位で通信許可/拒否を決めることになります。

サービスの通信を許可する

では、ファイアウォールの設定を変更してみます。今回はhttpサービスを追加で許可します。

# firewall-cmd --add-service http
success

設定が反映されたかどうか、許可されているサービスを確認します

# firewall-cmd --list-services
dhcpv6-client http ssh

上記コマンドを実行することで許可されているサービスの一覧(ホワイトリスト)が表示されます。httpが追加されており、無事に許可されているようです。ただ、このままではfirewalldを再起動したら、設定は元に戻ってしまいます。
再起動しても上記変更分の設定が有効にするには以下のように「–permanent」を付与します。
–permanentオプションの場合は、即座に反映されません。そのため、即座に反映して、再起動後も有効にするには、両方を実行する必要があります。

# firewall-cmd --add-service http
# firewall-cmd --add-service http --permanent
success

許可されていることを確認します。

# firewall-cmd --list-service
dhcpv6-client http ssh

これで、firewalldを再起動しても設定は引き継がれます。

サービスの通信を拒否する

サービスの通信を拒否するには、ゾーンからサービスを外します。
firewall-cmdに–remove-serviceを付けて実行します。同じく再起動後も有効になるように–permanentオプションを付けて再度実行します。

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

許可されているサービスを確認するとhttpがはずれていることが分かります。

# firewall-cmd --list-services
dhcpv6-client ssh

設定の再読み込み

/etc/firewalld/services/ディレクトリにサービス定義を追加した場合などには、firewalldの設定の再読み込みを行います。
設定の再読み込みには、firewall-cmdに–reloadオプションを付けて実行します。

# firewall-cmd --reload
success

また、firewall-cmdに–complete-reloadオプションを付けるとNetfilter Conntrackのステート情報も初期化されます。

# firewall-cmd --complete-reload
success