출처 : http://spamcleaner.org/en/misc/flood-http-mod_security.html

원제 : HTTP DDoS/flood attacks mitigation with ModSecurity
ModSecurity를 이용한 HTTP DDoS/flood 공격 완화 (방어, 대응보다는 완화에 가깝겠네요)

 ModSecurity와 iptables를 이용한 ip 차단에서 다룬 modsec2ipt를 이용해 과도한 연결을 시도하는 IP를 drop
(modsecurity의 drop - tcp reset 및 iptables를 이용한 drop(packet drop)하는 방법에 대해 기술하고 있는 문서 입니다.


기존에 차단 rule이 이미 있다면 아래 rule을 먼저 적용해야(modsecurity는 rule을 순차 적용 합니다) DDOS변수로

빠져나가게 되는 일을 막을 수 있습니다. rule에 사용된 지시자의 설명은 링크로 대체합니다.

SecAction initcol:ip=%{REMOTE_ADDR},nolog

SecRule REQUEST_LINE "^GET (?:/|.+.html|.+.php|.+.cgi|.+.pl) HTTP"
"nolog,setvar:ip.ddos=+1,deprecatevar:ip.ddos=100/10"

SecRule IP:DDOS "@gt 50" "log,exec:/path_to/modsec2ipt.pl"
SecRule IP:DDOS "@gt 25" "nolog,drop"


간단한 설명은 아래를 참고하세요.

SecAction initcol:ip=%{REMOTE_ADDR},nolog
#지속연결 collection의 초기화를 위해 initcol을 사용. 같은 아이피에서의 요청 횟수를 측정,
#ip collection을 위한
DDOS변수를 생성하고 각연결마다 숫자를 증가시킴(+1)

SecRule REQUEST_LINE "^GET (?:/|.+.html|.+.php|.+.cgi|.+.pl) HTTP"
"nolog,setvar:ip.ddos=+1,deprecatevar:ip.ddos=100/10"
#HTTP요청중 'GET'이고 웹서버의 루트 디렉토리("/"), html,php,cgi,pl파일만 필터링에 포함시킴

SecRule IP:DDOS "@gt 50" "log,exec:/path_to/modsec2ipt.pl"
SecRule IP:DDOS "@gt 25" "nolog,drop"
#DDOS변수가 25보다 크면 drop( tcp reset)시키고 50이 넘으면 modsec2ipt.pl를 이용해 iptables의
#drop chain(packet drop)으로
해당 IP를 넘겨줌


주의점 : 

* windows용 ModSecurity는 drop action은 동작하지 않습니다.

* rule과 매치되는 상황은 nolog로 설정해 불필요하게 log파일이 커지는 것을 방지 하는것이 좋습니다.
   (log flood로 이어지는 상황이 발생할 수도 있습니다)

* REQUEST_LINE과 threshold limit는 해당 서버의 설정에 맞게 적절히 수정해 사용해야 합니다.

정확한 이해와 사용을 위해서는 꼭 원문을 읽어보시기를 권합니다.


+ Recent posts