내 IP 테이블에 다음 규칙을 추가하려고 생각했습니다.
-A INPUT -p tcp -m state --state NEW -m recent --update --dport 80 --seconds 5 --hitcount 10 -j DROP
-A INPUT -p tcp -m state --state NEW -m recent --set --dport 80 -j ACCEPT
내 웹 API에 대한 우발적인 Ajax 기반 남용(요청이 너무 많음)을 방지합니다.
이러한 종류의 상태 기반 필터링은 리소스 집약적이거나 포트 80 요청의 공통성으로 인해 낭비적인 것으로 간주됩니까(대해 훨씬 적은 상태를 초래하는 속도 제한 포트 22와 같은 것)? 전용 방화벽에서 이 작업을 수행하는 것이 이상적이라는 것을 알고 있지만 내 서버에서 무엇을 수행할 수 있는지 알아보려고 합니다.
답변1
상태 모듈을 사용하는 것과 SYN 패킷을 필터링하는 것(동일한 트릭을 효과적으로 수행하는)의 성능에 대해 잘 모르겠습니다.
아마도 이것을 테스트할 수 있습니다... 규칙을 추가한 다음 Apache Bench 또는 이와 유사한 것을 사용하여 서버의 CPU 및 메모리 사용을 모니터링하면서 가능한 한 많은 요청을 생성하십시오. 그런 다음 다음 규칙을 추가해 보세요.
-N tcpsyn
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j tcpsyn
-A tcpsyn -p tcp --dport 80 -m limit --limit 5/second --limit-burst 20 -j RETURN
-A tcpsyn -p tcp --dport 80 -j DROP
...그리고 그것을 벤치마킹합니다.