目录
- 1. 什么是iptables?
- 2. iptables常用参数
- 2.1 常用参数介绍
- 2.2 常用规则介绍
- 3. 配置之前注意事项
- 3.1 增加保险
- 3.2 白名单模式配置前需知
- 4. 常用配置命令
- 4.1 在配置前须配置的策略
- 4.2 其它配置
- 4.3 查看当前策略
- 4.4 保存策略
- 4.4.1 方法一
- 4.4.2 方法二
- 5 删除策略
- 问题集锦
- 问题一 配置完策略后,使用iptables -L执行非常慢
- 5. DROP与REJECT的区别
- 5.1 REJECT动作
- 5.2 DROP动作
- 5.3 DROP与REJECT对比
- 5.4 DROP与REJECT配置建议
1. 什么是iptables?
iptables 是 Linux 防火墙工作在用户空间的管理工具,是 netfilter/iptablesIP 信息包过滤系统是一部分,用来设置、维护和检查 Linux 内核的 IP 数据包过滤规则。
2. iptables常用参数
2.1 常用参数介绍
- iptables -A 将一个规则添加到链末尾
- iptables -D 将指定的链中删除规则
- iptables -F 将指定的链中删除所有规则
- iptables -I 将在指定链的指定编号位置插入一个规则,默认添加位置为第一行
- iptables -L 列出指定链中所有规则
- iptables -t nat -L 列出所有NAT链中所有规则
- iptables -N 建立用户定义链
- iptables -X 删除用户定义链
- iptables -P 修改链的默认设置,如将iptables -P INPUT DROP (将INPUT链设置为DROP)
2.2 常用规则介绍
- --dport 指定目标TCP/IP端口 如 –dport 80
- --sport 指定源TCP/IP端口 如 –sport 80
- -p tcp 指定协议为tcp
- -p icmp 指定协议为ICMP
- -p udp 指定协议为UDP
- -j DROP 拒绝
- -j ACCEPT 允许
- -j REJECT 拒绝并向发出消息的计算机发一个消息
- -j LOG 在/var/log/messages中登记分组匹配的记录
- -m mac –mac 绑定MAC地址
- -m limit –limit 1/s 1/m 设置时间策列
- -s 10.10.0.0或10.10.0.0/16 指定源地址或地址段
- -d 10.10.0.0或10.10.0.0/16 指定目标地址或地址段
- -s ! 10.10.0.0 指定源地址以外的
3. 配置之前注意事项
3.1 增加保险
如果对iptables不太熟悉,请先配置一个防火墙策略的清除策略,以防配置失误时,无法登录系统。
# 1. 创建清除策略脚本
vi iptables.sh
source /etc/profile
iptables -F
# 2. 增加可执行权限
chmod +x iptables.sh
# 3. 将脚本配置进计划任务中,5分钟或10分钟执行一次
# 3.1 配置执行脚本
*/10 * * * * sh /root/iptables.sh
# 3.2 双保险,以防脚本执行失败
*/10 * * * * /sbin/iptables -F
3.2 白名单模式配置前需知
白名单模式就是只允许放行的策略通过,其余策略均拒绝(DROP 或者 REJECT)。
所以,在配置DROP或REJECT之前,一定先配置好ssh允许访问的策略,如果没有配置好,则会导致无法远程登录,如果人不在机房,只能通知机房人员远程操作或者重启服务器(在未保存的情况下,策略重启会消失)
4. 常用配置命令
4.1 在配置前须配置的策略
下文中的192.168.1.1地址为示例地址,请根据自己的需求调整。
# 白名单模式配置如下
# 允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 配置ssh远程登录端口
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT
# 最后再配置拒绝登录(一定注意,在配置下面这条策略前,该打开的端口都打开了!!!否则会影响应用的访问)
iptables -A INPUT -j DROP
# 配置出站规则全部允许(偷懒的做法,无法判断安全性)
iptables -A OUTPUT -j ACCEPT
4.2 其它配置
# 当配置了白名单后,需要新增策略时,就不能使用参数-A了。
# 因为防火墙是从上向下查找策略的,当查找到符合规则的策略时,就会直接返回,不会再向下执行下面的策略。
# 由于-A是在最后一行增加策略,所以使用-A增加的策略会加到iptables -A INPUT -j DROP之后,就不会生效。
# 对某个地址开放所有端口
iptables -I INPUT -s 192.168.1.1 -j ACCEPT
# 开放一个端口,任意地址都可访问此端口,如80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# 将策略添加到指定位置,原来的策略会顺序下移
iptables -I INPUT 10 -s 192.168.1.1 -p tcp --dport 80 -j ACCEPT
# 禁止全部ping操作
iptables -I INPUT 1 -p icmp --icmp-type echo-request -j DROP
# 只允许某ip可以ping操作(禁止的话把ACCEPT改为DROP或REJECT即可)
iptables -I INPUT -p icmp --icmp-type echo-request -s 192.168.1.1 -j ACCEPT
4.3 查看当前策略
# 查看策略
iptables -L
# 查看策略并查看序号
iptables -nL --line-numbers
4.4 保存策略
4.4.1 方法一
使用service iptables save命令将防火墙配置保存起来,使用该命令会将所有的防火墙规则保存在/etc/sysconfig/iptables文件中。
service iptables save
但现在高版本linux系统都开始使用systemctl命令,并没有service命令,这时可以使用方法二
4.4.2 方法二
使用iptables-save命令,注意,直接执行该命令并不会将策略保存,只是会输出到屏幕中,我们还需要配合IO流重定向,将防火墙规则保存在文件中。
- 如果保存到/etc/sysconfig/iptables路径下,开机会自动恢复防火墙策略。
iptables-save > /etc/sysconfig/iptables
- 如果保存在其他路径,重启后可以使用 iptables-restore命令恢复防火墙规则。
iptables-restore < xxx.txt # xxx.txt为保存策略的文件路径
5 删除策略
iptables -D INPUT 10 # 删除INPUT中编号为10的策略
问题集锦
问题一 配置完策略后,使用iptables -L执行非常慢
原因:iptables命令默认输出的都是主机名称,这需要与DNS服务器通信,判断是与DNS服务器之间通信出现问题,导致解析变慢。
解决方法1:使用-n参数,此参数的作用是,使主机和端口不再解析,直接以IP形式输出。
iptables -n -L
解决方法2:
可以尝试将/etc/resolve.conf中的nameserver注释掉(DNS解析服务器,自行判断是否可以注释),再尝试使用iptables -L命令。
解决方法3:
修复与DNS服务器之间通信问题
5. DROP与REJECT的区别
5.1 REJECT动作
REJECT动作会返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。
连接马上断开,Client会认为访问的主机不存在。
REJECT在IPTABLES里面有一些返回参数,参数如下:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
5.2 DROP动作
DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client容易发现自己被防火墙所阻挡。
至于使用DROP还是REJECT更合适一直未有定论,因为的确二者都有适用的场合:
5.3 DROP与REJECT对比
- REJECT是一种更符合规范的处理方式,并且在可控的网络环境中,更易于诊断和调试网络/防火墙所产生的问题;
- DROP则提供了更高的防火墙安全性和稍许的效率提高,但是由于DROP不很规范(不很符合TCP连接规范)的处理方式,可能
会对你的网络造成一些不可预期或难以诊断的问题。因为DROP虽然单方面的中断了连接,但是并不返回任何拒绝信息,因此连接客户端将被动的等到tcp session超时才能判断连接是否成功,这样早企业内部网络中会有一些问题,例如某些客户端程序或应用需要IDENT协议支持(TCP Port 113, RFC 1413),如果防火墙未经通知的应用了DROP规则的话,所有的同类连接都会失败,并且由于超时时间,将导致难以判断是由于防火墙引起的问题还是网络设备/线路故障。
5.4 DROP与REJECT配置建议
- 在部署防火墙时,如果是面向企业内部(或部分可信任网络),那么最好使用更绅士REJECT方法,对于需要经常变更或调试规则的网络也是如此;
而对于面向危险的Internet/Extranet的防火墙,则有必要使用更为粗暴但是安全的DROP方法,可以在一定程度上延缓黑客攻击的进度和难度,至少,DROP可以使他们进行TCP-Connect方式端口扫描时间更长。
-------------------以下内容有风险,配置后造成应用无法访问,后期再查找配置方案--------------------
-------------------以下内容有风险,配置后造成应用无法访问,后期再查找配置方案--------------------
-------------------以下内容有风险,配置后造成应用无法访问,后期再查找配置方案--------------------
-------------------以下内容有风险,配置后造成应用无法访问,后期再查找配置方案--------------------
配置在最上层策略后,发现用户无法访问应用环境了。
目前的想法是,后续在测试环境测试一下,策略放在倒数第二行试试。
但是OUTPUT禁止了三个策略后,会导致网络特别慢,暂时先不进行配置了。
- 修复漏洞使用的策略
6.1 漏洞名称:允许Traceroute探测
解决方法:在防火墙出站规则中禁用echo-reply(type 0)、time-exceeded(type 11)、destination-unreachable(type 3)类型的ICMP包。
# 我在配置此策略后,漏扫设备还是可以扫描到此漏洞,无法确定是误报还是未生效
# 配置进站规则(漏扫设备说在出站规则中禁用,但我出入站都配置了还是会扫到此漏洞)
iptables -I INPUT -p ICMP --icmp-type time-exceeded -j DROP
iptables -I INPUT -p ICMP --icmp-type echo-reply -j DROP
iptables -I INPUT -p ICMP --icmp-type destination-unreachable -j DROP
# 配置出站规则
iptables -I OUTPUT -p ICMP --icmp-type time-exceeded -j DROP
iptables -I OUTPUT -p ICMP --icmp-type echo-reply -j DROP
iptables -I OUTPUT -p ICMP --icmp-type destination-unreachable -j DROP
6.2 漏洞名称:ICMP timestamp请求响应漏洞
# 配置进站规则
iptables -I INPUT -p ICMP --icmp-type timestamp-request -j DROP
# 配置出站规则
iptables -I OUTPUT -p ICMP --icmp-type timestamp-request -j DROP