iptables简单配置

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地址为示例地址,请根据自己的需求调整。

       白名单模式配置如下

  • 1. 允许本地回环接口(即运行本机访问本机) 
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
  • 2. 配置ssh远程登录端口
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT
  • 3. 最后再配置拒绝登录(一定注意,在配置下面这条策略前,该打开的端口都打开了!!!否则会影响应用的访问)
iptables -A INPUT -j DROP
  • 4. 配置出站规则全部允许(偷懒的做法,无法判断安全性)
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
  • 一次性开放多个端口,需要使用-m multiport参数
iptables -A INPUT -p tcp -s 192.168.1.100 -m multiport --dports 80,443 -j ACCEPT

4.3 查看当前策略

  • 查看策略
iptables -L
  • 查看策略并查看序号
iptables -nL --line-numbers

4.4 删除策略

iptables -D INPUT 10    # 删除INPUT中编号为10的策略

4.5 保存策略

4.5.1 方法一

       使用service iptables save命令将防火墙配置保存起来,使用该命令会将所有的防火墙规则保存在/etc/sysconfig/iptables文件中。

service iptables save

       但现在高版本linux系统都开始使用systemctl命令,并没有service命令,这时可以使用方法二

4.5.2 方法二

       使用iptables-save命令,注意,直接执行该命令并不会将策略保存,只是会输出到屏幕中,我们还需要配合IO流重定向,将防火墙规则保存在文件中。

  • 如果保存到/etc/sysconfig/iptables路径下,开机会自动恢复防火墙策略。
iptables-save > /etc/sysconfig/iptables
  • 如果保存在其他路径,重启后可以使用 iptables-restore命令恢复防火墙规则。
iptables-restore < xxx.txt   # xxx.txt为保存策略的文件路径

 5. 问题集锦

问题一 配置完策略后,使用iptables -L执行非常慢

       原因:iptables命令默认输出的都是主机名称,这需要与DNS服务器通信,判断是与DNS服务器之间通信出现问题,导致解析变慢。

  • 解决方法1:

       使用-n参数,此参数的作用是,使主机和端口不再解析,直接以IP形式输出。

iptables -n -L
  • 解决方法2:

       可以尝试将/etc/resolve.conf中的nameserver注释掉(DNS解析服务器,自行判断是否可以注释),再尝试使用iptables -L命令。

  • 解决方法3:

       修复与DNS服务器之间通信问题

6. DROP与REJECT的区别

6.1 REJECT动作

       REJECT动作会返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。
       连接马上断开,Client会认为访问的主机不存在。
       REJECT在IPTABLES里面有一些返回参数,参数如下:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

6.2 DROP动作

       DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client容易发现自己被防火墙所阻挡。
       至于使用DROP还是REJECT更合适一直未有定论,因为的确二者都有适用的场合:

6.3 DROP与REJECT对比

  • REJECT是一种更符合规范的处理方式,并且在可控的网络环境中,更易于诊断和调试网络/防火墙所产生的问题;
  • DROP则提供了更高的防火墙安全性和稍许的效率提高,但是由于DROP不很规范(不很符合TCP连接规范)的处理方式,可能
    会对你的网络造成一些不可预期或难以诊断的问题。因为DROP虽然单方面的中断了连接,但是并不返回任何拒绝信息,因此连接客户端将被动的等到tcp session超时才能判断连接是否成功,这样早企业内部网络中会有一些问题,例如某些客户端程序或应用需要IDENT协议支持(TCP Port 113, RFC 1413),如果防火墙未经通知的应用了DROP规则的话,所有的同类连接都会失败,并且由于超时时间,将导致难以判断是由于防火墙引起的问题还是网络设备/线路故障。

6.4 DROP与REJECT配置建议

  • 在部署防火墙时,如果是面向企业内部(或部分可信任网络),那么最好使用更绅士REJECT方法,对于需要经常变更或调试规则的网络也是如此;
    而对于面向危险的Internet/Extranet的防火墙,则有必要使用更为粗暴但是安全的DROP方法,可以在一定程度上延缓黑客攻击的进度和难度,至少,DROP可以使他们进行TCP-Connect方式端口扫描时间更长。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值