Red Hat Enterprise Linux 7 (以下、RHEL 7) 以降は、サーバのファイアウォール機能として、iptablesからfirewalldに変更になっている。iptablesの入門記事は、以前以下にて記載している。
自宅の検証用途の場合は、firewalldの設定を省略することが多く、ずっと使うことを避けていたのだが、そろそろ一度使い方を確認してみようと思い、実際にfirewalldの設定手順を確認してみた。
環境
RHEL 7のfirewalldで動作確認を行ったが、CentOSなどのRed Hat系のディストリビューションであれば、操作方法は同じとなる。
なお、今回は入門編ということで、firewalldで着信トラフィックのみ通信許可する設定手順を記載しており、発信トラフィックの設定方法については別途記載することにする。また、ゾーンに関してもデフォルト設定を利用することとし、ゾーンの変更や新規作成は実施しない。
通信許可設定手順
1. firewalldサービスを起動
firewalldの設定を行う際は、firewalldサービスが起動している必要がある。もし停止している場合は、以下の通り起動させておく。
# systemctl enable firewalld
# systemctl start firewalld
2. 設定前確認
firewalldの設定はすべてfirewall-cmd
にて実施する。
まずは、firewall-cmd --get-active-zones
でアクティブになっているゾーンを確認してみよう。以下結果は、インタフェースens192
に対して、public
というゾーンが設定されていることを示している。
# firewall-cmd --get-active-zones
public
interfaces: ens192
次に、アクティブになっているpublic
ゾーンの設定をfirewall-cmd --list-all
で確認してみよう。以下コマンド実行結果のservices
の項目に着目すると、public
ゾーンのデフォルトでは、SSH (22/tcp) とDHCPv6クライアント (546/tcp) のみ通信が許可されていることがわかる。
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
本記事では、public
ゾーンに対して以下通信を許可するための設定手順を記載する。
- NTP (123/tcp, 123/udp)
- Zabbix Agent (10050/tcp)
3. 通信許可設定を追加 (サービス名を指定する場合)
サービス名を使ってルールを設定する場合は、firewall-cmd --add-service=[サービス名]
にて行う。サービス名は/etc/services
から名前を確認する。例えば、NTPのサービス名はntp
となり、123/tcpと123/udpがポート番号として定義されていることがわかる。
# cat /etc/services | grep '^ntp'
ntp 123/tcp
ntp 123/udp # Network Time Protocol
以上をふまえ、以下の通り設定投入を行う。
# firewall-cmd --add-service=ntp
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: ssh dhcpv6-client ntp ★<--ntpが追加
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
【補足】firewalldのランタイムルールとパーマネントルール
firewalldには「ランタイムルール」と「パーマネントルール」の2つがあり、これらの違いを理解しておく必要がある。
ルール | 設定保持 | 設定コマンド | 説明 |
---|---|---|---|
ランタイムルール | × | firewall-cmd |
実際に反映されているルール。スイッチ製品のrunning-config のイメージ。 |
パーマネントルール | ○ | firewall-cmd --permanent |
保存されているルール。スイッチ製品のstartup-config のイメージ。 |
2つのルールがあることによって、firewalldは大きく以下2つの流れで設定できる。
- ランタイムルール設定後、
firewall-cmd --runtime-to-permanent
にてパーマネントルールに反映 - パーマネントルールに設定後、
fiewall-cmd --reload
にてランタイムルールに反映
どちらの設定手順を採用するかについては、好み、流派、状況などによって変わると思うが、設定コマンドがシンプルかつ設定切り戻しが容易なことから、本記事では1つめの「ランタイムルール設定→パーマネントルールに反映」の手順を採用する。
4. 通信許可設定を追加 (ポート番号を指定する場合)
ポート番号ではなく、直接特定のポート番号を指定することも可能となる。今回は、Zabbix Agentで使用する10050/tcpのポートを例として設定することにする。
なお、Zabbix Agentはzabbix-agent
としてサービス名が定義されているので、サービス名による設定も可能となる。
# cat /etc/services | grep '^zabbix-agent'
zabbix-agent 10050/tcp # Zabbix Agent
zabbix-agent 10050/udp # Zabbix Agent
ポート番号を使ってルールを設定する場合は、firewall-cmd --add-port=[ポート番号]/[tcpまたはudp]
にて行う。今回は、10050/tcpでポート番号を指定した。
# firewall-cmd --add-port=10050/tcp
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: ssh dhcpv6-client ntp
ports: 10050/tcp ★<--ポート番号が追加
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
5. パーマネントルールに反映
ランタイムルールは、firewalldやOS再起動を行うと設定が消えてしまうため、ランタイムルールの設定をパーマネントルールに反映することによって設定の保存を行う必要がある。
逆に言えば、ランタイムルールの設定に問題があり設定を切り戻す場合は、fiewall-cmd --reload
にてパーマネントルールを再読み込みさせるだけでよい。
ランタイムルールをパーマネントルールに反映する前に、現在のパーマネントルールの確認をfirewall-cmd --permanent --list-all
にて行う。設定反映前であるため、先ほどランタイムルールに設定したntp
サービスやポート番号の設定が存在しないことがわかる。
# firewall-cmd --permanent --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
firewall-cmd --runtime-to-permanent
にてパーマネントルールへ設定反映を行う。
# firewall-cmd --runtime-to-permanent
success
再度、パーマネントルールを確認すると、以下の通りランタイムルールに設定したルールが反映されていることがわかる。
# firewall-cmd --permanent --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client ntp ★<--ntpが追加
ports: 10050/tcp ★<--ポート番号が追加
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
以上で、firewalldの通信許可設定は完了となる。
firewalldコマンドまとめ
最後に本手順で記載したコマンドを一覧にまとめて記載する。
設定 | コマンド |
---|---|
アクティブとなっているゾーンの確認 | firewall-cmd --get-active-zones |
ランタイムルールの確認 | firewall-cmd --list-all |
パーマネントルールの確認 | firewall-cmd --permanent --list-all |
パーマネントルールに反映 | firewall-cmd --runtime-to-permanent |
パーマネントルールの再読み込み | fiewall-cmd --reload |
ルール追加 (サービス名) | firewall-cmd --add-service=[サービス名] |
ルール追加 (ポート番号) | firewall-cmd --add-port=[ポート番号]/[tcpまたはudp] |
ルール削除 (サービス名) | firewall-cmd --remove-service=[サービス名] |
ルール削除 (ポート番号) | firewall-cmd --remove-port=[ポート番号]/[tcpまたはudp] |
0 件のコメント:
コメントを投稿