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)が必要 |
期待される学習成果#
本記事を読み終えると、以下のことができるようになります。
- ファイアウォールの基本概念(テーブル、チェイン、ルール)を理解できる
- iptablesで基本的なパケットフィルタリングを設定できる
- firewalldでゾーンベースのファイアウォールを管理できる
- ufwでシンプルにファイアウォールを設定できる
- 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系)はシンプルなコマンド体系で、初心者にも扱いやすい
- デフォルト拒否のホワイトリスト方式を採用し、必要な通信のみ許可する
適切なファイアウォール設定は、サーバーセキュリティの基盤となります。本記事で紹介した内容を参考に、自身の環境に合ったファイアウォール設定を行ってください。
参考リンク#