CentOS7 から ファイアウォールが iptables から firewalld に変わりました。
ここでは、firewalldの管理操作を、簡単ですが記載しています。
内容としては、CentOS7 にZabbixエージェント(TCP/10050)をインストール・起動している環境で、firewalld で導通できるようにする手順となります。
1.現状の設定確認
まず、firewalldの現状を確認します。
firewalldの起動状態を、systemctlコマンド(systemctl status firewalld)で確認します。
$ sudo systemctl status firewalld firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) Active: active (running) since 月 2015-01-26 13:43:52 JST; 2 months 17 days ago Main PID: 546 (firewalld) CGroup: /system.slice/firewalld.service mq546 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid 1月 26 13:43:52 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon. $
起動している事が確認できましたので、次に進みます。
なお、firewalld では「ゾーン」をインターフェースに割り当てて管理します。
どんな「ゾーン」が用意されているかは、「firewall-cmd –list-all-zones」で確認できます。
出力結果はズラズラと表示されるので、以下省略して記載しています。
$ sudo firewall-cmd --list-all-zones block (省略) dmz (省略) drop (省略) external (省略) home (省略) internal (省略) public (default, active) (省略) trusted (省略) work (省略) $
合計9個の「ゾーン」があります。
出力結果から「public」がデフォルトでアクティブになっているゾーンである事が分かります。
より明示的にアクティブゾーンを確認する際には、「firewall-cmd –get-active-zones」を利用できます。
$ sudo firewall-cmd --get-active-zones public interfaces: ens160 $
publicゾーンが適用されているインターフェース(ここでは ens160)が確認できました。
念のため、インターフェース情報を確認しておきます。
なお、CentOS7からifconfigコマンドの代わりに、nmcliコマンドやipコマンドで関連情報を確認できます。
デバイス情報をnmcliコマンドで確認してみます。
$ nmcli device デバイス タイプ 状態 接続 ens160 ethernet 接続済み ens160 lo loopback 管理無し -- $
publicゾーンが適用されているインターフェース(ens160)が確認できました。
ちなみに、ifconfigと同じような出力は「ip addr show」コマンドで確認できます。
つぎに、publicゾーンのサービス状態を確認します。「firewall-cmd –list-services –zone=public」コマンドを投入します。
$ sudo firewall-cmd --list-services --zone=public dhcpv6-client ssh $
現在は、「dhcpv6-client」と「ssh」が適用されています。
なお、この内容は「/etc/firewalld/zones/public.xml」ファイルでも確認できます。
$ sudo cat /etc/firewalld/zones/public.xml (省略) $
それでは、次はユーザー定義の新規サービス(Zabbixエージェント)を追加する方法となります。
2.新規サービスの追加
ここではCentOS7にZabbixエージェントをインストールした際に、Zabbixサーバ側からZabbixエージェント(ポートは10050/TCP)にアクセスできるようにするための設定を記載しています。
firewalldでデフォルトで用意されているサービス一覧をコマンドで確認できます。
$ sudo firewall-cmd --get-services (省略しますが、多くのサービス一覧が表示されます) $
httpやhttps、smtpなどはデフォルトで用意されています。設定ファイルは「/usr/lib/firewalld/services/」配下にあります。
Zabbixエージェント用の設定ファイルは用意されていないので作成する事にします。
用意する場所は「/etc/firewalld/services」、ファイル名は「zabbix.xml」にして、作成した内容は以下になります。
(デフォルトで用意されている/usr/lib/firewalld/services/http.xml などをコピーして編集すれば楽です)
<?xml version="1.0" encoding="utf-8"?> <service> <short>Zabbix</short> <description>Zabbix Agent</description> <port protocol="tcp" port="10050"/> </service>
TCP/10050 を設定しています。
それでは、publicゾーンにZabbixを追加していきます。
なお、Zabbixエージェントへのアクセス制限などは、サーバとインターネット間にあるFireWallでアクセス元制限をするなど、別途考慮してください。
まず、あらためてpublicゾーンの現状サービスを確認しておきます。
$ sudo firewall-cmd --list-services --zone=public dhcpv6-client ssh $
ここにZabbixを追加する事になります。
「firewall-cmd –add-service=zabbix –zone=public –permanent」で、publicゾーンにZabbixを追加します。
$ sudo firewall-cmd --add-service=zabbix --zone=public --permanent success $
成功すると「success」と出ます。
新規でユーザー定義サービス(Zabbix)を追加したので、リロードします。
$ sudo firewall-cmd --reload success $
再度、publicゾーンのサービス状態を確認すると、Zabbixが追加されている事が確認できます。
$ sudo firewall-cmd --list-services --zone=public dhcpv6-client ssh zabbix $
以上で、インターフェースに適用されているゾーンに、新規でZabbixエージェントのサービスポートを追加する作業が終わりです。
この後、Zabbixマネージャ側からzabbix_getコマンドで導通確認をすると良いかと思います。