±¾ÎĽ«ÃèÊöÒ»ÖÖ¾¡Á¿¼òµ¥µÄ·´ÅÀ³æ·½°¸£¬¿ÉÒÔÔÚÊ®¼¸·ÖÖÓÄÚ½â¾ö²¿·Ö¼òµ¥µÄÅÀ³æÎÊÌ⣬»º½â¶ñÒâ¹¥»÷»òÕßÊÇϵͳ³¬¸ººÉÔËÐеÄ×´¿ö£»ÖÁÓÚ¸´ÔÓµÄÅÀ³æÒÔ¼°¸ü¾«×¼µÄ·ÀÓù£¬ÐèÒªÁíÍâÌÖÂÛ¡£

ÅÀ³æºÍ·´ÅÀ³æÈÕÒæ³ÉΪÿ¼Ò¹«Ë¾µÄ±êÅäϵͳ¡£ÅÀ³æÔÚÇ鱨»ñÈ¡¡¢Ðé¼ÙÁ÷Á¿¡¢¶¯Ì¬¶¨¼Û¡¢¶ñÒâ¹¥»÷¡¢Þ¶ÑòëµÈ·½Ãæ¶¼ÄÜÆðµ½ºÜ¹Ø¼üµÄ×÷Óã¬ËùÒÔÿ¼Ò¹«Ë¾¶¼»ò¶à»òÉÙµÄÐèÒª¿ª·¢Ò»Ð©ÅÀ³æ³ÌÐò£¬Òµ½çÔÚÕâ·½ÃæµÄ³ÉÊìµÄ·½°¸Ò²·Ç³£¶à;ÓÐì¾ÍÓжܣ¬Ã¿¼Ò¹«Ë¾Ò²ÏàÓ¦µÄÐèÒª·´ÅÀ³æÏµÍ³À´´ïµ½Êý¾Ý±£»¤¡¢ÏµÍ³Îȶ¨ÐÔ±£ÕÏ¡¢¾ºÕùÓÅÊÆ±£³ÖµÄÄ¿µÄ¡£
È»¶ø£¬Ò»·½Ãæ·ÀÊØÕâÊÂROI²»ºÃÌåÏÖ£¬ÁíÒ»·½Ãæ·´ÅÀ³æÕâÖÖϵͳ£¬Ïà¶Ô¼òµ¥µÄÅÀ³æÀ´ËµÄѶȺ͸´ÔӶȶ¼Òª¸ßºÜ¶à£¬ÍùÍùÐèÒªÒ»ÕûÌ×´óÊý¾Ý½â¾ö·½°¸²ÅÄܰÑÊÂÇé×öºÃ£¬Òò´ËÖ»ÓÐÉÙÁ¿µÄ¹«Ë¾¿ÉÒÔÍæ×ªÆðÀ´¡£µ±³öÏÖÎÊÌâµÄʱºò£¬ºÜ¶à¹«Ë¾ÍùÍùÊøÊÖÎ޲ߡ£
±¾ÎĽ«ÃèÊöÒ»ÖÖ¾¡Á¿¼òµ¥µÄ·´ÅÀ³æ·½°¸£¬¿ÉÒÔÔÚÊ®¼¸·ÖÖÓÄÚ½â¾ö²¿·Ö¼òµ¥µÄÅÀ³æÎÊÌ⣬»º½â¶ñÒâ¹¥»÷»òÕßÊÇϵͳ³¬¸ººÉÔËÐеÄ×´¿ö;ÖÁÓÚ¸´ÔÓµÄÅÀ³æÒÔ¼°¸ü¾«×¼µÄ·ÀÓù£¬ÐèÒªÁíÍâÌÖÂÛ¡£
ÕûÌ×·½°¸»á¾¡Á¿¼òµ¥Ò×¶®£¬²»»áÉæ¼°µ½×¨ÃŵijÌÐò¿ª·¢£¬Í¬Ê±¾¡Á¿ÀûÓÃÏÖÓеÄ×é¼þ£¬±ÜÃâ¶îÍâ×é¼þµÄÒýÈë¡£ÄÚÈÝÉÏÖ÷Òª·ÖΪÈý´ó²¿·Ö£º
1.·ÃÎÊÊý¾Ý»ñÈ¡¡£²É¼¯Óû§µÄ·ÃÎÊÊý¾Ý£¬ÓÃÀ´×öÅÀ³æ·ÖÎöµÄÊý¾ÝÔ´
2.ÅÀ³æ·â½û¡£µ±ÕÒµ½ÅÀ³æºó£¬Ïë°ì·¨È¥×è¶ÏËüºóÐøµÄ·ÃÎÊ
3.ÅÀ³æ·ÖÎö¡£Ê¾Àýͨ¹ý¼òµ¥²ßÂÔÀ´·ÖÎö³öÅÀ³æ
¼òµ¥µÄÊý¾Ý»ñÈ¡
Êý¾Ý»ñÈ¡ÊÇ×öºÃ·´ÅÀ³æÏµÍ³µÄ¹Ø¼ü£¬³£¼ûµÄ¼¸ÖÖģʽ

±¾Æª£¬²ÉÓÃnginxµÄÈÕÖ¾·½Ê½£¬ÕâÖÖÖ»ÐèҪͨ¹ý¶Ô³£¼ûµÄnginx×î¼òµ¥µÄÅäÖþÍÄÜ´ÓÔ¶³Ì»ñÈ¡ÏàÓ¦µÄ·ÃÎÊÈÕÖ¾
¹Ù·½nginxÅäÖãº
log_format warden '" "$remote_addr" "$remote_port"
"$server_addr" "$server_port" "$request_length" "$content_length"
"$body_bytes_sent" "$request_uri" "$host" "$http_user_agent" "$status
" "$http_cookie" "$request_method" "$http_referer" "$http_x_forwarded_for" "$request_time"
"$sent_http_set_cookie" "$content_type" "$upstream_http_content_type" "$request_body"\n'; access_log syslog:server=127.0.0.1:9514 warden ; |
tengineÅäÖÃ(±àÒëʱ´øÉÏ--with-syslog)
log_format warden '" "$remote_addr" "$remote_port" "$server_addr"
"$server_port" "$request_length"
"$content_length" "$body_bytes_sent" "$request_uri" "$host" "
$http_user_agent" "$status" "$http_cookie" "$request_method"
"$http_referer" "$http_x_forwarded_for" "$request_time"
"$sent_http_set_cookie" "$content_type" "$upstream_http_content_type"
"$request_body"\n'; access_log syslog:user::127.0.0.1:9514 warden ; |
ÕâÀïÃæÐèҪעÒâµÄÊÇ£º
1.ÓÉÓÚ½ÏÀϵÄnginx¹Ù·½°æ±¾²»Ö§³Ösyslog£¬ËùÒÔtengineÔÚÕâ¿é¹¦ÄÜÉÏ×öÁ˵¥¶ÀµÄ¿ª·¢(ÐèҪͨ¹ý±àÒëÑ¡ÏîÀ´ÆôÓÃ)£¬ÔÚ²»È·¶¨µÄÇé¿öÏ£¬ÇëÐÞ¸ÄÅäÖÃ
ÎļþºóÏÈʹÓÃ(nginx -t)À´²âÊÔһϣ¬Èç¹û²»Í¨¹ý£¬ÐèÒªÖØÐÂÔÚconfigureʱ¼ÓÉÏsyslogÑ¡Ï²¢±àÒë¡£
2.¾¡Á¿»ñÈ¡Á˸úÅÀ³æÏà¹ØµÄÊý¾Ý×ֶΣ¬Èç¹ûÓж¨ÖƵÄhttp header£¬¿ÉÒÔ×ÔÐмÓÉÏ
²ÉÓÃudp·½Ê½À´·¢ËÍsyslog£¬¿ÉÒÔ½«·ÃÎÊÈÕÖ¾·¢Ë͸øÔ¶¶Ë·ÖÎö·þÎñ£¬Í¬Ê±udpµÄ·½Ê½±£Ö¤nginx±¾Éí²»»áÊܵ½Ó°Ïì
3.·ÃÎÊÈÕÖ¾Äò»µ½ÏìÓ¦µÄ¾ßÌåÄÚÈÝ(nginxÓа취¸ã¶¨£¬µ«Óдú¼Û)£¬ÎÞ·¨Ö§³ÖÒµÎñÏà¹ØµÄ·À»¤
¼òµ¥µÄÅÀ³æ·â½û
·´ÅÀ³æ×îºóµÄÉúЧ£¬ÐèÒª¿¿ºÏÀíµÄ·â½ûģʽ£¬ÕâÀï±È½Ï¼¸ÖÖģʽ£º

±¾¶Î½«½éÉÜ»ùÓÚiptablesµÄ·½°¸£¬ËäÈ»ÊÊÓ÷¶Î§½ÏС;µ«ÊÇÒÀÀµÉÙ£¬¿ÉÒÔͨ¹ý¼òµ¥ÅäÖÃlinux¾ÍÄܴﵽЧ¹û¡£
µÚÒ»²½
°²×°ipset¡£ipsetÀ©³äÁËiptablesµÄ»ù±¾¹¦ÄÜ£¬¿ÉÒÔÌṩ¸ü¼Ó¸ßЧµÄ·ÃÎÊ¿ØÖÆ # centos 6.5ÉÏÃæ°²×°·Ç³£¼òµ¥ sudo yum install -y ipset |
µÚ¶þ²½
ÔÚiptablesÖн¨Á¢ÏàÓ¦µÄipset£¬À´½øÐзÃÎÊȨÏ޵ķâ½û
# ÐÂÔöÓÃÓÚ·â½ûµÄipset sudo ipset -N --exist warden_blacklist iphash # Ôö¼ÓÏàÓ¦µÄiptables¹æÔò sudo iptables -A INPUT -m set --set warden_blacklist src -j DROP # ±£´æiptables sudo service iptables save |
µÚÈý²½
»ñÈ¡µ±Ç°·â½ûµÄipºÚÃûµ¥£¬²¢µ¼Èëµ½iptablesÀïÃæÈ¥
sudo ipset --exist destroy warden_blacklist_tmp;
sudo ipset -N warden_blacklist_tmp iphash; echo "1.1.1.1,2.2.2.2" | tr ,
"\n" | xargs -n 1 -I {} sudo ipset -A warden_blacklist_tmp {} ;
sudo ipset swap warden_blacklist_tmp warden_blacklist |
ÕâÀïΪÁ˾¡¿ÉÄܵÄÌáÉýЧÂÊ£¬×÷ÁËÒÔÏÂÊÂÇ飺
1.½¨Á¢ÁÙʱipset£¬·½±ã×ö²Ù×÷
2.½«µ±Ç°·â½ûºÚÃûµ¥ÖеÄipÌáÈ¡³öÀ´£¬¼ÓÈëµ½´Ëipset(ʾÀýÖÐÓÃÁË×î¼òµ¥µÄechoÀ´Õ¹Ê¾£¬Êµ¼Ê¿ÉÏàÓ¦µ÷Õû)
3.½«ipsetͨ¹ýÔ×Ó²Ù×÷ÓëiptablesÕýÔÚʹÓõÄipset×÷½»»»£¬ÒÔ×îСµÄ´ú¼Û½«×îеĺÚÃûµ¥ÉúЧ
¼òµ¥µÄÅÀ³æ²ßÂÔ
ÒªÄܾ«È·µÄ·ÖÎöÅÀ³æ£¬ÐèҪǿ´óµÄÊý¾Ý·ÖÎöƽ̨ºÍ¹æÔòÒýÇæ£¬À´·ÖÎöÕâ¸öIP/É豸/Óû§·Ö±ðÔÚ¶Ìʱ¼äÇø¼ä/³¤Ê±¼ä·¶Î§ÀïµÄÐÐÎªÌØÕ÷ºÍ¹ì¼££¬ÕâÀïÉæ¼°µ½Á˷dz£¸´ÔÓµÄÊý¾Ýϵͳ¿ª·¢£¬±¾ÎĽ«Í¨¹ý¼òµ¥µÄshell½Å±¾ÃèÊö±È½Ï¼òµ¥µÄ¹æÔò
Àý×Ó1£¬·â½û×î½ü100000ÌõÖзÃÎÊÁ¿³¬¹ý5000µÄip
nc
-ul 9514 | head -100000 | awk -F '" "'
'{print $2}'
| sort | uniq -c | sort -nr |
awk '$1>=5000 {print $2}'
|
ÕâÀïÃæ£º
1.udp·þÎñ¼àÌýnginx·¢¹ýÀ´µÄsyslogÏûÏ¢£¬²¢È¡10000Ìõ£¬ÕÒµ½ÆäÖÐÿÌõ·ÃÎʼǼµÄip
2.ͨ¹ýsort ºÍuniqÀ´»ñȡÿ¸öip³öÏֵĴÎÊý£¬²¢½øÐнµÐòÅÅÁÐ
3.ÔÙͨ¹ýawkÕÒµ½ÆäÖг¬¹ýãÐÖµµÄip£¬Õâ¾ÍµÃµ½ÁËÎÒÃÇËùÐèÒªµÄ½á¹û¡£
Àý×Ó2£¬·â½û×î½ü100000ÌõÖÐuser agentÃ÷ÏÔÊdzÌÐòµÄip
nc
-ul 9514 | head -100000 | awk -F '" "'
'$10 ~
/java|feedly|universalfeedparser|apachebench|microsoft
url control|python-urllib|httpclient/
{print $2}' | uniq
|
ÕâÀïÃæ£º
1.ͨ¹ýawkµÄÕýÔòÀ´¹ýÂ˳öÎÊÌâagent£¬²¢½«ÏàÓ¦ipÊä³ö
2.¹ØÓÚagentµÄÕýÔò±í´ïʽÁгöÁ˲¿·Ö£¬¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿öÈ¥µ÷ÕûºÍ»ýÀÛ
µ±È»£¬ÕâÀïÖ»ÊÇÁоÙÁ˼òµ¥µÄÀý×Ó£¬ÓкܶàµÄ²»×ãÖ®´¦
1.ÓÉÓÚÖ»²ÉÓÃÁËshell£¬¹æÔò±È½Ï¼òµ¥£¬¿ÉÒÔͨ¹ýÀ©Õ¹awk»òÕ߯äËûÓïÑԵķ½Ê½À´ÊµÏÖ¸ü¸´ÔӵĹæÔò
2.ͳ¼ÆµÄ´°¿ÚÊÇÿ100000Ìõ£¬ÕâÖÖͳ¼Æ´°¿Ú±È½Ï´Ö²Ú£¬ºÃµÄͳ¼Æ·½Ê½ÐèÒªÔÚÿÌõʵʱÊý¾ÝÊÕµ½ÊǶԹýÈ¥µÄһС¶Îʱ¼ä(ÀýÈç5·ÖÖÓ)ÖØÐÂ×öͳ¼Æ¼ÆËã
3.²»¹»ÊµÊ±£¬ÎÞ·¨ÊµÊ±µÄÓ¦¶Ô¹¥»÷ÐÐΪ;Éú²ú»·¾³ÖУ¬ÐèÒªºÁÃë¼¶µÄÏìÓ¦À´Ó¦¶Ô¸ß¼¶ÅÀ³æ
4........
Æ´ÆðÀ´
ËùÓÐÄ£¿é×éºÏÆðÀ´£¬×öÒ»¸öÍêÕûµÄÀý×Ó¡£¼ÙÉ裺
1.¸ºÔؾùºâ192.168.1.1£¬Ê¹ÓÃÁ˹ٷ½nginx£¬²¢ÅäÖÃÁËsyslog·¢Íù192.168.1.2
2.192.168.1.2Æô¶¯nc server£¬Ã¿¸ôÒ»¶Îʱ¼ä½øÐзÖÎö£¬ÕÒ³öÎÊÌâip£¬²¢Í¸ø192.168.1.1
3.192.168.1.1ͨ¹ýiptables½øÐÐ×èÀ¹£¬Êý¾ÝÀ´Ô´ÓÚ192.168.1.2µÄ·ÖÎö»úÆ÷
³ýÁËnginxÅäÖúÍiptables»ù±¾ÅäÖã¬Ç°¼¸¶ÎµÄÅäÖÃÂÔ×÷¸Ä¶¯£º
###
nginx conf@192.168.1.1
log_format warden '" "$remote_addr"
"$remote_port" "$server_addr"
"$server_port" "$request_length"
"$content_length" "$body_bytes_sent"
"$request_uri" "$host"
"$http_user_agent" "$status"
"$http_cookie"
"$request_method" "$http_referer"
"$http_x_forwarded_for" "$request_time"
"$sent_http_set_cookie"
"$content_type" "$upstream_http_content_type"
"$request_body"\n';
access_log syslog:server=192.168.1.2:9514
warden ;
### ·ÖÎö@192.168.1.2, Ôö¼ÓÁ˽á¹û»áÍ£¬Í¬Ê±Ã¿¸ô60·ÖÖÓÅÜÒ»´Î£¬°ÑÊý¾Ý·µ»Ø¸ø192.168.1.1
while true ; do nc -ul 9514 |
head -100000 | awk -F '" "' '{print
$2}'
| sort | uniq -c | sort -nr |
awk '$1>=5000 {print $2}' | tr '\n' ','
| awk '{print $0}' | socat - UDP:192.168.1.1:9515
; sleep 3600 ; done
### ×è¶Ï@192.168.1.1
#»ù´¡ÅäÖÃ
sudo ipset -N --exist warden_blacklist
iphash
sudo iptables -A INPUT -m set
--set warden_blacklist src -j DROP
sudo service iptables save
#¶¯Ì¬½ÓÊÕ²¢¸üÐÂiptables
while true ; do sudo ipset --exist
destroy warden_blacklist_tmp;
sudo ipset -N warden_blacklist_tmp
iphash; socat UDP-LISTEN:9515 - |
tr , "\n" | xargs -n
1 -I {} sudo ipset -A warden_blacklist_tmp {}
;
sudo ipset swap warden_blacklist_tmp
warden_blacklist ; sudo ipset list ; done
|
ÒÔÉÏÖ»ÊǼòµ¥Ê¾Àý£¬Êµ¼ÊÖл¹Êǽ¨Òé»»³Éshell½Å±¾
×ܽá
±¾ÎÄÁгöÒ»ÖÖ¼òµ¥µÄ·´ÅÀ³æ·½°¸£¬ÓÉÓÚ¹ýÓÚ¼òµ¥£¬¿ÉÒÔµ±×ö¸ÅÄîʾÀý»òÕßÊǾȼ±·½°¸£¬Èç¹ûÐèÒª½øÒ»²½É£¬ÐèÒªÔÚÒÔÏ·½ÃæÈ¥¼ÓÇ¿£º
1.Ç¿»¯Êý¾ÝÔ´£¬¿ÉÒÔͨ¹ýÁ÷Á¿»ñµÃÈ«Á¿Êý¾Ý¡£Ä¿Ç°ÅÀ³æµÈÍøÂç¹¥»÷Öð½¥×ªÏòÒµÎñÃÜÇÐÏà¹ØµÄ²¿·Ö£¬ÍùÇ®µÄ·½Ïò¿¿½ü£¬ËùÒÔÐèÒª¸ü¶àµÄÒµÎñÊý¾ÝÈ¥Ö§³Å£¬¶ø²»½ö½öÊÇ·ÃÎÊÈÕÖ¾
2.¸üÁé»îµÄ×è¶Ï£¬ÐèÒªÓжàÖÖ×è¶ÏÊֶκÍÂÔ¸´ÔÓµÄ×è¶ÏÂß¼
3.³ýÈ´ip£¬»¹ÐèÒª¿¼²ìÓû§¡¢Éè±¸Ö¸ÎÆµÈ¶àÖÖ×·×Ù·½Ê½£¬Ó¦¶ÔÒÆ¶¯»·¾³ºÍipv6»·¾³Ï£¬¡°IP¡±ÕâÒ»ÐÅÏ¢µÄÁ¦²»´ÓÐÄ
4.Ç¿»¯¹æÔòÒýÇæºÍÄ£ÐÍ£¬ÐèÒª¿¼²ì¸ü¶àÓû§ÐÐΪµÄÌØÕ÷£¬½ö½ö´ÓƵÂʵÈÊÖ¶ÎÖ»µÈÓ¦¶ÔɵÅÀ³æ£¬Í¬Ê±»áÔì³ÉÎóɱÂʸü¸ß
5.½¨Á¢Êý¾Ý´æ´¢¡¢ËÝÔ´¡¢Í³¼ÆÌåϵ£¬·½±ã·ÖÎöÈËԱȥ·ÖÎöÊý¾Ý²¢½¨Á¢ÐµÄÄ£Ðͺ͹æÔò¡£·´ÅÀ³æÊÇÒ»¼þ³ÖÐøÐÔÐÐΪ£¬ÐèÒªÁ¼ºÃµÄƽ̨À´Ö§³Å¡£
6.¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèҪȥ×öºÃ·´ÅÀ³æÏµÍ³µÄ¼¯³É¡£±ÈÈçnginxÊý¾Ý-->·´ÅÀϵͳ-->nginx×è¶Ï;F5Êý¾Ý-->·´ÅÀϵͳ-->F5×è¶Ï
|