小规模攻击,简单搞定[zt]

小规模攻击,简单搞定 http://www.thismail.org/bbs/viewthread.php?tid=2761&extra=page%3D1

  一台服务器被攻击了,几个ip拼命的刷首页,一小时服务14W个请求,平均占用带宽到12M多,CPU持续100%占用,但据说当地访问者还能打开网站。

解决办法,毙掉这几个IP

服务器是Freebsd系统的,先前没有启动防火墙,顺便就熟悉一遍Freebsd下面的pf防火墙吧。

Freebsd里面有三个各有特点的防火墙

Freebsd自己的ipfw ,跨Unix平台的ipfilter ,移植自Openbsd的pf ,

任意一个都能满足要求,但个人对pf颇有好感,就用他了。


开始了:

第一步,启用PF模块

# kldload pf
# kldstat
Id Refs Address Size     Name
1 7 0xc0400000 5465fc kernel
2 1 0xc0947000 16418 geom_mirror.ko
3 1 0xc095e000 191c     accf_data.ko
4 1 0xc0960000 2354     accf_http.ko
5 1 0xc0963000 69174 acpi.ko
6 1 0xcb4f7000 33000 pf.ko

并放入引导中,下次自动加载

#vi /boot/loader.conf

pf_load="YES"


第二步,允许PF功能

#vi /etc/rc.conf

增加下面一行

pf_enable="YES"

/etc/rc.conf: 17 lines, 596 characters.


第三步, 打开pf

# pfctl -e
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled

ALTQ 是pf的流量整形,默认没有编译到内核中,所以有不支持ALTQ的提示


启用完成


#####################


编辑 防火墙规则文件,增加一些简单的防火墙规则

#vi /etc/rc.conf

增加/编辑一个 table表 表名 bad 把你看得不爽的IP放进去, 注意:规则中的bad要用尖括号括起来,下面因为编辑器的原因,我把尖括号去掉了


ext_if="em0"

table   bad { 219.136.52.xx, 218.168.162.xx, 221.210.65.xx } 

pass in all
pass out all

pass in quick on $ext_if proto tcp from any to $ext_if port 22 keep state

block in quick   on $ext_if from bad #这行规则就是拒绝所有bad表中的IP访问服务器


###########

让规则文件生效 

#pfctl -f /etc/rc.conf


如果需要临时更改bad表的内容,一条命令就让你迅速毙掉此IP

#pfctl -t bad   -T add   202.201.98.10

顺便说一句table中的内容可以是单个IP,也可以是一个网段   202.201.98.0/24

也可以删除掉bad表中的ip定义

#pfctl -t bad   -T delete   202.201.98.10


#pfctl -t bad -T show -v

可以查看这个表中,各个IP的被处理的情况,block /pass的packet数、byte数 等等......


做完,世界清静了,cpu idle恢复到80-90%左右


http://www.zmoon.org/read.php/539.htm

你可能感兴趣的:(#Freebsd)