Apache : IP 당 요청 / 트래픽 수를 제한 하시겠습니까?


12

한 IP가 하루에 최대 1GB의 트래픽을 사용하도록 허용하고 싶습니다. 한도를 초과하면 해당 IP의 모든 요청이 다음 날까지 삭제됩니다. 그러나 일정량의 요청 후에 연결이 끊기는 더 간단한 솔루션이면 충분합니다.

이 작업을 수행 할 수있는 모듈이 있습니까? 아니면 iptables와 같은 것을 통해 이것을 달성 할 수 있습니까?

감사


아파치 버전?
— pehrs

2.2-문자 제한 채우기

답변:


5

순수한 Apache 솔루션을 원한다면 Apache 2.0의 경우 bw_mod, Apache 1.3의 경우 mod_bandwidth입니다. 서버의 대역폭을 조절하여 대역폭 사용을 제한 할 수 있습니다.

mod_limitipconn도있어 한 명의 사용자가 서버에 많은 연결을하지 못하게합니다. mod_cband는 또 다른 옵션이지만 결코 사용하지 않았습니다.

Apache 설치를 망설이지 않으려면 Apache 앞에 오징어 프록시를 넣을 수 있습니다. 또한 스로틀 링을보다 강력하게 제어 할 수 있습니다.

그러나 대부분의 경우 문제는 IP 당 대역폭을 제한하고 사용자가 너무 많은 데이터를 가져 와서 차단할 때 정상적인 오류 메시지를 표시하려는 경우 몇 가지 큰 개체입니다. 이 경우 PHP 스크립트를 작성하고 액세스 정보를 데이터베이스의 임시 테이블에 저장하는 것이 더 쉬울 수 있습니다.


2
제안 해 주셔서 감사합니다. 나는 이미 bw_mod와 mod_limitipconn을 살펴 보았지만 (내가 말할 수있는 한) 어느 것도 내가 원하는 것을하지 않습니다. mod_limitipconn은 한 번에 하나의 연결로만 제한하며 bw_mod를 사용하면 IP 당 다운로드 속도 만 제한 할 수 있습니다. 일정량의 데이터 전송 / 요청 후 차단하고 싶습니다. 실제로 전체 사이트를 크롤링하고 모든 것을 다운로드해야하는 특정 사용자를 방어하려고합니다. 오징어 대리를 살펴보면 재미있을 것 같습니다. 그래도 문제가 해결되지 않으면 bw_mod 소스를 수정하는 것이 좋습니다.

거미를 허용하지 않도록 robots.txt를 설정 했습니까?
— pehrs

1
robots.txt의 문제점은 RFC 3514와 매우 유사하지만 멋진 로봇 만이이를 존중한다는 것입니다.
— Scott Pack

그러나 사이트를 스파이더 링하는 대부분의 사람들은 표준 도구를 사용합니다. 그리고 wget과 같은 많은 것들이 robots.txt를 존중합니다. Robots.txt는 또한 사용자에게 스파이더 링을 원하지 않음을 알리는 올바른 방법입니다.
— pehrs

1
나는 그것을 시도했다. 처음에 robots.txt가 충분하면 Wget에 robots.txt를 무시하라고 지시했기 때문에 "인식되지 않은"사용자 에이전트를 차단하는 데 의존했지만 사용자 에이전트를 스푸핑했습니다. 합법적 인 브라우저는 그렇지 않지만 헤드 요청을 많이하는 경향이 있으므로 헤드 요청을 제한하거나 모두 사용하지 않도록 설정할 수 있습니다 (바람직하지 않음).

5

이것이 이런 종류의 문제에 대한 내 iptables 솔루션입니다. --seconds --hitcountiptables 테이블도 필요에 따라 조정 하십시오.

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

설명 :

  1. iptables소스 IP가 600 초 간격으로 5 번 이상 / proc / net / ipt_recent / ATACK 파일에 나열되어 있는지 그리고 새로운 요청인지 확인하십시오. 그렇다면 거부하십시오. 그밖에

  2. iptables 요청이 포트 80으로 향하는 지 확인하십시오. 그렇다면 IP 및 타임 스탬프를 / proc / net / ipt_recent / ATACK에 인쇄하고 패킷을 전달하십시오.

내 요구에 잘 작동합니다.


3

fail2ban과 같은 도구를 살펴 보셨습니까? 약간 부담이 될 수 있지만 주어진 IP가 허용되는 요청 수를 제한 할 수 있습니다. 로그를보고 작동하며 시간당 허용되는 위반 수에 대한 규칙을 설정하여 하루 요청 수 있습니다. 그들이 그것을 넘어 서면 ipchains를 사용하여 차단하는 것과 같은 일을 할 수 있습니다.

메일 서버에 대한 DDoS 공격을 매우 성공적으로 차단하는 데 사용했습니다. 그래도 상당한 양의 프로세서 전력을 소비 할 수 있습니다.


현재; y 이것을 직접 구현하려고합니다. 그것이 작동하는 희망
— 다크 Star1

1

시도 mod_dosevasive또는mod_security

mod_dosevasive 지정된 수 또는 페이지가 지정된 시간 내에 사이트에 요청 된 후 IP를 금지하도록 구성 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.