iptablesはマークされたパケットをルータからPCにルーティングし、ルータにルーティングし戻します。

iptablesはマークされたパケットをルータからPCにルーティングし、ルータにルーティングし戻します。

HTTP パケットの詳細なパケット検査を行おうとしています。その目的は、HTTP ペイロード データを収集し、プロキシ/キャッシュに依存しないレポートを作成することです。次に、レポートを使用するための特定のプロキシ/キャッシュ プラグイン (Squid など) を開発することを考えます。

次のテスト シナリオを使用しています (VirtualBox マシン、すべてのマシンは CentOS 6.3)。

ルーター:
インターフェース:
eth0 は 192.168.1.0/24 ネットワークに接続 (IP 192.168.1.10)、
eth1 は 192.168.2.0/24 ネットワークに接続 (IP 192.168.2.20)、
eth2 は 192.168.3.0/24 ネットワークに接続 (IP 192.168.3.30)、
eth3 はインターネット アクセス

PC1 (ディープ パケット インスペクション - DPI PC):
インターフェース:
eth0 は 192.168.1.0/24 ネットワークに接続されています (IP 192.168.1.1)

192.168.2.0 および 192.168.3.0 ネットワーク内の PC からの HTTP 要求は iptables でマークされ、DPI PC にルーティングされます。ROUTER
iptables スクリプト:

#ALL CHAINS POLICY = ACCEPT

# DPI PC IP
IP_DPI=192.168.1.1
# Interface to reach DPI PC from router
IF_DPI_OUT=eth0
# Internet access interface
IF_MASQ=eth3

# Flush everything
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Zero counters
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z

# Enable MASQUERADING 
iptables -t nat -A POSTROUTING -s 192.16.1.0/24 -o $IF_MASQ -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o $IF_MASQ -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o $IF_MASQ -j MASQUERADE

### HTTP packets redirection
# Mark  HTTP packets
iptables -t mangle -A PREROUTING -p tcp --dport 80 -m state --state NEW -s 192.168.2.0/24 -i eth1 -j MARK --set-mark 7
iptables -t mangle -A PREROUTING -p tcp --dport 80 -m state --state NEW -s 192.168.3.0/24 -i eth2 -j MARK --set-mark 7

# Create routing table named "http_redirect"
echo 202 http_redirect >> /etc/iproute2/rt_tables

# Marked packets use "http_redirect" table
ip rule add fwmark 7 table http_redirect

# Sent packets to DPI PC
ip route add default via $IP_DPI dev $IF_DPI_OUT table http_redirect

# Flush route cache
ip route flush cache

DPI PCでも同じことを行うと、パケットは再びルーターにリダイレクトされます。DPI
PC iptablesスクリプト:

#ALL CHAINS POLICY = ACCEPT

IP_ROUTER=192.168.1.10
IF_ROUTER_OUT=eth0

# Flush everything
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Zero counters
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z

### HTTP packets redirection
# Mark  HTTP packets
iptables -t mangle -A PREROUTING -p tcp --dport 80 -i eth0 -j MARK --set-mark 7

# Create routing table named "http_redirect"
echo 202 http_redirect >> /etc/iproute2/rt_tables

# Marked packets use "http_redirect" table
ip rule add fwmark 7 table http_redirect

# Sent packets back to ROUTER
ip route add default via $IP_ROUTER dev $IF_ROUTER_OUT table http_redirect

# Flush route cache
ip route flush cache

iptables ログを使用すると、最初のパケット (SYN がオンのパケット) のみがルーターから DPI PC にリダイレクトされ、DPI PC からルーターに戻されますが、パケットが再びルーターに到達すると、eth3 (インターネット アクセス) 経由でルーティングされません。次に、SYN がオンで ID=previous_ID+1 の新しいパケットが生成され、手順が再度繰り返されます。

ローカル PC (IP 192.168.3.3) で次のようにします。

wget www.yahoo.com

DPI PCのログ:

Jan  8 19:29:03 localhost kernel: D:IN:eth0:HTTP:d80:    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) 

Jan  8 19:29:03 localhost kernel: D:IN:eth0:MARK-1.0    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) 

Jan  8 19:29:03 localhost kernel: D:OUT:eth0:HTTP:d80:    IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) MARK=0x7 

Jan  8 19:29:04 localhost kernel: D:IN:eth0:HTTP:d80:    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) 

Jan  8 19:29:04 localhost kernel: D:IN:eth0:MARK-1.0    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) 

Jan  8 19:29:04 localhost kernel: D:OUT:eth0:HTTP:d80:    IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) MARK=0x7 

Jan  8 19:29:06 localhost kernel: D:IN:eth0:HTTP:d80:    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) 

Jan  8 19:29:06 localhost kernel: D:IN:eth0:MARK-1.0    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) 

Jan  8 19:29:06 localhost kernel: D:OUT:eth0:HTTP:d80:    IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) MARK=0x7 

ルーターのログ:

Jan  8 19:28:48 localhost kernel: R:IN:eth2:HTTP:d80:    IN=eth2 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) 

Jan  8 19:28:48 localhost kernel: R:IN:eth2:MARK-3.0    IN=eth2 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) 

Jan  8 19:28:48 localhost kernel: R:OUT:eth0:HTTP:d80:    IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) MARK=0x7 

Jan  8 19:28:48 localhost kernel: R:IN:eth0:HTTP:d80:    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) 

Jan  8 19:28:49 localhost kernel: R:IN:eth2:HTTP:d80:    IN=eth2 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) 

Jan  8 19:28:49 localhost kernel: R:IN:eth2:MARK-3.0    IN=eth2 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) 

Jan  8 19:28:49 localhost kernel: R:OUT:eth0:HTTP:d80:    IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) MARK=0x7 

Jan  8 19:28:49 localhost kernel: R:IN:eth0:HTTP:d80:    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) 

Jan  8 19:28:51 localhost kernel: R:IN:eth2:HTTP:d80:    IN=eth2 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) 

Jan  8 19:28:51 localhost kernel: R:IN:eth2:MARK-3.0    IN=eth2 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) 

Jan  8 19:28:51 localhost kernel: R:OUT:eth0:HTTP:d80:    IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) MARK=0x7 

Jan  8 19:28:51 localhost kernel: R:IN:eth0:HTTP:d80:    IN=eth0 OUT= 
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) 

ID=48079 のパケット:
1. ホスト 192.168.3.3 からルーターの eth2 に到達します
。 2. 0x7 でマークされます。
3. ルーターの eth0 経由で DPI PC にルーティングされます。
4. DPI PC の eth0 (着信) に到達します
。 5. 0x7 でマークされます。
6. DPI PC の eth0 (発信) 経由でルーターにルーティングされます。
7. ルーターの eth0 に戻ります
(パケットは eth3 経由でルーティングされず、ID=48080 の新しいパケットで手順が再度繰り返されます)

このスキーマが機能したら、ステップ 4 ~ 6 の間でディープ パケット インスペクションを実行する予定です。
パケットは、後で DPI PC で Squid を使用するため、必ずルーターから DPI PC にルーティングされ、DPI PC からルーターにルーティングされる必要があります。

どなたか教えていただけると嬉しいです。

前もって感謝します

答え1

おそらく、ルーター デバイスで rp フィルターが動作しているのでしょう。

Google: Linux RP フィルター

関連情報