阿里云DDOS防护——ubuntu14.04下iptables的使用

在11月2日阿里云服务器连续被DDOS干掉两次,11月4日被干掉一次后,学了一点iptables防火墙的使用,现在是11月7日,设置iptables三天后。

暂时没有崩溃,若崩溃我会立刻删除这篇博文,如果你还能看到的话,大概就是iptables成功起了点作用。

这是最近几次的网络流量异常,写有123的是被击垮的三次,在这之后又出现三次异常,但是服务器没有出现问题,尤其11月7日强度为之前三倍的入网流量,服务器依旧在运行着。

阿里云DDOS防护——ubuntu14.04下iptables的使用_第1张图片


关于iptables

iptables 是与 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

IPTABLES命令的使用详解

1,规则管理类
#iptables -A    添加一条新规则
#iptables -I    插入一条新规则 -I 后面加一数字表示插入到哪行
#iptables -D    删除一条新规则 -D 后面加一数字表示删除哪行
#iptables -R    替换一条新规则 -R 后面加一数字表示替换哪行
2.链管理类
#iptables -F    清空链中的所有规则
#iptables -N    新建一个链
#iptables -X    删除一个自定义链,删除之前要保证次链是空的,而且没有被引用
#iptables -E    重命名链
3.默认管理类
#iptables -P    设置默认策略
4,查看类
#iptables -L    查看规则 -L还有几个子选项如下
#iptables -L -n 以数字的方式显示
#iptables -L -v 显示详细信息
#iptables -L -x 显示精确信息
#iptables -L --line-numbers 显示行号
5,条件匹配类
5.1 基本匹配
条件匹配也可以使用 ! 取反
-s    源地址
-d    目标地址
-p    协议{tcp|udp|icmp}
-i    从哪个网络接口进入,比如 -i eth0
-o    从哪个网络接口出去,比如 -o eth0
5.2扩展匹配
5.2.1隐含扩展匹配
-p {tcp|udp} --sport   指定源端口
-p {tcp|udp} --dport   指定目标端口
5.2.2显示扩展匹配
-m state --state   匹配状态的
-m mutiport --source-port   端口匹配 ,指定一组端口
-m limit --limit 3/minute   每三分种一次
-m limit --limit-burst 5   只匹配5个数据包
-m string --string --algo bm|kmp --string "xxxx" 匹配字符串
-m time --timestart 8:00 --timestop 12:00 表示从哪个时间到哪个时间段
-m time --days    表示那天
-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq   表示匹配腾讯qq的 当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 这个显示扩展匹配, 
6,处理动作类
-j ACCEPT     允许
-j REJECT     拒绝
-j DROP       拒绝并提示信息
-j SNAT       源地址转换
-j DNAT       目标地址转换
-j REDIRECT   重定向
-j MASQUERAED 地址伪装
-j LOG --log-prefix "说明信息,自己随便定义"      记录日志

如何配置自己的iptables

在配置自己的iptables前,要明确自己要使用的端口,如使用http服务,则开启80,使用mysql,开启3306,使用FTP,21端口,最重要的SSH,22端口。有人说没被自己的规则挡在外面过(关闭22端口),都不好意思说自己用过iptables,哈哈。对于配置iptables,iptables共有五个规则链:

1.PREROUTING (路由前)
2.INPUT (数据包流入口)
3.FORWARD (转发管卡)
4.OUTPUT(数据包出口)
5.POSTROUTING(路由后)

我们主要设置的是INPUT,也就是抵挡外来者不正当请求。

iptables的主要命令:

查看当前规则    iptables -L  

查看每个链默认规则 iptables -S

设置默认规则iptables -P INPUT ACCEPT (注意大小写,-P实际上是policy,INPUT是我们要改的链,也可以是OUTPUT,ACCEPT是接收,不接受为DROP,上文有提到)

在更改规则前,我们要将INPUT和OUTPUT链设置为ACCEPT(默认也是ACCEPT),然后清空规则

iptables -F

增加22端口的链接规则

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

如果需要其他,例如80,3306等端口,增加即可

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

参数-A,意为append向后插入,-I,意为Insert向前插入,其他参数可以参考前文。

要正常让自己服务器运行,还需要这一句

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

“-m”是“匹配”的意思,-m state的意思是匹配数据包状态,用户发来的数据包分别带有不同的状态,即 NEW, ESTABLISHED, 和 RELATED。NEW 就是开头搭讪,ESTABLISHED,就是搭讪完了之后后续的数据包,RELATED就是与已经存在的连接相关的数据包。总之这句话的意思是,接受已经建立了连接的数据包,即搭讪之后的数据包。

执行到这里,需要的端口都打开了,最后我们将默认规则的ACCEPT改为DROP,只改INPUT。

iptables -P INPUT DROP

最后的结果应该是这样的

阿里云DDOS防护——ubuntu14.04下iptables的使用_第2张图片

你以为这就完了?不不不,还差一点,这个是临时的规则,如果你重启就会消失的。所以如果你规则设置时把22端口关了,重启服务器即可。如何保存呢?

iptables-save > /etc/iptables

先将规则保存一下,不确定是否成功可以 vi /etc/iptables打开看一下。

然后开机执行规则vi /etc/network/interfaces 在最后一行,加入pre-up iptables-restore < /etc/iptables

一定要确认无误后再执行最后一句。

号外:中途执行出问题,需要删除时

iptables -nL --line-number          按序号查看规则

iptables -D INPUT 2                   删除INPUT中序号为2的规则(PS:每删除一次,后面序号会变的,再删容易删错)

号外:

简单测试方法 

ntpdate -q 你的IP (ubuntu下执行,会被拒绝或无服务)

ping 你的IP(哪执行都行,结果会请求超时)

你可能感兴趣的:(记录)