成长值: 234 签到天数: 4703 天 [LV.Master]伴坛终老
|
发表于 2015/12/18 00:56
|
显示全部楼层
|阅读模式
|Google Chrome 47.0.2526.73 |Windows 10
1、安装iptables防火墙
如果没有安装iptables需要先安装,CentOS执行:
Debian/Ubuntu执行:
2、清除已有iptables规则
- iptables -F
- iptables -X
- iptables -Z
复制代码
3、开放指定的端口
-A和-I参数分别为添加到规则末尾和规则最前面。
- #允许本地回环接口(即运行本机访问本机)
- iptables -A INPUT -i lo -j ACCEPT
- # 允许已建立的或相关连的通行
- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- #允许所有本机向外的访问
- iptables -A OUTPUT -j ACCEPT
- # 允许访问22端口
- iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- #允许访问80端口
- iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- #允许FTP服务的21和20端口
- iptables -A INPUT -p tcp --dport 21 -j ACCEPT
- iptables -A INPUT -p tcp --dport 20 -j ACCEPT
- #如果有其他端口的话,规则也类似,稍微修改上述语句就行
- #允许ping
- iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
- #禁止其他未允许的规则访问
- iptables -A INPUT -j REJECT #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
- iptables -A FORWARD -j REJECT
复制代码
4、屏蔽IP
如果只是想屏蔽IP的话“3、开放指定的端口”可以直接跳过。
- #屏蔽单个IP的命令是
- iptables -I INPUT -s 123.45.6.7 -j DROP
- #封整个段即从123.0.0.1到123.255.255.254的命令
- iptables -I INPUT -s 123.0.0.0/8 -j DROP
- #封IP段即从123.45.0.1到123.45.255.254的命令
- iptables -I INPUT -s 124.45.0.0/16 -j DROP
- #封IP段即从123.45.6.1到123.45.6.254的命令是
- iptables -I INPUT -s 123.45.6.0/24 -j DROP
复制代码
5、添加IP至白名单
- #将IP为8.8.8.8对本机所有端口的所有方式的连接添加进白名单
- iptables -A INPUT -s 8.8.8.8 -j ACCEPT
- #将IP为43.241.50.200对本机80端口的TCP方式的连接添加进白名单
- iptables -A INPUT -s 43.241.50.200 -p tcp --dport 80 -j ACCEPT
复制代码
6、防御各类攻击
- #防御SYN轻量级攻击
- iptables -N syn-flood
- iptables -A INPUT -p tcp --syn -j syn-flood
- iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
- iptables -A syn-flood -j REJECT
- #防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
- iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
- iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
- #用Iptables抵御DDOS (参数与上相同)
- iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
- iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
- #通过另一种想法防御syn,ddos攻击
- iptables -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
- iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
- iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
- #防御CC
- #控制单个IP的最大并发连接数
- #允许单个IP的最大连接数为 30
- iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT #默认iptables模块不包含connlimit,需要自己单独编译加载
- #控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
- #单个IP在60秒内只允许最多新建30个连接
- iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
复制代码
巧用Recent模块加固Linux安全
(1)通过recent模块可以防止穷举猜测Linux主机用户口令,通常可以通过iptables限制只允许某些网段和主机连接Linux机器的22/TCP端口,如果管理员IP地址经常变化,此时iptables就很难适用这样的环境了。通过使用recent模块,使用下面这两条规则即可解决问题
- #iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH --rsource -j DROP
- #iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource -j ACCEPT
复制代码
应用该规则后,如果某IP地址在一分钟之内对Linux主机22/TCP端口新发起的连接超过4次,之后的新发起的连接将被丢弃。
(2)通过recent模块可以防止端口扫描。
- #iptables -A INPUT -m recent --update --seconds 60 --hitcount 20 --name PORTSCAN --rsource -j DROP
- #iptables -A INPUT -m recent --set --name PORTSCAN --rsource -j DROP
复制代码
应用该规则后,如果某个IP地址对非Linux主机允许的端口发起连接,并且一分钟内超过20次,则系统将中断该主机与本机的连接。
7、查看已添加的iptables规则
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示IP地址和端口号,不将ip解析为域名
8、删除已添加的iptables规则
将所有iptables以序号标记显示,执行:
- #iptables -L -n --line-numbers
复制代码
比如要删除INPUT里序号为8的规则,执行:
9、iptables的开机启动及规则保存
CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:
将其加入开机启动。
CentOS上可以执行:
保存规则。
另外更需要注意的是Debian/Ubuntu上iptables是不会保存规则的。
需要按如下步骤进行,让网卡关闭是保存iptables规则,启动时加载iptables规则:
创建/etc/network/if-post-down.d/iptables 文件,添加如下内容:
#!/bin/bash
iptables-save > /etc/iptables.rules
执行:chmod +x /etc/network/if-post-down.d/iptables 添加执行权限。
创建/etc/network/if-pre-up.d/iptables 文件,添加如下内容:
#!/bin/bash
iptables-restore < /etc/iptables.rules
执行:chmod +x /etc/network/if-pre-up.d/iptables 添加执行权限。
关于更多的iptables的使用方法可以执行:iptables --help或网上搜索一下iptables参数的说明。
原文来自:http://www.vigofen.com/linux/iptables.html |
|