在11月2日阿里云服务器连续被DDOS干掉两次,11月4日被干掉一次后,学了一点iptables防火墙的使用,现在是11月7日,设置iptables三天后。
暂时没有崩溃,若崩溃我会立刻删除这篇博文,如果你还能看到的话,大概就是iptables成功起了点作用。
这是最近几次的网络流量异常,写有123的是被击垮的三次,在这之后又出现三次异常,但是服务器没有出现问题,尤其11月7日强度为之前三倍的入网流量,服务器依旧在运行着。
iptables 是与 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
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前,要明确自己要使用的端口,如使用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
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
要正常让自己服务器运行,还需要这一句
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
执行到这里,需要的端口都打开了,最后我们将默认规则的ACCEPT改为DROP,只改INPUT。
iptables -P INPUT DROP
你以为这就完了?不不不,还差一点,这个是临时的规则,如果你重启就会消失的。所以如果你规则设置时把22端口关了,重启服务器即可。如何保存呢?
iptables-save > /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(哪执行都行,结果会请求超时)