概要
iptablesは、送受信するネットワークパケットに対するルールを定義することで、システムのセキュリティポリシーを実装します。各ルールは、特定の条件に一致するパケットに対してACCEPT(許可)、DROP(破棄)、REJECT(拒否)などのアクション(ターゲット)を指定します。主にINPUT、OUTPUT、FORWARDチェーンが使用され、NAT機能のためにPREROUTING、POSTROUTINGチェーンも活用されます。
主な機能
- パケットフィルタリング(ファイアウォール)
- ネットワークアドレス変換(NAT)
- ポートフォワーディングおよびリダイレクト
- 特定のIPアドレス、ポート、プロトコルに基づくトラフィック制御
主なオプション
iptablesコマンドは、さまざまなオプションと組み合わせて使用され、特定のルールを追加、削除、変更したり、現在のルールを表示したりします。
ルール管理
マッチング条件
ターゲット(アクション)
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`iptables` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
iptablesを使用して一般的なファイアウォールルールを設定する例です。ルールを追加する前に、常に現在のルールをバックアップすることをお勧めします。
すべての現在のルールを表示
sudo iptables -L -v -n
詳細情報とIPアドレスを数値で表示してルールを表示します。
SSH(ポート22)を許可
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
外部からのSSH接続を許可します。
特定のIPアドレスをブロック
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
特定のIPアドレス(例:192.168.1.100)からのすべてのインバウンドトラフィックをブロックします。
すべての送信トラフィックを許可
sudo iptables -P OUTPUT ACCEPT
システムから出ていくすべてのトラフィックを許可するようにOUTPUTチェーンのデフォルトポリシーを設定します。
Webサーバーのポートフォワーディング(80 -> 8080)
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
受信したポート80のリクエストをローカルのポート8080にリダイレクトします。(NATテーブルを使用)
内部ネットワークのマスカーレード(NAT)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
内部ネットワークのトラフィックが外部インターフェース(例:eth0)を経由して出る際に送信元IPを変更します。(NATテーブルを使用)
インストール
ほとんどのLinuxディストリビューションにはiptablesがデフォルトでインストールされています。もしインストールされていない場合は、次のコマンドを使用してインストールできます。
Debian/Ubuntu
sudo apt update
sudo apt install iptables
CentOS/RHEL/Fedora
sudo dnf install iptables
ヒントと注意点
iptablesのルールはシステム再起動時に失われる可能性があるため、ルールを永続的に保存する方法を理解しておくことが重要です。また、ルール設定時には順序とデフォルトポリシーに注意が必要です。
ルールの永続化
iptablesのルールはデフォルトで揮発性であるため、再起動後も維持されるように保存する必要があります。ディストリビューションごとに推奨される方法が異なります。
- **Debian/Ubuntu**: `sudo apt install iptables-persistent` をインストール後、`sudo netfilter-persistent save` コマンドでルールを保存します。ルールは `/etc/iptables/rules.v4` および `/etc/iptables/rules.v6` に保存されます。
- **CentOS/RHEL/Fedora**: `sudo dnf install iptables-services` をインストール後、`sudo systemctl enable iptables && sudo systemctl start iptables` コマンドでサービスを有効化し、`sudo iptables-save > /etc/sysconfig/iptables` コマンドでルールを保存します。
- **一般的な方法**: `sudo iptables-save > /path/to/rules.v4` でルールをファイルに保存し、起動時にそのファイルを `sudo iptables-restore < /path/to/rules.v4` コマンドでロードするスクリプトを作成できます。
ルールの順序の重要性
iptablesのルールは、チェーン内で上から下へ順に適用されます。パケットが特定のルールと一致すると、そのルールのアクションが実行され、それ以降のルールはチェックされません。したがって、より具体的なルール(例:特定のIPアドレスのブロック)を、一般的なルール(例:すべてのHTTPを許可)よりも上に配置することが重要です。
デフォルトポリシー設定時の注意
チェーンのデフォルトポリシー(例:`iptables -P INPUT DROP`)を設定する際は、非常に慎重になる必要があります。デフォルトポリシーをDROPに変更する前に、SSH接続など、必須のサービスに対する許可ルールを先に追加してください。そうしないと、システムへのすべてのネットワーク接続がブロックされ、アクセス不能になる可能性があります。
nftablesへの移行
最新のLinuxディストリビューションでは、iptablesの代わりに`nftables`がデフォルトのファイアウォールフレームワークとして使用されることが多くなっています。`nftables`はiptablesの機能を統合し、改善された構文を提供します。`iptables`コマンドが内部的に`nftables`を使用する互換性レイヤーとして動作する場合もあるため、システムのデフォルトファイアウォールツールを確認することをお勧めします。