Web事業部実績紹介
Web事業部実績紹介
2017.06.30
#24
バックエンドへの道

もえよfirewalld 〜基本操作を学んでみた〜

TK

TK です。
『エロマンガ先生』がとても面白いんですが、「見ている」って口に出して言いづらいんですよね、このタイトル。

さて、今年度からフロントエンドエンジニアからバックエンドエンジニア(自称)にジョブチェンジしました。 バックエンドエンジニアとしてのキャリアがほとんど無いので、怖い先輩達からありがたいご指導を受けながらながら日々精進しております。

先日、はじめて CentOS 7 でサーバ環境を構築していたのですが「あれっ? iptables は!?」と、まんまとハマってしまいました。

この記事を読んでいれば、無駄な時間を使わずに済んだのになぁ。。。

あぁ、やっぱり LIG ブログは普段からチェックしておかなきゃダメだなぁと思いつつ、自分なりに firewalld について調べた内容をまとめておこうと思います。

 

fierwalldの概要

firewalld はファイアウォールのフロントエンド(ユーザインターフェイス部分)のひとつです。

フロントエンドを利用することで、ファイアウォールの複雑な設定が必要な場合でも人間らしく設定することができるのです。

 

個人的にへぇっと思った特徴

1. 動的

firewalld はサービスやデーモンの再起動を行う事なく動的な設定の変更が可能です。

「特定の時間だけファイアウォールの設定を変更したい」「一時的に変更を加えたい」などの柔軟な運用フローを実現できます。

 

2. ゾーン

firewalld では「ゾーン」という概念があり、フィルタリングの設定を定義したゾーンを準備しておき、各 NIC ポートへ割り当てするのです。

ゾーンは要件に合わせて独自に設定する事もできますが、あまり複雑でない内容であればデフォルトで定義されているゾーンをベースに設定しても問題なさそうです。

 

3. Python

firewalld のソースコードは Python で書かれています。胸熱ですね。

公式リポジトリが Github で公開されているので 興味がある方はぜひ覗いてみると知的欲求が満たされるかと思います。

 

基本的な使い方

1. firewalld サービスの操作

ヤスタカ先輩の記事にもあるように、 CentOS 7 ではサービスの操作は systemctl でおこないます。

 

firewalld の起動

systemctl start firewalld

firewalld の停止

systemctl stop firewalld

firewalld のサービス自動起動ON

systemctl enable firewalld

firewalld のサービス自動起動OFF

systemctl disable firewalld

2. ファイアウォールの確認

ファイアウォールの設定変更は firewall-cmd でおこないます。

アクティブなゾーンを確認する

ゾーンの割り当てされている NIC ポートの確認ができます。

firewall-cmd ––get-active-zones

デフォルトで割り当てられるゾーンを確認する

特に割り当てがされていない NIC ポートはこちらのゾーンが割り当てされます。

firewall-cmd ––get-default-zone

デフォルトゾーンのフィルタ内容を確認する

firewall-cmd ––list-all

指定ゾーンのフィルタ内容を確認する

(publicの内容を確認する場合)

firewall-cmd ––list-all ––zone=public

すべてのゾーンを確認する

定義されているゾーンとそのフィルタ内容を一覧で確認できます。

firewall-cmd ––list-all-zones

 

3. ゾーンのフィルタ内容を設定

ひととおりゾーンやフィルタの確認のできたら、次は要件に合わせてサービス・ポート・IPなどの追加・削除をおこないます。

サービス

登録できるサービスを確認する

firewall-cmd ––get-services

指定ゾーンへ指定サービスを追加する

(publicにhttpを追加したい場合)

firewall-cmd ––add-service=http ––zone=public

指定ゾーンから指定サービスを削除する

(publicからhttpを削除したい場合)

firewall-cmd ––remove-service=http ––zone=public

ポート

指定ゾーンへ指定ポートを追加する

(publicから80/tcpを追加したい場合)

firewall-cmd ––add-port=80/tcp ––zone=public

指定ゾーンから指定ポートを削除する

(publicから80/tcpを削除したい場合)

firewall-cmd ––remove-port=80/tcp ––zone=public

IP

指定ゾーンへ指定IPを追加する

(publicから192.168.0.0/24を追加したい場合)

firewall-cmd ––add-source=192.168.0.0/24 ––zone=public

指定ゾーンから指定IPを削除する

(publicから192.168.0.0/24を削除したい場合)

firewall-cmd ––add-source=192.168.0.0/24 ––zone=public

4. ゾーンの割り当て

ゾーンの割り当て

(ens0にpublicを割り当てたい場合)

firewall-cmd ––zone=public ––change-interface=ens0

デフォルトゾーンの割り当て

(publicをデフォルトゾーンとして割り当てたい場合)

firewall-cmd ––set-default-zone=public

 

5. 恒久的な変更

上記の設定変更は、再起動などおこなうとリセットされてしまいます。もしも恒久的に設定してしまいたい場合は permanent オプションを追加し、reload を実行する必要があります。

恒久的なゾーンの割り当て

(ens0にpublicを割り当てたい場合)

firewall-cmd ––zone=public ––change-interface=ens0 ––permanentfirewall-cmd ––reload

 

まとめ

調べているうちにふと気づいてしまったのですが、 firewalld って擬人化すると炎髪灼眼のツンデレ美少女だと思うんですよね、絶対。
「うるさいっうるさいっうるさ〜いっ!こんなリクエスト受け付けないんだからっ!」とか言いそうじゃないですか?

そのことに気づいてからは、もっと firewalld と仲良くなりたいなと思うようになりました。はぁ……firewalldたん……。

みなさんも firewalld たんと仲良くなって、セキュリティに強いエンジニアになりましょう。

 

(誰か擬人化イラスト描いてくれないかなぁ……)