iptables
パケットフィルタリング(Netfilter)の流れ
-
パケットの検査(Checksum and sanity) チェックサムを調査。ここで引っかかるとパケットは破棄される
-
PREROUTING パケットのリダイレクト等、ネットワークインターフェースから送られて来たパケットに対して、アドレスの変換などの処理を行う
-
ROUTING ルーティングを行う。パケットの終点アドレスを調べて、それに従ってパケットの送り先を決定する
-
FORWARD ネットワークインターフェースから渡されたパケットの転送を行う
-
INPUT ローカルプロセスへのパケット配送を行う
-
OUTPUT ローカルプロセスからネットワークインターフェースへパケット送信。
-
POSTROUTING ネットワークに出力されるパケットに対しての処理を行う。アドレス変換など
フィルタリングの範囲
- 通信元のホスト
- 通信先のホスト
- 利用するプロトコル(サービス)
- パケットが届いた物理インターフェース
iptablesインストール
#yum -y install iptables iptables-ipv6 ←IPv6版
iptables概要
Service Name | iptables | ip6tables |
---|---|---|
Control Program | /sbin/iptables | /sbin/ip6tables |
Configuration files | /etc/sysconfig/iptables&br()/etc/sysconfig/iptables-config | /etc/sysconfig/ip6tables&br()/etc/sysconfig/ip6tables-config |
Document files | > | /user/share/doc/iptables-1.4.7 |
Lock File | /var/lock/subsys/iptables | /var/lock/subsys/iptables |
Control script | /etc/init.d/iptables | /etc/init.d/ip6tables |
Script parameters | > | start stop restart fore^reload condrestart try-restart status panic save |
Startup | > | 2 3 4 5 / 08 92 |
設定
/etc/sysconfig/iptables
#filter (1)
:INPUT ACCEPT [0:0] (2)
:FORWARD ACCEPT [0:0] (3)
:OUTPUT ACCEPT [0:0] (4)
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT (5)
-A INPUT -p icmp -j ACCEPT (6)
-A INPUT -i lo -j ACCEPT (7)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT (8)
-A INPUT -j REJECT --reject-with icmp-host-prohibited (9)
-A FORWARD -j REJECT --reject-with icmp-host-prohibited (10)
COMMIT (11)
/etc/sysconfig/ip6tables
#filter (1)
:INPUT ACCEPT [0:0] (2)
:FORWARD ACCEPT [0:0] (3)
:OUTPUT ACCEPT [0:0] (4)
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT (5)
-A INPUT -p icmp -j ACCEPT (6)
-A INPUT -i lo -j ACCEPT (7)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT (8)
-A INPUT -j REJECT --reject-with icmp-host-prohibited (9)
-A FORWARD -j REJECT --reject-with icmp-host-prohibited (10)
COMMIT (11)
- (1)(11)設定の開始と終了
- (2)〜(4)ポリシーの設定
- (2)はINPUT,(3)はFORWAED,(4)はOUTPUTの各ポリシー許可
- (5)〜(7)標準で許可する通信の設定
- (5)コネクションを管理するstateモジュールに対する設定で、いったんコネクションを解説を許可した通信は、その後の通信を継続的に許可する事をさしている
- (6)icmp,icmpv6パケットを許可しています
- (7)ネットワークインタフェースloに送られて来たパケッットへのアクセス、ローカルループバックアドレスを許可している
- (8)通信許可の設定 自身で動作しているSSHサービスに対して通信許可を設定
- (9)(10)INPUTとFORWARDの実質的なポリシー
- (9)は自身に向けた通信のうち、ここまでに定義していないサービスに対する者にはエラーパケットを返す事を指定しています。サービスの公開はこれ以前に設定する必要があります。
- (10)このサーバーをルータとして転送されるパケットのうち、ここまでに定義していないサービスに対する者にはエラーパケットを返す事を指定しています。
TCPの特定ポートへの接続許可
-A INPUT -m state --state NEW -m tcp -p tcp --dport [port番号] -j ACCEPT
特定の相手からの、TCPの特定ポートへの接続許可
-A INPUT -m state --state NEW -m tcp -p tcp -s [addr] --dport [port番号] -j ACCEPT
UDPの特定ポートへの接続許可
-A INPUT -m state --state NEW -m tcp -p udp --dport [port番号] -j ACCEPT
特定の相手からの、UDPの特定ポートへの接続許可
-A INPUT -m state --state NEW -m udp -p tcp -s [addr] --dport [port番号] -j ACCEPT
iptablesコマンド
チェインの作成
# iptables -t <filter|nat|mangle>-N <chain>
チェインの削除
# iptables -t <filter|nat|mangle>-X <chain>
チェイン名の変更
# iptables -t <filter|nat|mangle>-E <chain>
ルールの削除
# iptables -t <filter|nat|mangle>-F <chain> 省略した場合全て削除
全体ポリシーの設定
# iptables -t <filter|nat|mangle>-p <chain> <target>
ルールの追加
# iptables -t <filter|nat|mangle>-A <chain> <rule> [<option>]
TCP/UDPルールの追加
# iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.10.5 --deport 22 -j
ルールの挿入
ルールの一覧確認
# iptables -L -n | -v | --line-number
ルールの追加
# iptables -I
ルールの削除
# iptables -D
ルールの修正
# iptables -R
ルールの保存
# service iptables save
TCP Wrapper
- アクセス許可ファイル /etc/hosts.allow
-
アクセス拒否ファイル /etc/hosts.deny
sshd: 192.168.1.10