修正する

修正する

iptables背景:私は何年も何もしていません...私はVMWareの仮想マシンでFedora 16を実行し、ファイアウォール(TomatoUSB)ポートを仮想マシンに転送しています。

仮想マシンがあります192.168.1.155。パケットが仮想マシンに送信されていることがわかっています。

に基づいてこの絵パケットがどのように送信されるべきかを確認するために、カーネルが他の理由でパケットを破棄しない限り、パケットは入って来る必要がありnat-PREROUTINGますmangle-INPUTmangle-FORWARD

だからいくつかのロギングを有効にしました。

iptables -t mangle -v -A PREROUTING -j LOG -p tcp --destination-port 80 --log-prefix 'mangle-PREROUTING '
iptables -t nat -v -A PREROUTING -j LOG -p tcp --destination-port 80 --log-prefix 'nat-PREROUTING '
iptables -t filter -v -I INPUT 1 -j LOG -p tcp --destination-port 80 --log-prefix 'filter-INPUT '
iptables -t filter -v -I FORWARD 1 -j LOG -p tcp --destination-port 80 --log-prefix 'filter-FORWARD '
iptables -t mangle -v -I INPUT 1 -j LOG -p tcp --destination-port 80 --log-prefix 'mangle-INPUT ' 
iptables -t mangle -v -I FORWARD 1 -j LOG -p tcp --destination-port 80 --log-prefix 'mangle-FORWARD '

それから私は外部テストサービスパケットはチェーンを通過しますPREROUTINGが無視されることがわかります。

Apr 23 19:11:52 webmail64 kernel: [  351.116042] mangle-PREROUTING IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:bc:ae:c5:c3:68:f9:08:00 SRC=66.249.67.195 DST=192.168.1.155 LEN=60 TOS=0x00 PREC=0x20 TTL=48 ID=20466 DF PROTO=TCP SPT=64135 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 
Apr 23 19:11:52 webmail64 kernel: [  351.121701] nat-PREROUTING IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:bc:ae:c5:c3:68:f9:08:00 SRC=66.249.67.195 DST=192.168.1.155 LEN=60 TOS=0x00 PREC=0x20 TTL=48 ID=20466 DF PROTO=TCP SPT=64135 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 
Apr 23 19:11:55 webmail64 kernel: [  354.113372] mangle-PREROUTING IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:bc:ae:c5:c3:68:f9:08:00 SRC=66.249.67.195 DST=192.168.1.155 LEN=60 TOS=0x00 PREC=0x20 TTL=48 ID=20467 DF PROTO=TCP SPT=64135 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 
Apr 23 19:11:55 webmail64 kernel: [  354.114834] nat-PREROUTING IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:bc:ae:c5:c3:68:f9:08:00 SRC=66.249.67.195 DST=192.168.1.155 LEN=60 TOS=0x00 PREC=0x20 TTL=48 ID=20467 DF PROTO=TCP SPT=64135 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 
Apr 23 19:12:01 webmail64 kernel: [  360.109534] mangle-PREROUTING IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:bc:ae:c5:c3:68:f9:08:00 SRC=66.249.67.195 DST=192.168.1.155 LEN=60 TOS=0x00 PREC=0x20 TTL=48 ID=20468 DF PROTO=TCP SPT=64135 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 
Apr 23 19:12:01 webmail64 kernel: [  360.111023] nat-PREROUTING IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:bc:ae:c5:c3:68:f9:08:00 SRC=66.249.67.195 DST=192.168.1.155 LEN=60 TOS=0x00 PREC=0x20 TTL=48 ID=20468 DF PROTO=TCP SPT=64135 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 

TTLこれが良いと見ることができます。 VMのIPが192.168.1.155このため、次にINPUT進む必要がありますが、成功しません。パケットが私のネットワーク内から来る場合、期待どおりに動作します。

Apr 23 19:20:03 webmail64 kernel: [  841.725402] mangle-PREROUTING IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:00:1f:3b:cb:2e:99:08:00 SRC=192.168.1.69 DST=192.168.1.155 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=4562 DF PROTO=TCP SPT=61520 DPT=80 WINDOW=4042 RES=0x00 ACK FIN URGP=0 
Apr 23 19:20:03 webmail64 kernel: [  841.729647] mangle-INPUT IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:00:1f:3b:cb:2e:99:08:00 SRC=192.168.1.69 DST=192.168.1.155 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=4562 DF PROTO=TCP SPT=61520 DPT=80 WINDOW=4042 RES=0x00 ACK FIN URGP=0 
Apr 23 19:20:03 webmail64 kernel: [  841.731056] filter-INPUT IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:00:1f:3b:cb:2e:99:08:00 SRC=192.168.1.69 DST=192.168.1.155 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=4562 DF PROTO=TCP SPT=61520 DPT=80 WINDOW=4042 RES=0x00 ACK FIN URGP=0 
Apr 23 19:20:03 webmail64 kernel: [  841.732784] mangle-PREROUTING IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:00:1f:3b:cb:2e:99:08:00 SRC=192.168.1.69 DST=192.168.1.155 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=4563 DF PROTO=TCP SPT=61520 DPT=80 WINDOW=4042 RES=0x00 ACK URGP=0 
Apr 23 19:20:03 webmail64 kernel: [  841.734257] mangle-INPUT IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:00:1f:3b:cb:2e:99:08:00 SRC=192.168.1.69 DST=192.168.1.155 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=4563 DF PROTO=TCP SPT=61520 DPT=80 WINDOW=4042 RES=0x00 ACK URGP=0 
Apr 23 19:20:03 webmail64 kernel: [  841.735676] filter-INPUT IN=eth1 OUT= MAC=00:0c:29:fa:36:c7:00:1f:3b:cb:2e:99:08:00 SRC=192.168.1.69 DST=192.168.1.155 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=4563 DF PROTO=TCP SPT=61520 DPT=80 WINDOW=4042 RES=0x00 ACK URGP=0 

私は何を試みたか。

  • SELinuxをオフにする
  • 完全閉鎖iptables
  • 基本ポリシーが次のようになっていることを確認してください。ACCEPT
    • パケット数ACCEPT増加の確認
  • /proc/sys/net/ipv4/ip_forward準備ができたらIP転送()を有効にしてください。

私の設定:* kernel= Linux webmail64 3.3.2-1.fc16.x86_64 #1 SMP Sat Apr 14 00:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux *iptables v1.4.12

iptablesすべての重要な情報は次のとおりです。

[root@webmail64 ~]# iptables-save 
# Generated by iptables-save v1.4.12 on Mon Apr 23 20:47:24 2012
*nat
:PREROUTING ACCEPT [916:127527]
:INPUT ACCEPT [1:60]
:OUTPUT ACCEPT [87:7857]
:POSTROUTING ACCEPT [87:7857]
-A PREROUTING -p tcp -m tcp --dport 80 -j LOG --log-prefix "nat-PREROUTING "
COMMIT
# Completed on Mon Apr 23 20:47:24 2012
# Generated by iptables-save v1.4.12 on Mon Apr 23 20:47:24 2012
*mangle
:PREROUTING ACCEPT [1402:193108]
:INPUT ACCEPT [1343:189856]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [303:67789]
:POSTROUTING ACCEPT [303:67789]
-A PREROUTING -p tcp -m tcp --dport 80 -j LOG --log-prefix "mangle-PREROUTING "
-A INPUT -p tcp -m tcp --dport 80 -j LOG --log-prefix "mangle-INPUT "
-A FORWARD -p tcp -m tcp --dport 80 -j LOG --log-prefix "mangle-FORWARD "
COMMIT
# Completed on Mon Apr 23 20:47:24 2012
# Generated by iptables-save v1.4.12 on Mon Apr 23 20:47:24 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1075:220262]
-A INPUT -p tcp -m tcp --dport 80 -j LOG --log-prefix "filter-INPUT "
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -p tcp -m tcp --dport 80 -j LOG --log-prefix "filter-FORWARD "
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Apr 23 20:47:24 2012

次はどこで見ることができますか?

修正する

実行するように要求されましたが、パケットをtcpdump送信していないようですか?ACK:

tcpdump -i eth1 -An -vvv \(net 50 or net 173\)
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
19:31:26.305048 IP (tos 0x20, ttl 53, id 26094, offset 0, flags [DF], proto TCP (6), length 60)
    50.22.90.226.48891 > 192.168.1.155.http: Flags [S], cksum 0xca12 (correct), seq 2918539684, win 5840, options [mss 1460,sackOK,TS val 1152517194 ecr 0,nop,wscale 7], length 0
E .<[email protected]....................
D..J........
19:31:26.521815 IP (tos 0x20, ttl 53, id 61033, offset 0, flags [DF], proto TCP (6), length 60)
    50.22.90.226.48892 > 192.168.1.155.http: Flags [S], cksum 0x82b4 (correct), seq 1826089481, win 5840, options [mss 1460,sackOK,TS val 1152517216 ecr 0,nop,wscale 7], length 0
E .<[email protected]..     ...................
D..`........
19:31:29.300994 IP (tos 0x20, ttl 53, id 26095, offset 0, flags [DF], proto TCP (6), length 60)
    50.22.90.226.48891 > 192.168.1.155.http: Flags [S], cksum 0xc8e6 (correct), seq 2918539684, win 5840, options [mss 1460,sackOK,TS val 1152517494 ecr 0,nop,wscale 7], length 0
E .<[email protected]....................
D..v........
19:31:29.521214 IP (tos 0x20, ttl 53, id 61034, offset 0, flags [DF], proto TCP (6), length 60)
    50.22.90.226.48892 > 192.168.1.155.http: Flags [S], cksum 0x8188 (correct), seq 1826089481, win 5840, options [mss 1460,sackOK,TS val 1152517516 ecr 0,nop,wscale 7], length 0
E .<[email protected]..     ...................
D...........
19:31:35.302578 IP (tos 0x20, ttl 53, id 26096, offset 0, flags [DF], proto TCP (6), length 60)
    50.22.90.226.48891 > 192.168.1.155.http: Flags [S], cksum 0xc68e (correct), seq 2918539684, win 5840, options [mss 1460,sackOK,TS val 1152518094 ecr 0,nop,wscale 7], length 0
E .<[email protected]....................
D...........
19:31:35.532347 IP (tos 0x20, ttl 53, id 61035, offset 0, flags [DF], proto TCP (6), length 60)
    50.22.90.226.48892 > 192.168.1.155.http: Flags [S], cksum 0x7f2f (correct), seq 1826089481, win 5840, options [mss 1460,sackOK,TS val 1152518117 ecr 0,nop,wscale 7], length 0
E .<[email protected]..     ........./.........
D...........

ベストアンサー1

少し遅れていることがわかりますが…知るどのIPを担当しますか?これは私が作成したルールファイルの一番上に置いたスキーマです。同様のフローチャートを他の場所でも見つけることができますが、端末で非常に便利なASCII形式(アートと呼びたくありません)です。

ほとんどの場合、私はこれを頭の中で知っていますが、忘れたとしても参考にするのも悪くありません。

###############################################################################
###
###            PACKET FLOW THROUGH NETFILTER TABLES AND CHAINS
###
###
###                          {Packet in}
###                               |
###                               v
###                       +-----------------+
###                       |mangle/PREROUTING|
###                       +-----------------+
###                               |
###                               v
###                       +-----------------+
###                       |  nat/PREROUTING |
###                       +-----------------+
###                               |
###                               v
###                       *~~~~~~~~~~~~~~~~~*
###                       |  kernel routing |
###                       *~~~~~~~~~~~~~~~~~*
###                               |
###                               v
###           .------------{?for this host?}------------.
###      yes! |                                         | no!
###           v                                         v
###  +-----------------+                       +-----------------+
###  |   mangle/INPUT  |                       |  mangle/FORWARD |
###  +-----------------+                       +-----------------+
###           |                                         |
###           v                                         v
###  +-----------------+                       +-----------------+
###  |   filter/INPUT  |                       |  filter/FORWARD |
###  +-----------------+                       +-----------------+
###           |                                         |
###           v                                         |
### *~~~~~~~~~~~~~~~~~~~~*                              |
### | response & routing |                              |
### *~~~~~~~~~~~~~~~~~~~~*                              |
###           |                                         |
###           v                                         |
###  +-----------------+                                |
###  |  mangle/OUTPUT  |                                |
###  +-----------------+                                |
###           |                                         |
###           v                                         |
###  +-----------------+                                |
###  |    nat/OUTPUT   |                                |
###  +-----------------+                                |
###           |                                         |
###           v                                         |
###  +-----------------+                                |
###  |  filter/OUTPUT  |                                |
###  +-----------------+                                |
###           |                                         |
###           .-------------------+---------------------.
###                               |
###                               v
###                      +------------------+
###                      |mangle/POSTROUTING|
###                      +------------------+
###                               |
###                               v
###                      +------------------+
###                      |  nat/POSTROUTING |
###                      +------------------+
###                               |
###                               v
###                          {Packet out}
###
###############################################################################

どういう意味ですか?

ルーティングは、ルーティングテーブル(上記のフローチャートの「カーネルルーティング」)を使用するか、netfilterを使用して実行できます。これで、最も可能性の高いシナリオの場合、ルーティングテーブルを適切に設定しないと、カーネルはパケットがどこに行くべきかを知らず、最終的にパケットを破棄します。注:この場合は、カスタムチェーンを作成してLOGからDROPその順序でルールを追加すると便利です。これにより、どのルールが影響を受けるかを確認できます。iptables-save -cチェーンに追加する方法[packets:bytes]と同様に、各ルール行にパケットとバイトカウンタを追加することも便利です。

仮想マシンに転送するポートには、DNAT次のレシピがあります(以下に説明します)。

#!/bin/bash
VMNET=192.168.1.0/24
MAINIP=66.249.67.195
CONTIP=192.168.1.2
VMPORT=80
INPORT=80
ACTION="-I"
iptables -t nat    $ACTION PREROUTING  -d $MAINIP -p tcp --dport $INPORT -j DNAT --to-destination $CONTIP:$VMPORT
iptables -t nat    $ACTION POSTROUTING -s $VMNET ! -d $VMNET -p tcp -j MASQUERADE --to-ports 1024-65535
iptables -t nat    $ACTION POSTROUTING -s $VMNET ! -d $VMNET -p udp -j MASQUERADE --to-ports 1024-65535
iptables -t nat    $ACTION POSTROUTING -s $VMNET ! -d $VMNET -j MASQUERADE
iptables -t filter $ACTION INPUT       -p tcp -d $MAINIP --dport $INPORT -j ACCEPT
iptables -t filter $ACTION FORWARD     -p tcp --dport $INPORT -d $VMNET -j ACCEPT
iptables -t filter $ACTION FORWARD     -p tcp --dport $INPORT -d $MAINIP -j ACCEPT

自分のルールに合わせて順序を変更することもできます。また、OUTPUTチェーンにACCEPTデフォルトポリシーがない場合は、出力ルールを追加する必要があります。ただし、すべての実用的な目的のためには、RELATED,ESTABLISHED状態規則を使用してそれを満たす必要があります。ワイルドカードを介して一致または一致するようにインターフェイスを絞り込むこともできます。たとえば、仮想ゲストのブリッジにすべてのプレフィックス(アンダースコア)を指定して、と_一致するようにしました。同様に、複数のネットワークカード(、)の場合と一致させることができます。-i _+-o _+eth0eth1-i eth+

ここで何が起こるかは次のとおりです。

  1. DNAT$INPORTTCP(ホスト)ポートから入力を受け入れ、それを$CONTIP:$VMPORTコンテナのIPとコンテナのポートに「ルーティング」する規則を挿入します。はい、異なる場合があります。そうでない場合は、ターゲット部分を省略できます(例:「$ CONTIP」)。
  2. トラフィックマスキングのための3つのルール~から仮想ゲストサブネットがありますが、行かない到着別の仮想ゲスト。
  3. INPUTパブリックIP(インターフェイスは提供されていませんが、おそらく!)ポートからの着信パケットの通過を許可するルールです$INPORT。少なくともパブリックインターフェイスにバインドする場合は、このルールが厳密に必要ではないと思います。
  4. $INPORT仮想ゲストサブネットにトラフィックを転送するルール($VMNET
  5. $INPORTパブリックIPにトラフィックを転送する$MAINIPルール()

sysctl最後に、()の値は次のよう/proc/sys/net/ipv4/ip_forwardになります。

# cat /proc/sys/net/ipv4/ip_forward
1

ホストをルーターにします。

echo 1上記の「ファイル」に書かないprocfs場合。sysctl -w net.ipv4.ip_forward=1root

おすすめ記事