IPTables SSHポートリダイレクト

IPTables SSHポートリダイレクト

Ubuntu LTS 18を実行し、iptablesをファイアウォールとして使用するVPSがかなりあります.現在、私は外部IPアドレスからログインしようとしているポート22でSSHを実行しています。

IPTablesを介して任意のポート番号(2222など)をポート22にリダイレクトして、これらのヒットを制限したいと思います。何らかの理由でポート2222でリッスンするようにSSHスクリプトの設定を調整したくありません。

「ボーナス」として、ポート22をIP xxxx(現在1.1.1.1)にのみ開くことができることを願っています。

私は以下を試しました:

私のIPを除くすべてのIPを除外:

iptables -A INPUT -s 1.1.1.1/32 -i venet0 -p tcp -m tcp --dport 22 -j ACCEPT

これは素晴らしい作品です。

これで2222を22にリダイレクトします。

iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 2222 -j REDIRECT --to-port 22

これはうまくいかないようです。リダイレクトはポート 22 を開く場合にのみ機能します。しかし、港はすべての訪問者に開かれています。

誰かがこれを説明できますか?ありがとうございます!

ベストアンサー1

INPUT1つのIPアドレスだけがポート22にアクセスできるようにし、他のポートもローカルポート22にリダイレクトする場合は、ルールはNATの後に処理されるルールであるため、すべての人にポート22を開く必要がありますREDIRECT

1つのアプローチは次のとおりです。

iptables -t nat -A PREROUTING -s 1.1.1.1 --proto tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING --proto tcp --dport 22 -j REDIRECT --to-port 65535
iptables -t nat -A PREROUTING --proto tcp --dport 2222 -j REDIRECT --to-port 22

iptables -A INPUT --proto tcp --dport 22 -j ACCEPT
iptables -A INPUT --proto tcp --dport 65535 -j DROP

NATテーブルは最初に処理されるため、PREROUTINGポート22の送信元アドレス1.1.1.1が許可されます(NATが実行されないことを意味します)。ポート22に到達しようとしている他のソースアドレスは、着信ポート22パケットをポート65535(残念ながらnatテーブルDROPでは使用できませんPREROUTING)にリダイレクトする次のルールに達します。

次に、ポート2222への接続はポート22にリダイレクトされ、ポート22に着信するすべてのパケットが許可され、最後にポート65535(ポート22への「他の」接続)への着信接続が許可されます。

注 最初の入力規則の 1 つとして、次の行があるとします。

iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

そうしないと、発信接続に送信元ポート65535があり、そのポートへの応答がブロックされます。または、65535ルールに一致するTCPフラグを追加してSYNパケットのみを一致させます。しかし、ESTABLISHED,RELATED効率を得るためには、パケットができるだけ早くINPUTチェーンに入ることを許可することは常に良いです。

-i venet0そのインターフェイスに着信パケットにのみ適用されるルールであれば、自由に追加してください。

おすすめ記事