作者:linux120
发布时间:August 6, 2014
分类:服务器配置
No Comments
一、内核优化
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 0
net.ipv4.tcp_synack_retries = 0
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
二、防火墙设置
*filter
:INPUT DROP [4:261]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1384:1035760]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name ddos --rsource
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 30 --name ddos --rsource -j LOG --log-prefix "ddos"
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 30 --name ddos --rsource -j DROP
-A INPUT -p icmp -m icmp --icmp-type 13 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 14 -j DROP
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
COMMIT
三、增加recent模块记录IP地址的数量(最大8100个)
# vi /etc/modprobe.conf
#增加下面一行
options ipt_recent ip_list_tot=3000 ip_pkt_list_tot=60
这里我们可以调整两个参数:
1) 允许的最大跟踪连接条目,CONNTRACK_MAX
2) 存储跟踪连接条目列表的哈希表的大小,HASHSIZE
3) 默认情况下,CONNTRACK_MAX = HASHSIZE * 8
# vi /etc/sysctl.conf
net.ipv4.netfilter.ip_conntrack_max = 1048576
复制代码
# vi /etc/modprobe.conf
options ip_conntrack hashsize=131072
复制代码
参考文章:
http://www.chinaunix.net/jh/36/596067.html
http://blog.sina.com.cn/s/blog_485acedb0100b9zt.html
作者:linux120
发布时间:July 3, 2014
分类:服务器配置
No Comments
防范DOS攻击用iptables就可以简单的实现,不过对CC攻击还是无效的,接下来我会再写关于抵御CC攻击和DDOS攻击的文章。
在《用iptables的connlimit模块限制并发连接数》一文中我们讲了利用iptables的connlimit模块来限制单IP的并发连接数,效果还是很不错的。后来我发现再加上recent模块更加灵活。
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
iptables -I INPUT 2 -p tcp --dport 80 -m state --state NEW -m recent --set --name DOS
iptables -I INPUT 3 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 30 --name DOS -j DROP
1.利用connlimit模块将单IP的并发设置为30;会误杀使用NAT上网的用户,可以根据实际情况增大该值;
2.利用recent和state模块限制单IP在60s内只能与本机建立30个新连接。被限制一分钟后即可恢复访问。
下面对最后两句做一个说明:
1.第一句是记录访问tcp 80端口的新连接,记录名称为DOS
--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目
2.第二句是指DOS记录中的IP,60s内发起超过20次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用
3.iptables的记录:/proc/net/ipt_recent/DOS
关于recent更多更详细的用法请查看iptables手册。
另外iptables还有日志记录功能,我们可以把达到过滤要求的IP输出到系统日志中,然后把这些IP筛选出来封掉。
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --name DOS --second 60 --hitcount 30 -j LOG --log-prefix "Dos Attack"
这样一来,当某IP访问tcp 80端口的新连接在60秒内超过30的时候,该IP将会被记录/var/log/messages当中。
作者:linux120
发布时间:June 3, 2014
分类:服务器配置
No Comments
iptables的--connlimit匹配项可以限制ip并发连接数。然而并没有以静态方式编译进内核,故我们使用此选项时会提示错误。
网上绝大部分的解决方案均是重新编译内核,其实有更简单的方法。
对于linux的模块,没有静态编译进内核的,其实大部分已经编译成动态模块,我们其实只要找出是哪个模块问题便解决了,而此匹配项对应的模块是ipt_connlimit,下面便是详细解决方法。
# depmod -a
此命令的作用便是找出所有可用的动态模块,这个命令是必须的,它不会有输出。
下一步是将模块插入内核
modprobe ipt_connlimit
同样不会有输出,没提示出错便表示成功了。(注意:insmod也是将模块插入内核,但是它不会自动清理模块的依赖关系,若依赖模块没先插入,便直接报错,不推荐使用)
这时我们可以使用connlimit匹配项了:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT
示例写得有些简单,我们可根据连接状态来匹配,甚至可以根据某一次DOS攻击,包的特征来匹配。这里,各位自由发挥了。
这里再例出对connlimit两个参数的研究:
--connlimit-above x 限定并发连接的最大数目
--connlimit-mask x 限定某个网络的最大并发连接数,x为32时,代表具体的主机,为默认值。x的值一般是代表A,B,C三类网络的8,16,24。至于支不支持变长子网,待研究。
作者:linux120
发布时间:June 1, 2014
分类:服务器配置
No Comments
运行一段时间以后mysql数据表会产生很多碎片,需要优化,可以手工执行以下命令:
mysqlcheck -Aos -u USER -pPASS
也可以每天早上4点自动执行优化:
0 4 * * * mysqlcheck -Aos -u USER -pPASS > /dev/null 2>&1
innodb是不支持碎片整理的,所以我们绕过他:
for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; do mysql -e "optimize table $i"; done
作者:linux120
发布时间:May 26, 2014
分类:服务器维护
No Comments
找到并编辑/etc/proftpd.conf
注释VRoot开头的两行,如下。重启ftp即可。
#VRootEngine on
DefaultRoot ~/public_html !root
#VRootAlias /etc/security/pam_env.conf etc/security/pam_env.conf
- «
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- ...
- 16
- »