Help us understand the problem. What is going on with this article?

RHEL/CentOS7ではiptablesではなくfirewalld

More than 1 year has passed since last update.

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の方が捜査しやすいのかと思います。
ようはこういうのは慣れだと思うので、どんどん使っていくに越したことはないのかなと思ってます^^

varusan
都内近辺でSREをやっております。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした