メインコンテンツへスキップ
  1. ブログ/

【初心者向け】firewalldで独自のサービスを追加する方法

·
Linux Firewalld セキュリティ
目次

【初心者向け】firewalldで独自のサービスを追加する方法
【初心者向け】firewalldで独自のサービスを追加する方法

初めに
#

アプリケーションで使用する特定のポートを開放したいが、firewalld のサービス一覧に見当たらないと困ったことはありませんか?

firewalld には、HTTPSSH などの主要なサービスがあらかじめ定義されています。

しかし、自作アプリケーションや特定のソフトウェアなど、デフォルトに含まれていない カスタムポート を使用する場合は、自分で設定を追加する必要があります。

本記事では、Red Hat系Linux(CentOSやAlmaLinuxなど)で採用されているfirewalldにおいて、独自のサービス(ユーザー定義サービス)を追加する方法を初心者向けに解説します。

firewalldとは?
#

firewalldとは?
firewalldとは?

firewalldファイアウォールディー)は、Red Hat系のLinuxで標準採用されているファイアウォール管理ツールです。

iptablesnftables をバックエンドに持ち、ユーザーが設定したルールに基づいてネットワーク通信を制御することができます。

従来の iptables ではルールを直接記述する必要があり、設定が複雑になりやすいという課題がありました。

一方、firewalld ではゾーン(zone) と サービス(service) という概念を導入することで、環境や用途に応じた柔軟な設定が可能になっています。

以下はfirewalldの公式リポジトリとなっております。

firewalld/firewalld

Stateful zone based firewall daemon with D-Bus interface

Python
972
290

サービス一覧の確認
#

firewalld ではデフォルトで多数のサービスが事前定義されています。

サービスとは、特定のプロトコルとポート番号の組み合わせに名前を付けたものです。

サービスを利用することにより複数のポート設定をグループ単位でまとめて管理できます。

例えば「http」サービスはTCP 80番ポート、「ssh」サービスはTCP 22番ポートというように、よく使われる通信を名前で扱えるようになっています。

そのため、個別にポート番号を指定するよりも、サービスを利用する方が管理コストを削減し設定ミスを防ぐことできます。

環境の firewalld に定義されているサービス一覧は、次のコマンドで確認することできます。

firewall-cmd --get-services

以下は AlmaLinux8 環境にてコマンドを実施した例となります。

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 

このように有名なサービスは一通り定義されていますが、自作アプリケーションでカスタムポートを利用する場合は独自に作成する必要があります。

サービスの追加
#

それでは実際に独自サービスの追加を行う方法をご紹介します。

サービスを追加するには、XML形式の定義ファイルを所定のディレクトリに作成する必要があります。

ユーザー自身がサービスを追加する場合は以下のディレクトリに作成する必要があります。

/etc/firewalld/services

ここでは例として「 custom 」というサービスを追加してみます。

初めにエディタコマンドを利用し以下のファイルを作成します。

vi /etc/firewalld/services/custom.xml

ファイルを作成したら、その中にサービスの定義をXML形式で記述します。

以下は定義に必要な項目となります。

タグ名 説明 設定例
<short> サービス名を指定します。 <short>myapp</short>
<description> サービスの説明文を自由に記載します。 <description>My custom application service</description>
<port> 開放するポート番号と使用プロトコル(TCP/UDP)を指定します。 <port protocol="tcp" port="7777"/>

以下は custom.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>

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

作成した custom サービスを指定することで上記2つのポートを同時に開放することができます。

以上で独自サービスの定義ファイルの作成は完了です。

firewalldのリロード
#

新しいサービス定義を追加した後は、firewalld に変更内容を読み込ませるためリロードを行う必要があります。

リロードは以下のコマンドで実行可能です。

firewall-cmd --reload

また、systemctl コマンドでもリロードは可能となっております。

systemctl reload firewalld

上記のいずれかのコマンドを実行すると、firewalld が設定を再読み込みし、新しく追加したサービス定義がシステムに反映されます。

追加したサービスの確認
#

設定が完了したら先ほどと同じサービス一覧表示コマンドで custom サービスが含まれているかをチェックしてください。

firewall-cmd --get-services

実行結果の一覧に、新しく custom というサービス名が含まれていれば成功です。

出力を一部抜粋すると次のように表示されます。

condor-collector ctdb custom dhcp dhcpv6 dhcpv6-client distcc dns ...

無事に独自サービスの定義を firewalld に登録することできました!!

作成したサービスは他のサービスと同様に、必要に応じてファイアウォールルールに適用することができます。

ぜひ独自サービスの作成を活用してみてください!

関連記事

【セキュリティ】LinuxでASLRの設定を確認する方法
Linux ASLR セキュリティ AlmaLinux 音声解説あり
【脆弱性確認】RPMファイルを展開してソースコードとパッチを確認する方法
Linux RPM セキュリティ AlmaLinux
【初心者向け解説】SELinuxの状態を確認する方法
Linux SELinux セキュリティ
cyrus-sasl(サイラスサスル)とは
Linux セキュリティ
【初心者向け】flockコマンド入門|Linuxでスクリプトの二重実行を防ぐ
Linux Flock Script
【簡単】Linuxでディレクトリを中身ごと削除する方法
Linux コマンド Rm Rmdir