firewalldで独自のサービスを定義する方法

今回はfirewalldで独自のサービスを定義する方法についてご紹介致します。

前提条件は以下となります。

* firewalldがインストールされている

## firewalldとは

![fd001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3668800/e53ab46a-278f-05fb-7607-7d1da33d59ee.png)

firewalldはレットハット系のlinuxで採用されているファイヤーウォール管理ツールとなります。

ユーザーが設定したルールに基づいて通信を制御する事が出来ます。

## サービス確認

firewalldではデフォルトでいくつかのサービスが定義されております。

下記コマンドを使用する事で現在定義されているサービス一覧を確認する事が出来ます。

```
firewall-cmd --get-services
```

上記を実行すると下記のようにサービス一覧が表示されます。

```
RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming submission svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client 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
```

## サービスの追加

それでは実際にサービスの追加を行っていきます。

独自のサービスを追加するには以下のパス内に定義ファイルを作成します。

定義ファイルはxmlファイルで作成する必要がございます。

```
/etc/firewalld/services
```

今回は例として「custom」というサービスを作成します。

```
vi /etc/firewalld/services/custom.xml
```

先程作成したサービスファイル(xml)内にサービス内容を定義していきます。

```
<?xml version="1.0" encoding="utf-8"?>
<service>
    <short>custom</short>
    <description>custom service</description>
    <port protocol="tcp" port="12345"/>
    <port protocol="udp" port="54321"/>
</service>
```

「short」にはサービス名を入力します。

「description」にはサービス説明を記載します。

「port」にはプロトコル名とポート番号を追記きます。

今回は例としてTCPの12345番ポートとUDPの54321番ポートを定義します。

## firewalldのリロード

上記定義ファイルの設定が完了しましたfirewalldをリロードします。

firewalldは下記コマンドでリロード可能です。

```
firewall-cmd --reload
```

## サービス定義の確認

リロードが問題なく行われたらサービスが定義さております。

先程のサービス一覧確認コマンドにて反映を確認してください。

```
firewall-cmd --get-services
```

上記を実行すると下記のようにサービス一覧が表示されます。

```
RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb custom dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming submission svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client 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
```

無事にcustomが追記されておりました。

後は他サービスと同様に利用する事が出来ます!