Edited at

RHEL/CentOS7ではiptablesではなくfirewalld


firewalldの基礎基本

今更なのですが、RHEL/CentOS 7系からOSのファイアウォールはiptablesからfirewalldへと変更されています。

知らなかったわけではないのですが、今までちゃんと使う機会がなかった(それもどうかと思うけれど)ので、

今回、備忘録ってことで基本的な部分をおさらいしてみました。

(ちなみに、7系でも従来のiptablesも利用することもできますが、firewalldが RHEL 7のデフォルトとなっているということで。)


まずはステータス確認

RHEL/CentOS 7系ではsystemdコマンドが採用されています。つまり、サービスの起動・停止方法も従来とは異なっているということですね。

とりあえず、ファイアウォールが今activeかどうかを確認してみましょう。

下記のコマンドで確認することができます、



$ systemctl status firewalld





Active: active (exited)



と帰ってきたら起動されているということですね。

起動・停止は下記コマンドです。



起動

$ systemctl start firewalld

停止

$ systemctl stop firewalld


通信を許可しているかの確認

まずは、どんな設定が入っているかを確認する必要があります。

firewalldでは、ゾーンという単位で設定が定義されます。

このゾーンとNICが紐づくことで、設定が有効になります。

すべてのゾーンの情報を見る

$ firewall-cmd --list-all-zones

それぞれのゾーンによって情報が表示されているのがわかるかと思います。

さて、それぞれのゾーンに設定されているサービスを確認するコマンドは以下になります。

$ firewall-cmd --zone=public --list-services --permanent

サービス名が表示されますね。表示されたサービス名のポートが空いているということですね。


ゾーンにサービスを追加する

さて、この指定のゾーンにサービスを追加するには下記のようにします。

今回は、例としてhttpのサービスをpublicゾーンに追加します。

コマンドは以下のようになります。

$ firewall-cmd --add-service=http --zone=public --permanent

引数に--permenentをつけないと、firewalldを再起動した際に設定が元に戻ってしまいます

さて、今回はhttpとしましたが、実際にはこれが3000番ポートだったり8080番だったりするわけです。

このサービスの設定ファイルの実態は下記ディレクトリにあります。

/usr/lib/firewalld/services

このディレクトリにサービス名のファイルが格納されています。

このサービス名のファイルを



/etc/firewalld/services



に追加すると、優先して使用されるようになります。

なので、httpを8000番ポートで使用したいとすると、

# コピ-

cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/http.xml

# 編集
vi /etc/firewalld/services/http.xml

 <?xml version="1.0" encoding="utf-8"?>

<service>
<short>WWW (HTTP)</short>
<description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server
publicly available, enable this option. This option is not required for viewing pages locally or
developing Web pages.</description>
# <port protocol="tcp" port="80"/>
<port protocol="tcp" port="8000"/>
</service>

みればわかるように、8000番に書き換えます。

そして最後にリロードすると、設定が反映されます。

$ systemctl reload firewalld


ちなみにiptablesも使える

ちなみに、firewalldというコマンドの実態は実は単なる管理インターフェースだったりする。なので、その裏ではiptablesがちゃっかり動いているのだ。

なので、実際の結果をみたいとかいうときには、iptablesのコマンドでも確認することができる。

おなじみの、あのコマンド。



$ iptables-save

これで今現在どのように管理されているかを確認することができる。

個人的にはiptablesよりもfirewalldの方が楽だなあと思った次第ですが、

今までの管理に慣れている人はやっぱりiptablesの方が捜査しやすいのかと思います。

ようはこういうのは慣れだと思うので、どんどん使っていくに越したことはないのかなと思ってます^^