iptables 방화벽 구성에서 오류를 찾을 수 없습니다

iptables 방화벽 구성에서 오류를 찾을 수 없습니다

Centos 서버의 방화벽 문제로 어려움을 겪고 있습니다.

iptables 재시작 서비스와 함께 사용하고 퍼티를 사용하여 서버에 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 주소 목록을 동적으로 유지하고 분당 4회 이상 연결을 시도하거나 TTL 변경을 사용하는 IP를 거부하고 있습니다(참고: 이 마지막 확인은 합법적인 연결에 문제를 일으킬 수 있습니다). 어떤 경우에는 너무 그렇습니다).

그러나 옵션이 포함된 이전 규칙을 사용하여 목록의 어느 곳에도 추가하지 않기 때문에 잘못된 작업을 수행하고 있습니다 --set. 따라서 대상을 사용하는 규칙은 --update호출된 빈 목록에 대해 테스트하고 SSH결국 마지막 규칙에 의해 패킷이 삭제되므로 매번 false를 반환하므로 3방향 핸드셰이크의 마지막 ACK패킷이 서버에 의해 삭제됩니다.

대신 다음과 같은 것을 찾고 있습니다.

-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 공격 패턴을 거부하려고 시도하지만 많은 규칙 후에 수행한다는 것입니다. 이것을 맨 위로 이동해야 합니다. 이는 실제로 패킷을 삭제하기 전에 쓸모없는 테스트를 의미합니다. 필요한 경우 명확성을 위해 사용자 정의 체인을 만듭니다.

관련 정보