짧은 시간 내에 서버에서 너무 많은 히트를 발생시키는 IP 주소를 자동 및 임시로 차단하는 방법은 무엇입니까?


21

최근에 LAMP 서버 중 하나가 익스플로잇을 찾는 일종의 스크립트 봇에 의해 다운되었습니다. 그것의 외관에서, 그것은 너무 많은 요청을 1 초 동안 만들고 있었기 때문에 서버의 RAM에 과부하가 걸리고 전체 사이트가 한 시간 동안 다운되었습니다. "attacK"는 모두 단일 IP 주소에서 온 것입니다.

그렇다면 짧은 시간 내에 LAMP Server에서 너무 많은 히트를 발생시키는 IP 주소를 자동 및 임시로 어떻게 차단할 수 있습니까? 작업에 가장 적합한 도구는 무엇이며 운영 체제 수준 또는 PHP를 통해이 문제를 해결해야합니까?

답변:


25

Fail2Ban . Linux 플랫폼에서이 문제에 대한 금본 표준 / 기본 솔루션.


재미 있네요 이는 Google과 같은 웹 크롤러를 어떻게 다루거나 영향을 줍니까?
ProgrammerGirl

1
@Programmer 사물을 구성하는 방법에 따라 다르지만 웹 크롤러가 잘못된 암호를 입력하거나, 익스플로잇을 검색하거나, 잘 정의 된 임계 값을 트리거 할 수있는 적중을 쌓아 올릴 것으로 예상하지 않으므로 로그를 확인하십시오. 임계 값을 정의 할 대상
HopelessN00b

5

PHP로 이것을 시도하지 마십시오. PHP가 참여할 때 이미 너무 늦었습니다. 메모리가 이미 할당되었습니다.

모든 계층에서 IP 주소를 차단할 수 있지만 가장 적은 양의 리소스를 사용하는 최저 수준은 원하는 경로입니다. 이것은 일반적으로 방화벽입니다. 최소한 iptables (리눅스 방화벽)는 당신이 사용하고자하는 것입니다. Fail2Ban과 같이 다른 사람이 언급 한 도구를 통해이를 자동화 할 수 있습니다. 외부 방화벽이 더 좋습니다.

문제가되는 IP 주소를 금지하는 것 외에도 리소스를 더 잘 활용해야합니다. 요청에 필요한 리소스가 적 으면 공격이 적용되는 데 시간이 더 걸립니다.

아파치는 또한 많은 메모리를 사용합니다. mod_php를 사용한다면, 모든 아파치 자식 프로세스 안에 PHP가로드되기 때문에 더 나빠집니다. 이는 PHP를 사용하지 않더라도 정적 컨텐츠 (css / js / images)에 대한 요청도 PHP를로드한다는 의미입니다. 대신 FastCGI를 사용하여이 문제를 해결할 수 있습니다. mod_fcgid는 좋은 옵션입니다.

리소스 효율성이 뛰어난 다른 웹 서버도 있습니다. Nginx는 내가 가장 좋아하는 것입니다. Lighttpd도 있습니다. Litespeed와 같은 많은 사람들이 (아파치 대신 사용).

아파치를 고수하고 싶다면 최선을 다해 조정 해보십시오. .htaccess를 비활성화하십시오. 여기에 좋은 설명이 있습니다.


2

http 트래픽을 제어하거나 차단하려면 다음을 사용하십시오.

그러나이 도구는 웹 스파이더를 차단 / 느리게하여 SEO에 영향을 줄 수 있습니다.


2
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

ossec 은 syslog를 기반으로 이러한 유형의 작업을 자동으로 투명하게 수행 할 수 있습니다.


1
첫 번째 코드 줄이 정확히 무엇인지 설명해 주시겠습니까? 또한 ossec은 fail2ban과 어떻게 비교됩니까? 감사.
ProgrammerGirl

2
iptables 규칙입니다. 나는 몇 번의 새로운 연결 시도를했는지 생각하고 60 초 이내에 4 번의 시도를 초과하면 떨어 뜨립니다. man iptables각 깃발의 의미와 함께 작동하는 방식을보고 확인하는 것이 좋습니다 .
누가 복음

-3

누스,

--- 홍수 ---

iptables -N logdrop iptables -logdrop -m 최근 --set --name 블랙리스트

iptables -logdrop -m limit --limit 1 / s --limit-burst 1 -j LOG --log-prefix "Flood :"

iptables-로그 드롭 -j DROP

iptables -N ddos ​​iptables -A ddos ​​-m 최근 --rcheck --name 블랙리스트-초 300 --hitcount 1 -j logdrop iptables -A ddos ​​-m 최근 --set-이름 다시 iptables -A ddos ​​-m 최근 --update --name 다시-초 60 --hitcount 2 -j logdrop iptables -A ddos ​​-j RETURN

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