iptablesでLinuxファイアウォールを設定する入門

※本記事にはプロモーション(広告)を含みます。
Linuxサーバーのセキュリティを強化するなら、iptablesの基本設定から始めましょう。初心者でも30分で主要なルールを作成し、不要なポートを遮断して不正アクセスを防げるようになります。なお、iptablesのルール設定ファイルの場所はディストリビューションによって異なり、Debian/Ubuntu系は/etc/iptables/rules.v4、RHEL/CentOS系は/etc/sysconfig/iptablesが標準です(詳細は本文の永続化セクションで解説)。本記事では、iptablesのインストールから具体的なルール設定、保存方法までを段階的に解説します。実務で即活用できる実践的な内容に特化しています。
目次
- iptablesとは何か?基本概念を理解する
- iptablesのインストールと確認方法
- iptablesの基本概念とテーブル/チェーン
- よく使うiptablesコマンド一覧
- 実践的なファイアウォールルール設定
- iptablesの設定ファイルの場所と永続化する方法
- iptables設定時のトラブルシューティング
- iptables vs nftables vs firewalld比較表
- iptablesに関するよくある質問
- まとめ:セキュアなLinuxサーバー構築のために
iptablesとは何か?基本概念を理解する
iptablesは、Linuxカーネルに組み込まれたパケットフィルタリング機能です。ネットワークトラフィックを制御し、不要な通信を遮断するファイアウォール機能を提供します。具体的には、以下のような機能を実現します。
- ポートベースのアクセス制御:特定のポート(22/SSH、80/HTTP、443/HTTPSなど)へのアクセスを許可/拒否
- IPアドレスベースの制限:特定のIPアドレスからのアクセスを許可/拒否
- ステートフルパケットインスペクション:接続状態を追跡し、不正なパケットを検出
- NAT(Network Address Translation):プライベートIPとパブリックIPの変換
iptablesは、NetfilterというLinuxカーネルのフレームワーク上で動作します。Netfilterは、ネットワークパケットを処理する際のフックポイントを提供し、iptablesはそのフックポイントでルールを適用します。
主な特徴は以下の通りです。
| 特徴 | 詳細 |
|---|---|
| カーネル統合 | Linuxカーネルに組み込まれており、高速なパケット処理が可能 |
| 柔軟なルール設定 | 複雑な条件(送信元/宛先IP、ポート、プロトコル、ステート)を組み合わせたルールが作成可能 |
| 低リソース消費 | ハードウェアリソースをほとんど消費せず、サーバーのパフォーマンスに影響を与えない |
| 互換性 | ほとんどのLinuxディストリビューション(Ubuntu、CentOS、Debianなど)で標準搭載 |
iptablesは、コマンドラインインターフェースで操作します。GUIツールはありませんが、その分、自動化やスクリプト化が容易です。また、永続化(再起動後もルールを維持)が必要な点に注意が必要です。
iptablesのインストールと確認方法
多くのLinuxディストリビューションでは、iptablesはデフォルトでインストールされています。しかし、古いバージョンや一部のディストリビューションでは、明示的にインストールする必要があります。以下に、主要なディストリビューションごとのインストール手順を示します。
Ubuntu/Debian系
UbuntuやDebianでは、通常iptablesはデフォルトでインストールされています。確認とインストールは以下のコマンドで行います。
# インストールされているか確認
sudo iptables --version
# インストールされていない場合(まれ)
sudo apt update
sudo apt install iptables
インストール後、以下のコマンドで現在のルールを確認できます。
sudo iptables -L -n -v
出力例:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
CentOS/RHEL系
CentOS 7以前ではiptablesが標準でインストールされていますが、CentOS 8以降ではfirewalldがデフォルトのファイアウォール管理ツールになっています。iptablesを使用する場合は、以下の手順でインストールします。
# firewalldを停止し、iptablesを有効化
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# iptables-servicesをインストール
sudo yum install iptables-services -y
# iptablesを起動
sudo systemctl enable iptables
sudo systemctl start iptables
# 現在のルールを確認
sudo iptables -L -n -v
CentOS 8以降でiptablesを使用する場合、iptables-nftという互換レイヤーを使用します。これは、iptablesコマンドをnftables(次世代のNetfilter)に変換して実行する仕組みです。互換性は高いですが、一部の高度な機能は制限される可能性があります。
その他のディストリビューション
AlmaLinux、Rocky Linux、Fedoraなどでも、基本的な手順はCentOSと同様です。主な違いはパッケージマネージャー(dnf/yum)の違いです。
# AlmaLinux/Rocky Linux/Fedora
sudo dnf install iptables-services -y
iptablesのバージョン
使用しているiptablesのバージョンを確認するには、以下のコマンドを実行します。
sudo iptables --version
出力例:
iptables v1.8.7 (nf_tables)
バージョンによって、使用可能なオプションや機能が異なる場合があります。特に、nf_tablesと併記されている場合は、nftablesとの互換モードで動作していることを示します。この場合、一部の古いiptablesコマンドは動作しない可能性があります。
注意事項:
- iptablesはLinuxカーネルに依存しているため、カーネルのバージョンによって動作が異なる場合があります。
- 古いカーネル(例:Linux 2.4系)では、iptablesではなくipchainsが使用されています。
- 最新のLinuxディストリビューションでは、nftablesへの移行が推奨されています。詳細は後述の比較表とiptablesとnftablesの違いと移行手順を参照してください。
iptablesの基本概念とテーブル/チェーン
iptablesを効果的に使用するためには、テーブルとチェーンの概念を理解することが不可欠です。これらは、iptablesがルールを整理し、パケットを処理するためのフレームワークを提供します。
テーブル(Tables)
iptablesには、主に4つのテーブルがあります。各テーブルは異なる目的に特化しており、ルールを適用するタイミングが異なります。
| テーブル名 | 主な用途 | 処理順序 |
|---|---|---|
| filter | パケットの許可/拒否/ドロップを制御(デフォルトのテーブル) | 3番目 |
| nat | IPマスカレード、ポートフォワーディング、DNAT/SNAT | 1番目 |
| mangle | パケットのヘッダー情報(TTL、マークなど)を変更 | 2番目 |
| raw | パケットの追跡(ステートフル)を無効化(高速化用) | 最初 |
各テーブルの処理順序は、raw → mangle → nat → filter です。これは、パケットがネットワークを通過する際の処理順序を反映しています。
チェーン(Chains)
各テーブルには、チェーンと呼ばれるルールの集合体があります。チェーンは、パケットが通過する際の処理ポイントを定義します。主なチェーンは以下の通りです。
| チェーン名 | テーブル | 処理タイミング | 説明 |
|---|---|---|---|
| INPUT | filter | ローカルプロセス宛てのパケット | サーバーに直接送信されるパケットを処理 |
| OUTPUT | filter | ローカルプロセス発のパケット | サーバーから送信されるパケットを処理 |
| FORWARD | filter | ルーティングされるパケット | サーバーを経由して他のホストに送信されるパケットを処理 |
| PREROUTING | nat, mangle, raw | ルーティング前のパケット | パケットがルーティングされる前に処理(主にNAT用) |
| POSTROUTING | nat, mangle | ルーティング後のパケット | パケットがルーティングされた後に処理(主にNAT用) |
例えば、INPUTチェーンは、サーバーに直接送信されるパケット(SSH接続、HTTPリクエストなど)を処理します。一方、FORWARDチェーンは、サーバーを経由して他のホストに送信されるパケット(ルーターとして動作する場合など)を処理します。
ルールの構造
iptablesのルールは、以下のような構造で定義されます。
iptables [-t テーブル名] コマンド [マッチング条件] [ターゲット/アクション]
具体的な例を見てみましょう。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
このコマンドの内訳は以下の通りです。
- -A INPUT:INPUTチェーンにルールを追加(Append)
- -p tcp:TCPプロトコルのパケットにマッチ
- –dport 22:宛先ポートが22(SSH)のパケットにマッチ
- -j ACCEPT:マッチしたパケットを許可(Accept)
このルールは、SSH(ポート22)への接続を許可するものです。ただし、このルールだけでは他のポートが遮断されていないため、セキュリティは不十分です。
デフォルトポリシーの設定
iptablesでは、各チェーンにデフォルトポリシーを設定できます。デフォルトポリシーは、ルールにマッチしないパケットに対して実行されるアクションです。一般的には、以下のいずれかを設定します。
- ACCEPT:すべてのパケットを許可(セキュリティ上危険)
- DROP:すべてのパケットを拒否(推奨)
- REJECT:拒否し、拒否メッセージを返す
デフォルトポリシーを設定するには、以下のコマンドを使用します。
# INPUTチェーンのデフォルトポリシーをDROPに設定
sudo iptables -P INPUT DROP
# OUTPUTチェーンのデフォルトポリシーをACCEPTに設定
sudo iptables -P OUTPUT ACCEPT
注意: OUTPUTチェーンのデフォルトポリシーをDROPに設定すると、サーバーからの通信がすべて遮断されます。通常は、OUTPUTはACCEPTに設定します。
よく使うiptablesコマンド一覧
iptablesを操作するための主要なコマンドを以下にまとめます。これらのコマンドを組み合わせることで、柔軟なファイアウォールルールを作成できます。
ルールの追加・削除・確認
| コマンド | 説明 | 使用例 |
|---|---|---|
| -A, –append | チェーンの末尾にルールを追加 | iptables -A INPUT -p tcp –dport 80 -j ACCEPT |
| -I, –insert | チェーンの指定位置にルールを挿入 | iptables -I INPUT 1 -p tcp –dport 22 -j ACCEPT |
| -D, –delete | チェーンからルールを削除 | iptables -D INPUT -p tcp –dport 22 -j ACCEPT |
| -R, –replace | 既存のルールを置き換え | iptables -R INPUT 1 -p tcp –dport 22 -j DROP |
| -L, –list | チェーンのルールを表示 | iptables -L INPUT -n -v |
| -F, –flush | チェーンのルールをすべて削除 | iptables -F INPUT |
| -X, –delete-chain | カスタムチェーンを削除 | iptables -X CUSTOM_CHAIN |
| -P, –policy | チェーンのデフォルトポリシーを設定 | iptables -P INPUT DROP |
マッチング条件
ルールを適用するパケットを特定するためのマッチング条件です。以下に主要なオプションを示します。
| オプション | 説明 | 使用例 |
|---|---|---|
| -p, –protocol | プロトコルを指定(tcp, udp, icmp, all) | -p tcp |
| –sport | 送信元ポートを指定 | –sport 1024:65535 |
| –dport | 宛先ポートを指定 | –dport 80 |
| -s, –source | 送信元IPアドレスを指定 | -s 192.168.1.100 |
| -d, –destination | 宛先IPアドレスを指定 | -d 10.0.0.1 |
| -i, –in-interface | 入力インターフェースを指定 | -i eth0 |
| -o, –out-interface | 出力インターフェースを指定 | -o eth1 |
| -m, –match | 拡張モジュールを使用 | -m state –state ESTABLISHED,RELATED |
ターゲット/アクション
マッチしたパケットに対して実行するアクションです。
| ターゲット | 説明 | 使用例 |
|---|---|---|
| ACCEPT | パケットを許可 | -j ACCEPT |
| DROP | パケットを破棄(拒否メッセージなし) | -j DROP |
| REJECT | パケットを拒否し、拒否メッセージを返す | -j REJECT –reject-with icmp-port-unreachable |
| LOG | パケットをログに記録 | -j LOG –log-prefix “IPTABLES-DROPPED: “ |
| RETURN | カスタムチェーンから呼び出し元に戻る | -j RETURN |
| DNAT | 宛先NAT(ポートフォワーディング) | -j DNAT –to-destination 192.168.1.100:80 |
| SNAT | 送信元NAT(IPマスカレード) | -j SNAT –to-source 1.2.3.4 |
ステートフルパケットインスペクション
iptablesは、ステートフルパケットインスペクションをサポートしています。これにより、接続の状態(新規、確立済み、関連)に基づいてルールを適用できます。主なステートは以下の通りです。
- NEW:新しい接続
- ESTABLISHED:確立済みの接続
- RELATED:関連する接続(例:FTPデータ接続)
- INVALID:無効なパケット
ステートを使用したルール例:
# 既存の接続を許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 新規SSH接続を許可
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
注意:ステートフルパケットインスペクションを使用するには、connection trackingモジュールが有効になっている必要があります。通常、Linuxカーネルではデフォルトで有効です。
拡張モジュール
iptablesには、さまざまな拡張モジュールが用意されており、高度なルールを作成できます。主な拡張モジュールは以下の通りです。
| モジュール名 | 説明 | 使用例 |
|---|---|---|
| state | 接続の状態に基づくルール | -m state –state ESTABLISHED |
| multiport | 複数のポートを一度に指定 | -m multiport –dports 80,443,8080 |
| limit | パケットのレート制限 | -m limit –limit 3/minute |
| mac | MACアドレスに基づくルール | -m mac –mac-source 00:1A:2B:3C:4D:5E |
| owner | ローカルプロセスのUID/GIDに基づくルール | -m owner –uid-owner 1000 |
例えば、limitモジュールを使用して、特定のポートへのアクセスをレート制限することで、DoS攻撃を軽減できます。
# HTTP(80番ポート)へのアクセスを1分間に3回までに制限
iptables -A INPUT -p tcp --dport 80 -m limit --limit 3/minute -j ACCEPT
実践的なファイアウォールルール設定
ここからは、具体的なシナリオに基づいたファイアウォールルールの設定方法を解説します。実務で頻繁に使用されるルールパターンを中心に、セキュリティを強化するためのベストプラクティスを紹介します。
基本的なセキュリティルール
まずは、基本的なセキュリティルールを設定します。これらのルールは、ほとんどのLinuxサーバーに適用できます。
1. デフォルトポリシーの設定
すべてのチェーンのデフォルトポリシーを設定します。INPUTチェーンはDROPに、OUTPUTとFORWARDはACCEPTに設定します。
# デフォルトポリシーを設定
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
この設定により、サーバーへの不要な接続はすべて遮断され、サーバーからの通信は許可されます。
2. 既存の接続を許可
サーバーとの通信が途切れないように、ESTABLISHED(確立済み)とRELATED(関連)の接続を許可します。
# 既存の接続を許可
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
このルールは、サーバーが既に確立した接続(例:SSHセッション、HTTPレスポンス)を維持します。
3. ローカルループバック(localhost)を許可
サーバー内部の通信(localhost)を許可します。
# ローカルループバックを許可
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
これにより、localhost(127.0.0.1)間の通信が正常に動作します。
4. ICMP(ping)を許可
ネットワークの疎通確認に使用されるICMP(ping)を許可します。
# ICMP(ping)を許可
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
これにより、pingコマンドによる疎通確認が可能になります。
SSH(ポート22)のセキュアな設定
SSHはリモート管理に必須ですが、攻撃の対象になりやすいため、セキュアな設定が必要です。
1. SSH接続を許可
SSH(ポート22)への接続を許可します。特定のIPアドレスからのみ接続を許可することを推奨します。
# 特定のIPアドレスからのSSH接続を許可(例:192.168.1.100)
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT
# 他のIPアドレスからのSSH接続を拒否
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
この設定により、許可されたIPアドレスからのみSSH接続が可能になります。IPアドレスは、グローバルIPまたは信頼できるネットワークのIPを指定します。
2. SSHポートの変更(セキュリティ向上)
SSHのデフォルトポート(22)を変更することで、自動化された攻撃を回避できます。ポート番号は1024〜65535の範囲で選択します。
# SSHポートを2222に変更
sudo iptables -A INPUT -p tcp --dport 2222 -s 192.168.1.100 -j ACCEPT
# 古いポート(22)を拒否
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
注意:ポートを変更する場合は、sshd_configファイルも更新する必要があります。
# /etc/ssh/sshd_configを編集
sudo vi /etc/ssh/sshd_config
# 以下の行を変更
Port 2222
# SSHサービスを再起動
sudo systemctl restart sshd
3. SSH接続のレート制限
SSHへのブルートフォース攻撃を防ぐために、接続試行回数を制限します。
# SSH接続を1分間に3回までに制限
sudo iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/minute -j ACCEPT
これにより、過剰な接続試行を防ぎ、サーバーの負荷を軽減できます。
なお、SSHのような管理用ポートはインターネットに直接公開せず、VPN経由の接続に限定する設計も有効です。VPNの仕組みと構築手順はVPNの仕組みと構築で詳しく解説しています。
Webサーバー(HTTP/HTTPS)へのアクセス許可
Webサーバー(Apache、Nginxなど)を運用する場合、HTTP(80)とHTTPS(443)へのアクセスを許可します。
1. HTTP(80)とHTTPS(443)を許可
# HTTP(80)を許可
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS(443)を許可
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
これにより、Webサイトへのアクセスが可能になります。
2. 特定のIPアドレスからのみWebアクセスを許可
Webサイトを特定のユーザーや組織に限定する場合、IPアドレスベースの制限を設定します。
# 特定のIPアドレス(例:203.0.113.10)からのみHTTPSアクセスを許可
sudo iptables -A INPUT -p tcp --dport 443 -s 203.0.113.10 -j ACCEPT
# それ以外からのHTTPSアクセスを拒否
sudo iptables -A INPUT -p tcp --dport 443 -j DROP
社内向け管理画面や検証環境など、公開範囲を限定したいWebサービスで有効な設定です。
Webサーバーを複数台並べて負荷分散する構成では、各サーバーのiptablesに加えてロードバランサー側でも通信の入口を設計する必要があります。基本的な仕組みと設定手順はロードバランサーの仕組みと設定方法入門にまとめています。
iptablesの設定ファイルの場所と永続化する方法
iptablesで設定したファイアウォールルールは、システムを再起動するとデフォルトで失われてしまいます。ルールを恒久的に保持するには、設定したルールをファイルに保存し、起動時に自動的に読み込ませる仕組みが必要です。「iptablesの設定はどこにあるのか」という疑問への回答は、ディストリビューションによって以下のように異なります。
| ディストリビューション | ルールの保存先(場所) | 永続化に使うパッケージ・サービス |
|---|---|---|
| Debian / Ubuntu | /etc/iptables/rules.v4(IPv4)/etc/iptables/rules.v6(IPv6) | iptables-persistent |
| RHEL / CentOS / Rocky Linux | /etc/sysconfig/iptables | iptables-services |
| 共通(手動保存) | 任意のパス(例:/etc/iptables/rules.v4) | iptables-save / iptables-restore |
例えば、Debian系やUbuntuではiptables-persistentパッケージを使用してルールを永続化できます。このパッケージをインストールすると、現在のルールが/etc/iptables/rules.v4(IPv4)・/etc/iptables/rules.v6(IPv6)に自動的に保存され、システム起動時に再適用されるようになります。Red Hat系ディストリビューションでは、iptables-servicesを利用し、ルールは/etc/sysconfig/iptablesに保存されます。これらのツールは、ルールの保存と復元を簡素化し、管理者の負担を軽減します。
永続化の手順はディストリビューションによって若干異なりますが、共通するポイントもあります。まず、現在のルールを保存するコマンドを実行し、そのファイルをシステムの起動スクリプトから呼び出すのが基本的な流れです。例えば、以下のような手順で設定できます。
# ルールの保存(IPv4)
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
# ルールの保存(IPv6)
sudo sh -c "ip6tables-save > /etc/iptables/rules.v6"
# 保存したルールを手動で読み込む場合
sudo iptables-restore < /etc/iptables/rules.v4保存したルールは、起動時に自動的に読み込まれるように設定します。これにより、再起動後もファイアウォールの設定が維持され、セキュリティが確保されます。ただし、ルールの永続化方法・保存先のパスはディストリビューションやバージョンによって異なるため、公式ドキュメントやパッケージのマニュアルを確認して正しい手順を実施してください。
iptables設定時のトラブルシューティング
iptablesを使用したファイアウォール設定では、ルールの適用ミスや通信の遮断など、さまざまなトラブルが発生することがあります。一般的な問題として、ルールの順序不備やポリシーの設定誤りが挙げられます。例えば、許可ルールを拒否ルールより後に記述すると、意図しない通信遮断が発生する可能性があります。この場合は、ルールの順序を見直し、必要に応じてiptables -L -n –line-numbersコマンドでルールの一覧と番号を確認し、iptables -Dやiptables -Iで順序を調整します。
また、カーネルパラメータの設定不備により、特定の通信が正常に機能しないこともあります。例えば、net.ipv4.ip_forwardが無効な場合、ルータとしての動作ができません。このような場合は、/etc/sysctl.confファイルを編集し、sysctl -pで設定を反映させます。ただし、システムによってはデフォルトで無効化されている場合があるため、設定変更前には公式ドキュメントを確認してください。
トラブルシューティング時には、以下の点に注意すると効果的です。
- ログの確認:iptables -L -vでルールの適用状況を確認し、dmesgや
/var/log/syslogでシステムログをチェックします。
また、通信が届かない原因がサーバー側ではなく、ネットワーク側のセグメント分割にあるケースもあります。VLANによるセグメント設計の考え方はVLAN設計入門で解説しています。
iptables vs nftables vs firewalld比較表
Linuxのファイアウォール設定には、主にiptables、nftables、firewalldの3つの主要なツールが存在します。これらはそれぞれ異なる設計思想や機能を持ち、用途に応じて使い分けることが重要です。iptablesは長年にわたり標準的なファイアウォールツールとして利用されてきましたが、近年では後継技術であるnftablesが登場し、パフォーマンスや使いやすさの面で注目を集めています。一方で、firewalldはデスクトップ環境やサーバー管理を目的とした高レベルな抽象化レイヤーを提供し、特にRHEL系ディストリビューションで広く採用されています。
iptablesは、パケットフィルタリングやNAT(ネットワークアドレス変換)などの基本的なファイアウォール機能を提供します。ルールはテーブル(filter、nat、mangleなど)とチェーン(INPUT、FORWARD、OUTPUTなど)を組み合わせて定義され、柔軟な制御が可能です。ただし、ルールの構文が複雑で、大規模な設定になると管理が煩雑になる傾向があります。
nftablesは、iptablesの後継として開発されたツールで、ルールセットのパフォーマンス向上やシンプルな構文が特徴です。iptablesと同様にテーブルとチェーンを使用しますが、ルールの記述がより直感的で、動的なルール更新にも優れています。また、nftablesはカーネル内で動作するため、iptablesよりも低レイヤーでの処理が可能です。
- firewalldは、nftablesやiptablesをバックエンドとして使用しつつ、D-Busインターフェースやコマンドラインツール(
firewall-cmd)を通じて設定を管理します。特にゾーン(public、trustedなど)を概念として導入し、ネットワークインターフェースやソースIPアドレスに応じたポリシーを簡単に適用できます。デスクトップ環境やサーバー管理の負担を軽減するために設計されており、設定の動的な変更にも対応しています。
iptablesに関するよくある質問
iptablesはLinuxのファイアウォール機能を制御するための強力なツールですが、設定方法や運用に関してさまざまな疑問が寄せられます。ここでは、初心者から実務者まで役立つ質問と回答をまとめました。
Q1. iptablesの基本的な動作原理を教えてください。
iptablesは、ネットワークパケットのフィルタリングやNAT(ネットワークアドレス変換)をルールに基づいて行うコマンドラインツールです。LinuxカーネルのNetfilterフレームワークを利用しており、テーブル(filter、nat、mangle、raw)とチェーン(INPUT、OUTPUT、FORWARDなど)を組み合わせてルールを定義します。例えば、特定のIPアドレスからの接続を拒否する場合は、filterテーブルのINPUTチェーンにルールを追加します。詳細は公式ドキュメントやLinuxのネットワーク設定に関するリファレンスをご確認ください。
Q2. iptablesのルールを永続化する方法は?
iptablesのルールは再起動後に消失するため、永続化が必要です。多くのLinuxディストリビューションでは、iptablesサービスや専用のパッケージ(例:iptables-persistent)を使用してルールを保存できます。例えば、Debian系では「iptables-save > /etc/iptables/rules.v4」でルールをファイルに保存し、サービス起動時に自動的に読み込む設定が可能です。また、systemdを使用する場合は、サービスファイルにルール読み込みコマンドを記述します。具体的な手順は、ご使用のディストリビューションの公式ドキュメントを参照してください。
Q3. iptablesで特定のポートを開放するにはどうすればいいですか?
特定のポートを開放するには、filterテーブルのINPUTチェーンに許可ルールを追加します。例えば、TCPの80番ポート(HTTP)を開放する場合は、「iptables -A INPUT -p tcp –dport 80 -j ACCEPT」を実行します。同様に、UDPや他のポート番号にも対応可能です。ただし、既存のルールやセキュリティポリシーとの整合性を確認し、不要なポートは閉鎖しておくことが重要です。また、ファイアウォールの設定変更後は、ルールが正しく適用されているか「iptables -L -n -v」で確認しましょう。
Q4. iptablesとfirewalldの違いや使い分けは?
iptablesは従来から使用されているコマンドラインツールで、直接ルールを設定しますが、firewalldはRHEL系ディストリビューションで標準的に採用されている動的なファイアウォール管理ツールです。firewalldはD-Busインターフェースを介してリアルタイムにルールを更新でき、ゾーン機能によりネットワークインターフェースごとに異なるセキュリティレベルを設定できます。iptablesは柔軟性が高く、細かい制御が必要な場合に適していますが、firewalldはGUI(firewall-config)やCLI(firewall-cmd)で簡単に管理できるため、運用の負担を軽減できます。使い分けは、システムの要件や運用体制に応じて選択してください。
まとめ:セキュアなLinuxサーバー構築のために
iptablesを活用したLinuxファイアウォールの設定は、サーバーのセキュリティを強化する上で基本的な要素となります。ルールの作成や管理を通じて、不要な通信を遮断し、許可された通信のみを許容することで、外部からの不正アクセスを防ぐことが可能です。また、iptablesは柔軟なルール設定が可能であり、用途に応じた細かな制御が行えます。例えば、特定のポートやIPアドレスに対するアクセス制限を設けることで、サービスの安全性を高めることができます。
一方で、iptablesの設定はサーバーの運用状況や要件に応じて適宜見直すことが重要です。ルールの過剰な制限はサービスの可用性を損なう可能性があるため、運用中の監視やログの確認を通じて、必要に応じた調整を行うことが求められます。また、iptablesの設定はシステム全体のセキュリティポリシーと整合性を保つことが大切です。ファイアウォールの設定は、あくまでセキュリティ対策の一部であり、OSやアプリケーションのセキュリティアップデートと併せて実施することで、より堅牢なサーバー環境を構築することができます。
サーバー側をiptablesで固めたら、次はネットワーク機器側の設定です。Ciscoスイッチでのセグメント分割はVLANの仕組みとCisco設定の基礎、機器を操作するための基本コマンドはCiscoルータのCLI基礎入門で解説しているので、あわせて確認すると構成全体を把握しやすくなります。
本記事はInfra Academy編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
編集ポリシーはこちら




