답변:
순수한 Apache 솔루션을 원한다면 Apache 2.0의 경우 bw_mod, Apache 1.3의 경우 mod_bandwidth입니다. 서버의 대역폭을 조절하여 대역폭 사용을 제한 할 수 있습니다.
mod_limitipconn도있어 한 명의 사용자가 서버에 많은 연결을하지 못하게합니다. mod_cband는 또 다른 옵션이지만 결코 사용하지 않았습니다.
Apache 설치를 망설이지 않으려면 Apache 앞에 오징어 프록시를 넣을 수 있습니다. 또한 스로틀 링을보다 강력하게 제어 할 수 있습니다.
그러나 대부분의 경우 문제는 IP 당 대역폭을 제한하고 사용자가 너무 많은 데이터를 가져 와서 차단할 때 정상적인 오류 메시지를 표시하려는 경우 몇 가지 큰 개체입니다. 이 경우 PHP 스크립트를 작성하고 액세스 정보를 데이터베이스의 임시 테이블에 저장하는 것이 더 쉬울 수 있습니다.
이것이 이런 종류의 문제에 대한 내 iptables 솔루션입니다. --seconds
--hitcount
iptables 테이블도 필요에 따라 조정 하십시오.
iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT
설명 :
iptables
소스 IP가 600 초 간격으로 5 번 이상 / proc / net / ipt_recent / ATACK 파일에 나열되어 있는지 그리고 새로운 요청인지 확인하십시오. 그렇다면 거부하십시오. 그밖에
iptables
요청이 포트 80으로 향하는 지 확인하십시오. 그렇다면 IP 및 타임 스탬프를 / proc / net / ipt_recent / ATACK에 인쇄하고 패킷을 전달하십시오.
내 요구에 잘 작동합니다.
fail2ban과 같은 도구를 살펴 보셨습니까? 약간 부담이 될 수 있지만 주어진 IP가 허용되는 요청 수를 제한 할 수 있습니다. 로그를보고 작동하며 시간당 허용되는 위반 수에 대한 규칙을 설정하여 하루 요청 수 있습니다. 그들이 그것을 넘어 서면 ipchains를 사용하여 차단하는 것과 같은 일을 할 수 있습니다.
메일 서버에 대한 DDoS 공격을 매우 성공적으로 차단하는 데 사용했습니다. 그래도 상당한 양의 프로세서 전력을 소비 할 수 있습니다.
시도 mod_dosevasive
또는mod_security
mod_dosevasive
지정된 수 또는 페이지가 지정된 시간 내에 사이트에 요청 된 후 IP를 금지하도록 구성 할 수 있습니다.