iptablesの概念と設定方法を調べました。
iptablesとは
iptablesとはパケットをフィルタリングするためのツールです。
また、NATとしても使えます。
iptablesの用語
iptablesを理解するにあたって必要な用語をまとめました。
TARGETS
iptablesのルールを設定する際に、targetを指定します。
targetはユーザー定義のものと特別なtargetである、ACCEPT, DROP, QUEUE or RETURNがあります。
パケットに対してどんな操作をするかを定義します。
代表的なtargetです。
ACCEPT
パケットを通す
DROP
パケットを破棄する
QUEUE
パケットをキューにためる
RETURN
チェインを辿るのをストップして、評価を行う
REJECT
パケットを破棄し、エラーパケットを返す
DNAT
送信先IPアドレスを変更する
SNAT
送信元IPアドレスを変更する
MASQUERADE
複数の送信元IPアドレスを変更(マスカレード)する
LOG
ログを出力する
Chain
iptablesを設定する際にchainを指定します。
chainにはビルトインchainとユーザー定義chainがあります。
chainはパケットに対する実行条件を定義します。
ビルトインchainは以下です。
INPUT
FORWARD
OUTPUT
PREROUTING
POSTROUTING
TABLES
一般的にはフィルタリングとして使われることが多いiptablesですが、他にも様々な機能があります。
iptablesにはそれをtableという概念で扱っており、5つのtableがあります。
filter
パケットのフィルタリングを設定するためのテーブルです。
デフォルトのテーブルです。tableオプションを明示的に指定しない場合は、filterが指定されたことになります。
INPUT、FORWARD、OUTPUTのChainを含みます。
nat
IPアドレスの変換を設定するためのテーブルです。
PREROUTING、POSTROUTING のChainを含みます。
mangle
パケットの書き換えを設定するためのテーブルです。
raw
接続の追跡の除外の設定をするためのテーブルです。
security
アクセスコントロールの設定をするためのテーブルです。
OPTIONS
iptablesのコマンドにオプションを指定できます。
オプションはいくつかのグループに区別されます。
COMMANDS
iptablesに実行してほしいコマンドを指定します。
以下のようなコマンドがあります。
-A, –append
選択したチェインにルールを追加します。
-C, –check
指定したチェインにルールが存在するかをチェックします。
-D, –delete
チェインからルールを消します。
詳細はiptablesのmanをご覧ください。
PARAMETERS
ルールを作成する際に指定するパラメーターです。
-p, –protocol
ルールの対象となるプロトコルを指定します。
-j, –jump
ルールの対象となるtargetを指定します。
-s, –source
ルールの対象となるアドレスを指定します。
例えば、IPアドレス、ホスト名、ネットワーク名などを指定します。
詳細はiptablesのmanをご覧ください。
OTHER OPTIONS
追加オプションです。
-v, –verbose
詳細表示のオプションです。
詳細はiptablesのmanを参照ください。
iptablesの基本的な構文
基本的には以下のように指定します。
1
iptables [-t table] command chain options target
例えば、ローカルホストからのping(icmp)を許可する場合は以下となります。
1
iptables -A INPUT -p icmp -j ACCEPT
iptablesの基本的な読み方
現在のiptablesの設定を表示するには、iptables -L コマンドを使います。
1
2
3
4
5
6
7
8
9
10
11
12
Example: Input Chain Rule Table Listing
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
1行目がChainの名前で、次にデフォルトポリシーが表示されています(DROP)。
2行目がカラム名です。
target : target名
prot : プロトコル名。例えば、tcp, udp, icmp, or all
opt : めったに使われません。
source : 接続元のIPアドレス or サブネット or anywhere
destination : 接続先のIPアドレス or サブネット or anywhere
iptablesコマンドの使い方
いくつかの例を紹介します。
特定のサーバーからのhttp通信を許可する
1
2
3
# iptables -A INPUT -p tcp -s 192.168.1.1 --dport 80 -j ACCEPT
# 設定を保存
# service iptables save
ルールを消す
iptables -D ルール で消すことができます。
iptables -S
でルール一覧がでるので、そのルールを指定すれば簡単です。
1
2
# iptables -S
-A INPUT -s 157.7.105.69/32 -p tcp -m tcp --dport 80 -j ACCEPT
以下のコマンドで消します。
1
iptables -D INPUT -s 157.7.105.69/32 -p tcp -m tcp --dport 80 -j ACCEPT
参考文献