Skip to content

CentOS7(RHEL7) Firewalldの基礎の基礎

Posted in CentOS7, and VPS

CentOS7がリリースされて3ヶ月ほど経ちましたが、皆様いかがお過ごしでしょうか・・・。
私も9月から、私用のVPSをCentOS7に変更していじり倒しています。

このCentOS7、なんだかんだでまだネット上に(日本語の)資料が少ないんですよね。
しかも解説しているサイトは詳しすぎて本当に入門の方にはわかりにくそうな内容だったり・・・。

そこで、今回はCentOS7で最初にぶつかるであろうfirewalldについてやんわりと、ふんわりと、解説したいと思います。
firewalldってなんだ?ポート開放までが目標。という方向けの説明です。
ハードル低めなので、どうぞ気楽に読んでみてください。

【firewalldとは?】
iptablesの後継のファイアウォールです。
内部的にはfirewalldがiptablesがゴニョゴニョとか説明されますが、とりあえず動作については知らなくても良いと思います
iptablesと違って、動的にルールを追加することができます。・・・が、特殊な要求が無い場合、これも「ふーん、そうなんだ」くらいに知っておけば良いと思います。

じゃあ何を知っていれば良いの?
「ゾーンと呼ばれるファイルにFWのフィルタ設定を定義しておき、それをNICに割り当てます。」
とりあえずその認識を持っていれば最低限使えると思います。
(後で少し出てきますが、接続元のネットワーク毎にゾーンを変えることもできます)

でもこのゾーン、実はデフォルトで9個も用意されているんです。
「block、dmz、drop、external、home、internal、public、trusted、work」の9つです。
たくさんありすぎてなにそれ怖い。と思いますよね。
でもこれ、一般的に必要になりそうなファイアウォールの設定のテンプレートだと思ってください(ちょっと語弊がありますが)
あくまでテンプレートです。使っても、使わなくても大丈夫です。一応ページの最後で少し詳しく解説しています。

正直なところ大多数の方は、デフォルトに設定されているpublicゾーンに許可するサービスやポートを定義していくだけで十分だと思います。
それだとfirewalldのうまみが半減するのですが、最初はそれで十分です。
このサイトもその方向で解説します。
ただし、面倒だからといってfirewalldを無効にすることは絶対にしないでください。お兄さんとの約束です!

【NICに割り当てられているゾーンを調べる】
publicが割り当てられていると書きましたが、本当にpublicゾーンが適用されているのか調べる必要がありますね。
では下記コマンドを叩いてみましょう。

すると

こんな感じで表示されると思います。
難しいことはありません。
etc0にはpublicというゾーンが割り当たっている。という出力です。

VPSを借りて公開用のサーバを立てている場合、特にこれを変更する必要もないので、publicというゾーンを編集していくことにします。
もし公開サーバじゃない、もしくはサーバがLAN上またはDMZに存在するという場合は、publicのままでもダメなことはないのですが、ページ下部のゾーンの説明をご覧いただき、最適なゾーンを適用することをお薦めします。

【publicの設定を確認する】
次に、ゾーンpublicの初期設定を見ておきましょう。

見ればわかりますが、sshとdhcpv6-clientだけ外->中のパケットが許可されています。
ここに追加したり削除したりしていきましょう。

※/usr/lib/firewalld/zones/にはその他のzoneの初期設定情報があるので、興味ある方は見てください。

【例題1:sshdのポートを変更する】
サーバを建ててまず行うのが、sshdのポート変更という方は大勢いらっしゃると思います。
例えばsshdのポートを12220に変更したとします。その場合は、

こんな感じでOKです。
ここで/etc/firewalld/zones/public.xmlを再度確認してみてください。
設定した内容が反映されているはずです。

【例題2:httpの通信を許可する】
次にhttpアクセスを許可したいとします。その場合は、

ポート番号で許可する場合は–add-port、サービス名で許可する場合は–add-serviceを使います。
定義されているサービス一覧はfirewall-cmd –get-servicesコマンドで確認できます。

登録されていないサービスを追加したい場合、ポート番号だとちょっとわかりにくい・・・と思われる場合、
/usr/lib/firewalld/services/
に定義を作成すれば大丈夫です。
どれか他のサービスをコピーして、それを見ながら作成してみてください。

ここで補足ですが、–permanentをつけると、ゾーンの設定ファイルに情報を反映(再起動後も有効)となります。
逆につけないと設定ファイルに反映はされませんが、–reloadを実行して再読み込みしなくても適用されます(再起動後は無効になります)。
なので、試験的に開放する場合は–permanentなし。ずっと開放する場合はありで設定するようにしてください。

ひとまずCentOS7を体験するだけならここまでで十分だと思います。
ここまでできれば詳しい使い方は、遊びながら覚えられるはず!(丸投げ

ある程度余裕が出てきたら
https://fedoraproject.org/wiki/FirewallD/jp
が参考になります。


代表的なfirewalldの使い方の紹介(詳細な仕様・使用法は上のドキュメントを読んでね!)
【サービス・ポートの開放など】

【ソース(アクセス元のネットワーク)毎に適用ゾーンを設定】

【NICに適用するゾーンを設定】

【その他】

基本的な使い方で良く出てきそうなコマンドでした。
–[set,get,add,remove,change,list]-[service,port,sources]
などなど、–[動作]-[対象]のような形が基本になっています。
こうやって並べてみると、とても覚えやすそうです!


【zoneの解説】
公式サイトの解説はわかりにくいですよね。
それぞれきちんと検証したわけではないのですが、公式の説明を噛み砕いて紹介していますので参考になれば。
drop
外=>サーバへパケットはすべて破棄されます。逆方向のパケットは通るみたいです。
“破棄”なので接続元は何の応答も得られない点がblockと異なります。

block
外=>サーバへのパケットはすべて拒否されます。dropと違い、icmp-host-prohibitedメッセージを返すので、拒否されたことが接続元に通知されます。
システム内で開始されたネットワーク接続のみが可能と説明があったので、サーバから開始した接続であれば接続可能なようです。
下のような感じで、攻撃者なんかのIPアドレスをバンバン放り込んでやりましょう。
firewall-cmd –add-source=255.255.255.255 –zone=block [–permanent]

public
公開エリア用のゾーンです。他のコンピュータを基本的に信頼しない環境での利用が想定されています。
–add-portや–add-serviceで許可した外=>サーバへの接続を受信します。

external
マスカレードが有効なネットワークで推奨されるゾーンです。
基本的にはpublicと同じように許可するportやserviceを選択して利用いきますが、ローカルネットワーク上の他のコンピュータを信頼しない目的で利用するのがworkやhomeなどと異なっています。
publicと同じようにサービスやポートを指定して利用します。

dmz
DMZに配置されたコンピュータ用のゾーンです。
公開アクセス用途で構築したサーバで、DMZに配置されているサーバはこの設定の利用が想定されています。
publicと同じようにサービスやポートを指定して利用します。

work
ネットワーク上の他のコンピュータが信頼できる作業ネットワークでの利用が想定されており、その目的で定義をしていくべきです。
FWがすでにインターネットとの間に存在する、作業用PCはこのゾーンを利用すべきでしょう。
publicと同じようにサービスやポートを指定して利用します。

home
ネットワーク上の他のコンピュータが信頼できるホームネットワークでの利用が想定されており、その目的で定義をしていくべきです。
FWがすでにインターネットとの間に存在する、PCはこのゾーンを利用すべきでしょう。
publicと同じようにサービスやポートを指定して利用します。

internal
ネットワーク上の他のコンピュータが信頼できる内部ネットワークでの利用が想定されており、その目的で定義をしていくべきです。
FWがすでにインターネットとの間に存在する、workやhomeに該当しないPCはこのゾーンを利用すべきでしょう。(例えばsambaサーバとかでしょうか・・・?これの用途は正直よくわかりませんでした。)
publicと同じようにサービスやポートを指定して利用します。

trusted
すべてのネットワーク接続が許可されます。
完全に信頼しているネットワークがある場合は、こちらのゾーンに–add-sourceしても良いかと思います。

事後申告ですいませんが、external、internalはちょっと自信がありません。後日修正するかもしれないです・・

public、external、dmz、work、home、internalにはそれぞれの目的ごとに受信するサービスを定義しておき、必要に応じて–change-interfaceするのがBESTな利用方法ですね。
まぁサーバ立てた時にいちいちpublicに設定しても良いのですが、設定を予め作っておき適用するゾーンを変更するだけで適切なフィルタリングが適用されるというのが旨味なのかと思います。

そんでもってdrop、block、trustedは拒否・許可したい接続元毎に–add-sourceしていく。という使い方を想定しているようですね。

それでは幸せなfirewalldライフを!

One Comment

  1. […] Firewalldは、CentOS7から採用されたiptablesの後継のファイアウォール。 コマンドの使用方法等、詳細は下記。 CentOS7(RHEL7) Firewalldの基礎の基礎 […]

    2015年11月10日

Comments are closed, but trackbacks and pingbacks are open.