iptables conntrackモジュール:ESTABLISHED / RELATEDの代わりにSNAT(またはDNAT)状態ですか?

iptables conntrackモジュール:ESTABLISHED / RELATEDの代わりにSNAT(またはDNAT)状態ですか?

しばらく(バージョン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しました。DNATESTABLISHED,RELATEDSNATDNAT

# 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の外部から不要なパケットが内部に到達することを許可すること)を理解するのに十分ではないため、このアプローチが実際に適切であることを確信しています。できません。

私の質問は次のように表現できると思います。パケットがSNATOR 状態を持っていると同時に OR 状態をDNAT持つことはできません (もちろん、その状態の最初のパケットを除く)。ESTABLISHEDRELATEDNEW

注:そのようなパケットを記録してみましたが、私が知っている限り、iptables1つのオプションしか--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、または状態にあるパケットのログ行。ESTABLISHEDRELATED

SNATしたがって、「パケットがORDNAT状態を持ちながら同時にOR状態を持つことはできませんか?」ESTABLISHEDという質問に対する答えはRELATED次のとおりです。いいえ

私の本当の懸念は、私のLANにパケットを一致させるSNATか、DNAT代わりにESTABLISHED,RELATED許可するのが寛大すぎるということです。最初は安心できますが、これは良い考えではないことがわかりました。

実はその逆も本当だが、少ないRELATED許容誤差:このルールのテスト中に、破棄された状態で少ないが無視できない数のパケットを確認しました。主にICMPタイプ3、コード1、3(それぞれ)宛先ホストに接続できません。そして宛先ポートに接続できません。)、インターネットから私のLAN内のホストに向かいます。つまり、(ネットワークを正しく理解した場合)、私のホストはインターネットへの接続を確立しようとし、リモートルーターは接続を確立できないと応答し、私のファイアウォール/ルーターホストはこれらの応答をブロックします。これは良いことではありません。

ESTABLISHED,RELATEDだからSNAT「またはで置き換えるのが良いアイデアか」という基本的な質問に対する答えはDNATいいえ

おすすめ記事