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.