しばらく(バージョン1.3で導入されたことがわかっていますiptables
)つながるモジュールは、SNATとDNATの2つの仮想状態を追跡できます。
SNAT 仮想状態は、元の送信元アドレスが応答先と異なる場合に一致します。 DNAT 仮想状態、元のターゲットが応答ソースと異なる場合に一致します。
私のルーター/ファイアウォールホストには、いくつかのSNATルールがあります。
# SNAT
iptables -t filter -A FORWARD -i $FROM_IFACE -o $TO_IFACE -s $FROM_IP -d $TO_IP -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -i $TO_IFACE -o $FROM_IFACE -s $TO_IP -d $FROM_IP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o $TO_IFACE -s $FROM_IP -d $TO_IP -j SNAT --to-source $SNAT_IP
# DNAT
iptables -t nat -A PREROUTING -i $FROM_IFACE -d $FROM_IP -p $PROTO --dport $PORT -j DNAT --to-destination $TO_IP
iptables -t filter -A FORWARD -i $FROM_IFACE -o $TO_IFACE -d $TO_IP -p $PROTO --dport $PORT -j ACCEPT
iptables -t filter -A FORWARD -i $TO_IFACE -o $FROM_IFACE -s $TO_IP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables
インターネット検索の後、これらの「新しい」またはステータスを使用するルールの例が見つかりませんでしたが、次のように置き換えようとSNAT
しました。DNAT
ESTABLISHED,RELATED
SNAT
DNAT
# SNAT
iptables -t filter -A FORWARD -i $FROM_IFACE -o $TO_IFACE -s $FROM_IP -d $TO_IP -m conntrack --ctstate NEW,SNAT -j ACCEPT
iptables -t filter -A FORWARD -i $TO_IFACE -o $FROM_IFACE -s $TO_IP -d $FROM_IP -m conntrack --ctstate SNAT -j ACCEPT
iptables -t nat -A POSTROUTING -o $TO_IFACE -s $FROM_IP -d $TO_IP -j SNAT --to-source $SNAT_IP
# DNAT
iptables -t nat -A PREROUTING -i $FROM_IFACE -d $FROM_IP -p $PROTO --dport $PORT -j DNAT --to-destination $TO_IP
iptables -t filter -A FORWARD -i $FROM_IFACE -o $TO_IFACE -d $TO_IP -p $PROTO --dport $PORT -j ACCEPT
iptables -t filter -A FORWARD -i $TO_IFACE -o $FROM_IFACE -s $TO_IP -m conntrack --ctstate DNAT -j ACCEPT
うまくいくようで、このアプローチには私が知っている少なくとも1つの利点があります。ファイアウォールは内部ホストからインターネットにRSTパケットをドロップするために使用されましたが(状態にあったため。INVALID
)、この新しいアプローチでは次のことが許可されました。通過する
残念ながら便利ですが、ネットワーキングの私の理論的知識では、これがあまりにも許容可能であるか(つまり、LANの外部から不要なパケットが内部に到達することを許可すること)を理解するのに十分ではないため、このアプローチが実際に適切であることを確信しています。できません。
私の質問は次のように表現できると思います。パケットがSNAT
OR 状態を持っていると同時に OR 状態をDNAT
持つことはできません (もちろん、その状態の最初のパケットを除く)。ESTABLISHED
RELATED
NEW
注:そのようなパケットを記録してみましたが、私が知っている限り、iptables
1つのオプションしか--ctstate
許可されて!
いないため、不可能です。つまり、話せない、または少なくともこれを行う方法が見つかりません。たとえば、「SNAT
ステータスがあるがステータスがないESTABLISHED
パケットを記録しますRELATED
」)。私が考えていない他の録音方法があれば、それも非常に歓迎されます。
編集1:何度か試行錯誤の最後に私が間違っていたことに気づきました(したがって、テキストをストロークとしてマークしました)。一部のパケットはまだ状態なので、INVALID
最終的に破棄されます。
編集2:使用SNAT
/DNAT
交換が安全でない場合は、ESTABLISH,RELATED
パケットが後者ではなく電子状態になる可能性がある状況の具体的な例を提供してください。
ベストアンサー1
ロギングの提案をいただいた@ABのおかげで、より多くのテストができました。ここに結果と私の質問に対する答えがあります。ウェブ上の状態SNAT
や何も見つからない私のような他の人に役立つことを願っていますDNAT
。 /またはマッチを交換する能力ESTABLISHED,RELATED
。
したがって、適度に使用量の多いホームネットワーク(SNAT経由でインターネットにアクセスする複数のホストとDNATを介して公的にアクセスできるサーバー(HTTP / HTTPS、SMTP、IMAPなど)をホストするいくつかのVM)で5日間何も見えませんでした。または状態でSNAT
はないDNAT
、または状態にあるパケットのログ行。ESTABLISHED
RELATED
SNAT
したがって、「パケットがORDNAT
状態を持ちながら同時にOR状態を持つことはできませんか?」ESTABLISHED
という質問に対する答えはRELATED
次のとおりです。いいえ。
私の本当の懸念は、私のLANにパケットを一致させるSNAT
か、DNAT
代わりにESTABLISHED,RELATED
許可するのが寛大すぎるということです。最初は安心できますが、これは良い考えではないことがわかりました。
実はその逆も本当だが、少ないRELATED
許容誤差:このルールのテスト中に、破棄された状態で少ないが無視できない数のパケットを確認しました。主にICMPタイプ3、コード1、3(それぞれ)宛先ホストに接続できません。そして宛先ポートに接続できません。)、インターネットから私のLAN内のホストに向かいます。つまり、(ネットワークを正しく理解した場合)、私のホストはインターネットへの接続を確立しようとし、リモートルーターは接続を確立できないと応答し、私のファイアウォール/ルーターホストはこれらの応答をブロックします。これは良いことではありません。
ESTABLISHED,RELATED
だからSNAT
「またはで置き換えるのが良いアイデアか」という基本的な質問に対する答えはDNAT
、いいえ。