firewalldにユーザが定義したサービスを追加する方法です。
fierwalld初期定義サービス
「firewalld」には最初から、ある程度サービスが定義されていて、サービスの定義ファイルは「/usr/lib/firewalld/services」フォルダに格納されています。
# ls /usr/lib/firewalld/services/ RH-Satellite-6.xml ipsec.xml pmwebapis.xml amanda-client.xml iscsi-target.xml pop3s.xml bacula-client.xml kerberos.xml postgresql.xml bacula.xml kpasswd.xml proxy-dhcp.xml dhcp.xml ldap.xml radius.xml dhcpv6-client.xml ldaps.xml rpc-bind.xml dhcpv6.xml libvirt-tls.xml rsyncd.xml dns.xml libvirt.xml samba-client.xml freeipa-ldap.xml mdns.xml samba.xml freeipa-ldaps.xml mountd.xml smtp.xml freeipa-replication.xml ms-wbt.xml ssh.xml ftp.xml mysql.xml telnet.xml high-availability.xml nfs.xml tftp-client.xml http.xml ntp.xml tftp.xml https.xml openvpn.xml transmission-client.xml imaps.xml pmcd.xml vdsm.xml ipp-client.xml pmproxy.xml vnc-server.xml ipp.xml pmwebapi.xml wbem-https.xml
この中にないサービスの通信を「firewalld」のゾーンに定義するためには、ポートとプロトコルを指定してゾーンに適用させるか、独自にサービスを定義してからサービスをゾーンに適用させる必要があります。
ユーザがサービスを独自に定義するメリットとしては、一目で何のサービスの通信を制御するためのルールなのかがわかるということが挙げられます。
ポートとプロトコルを指定しゾーンに定義する場合、サービスの定義を追加する手間は省けますが、他の人にはそれがなんのアプリケーションで使用されているかが分かりにくくなってしまうというデメリットがあります。
サービスの定義
「firewalld」に独自のサービスを定義するためには、「/etc/firewalld/services」フォルダにサービスの内容を定義したファイルを作成する必要があります。
定義ファイルを作成する際は、「/usr/lib/firewalld/services/」フォルダにある、最初から定義されてるサービスの設定ファイルをコピーして流用すると簡単に作成することができます。
ファイル書式
参考として「/usr/lib/firewalld/services/dns.xml」ファイルを見てみます。
<?xml version="1.0" encoding="utf-8"?> <service> <short>DNS</short> <description>The Domain Name System (DNS) is used to provide and request host and domain names. Enable this option, if you plan to provide a domain name service (e.g. with bind).</description> <port protocol="tcp" port="53"/> <port protocol="udp" port="53"/> </service>
設定内容
サービス定義ファイルの設定項目は下記の用になっています。
short | サービスの説明 |
description | サービスの詳細説明 |
port | protocol tcpやudp等のプトロコル設定 port ポート番号設定 |
port | ポート番号を指定 |
サービスの定義ファイル作成
最初から定義されている「dnx.xml」ひな型として、「Maincraftマルチサーバ」用のサービスを作成していきます。
# cp -p /usr/lib/firewalld/services/dns.xml /etc/firewalld/services/minecraft.xml # vi /etc/firewalld/services/minecraft.xml
設定内容
「short」と「description」にはMinecraft用のサービスであることを記述して、使用するプロトコルには「TCP」を指定して、ポート番号は「25565」番を指定しています。
<?xml version="1.0" encoding="utf-8"?> <service> <short>Minecraft</short> <description>Minecraft Multi Server</description> <port protocol="tcp" port="25565"/> </service>
設定反映
サービ定義ファイルを作成しただけでは「firewalld」から認識されないため、作成したサービスを「firewalld」に反映させる作業行います。
# firewall-cmd --reload success
サービス追加の確認
「firewall-cmd –get-services」コマンドを実行すると、「firewalld」に登録されているサービスを表示させることが出来るので、作成したサービスが登録されていること確認してください。
# 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 minecraft 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
※表示結果は適当なところで改行しています。
ゾーンへのサービス追加
新しく追加したサービスが追加されたことの確認がとれたら、次に作成したサービスをゾーンに登録します。
今回は「public」ゾーンに、サービスを登録していきます。
# firewall-cmd --permanent --zone=public --add-service=minecraft success
ゾーンにサービスを登録しましたら、「firewall-cmd –reload」コマンドで設定を反映させます。
# firewall-cmd --reload success
登録確認
サービス登録が完了しましたら、「public」ゾーンの情報を確認してサービスが登録されているか確認をします。
# firewall-cmd --list-all --zone=public public (default, active) interfaces: eno33554984 sources: services: dhcpv6-client minecraft ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
「services: dhcpv6-client minecraft ssh」と表示され、作成した「minecraft」サービスが「public」ゾーンに登録されていることが確認できました。
以上で、作業は完了となります。
コメント