Linuxサーバーを運用するうえで、ファイアウォールの設定は最も重要なセキュリティ対策の一つです。適切なLinuxファイアウォール設定を行うことで、不正アクセスや攻撃からサーバーを保護できます。

本記事では、Linuxファイアウォールの基礎知識から、主要な3つのファイアウォールツールの使い方を解説します。

  • ファイアウォールの役割と基本概念
  • iptablesの基本操作とルール設定
  • firewalld(CentOS/RHEL系)のゾーンベース設定
  • ufw(Ubuntu系)のシンプルな設定方法
  • よくあるセキュリティ設定例

この記事を読むことで、基本的なファイアウォールルールを設定し、サーバーを保護できるようになります。

前提条件

本記事を理解するために、以下の知識があることを前提としています。

実行環境

本記事で使用するコマンドは以下の環境で動作確認を行っています。

項目 環境
OS Ubuntu 22.04/24.04、Rocky Linux 9、Debian 12
iptables iptables 1.8.x
firewalld firewalld 1.x以降
ufw ufw 0.36以降
権限 root権限(sudo)が必要

期待される学習成果

本記事を読み終えると、以下のことができるようになります。

  1. ファイアウォールの基本概念(テーブル、チェイン、ルール)を理解できる
  2. iptablesで基本的なパケットフィルタリングを設定できる
  3. firewalldでゾーンベースのファイアウォールを管理できる
  4. ufwでシンプルにファイアウォールを設定できる
  5. Webサーバーやデータベースサーバーなど、用途に応じたセキュリティ設定ができる

Linuxファイアウォールの基本概念

Linuxファイアウォールは、カーネルに組み込まれたNetfilterというフレームワークを基盤としています。iptables、firewalld、ufwはいずれもNetfilterを操作するためのフロントエンドツールです。

ファイアウォールの役割

ファイアウォールは、ネットワーク通信を監視し、設定されたルールに基づいてパケットを許可または拒否します。主な役割は以下のとおりです。

  • 不正アクセスからサーバーを保護する
  • 許可されたサービスのみ外部に公開する
  • ネットワークトラフィックを制御する
  • ログを記録して監査に活用する

Netfilterのアーキテクチャ

Netfilterは、パケットがLinuxシステムを通過する際の複数のポイント(フック)で処理を行います。

flowchart TB
    subgraph Internet["インターネット"]
        EXT[外部ネットワーク]
    end
    
    subgraph Netfilter["Netfilter フレームワーク"]
        PREROUTING[PREROUTING<br/>ルーティング前処理]
        INPUT[INPUT<br/>ローカル宛パケット]
        FORWARD[FORWARD<br/>転送パケット]
        OUTPUT[OUTPUT<br/>ローカル発信パケット]
        POSTROUTING[POSTROUTING<br/>ルーティング後処理]
    end
    
    subgraph Local["ローカルプロセス"]
        PROC[アプリケーション<br/>Webサーバー/DBなど]
    end
    
    EXT --> PREROUTING
    PREROUTING --> |ローカル宛| INPUT
    PREROUTING --> |転送| FORWARD
    INPUT --> PROC
    PROC --> OUTPUT
    OUTPUT --> POSTROUTING
    FORWARD --> POSTROUTING
    POSTROUTING --> EXT

テーブルとチェインの概念

iptablesは「テーブル」と「チェイン」という階層構造でルールを管理します。

主要なテーブル

テーブル 用途
filter パケットのフィルタリング(許可/拒否)、デフォルトのテーブル
nat ネットワークアドレス変換(NAT)、ポートフォワーディング
mangle パケットの特殊な加工(TTL変更など)
raw 接続追跡の除外設定

主要なチェイン(filterテーブル)

チェイン 処理対象
INPUT サーバー宛の受信パケット
OUTPUT サーバーから送信するパケット
FORWARD サーバーを経由して転送されるパケット

各ファイアウォールツールの特徴

Linuxでは複数のファイアウォールツールが利用可能です。それぞれの特徴を理解し、環境に適したツールを選択してください。

ツール 主な用途 特徴
iptables 全ディストリビューション 低レベルで細かい制御が可能、学習コスト高め
firewalld RHEL/CentOS/Rocky Linux ゾーンベース、動的な設定変更が可能
ufw Ubuntu/Debian シンプルなインターフェース、初心者向け
nftables 最新のディストリビューション iptablesの後継、より効率的

iptablesの基本操作

iptablesはLinuxファイアウォールの基本となるツールです。他のツール(firewalldやufw)も内部的にiptablesやnftablesを使用しているため、iptablesの概念を理解することは重要です。

現在のルールを確認する

現在設定されているiptablesルールを確認するには、-Lオプションを使用します。

1
2
3
4
5
# 現在のルールを表示(filterテーブル)
sudo iptables -L

# 詳細表示(パケット数、バイト数、行番号付き)
sudo iptables -L -n -v --line-numbers

出力例を以下に示します。

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

各オプションの意味は以下のとおりです。

オプション 説明
-L ルールを一覧表示
-n IPアドレスとポートを数値で表示(DNS解決しない)
-v 詳細情報(パケット数、バイト数)を表示
–line-numbers ルール番号を表示

ルールの追加

iptablesでルールを追加するには、-A(Append)オプションを使用します。

1
2
3
4
5
6
7
8
# SSH(ポート22)を許可
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP(ポート80)を許可
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# HTTPS(ポート443)を許可
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

コマンドの構造を分解すると以下のようになります。

部分 説明
-A INPUT INPUTチェインにルールを追加
-p tcp プロトコルをTCPに指定
–dport 22 宛先ポートを22に指定
-j ACCEPT パケットを許可

特定のIPアドレスからの接続を制御する

送信元IPアドレスを指定してルールを作成できます。

1
2
3
4
5
6
7
8
# 特定のIPアドレスからの接続を許可
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT

# 特定のIPアドレスからの接続を拒否
sudo iptables -A INPUT -s 10.0.0.50 -j DROP

# サブネット全体を許可
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

ルールの削除

ルールを削除するには、-Dオプションを使用します。

1
2
3
4
5
# ルール番号を指定して削除
sudo iptables -D INPUT 3

# ルールの内容を指定して削除
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT

デフォルトポリシーの設定

デフォルトポリシーは、どのルールにもマッチしなかったパケットの処理を決定します。セキュリティを高めるには、デフォルトでDROPに設定し、必要な通信のみ許可する方式(ホワイトリスト方式)を推奨します。

1
2
3
4
# デフォルトポリシーをDROPに設定
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

デフォルトポリシーをDROPに変更する前に、SSH接続を許可するルールを追加してください。そうしないと、リモートからの接続が遮断されます。

ステートフルファイアウォールの設定

接続追跡(conntrack)モジュールを使用して、確立済みの接続を自動的に許可できます。

1
2
3
4
5
6
7
8
# 確立済みの接続と関連する接続を許可
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# ローカルホスト(loopback)からの通信を許可
sudo iptables -A INPUT -i lo -j ACCEPT

# 無効なパケットを拒否
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

ルールの保存と永続化

iptablesのルールは再起動すると消えてしまいます。永続化するには、ルールをファイルに保存します。

1
2
3
4
5
# 現在のルールを保存
sudo iptables-save > /etc/iptables/rules.v4

# 保存したルールを復元
sudo iptables-restore < /etc/iptables/rules.v4

Ubuntu/Debianではiptables-persistentパッケージを使用すると、起動時に自動的にルールが読み込まれます。

1
2
3
4
5
# iptables-persistentのインストール
sudo apt install iptables-persistent

# ルールの保存(インストール後)
sudo netfilter-persistent save

基本的なiptables設定の例

Webサーバー用の基本的なiptables設定例を以下に示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
# Webサーバー用iptables設定スクリプト

# 既存のルールをクリア
sudo iptables -F
sudo iptables -X

# デフォルトポリシーを設定
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# ローカルホストの通信を許可
sudo iptables -A INPUT -i lo -j ACCEPT

# 確立済みの接続を許可
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# SSH(ポート22)を許可
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP(ポート80)を許可
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# HTTPS(ポート443)を許可
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# ICMPを許可(ping応答)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# ルールを保存
sudo iptables-save > /etc/iptables/rules.v4

echo "iptablesの設定が完了しました"

firewalldの設定(CentOS/RHEL系)

firewalldは、RHEL、CentOS、Rocky Linux、Fedoraなどで標準的に使用されるファイアウォール管理ツールです。「ゾーン」という概念を使用して、ネットワークの信頼レベルに応じた設定を行えます。

firewalldの基本概念

firewalldはゾーンベースのファイアウォールです。各ゾーンには信頼レベルが設定されており、ネットワークインターフェースやIPアドレスをゾーンに割り当てて管理します。

flowchart TB
    subgraph Zones["firewalld ゾーン"]
        DROP[drop<br/>すべて拒否]
        BLOCK[block<br/>拒否応答あり]
        PUBLIC[public<br/>公開ネットワーク]
        EXTERNAL[external<br/>外部ネットワーク]
        DMZ[dmz<br/>非武装地帯]
        WORK[work<br/>職場]
        HOME[home<br/>自宅]
        INTERNAL[internal<br/>内部ネットワーク]
        TRUSTED[trusted<br/>すべて許可]
    end
    
    LOW[低信頼度] --> DROP
    DROP --> BLOCK
    BLOCK --> PUBLIC
    PUBLIC --> EXTERNAL
    EXTERNAL --> DMZ
    DMZ --> WORK
    WORK --> HOME
    HOME --> INTERNAL
    INTERNAL --> TRUSTED
    TRUSTED --> HIGH[高信頼度]

firewalldの起動と状態確認

firewalldのサービス管理はsystemctlで行います。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# firewalldの状態確認
sudo systemctl status firewalld

# firewalldを起動
sudo systemctl start firewalld

# firewalldを停止
sudo systemctl stop firewalld

# 自動起動を有効化
sudo systemctl enable firewalld

# 自動起動を無効化
sudo systemctl disable firewalld

firewalldの状態はfirewall-cmdコマンドでも確認できます。

1
2
3
4
5
# firewalldの実行状態を確認
sudo firewall-cmd --state

# 現在の設定を一覧表示
sudo firewall-cmd --list-all

ゾーンの管理

デフォルトゾーンの確認と変更を行います。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# デフォルトゾーンを確認
sudo firewall-cmd --get-default-zone

# デフォルトゾーンを変更
sudo firewall-cmd --set-default-zone=public

# 利用可能なゾーン一覧を表示
sudo firewall-cmd --get-zones

# 特定のゾーンの設定を表示
sudo firewall-cmd --zone=public --list-all

サービスの許可

firewalldでは、サービス名を指定して簡単にポートを開放できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# HTTPサービスを許可(一時的)
sudo firewall-cmd --add-service=http

# HTTPSサービスを許可(永続的)
sudo firewall-cmd --add-service=https --permanent

# 設定を反映(permanentオプション使用後に必要)
sudo firewall-cmd --reload

# 許可されているサービスを確認
sudo firewall-cmd --list-services

利用可能なサービスの一覧は以下のコマンドで確認できます。

1
2
# 定義済みサービスの一覧
sudo firewall-cmd --get-services

ポートの許可

サービスとして定義されていないポートは、直接ポート番号を指定して開放します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ポート8080/tcpを許可(永続的)
sudo firewall-cmd --add-port=8080/tcp --permanent

# ポート範囲を許可
sudo firewall-cmd --add-port=3000-3010/tcp --permanent

# 設定を反映
sudo firewall-cmd --reload

# 許可されているポートを確認
sudo firewall-cmd --list-ports

IPアドレスによるアクセス制御

特定のIPアドレスからの接続を許可または拒否できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 特定のIPアドレスからSSHを許可(リッチルール)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent

# 特定のIPアドレスからの全接続を拒否
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.50" reject' --permanent

# サブネットからの接続を許可
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent

# リッチルールの確認
sudo firewall-cmd --list-rich-rules

# 設定を反映
sudo firewall-cmd --reload

サービスの削除

許可したサービスやポートを削除する場合は、--remove-プレフィックスを使用します。

1
2
3
4
5
6
7
8
# サービスの許可を削除
sudo firewall-cmd --remove-service=http --permanent

# ポートの許可を削除
sudo firewall-cmd --remove-port=8080/tcp --permanent

# 設定を反映
sudo firewall-cmd --reload

ランタイム設定とパーマネント設定

firewalldには2種類の設定があります。

設定タイプ 説明
ランタイム 即座に反映されるが、再起動で消える
パーマネント 再起動後も永続するが、--reloadが必要
1
2
3
4
5
6
7
8
# ランタイム設定(--permanentなし)
sudo firewall-cmd --add-service=http

# パーマネント設定
sudo firewall-cmd --add-service=http --permanent

# ランタイム設定をパーマネントに保存
sudo firewall-cmd --runtime-to-permanent

firewalld設定例:Webサーバー

Webサーバー用のfirewalld設定例を以下に示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
# Webサーバー用firewalld設定スクリプト

# firewalldが起動していることを確認
sudo systemctl start firewalld
sudo systemctl enable firewalld

# デフォルトゾーンをpublicに設定
sudo firewall-cmd --set-default-zone=public

# SSH、HTTP、HTTPSを許可
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent

# 管理用ネットワークからのみ特定ポートを許可
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent

# 設定を反映
sudo firewall-cmd --reload

# 設定を確認
sudo firewall-cmd --list-all

echo "firewalldの設定が完了しました"

ufwの設定(Ubuntu系)

ufw(Uncomplicated Firewall)は、Ubuntu向けに開発されたシンプルなファイアウォール設定ツールです。内部的にはiptablesを使用していますが、より直感的なコマンド体系を提供します。

ufwの有効化と無効化

ufwはデフォルトでは無効になっています。まず有効化が必要です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ufwの状態を確認
sudo ufw status

# ufwを有効化
sudo ufw enable

# ufwを無効化
sudo ufw disable

# 詳細な状態を確認
sudo ufw status verbose

ufwを有効化すると、SSH接続が遮断される可能性があります。リモートで作業している場合は、先にSSHを許可してください。

1
2
3
# SSHを許可してから有効化
sudo ufw allow ssh
sudo ufw enable

デフォルトポリシーの設定

ufwのデフォルトポリシーを設定します。

1
2
3
4
5
# 受信をデフォルトで拒否
sudo ufw default deny incoming

# 送信をデフォルトで許可
sudo ufw default allow outgoing

サービス名でのポート許可

ufwでは、サービス名を使用して簡単にポートを許可できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# SSHを許可
sudo ufw allow ssh

# HTTPを許可
sudo ufw allow http

# HTTPSを許可
sudo ufw allow https

# 利用可能なアプリケーションプロファイルを確認
sudo ufw app list

ポート番号での許可

ポート番号を直接指定することも可能です。

1
2
3
4
5
6
7
8
# ポート8080を許可
sudo ufw allow 8080

# ポート8080/tcpのみ許可
sudo ufw allow 8080/tcp

# ポート範囲を許可
sudo ufw allow 3000:3010/tcp

IPアドレスによるアクセス制御

特定のIPアドレスからの接続を制御できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 特定のIPアドレスからの全接続を許可
sudo ufw allow from 192.168.1.100

# 特定のIPアドレスから特定ポートへの接続を許可
sudo ufw allow from 192.168.1.100 to any port 22

# サブネットからの接続を許可
sudo ufw allow from 192.168.1.0/24

# 特定のIPアドレスを拒否
sudo ufw deny from 10.0.0.50

ルールの削除

設定したルールを削除する方法を示します。

1
2
3
4
5
6
7
# ルール番号で削除(まず番号を確認)
sudo ufw status numbered
sudo ufw delete 3

# ルールの内容を指定して削除
sudo ufw delete allow http
sudo ufw delete allow 8080/tcp

ルールの順序

ufwではルールの順序が重要です。上から順に評価され、最初にマッチしたルールが適用されます。

1
2
3
4
5
# ルールを番号付きで表示
sudo ufw status numbered

# 特定の位置にルールを挿入
sudo ufw insert 1 deny from 10.0.0.50

ログの有効化

ufwのログ機能を有効にして、ファイアウォールの動作を監視できます。

1
2
3
4
5
6
7
8
# ログを有効化
sudo ufw logging on

# ログレベルを設定(low/medium/high/full)
sudo ufw logging medium

# ログを無効化
sudo ufw logging off

ログは/var/log/ufw.logに記録されます。

ufw設定のリセット

設定をすべてリセットして初期状態に戻せます。

1
2
# すべてのルールをリセット
sudo ufw reset

ufw設定例:Webサーバー

Webサーバー用のufw設定例を以下に示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
# Webサーバー用ufw設定スクリプト

# デフォルトポリシーを設定
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSHを許可
sudo ufw allow ssh

# HTTP/HTTPSを許可
sudo ufw allow http
sudo ufw allow https

# 管理ネットワークからのMySQL接続を許可
sudo ufw allow from 192.168.1.0/24 to any port 3306

# ログを有効化
sudo ufw logging on

# ufwを有効化
sudo ufw enable

# 設定を確認
sudo ufw status verbose

echo "ufwの設定が完了しました"

よくあるセキュリティ設定例

実際のサーバー運用で必要となる、よくあるセキュリティ設定例を紹介します。

Webサーバー(Nginx/Apache)の設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# ufw(Ubuntu)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# firewalld(RHEL系)
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

# iptables
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

SSHのセキュリティ強化

SSHポートをデフォルトの22から変更し、特定のIPアドレスからのみ許可する設定です。

1
2
3
4
5
6
7
8
# ufw(Ubuntu)- ポート2222に変更した場合
sudo ufw delete allow ssh
sudo ufw allow from 192.168.1.0/24 to any port 2222

# firewalld(RHEL系)
sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="2222" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload

データベースサーバーの設定

データベースは外部に公開せず、アプリケーションサーバーからのみアクセスを許可します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# MySQL(ポート3306)をアプリケーションサーバーからのみ許可
# ufw
sudo ufw allow from 192.168.1.10 to any port 3306

# PostgreSQL(ポート5432)
sudo ufw allow from 192.168.1.10 to any port 5432

# firewalld
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload

ブルートフォース攻撃対策

短時間に大量の接続を試みるブルートフォース攻撃に対する対策です。

1
2
3
# iptablesで接続レート制限
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

より高度な対策には、fail2banの使用を推奨します。

ICMPの制御

ping応答を制限する設定です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# ufw - pingを許可する場合は/etc/ufw/before.rulesを編集

# firewalld - ICMPを許可
sudo firewall-cmd --add-icmp-block-inversion --permanent
sudo firewall-cmd --add-icmp-block=echo-request --permanent
sudo firewall-cmd --reload

# iptables - pingを制限(1秒に1回まで)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

ポートスキャン対策

不審なポートスキャンを検知してブロックする設定です。

1
2
3
# iptablesでSYNフラッドを防止
sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP

ファイアウォール設定のベストプラクティス

効果的なLinuxファイアウォール設定のために、以下のベストプラクティスを守ることを推奨します。

最小権限の原則

必要な通信のみを許可し、それ以外はすべて拒否するホワイトリスト方式を採用してください。

1
2
3
4
# デフォルトで拒否し、必要なものだけ許可
sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw allow http

設定変更前のバックアップ

設定を変更する前に、必ず現在の設定をバックアップしてください。

1
2
3
4
5
# iptablesのバックアップ
sudo iptables-save > ~/iptables-backup-$(date +%Y%m%d).rules

# firewalldの設定確認
sudo firewall-cmd --list-all > ~/firewalld-backup-$(date +%Y%m%d).txt

ログの監視

ファイアウォールのログを定期的に確認し、不審なアクセスを監視してください。

1
2
3
4
5
# ufwのログを確認
sudo tail -f /var/log/ufw.log

# firewalldのログを確認(journalctl)
sudo journalctl -f -u firewalld

定期的な設定の見直し

不要になったルールは削除し、設定を最新の状態に保ってください。

1
2
3
# 現在のルールを確認
sudo ufw status numbered
sudo firewall-cmd --list-all

まとめ

本記事では、Linuxファイアウォールの基本概念から、iptables、firewalld、ufwの具体的な設定方法まで解説しました。

主要なポイントを振り返ります。

  • Linuxファイアウォールは、Netfilterをベースとしたパケットフィルタリングによりサーバーを保護する
  • iptablesは低レベルで細かい制御が可能だが、学習コストが高い
  • firewalld(RHEL系)はゾーンベースの管理で、動的な設定変更に適している
  • ufw(Ubuntu系)はシンプルなコマンド体系で、初心者にも扱いやすい
  • デフォルト拒否のホワイトリスト方式を採用し、必要な通信のみ許可する

適切なファイアウォール設定は、サーバーセキュリティの基盤となります。本記事で紹介した内容を参考に、自身の環境に合ったファイアウォール設定を行ってください。

参考リンク