Firewalldサービスの設定

OS7系よりiptablesではなくfirewalldの利用が推奨されています。
iptablesもインストールされていますが、デフォルトでは無効化されています。

firewalldの稼働状況確認

# firewall-cmd --state

インストールされていない場合インストールする。

# yum install firewalld

NetworkManager管理環境で後からfirewalldをインストールした場合、管理の競合が発生する場合があるため、
NetworkManagerを再起動しておく。

firewalldではzoneという単位でセキュリティグループを定義しています。
セキュリティグループにNICを登録する事でポリシーの定義、管理を簡単に行えるようにしています。

zone名 ex
drop 着信ネットワークパケットはすべて遮断され、返信されません。送信ネットワーク接続のみが可能です。
block IPv4 では icmp-host-prohibited メッセージで、IPv6 では icmp6-adm-prohibited メッセージですべての着信ネットワーク接続が拒否されます。システム内で開始されたネットワーク接続のみが可能です。
public 公開エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。
external マスカレードを特別にルーター用に有効にした外部ネットワーク上での使用向けです。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。
dmz 公開アクセスが可能ではあるものの、内部ネットワークへのアクセスには制限がある非武装地帯にあるコンピューター用。選択された着信接続のみが許可されます。
work 作業エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
home ホームエリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
internal 内部ネットワーク用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
trusted すべてのネットワーク接続が許可されます。

LANに接続しているNICがデフォルトでどのzoneに登録されているかを確認。

# firewall-cmd --get-zone-of-interface=${INTERFACE_NAME}

アクティブなzoneとNICを一括で表示

# firewall-cmd --get-active-zones

NICの登録ゾーンを変更する場合はnmcliコマンドで設定する。

# nmcli c mod "eth0" connection.zone public
# nmcli c up eth0
# nmcli -p con show "eth0"

デフォルトで利用されるzoneの情報は下記設定ファイルで管理されています。
コマンドで変更する場合

# firewall-cmd --set-default-zone=public
# vim /etc/firewalld/firewalld.conf
DefaultZone=public

手動で変更した場合はfirewalldを

# firewall-cmd --reload

または

# firewall-cmd --complete-reload

を実行して反映させます。

firewalldコマンドで操作、変更した内容を永続的にするには、
--directコマンド(これらは元々一時的なもの)を除いてすべてのコマンドに--permanent オプションを追加します。
こうすると変更が永続的になるだけではなく、変更はファイアウォールのリロード、サービスの再起動、
もしくはシステムの再起動後にのみ適用されることに注意してください。
--permanentオプションなしでfirewall-cmd を使って設定すると、
変更は即座に適用されますが、これが有効なのはファイアウォールがリロードされる、システム再起動、
またはfirewalldサービスが再起動されるまでになります。
ファイアウォールのリロード自体は接続を切断しませんが、一時的な変更が破棄されることに注意してください。

ポリシーの登録

firewalldのポリシーは基本的にINに対するポリシーを管理します。
まずzoneにデフォルトでどのようなポリシーが設定されているか確認します。

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

許可ポートの追加

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

レンジで登録したい場合は下記のように指定
-add-port=5060-5061/udp

登録されると一覧が下記のように見えます。
ports: 80/tcp

許可サービスの追加
ポートやポートレンジをサービスとして登録し、サービスの許可、拒否という管理も行えます。

# firewall-cmd --zone=public --add-service=smtp

現在登録されているサービスの確認

# firewall-cmd --get-services
dhcpv6-client ssh

登録したサービスを削除したい場合

--remove-service=smtp

firewall経由でiptablesにはどのように設定されているかを確認しておく。

# iptables -nL

内容を確認してみると、チェインを細分化し管理している事がわかる。
***_publicと書いてあるのが基本操作で設定するチェイン ***_public_****の内容をインクルードしており、
基本のサービスやポート登録、リッチルールはここで管理されている。
それらを***_IN_ZONEでインクルードして、
さらにそれをOUTPUT,INPUTチェインにインクルードしてゾーンごとに管理している

後述する****_directだけ直接INPUTに等に配置されている。

リッチルール

サービスやポート単位の許可・拒否ではなく細かく制御したいときに利用できるルールを作成できます。
制御できるのは通常どおりINに対するアクセスのみになります。

リッチルールの基本書式

firewall-cmd [--permanent] --add-rich-rule    = ルール(追加)[––timeout=(seconds)]
firewall-cmd [--permanent] --remove-rich-rule = ルール(削除)[––timeout=(seconds)]

定義内容の確認

# firewall-cmd --list-rich-rules

定義例

# firewall-cmd --add-rich-rule="rule family=ipv4 source address=1.0.16.0/20 service name=https accept"

iptablesの定義方法と似ているが、ゾーンの概念があり送信元やポートに対してアクセスを制御できる。

ダイレクトルール

firewalldを経由してiptablesに直接定義を記述するようにルールを作成できる。
基本挙動とちがいOUTに対するルールも作成できる。

書式

firewall-cmd [--permanent] --direct --add-rule {ipv4|ipv6|eb} <テーブル> <チェイン> <優先順位> <引数>(追加)
firewall-cmd [--permanent] --direct --remove-rule {ipv4|ipv6|eb} <テーブル> <チェイン> <優先順位> <引数>(削除)

定義例

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT_direct 2 -j DROP
# firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT_direct 1 -s 0.0.0.0 -p tcp -m state --state NEW --dport 22 -j ACCEPT

iptablesライクに定義を行う事が出来るので、iptablesからも乗り換えられるようにできている。
これであればiptablesを使ったほうが便利なような気はする。。。

iptablesと違い初期化が無いため追加と削除は別々に行なわなければならないが、 XML形式で記述する事でiptables時と同様にポリシーを簡単に管理、配布する事が出来る。

# vim /etc/firewalld/direct.xml
<?xml version="1.0" encoding="utf-8"?>
<direct>
  <!-- default rule -->
  <rule priority="2" table="filter" ipv="ipv6" chain="INPUT_direct">-j DROP</rule>
  <rule priority="2" table="filter" ipv="ipv4" chain="OUTPUT_direct">-j DROP</rule>
  <rule priority="2" table="filter" ipv="ipv6" chain="OUTPUT_direct">-j DROP</rule>
  <rule priority="2" table="filter" ipv="ipv4" chain="FORWARD_direct">-j DROP</rule>
  <rule priority="2" table="filter" ipv="ipv6" chain="FORWARD_direct">-j DROP</rule>
  <!-- ssh -->
  <rule priority="1" table="filter" ipv="ipv4" chain="INPUT_direct">-s 59.159.73.35 -p tcp -m state --state NEW --dport 22 -j ACCEPT</rule>
</direct>

ルールの管理

firewalldではゾーンポリシー、リッチルール、ダイレクトルールがそれぞれ有効に動きます。
そのため定義の管理やルールの内容、適応順序はiptable -nL等でしっかり把握しておく必要があります。

またデフォルトポリシーはDROPではありません。

操作ロック

他root実行されているアプリケーションからfirewallの設定を変更されたくない場合ロックすることが可能

ロック状態の確認

# firewall-cmd --query-lockdown

ロックの有効化、無効化

# firewall-cmd --lockdown-on
# firewall-cmd --lockdown-off

results matching ""

    No results matching ""