iptables ファイアウォール設定にエラーが見つかりません

iptables ファイアウォール設定にエラーが見つかりません

Centos サーバー上のファイアウォールの問題に苦労しています。

次のような構成があり、これをサービス iptables の再起動で使用し、putty を使用してサーバーに ssh しようとすると、サーバーにアクセスできず、接続タイムアウト エラーが発生します。

ただし、最後の REJECT 行を省略すると可能です。

SSH のポート (ポート 22) を開きました。何が間違っているのでしょうか? 初心者のミスでしょうか? どなたか助けていただければ幸いです。

*filter
:INPUT ACCEPT [5:9090]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3:372]
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10050 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 10051 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 10051 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 10050 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22   -j ACCEPT -m comment --comment  \" ssh port\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25   -j ACCEPT -m comment --comment  \" email\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53   -j ACCEPT -m comment --comment  \" DNS large queries\"
-A INPUT -m state --state NEW -m udp -p udp --dport 53   -j ACCEPT -m comment --comment  \" DNS small queries\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80   -j ACCEPT -m comment --comment  \" Apache\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 110  -j ACCEPT -m comment --comment  \" POP3\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443  -j ACCEPT -m comment --comment  \" Apache ssl\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 953  -j ACCEPT -m comment --comment  \" DNS Internal\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 993  -j ACCEPT -m comment --comment  \" imaps\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3128 -j ACCEPT -m comment --comment  \" Squid\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -m comment --comment  \" MySQL\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT -m comment --comment  \" Jenkins\"
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT -m comment --comment  \" Pmta\"

-A INPUT -m set --match-set blacklist src -j DROP -m comment --comment \"IPSET drop ips on blacklist\"
-A INPUT -p tcp --dport 8080 -j SET --add-set blacklist src

-A INPUT -i ${PREFIX} -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP 
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP                 -m comment --comment \"Deny all null packets\"
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP                  -m comment --comment \"Deny all recon packets\"
-A INPUT -p tcp --tcp-flags ALL FIN -j DROP                  -m comment --comment \"nmap FIN stealth scan\"
-A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP          -m comment --comment \"SYN + FIN\"
-A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP          -m comment --comment \"SYN + RST\"
-A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP          -m comment --comment \"FIN + RST\"
-A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP          -m comment --comment \"FIN + URG + PSH\"
-A INPUT -p tcp --tcp-flags ALL URG,ACK,PSH,RST,SYN,FIN -j DROP -m comment --comment \"XMAS\"
-A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP              -m comment --comment \"FIN without ACK\"
-A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP              -m comment --comment \"PSH without ACK\"
-A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP              -m comment --comment \"URG without ACK\"
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP         -m comment --comment \"Deny SYN flood attack\"
-A INPUT -m state --state ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT -m comment --comment \"Accept traffic with ESTABLISHED flag set (limit - DDoS prevent)\"
-A INPUT -m state --state RELATED -m limit --limit 50/second --limit-burst 50 -j ACCEPT   -m comment --comment \"Accept traffic with RELATED flag set (limit - DDoS prevent)\"
-A INPUT -m state --state INVALID -j DROP                    -m comment --comment \"Deny traffic with the INVALID flag set\"

-A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW -m limit --limit 30/minute --limit-burst 200 -j ACCEPT -m comment --comment \"Protection DDoS attacks\"

-A INPUT -j REJECT                               -m comment --comment \"Close up firewall. All else blocked.\"

COMMIT

答え1

最近のモジュールを使用して、ポート 22 への接続試行ごとに IP アドレスのリストを動的に維持し、1 分間に 4 回以上接続を試行する IP や変更 TTL を使用する IP を拒否しています (注: この最後のチェックにより、場合によっては正当な接続にも問題が発生する可能性があります)。

ただし、オプションを保持する以前のルールを使用してリストのどこにも追加していないため、これは間違っています--set。そのため、ターゲットを使用するルールは、--update呼び出された空のリストに対してテストしているため、毎回 false を返しSSH、パケットは最後のルールによって最終的にドロップされ、ACK3 ウェイ ハンドシェイクの最後のパケットはサーバーによってドロップされます。

代わりに次のようなものを探しています:

-A INPUT -m recent --update --name SSH --seconds 60 --hitcount 5 --rttl -j DROP 
-A INPUT -i <iface> -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH 

これは SSH に関連する唯一のルールであり、一致が見つかると iptables によってこの順序で解析されます (つまり、コメント「ssh port」の付いたルールを削除し、順序が尊重されていることを確認します)。

また、全体的な注意点として、一般的な TCP 攻撃パターンを拒否しようとしていますが、多くのルールの後でそれを行っています。これを一番上に移動する必要があります。これは、実際にパケットをドロップする前のテストが無駄になることを意味します。必要に応じて、明確にするためにカスタム チェーンを作成してください。

関連情報