Linuxのfirewalldで不正アクセス防止を学ぼう!

eyecatch-linux-firewalld
目次

firewalldとは?

firewalldの概要

Linuxのサーバー構築におけるセキュリティ対策の1つがファイアウォールになります。最近のlinuxにおけるファイアウォールのデファクトスタンダードになりつつある機能です。少なくとも最近のRed Hat系ではiptablesではなくfirewalldが使われています。

続いて特徴を簡単に述べます。ゾーンベースの構成としてネットワークインターフェースを異なる「ゾーン」に割り当てることで、異なるセキュリティレベルを簡単に管理できます。例えば、ホームネットワークとパブリックネットワークで異なるポリシーを適用することが可能です。またサービスベースのフィルタリングが可能で 個々のポート番号だけでなく、サービス名を使ってアクセス制御を行います。

ゾーンの概念

firewalldではゾーンの概念を理解することが重要です。この概念をしっかり理解することで柔軟なファイアウォール設定が可能となります。

firewalldのゾーンは特定のセキュリティレベルを持つ論理的な領域として定義されています。ざくっと言うと用途別のテンプレートみたいなものと言えます。これらのゾーンにはネットワークインターフェースやネットワークソースを割り当てることができ、それに基づいてトラフィック制御を行います。各ゾーンには特定のルールセットがあり、許可されるサービス、ポート、プロトコルなどが設定されています。文章では伝えにくいので具体的なゾーンを紹介します。参考にしたサイトはこちらです。

ゾーン説明
trustedすべてのトラフィックを許可します。信頼できるネットワークに使用します。
home信頼できるネットワーク(家庭内ネットワーク)用。ほとんどのトラフィックを許可しますが、信頼度の低いトラフィックはブロックします。
work仕事用のネットワーク用。安全性と柔軟性のバランスが取れています。
public公共のネットワーク用。ほとんどのトラフィックをブロックし、基本的なインターネットアクセスのみを許可します。
blockすべての着信トラフィックをブロックし、返信トラフィックのみを許可します。
dmz非武装地帯用。公開するサービスのみを許可し、他のすべてのトラフィックをブロックします。
dropすべての着信トラフィックをドロップし、返信も送信もしません。

またfirewalldのデフォルトゾーンは、特定のゾーンが明示的に指定されていないトラフィックやインターフェースに適用されるゾーンです。デフォルトゾーンはユーザーの要件に応じて変更することが可能です。デフォルトゾーンの設定は非常に重要で、何も指定されていない場合のセキュリティポリシーを決定します。例えば、家庭内ネットワークでは許可されるトラフィックが多く設定されている一方で、公共のネットワークでは制限が厳しくなるように設定することができます。

firewalldの基本的な使い方

前提

ubuntu 20.04.3 LTS

動作確認

firewalldの動作を確認するコマンドです。systemctl status firewalldを実行しても現在の状態を確認することが可能です。

firewall-cmd --state
running

ゾーンの確認

オプションに--get-active-zonesを指定することでアクティブなゾーンを確認することができます。。下の例ではeth0インターフェースがpublicゾーンに、wlan0インターフェースがhomeゾーンに割り当てられていることを示しています。

firewall-cmd --get-active-zones
public
  interfaces: eth0
home
  interfaces: wlan0

一方、オプションに--get-default-zoneを指定することでデフォルトのゾーンを確認することができます。

firewall-cmd --get-default-zone
public

なお、アクティブゾーンとデフォルトゾーンは下記のような違いがあります。

項目アクティブゾーン デフォルトゾーン
定義現在アクティブなインターフェースに割り当てられているゾーン。新しいインターフェースや特定のゾーンが指定されていないトラフィックに適用されるゾーン。
用途実際に使用中のネットワークインターフェースごとのセキュリティ設定を示す。デフォルトで適用されるセキュリティポリシーを決定。

オプションにfirewall-cmd --list-allを指定すると現在のファイアウォールの設定を確認することができます。確認すべき項目は7行目のservicesと8行目のportsになります。

firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ftp http https
  ports: 2222/tcp 10000-10100/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

設定コマンド

特定のゾーンに対して設定を追加していきます。

--add-portでポート開放設定を、--add-serviceでサービスの追加設定をすることができます。設定の削除ですが、サービスの設定削除は--remove-serviceオプションで、ポート開放の設定解除はオプションで実行することができます。

なお、--permanentを指定しないと再起動時に設定が戻ってしまうので注意してください。設定を恒久的に反映させるためにはfirewall-cmd --reloadを実行します。

firewall-cmd --add-port=2222/tcp --zone=public --permanent
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --remove-service=ssh --zone=public --permanent
firewall-cmd --remove-port=8080/tcp --zone=public --permanent 
firewall-cmd --reload

まとめ

本記事ではfirewalldの基本的な使い方を解説しました。ゾーンの考え方を意識して設定するので少し慣れが必要ですが、慣れればある程度サクッと設定ができるのではないかと思います。ここで紹介した内容をもとにぜひlinuxのセキュリティを万全にしてくださいね。

参考

Firewalldの設定方法

【丁寧解説】Linuxのファイアウォール firewalld の使い方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Hack Luck Labの管理人hakula(ハクラ)です。2012年にSIerに新卒入社し、SE、新規事業、情シスを担当。その後、ITコンサルを経て、現在はバックエンドエンジニア。過去にはC#、SQL Server、JavaScriptで開発を行い、現在はPython、Rest Framework、Postgresql、Linux、AWSなどを使用しています。ノーコードツールやDX関連も興味あり。「技術は価値を生むために使う」ことが信条で、顧客や組織への貢献を重視しています。

目次