如何在不中断现有连接的情况下重新加载 IPTables?

如何在不中断现有连接的情况下重新加载 IPTables?

我将自动向下面的脚本添加和删除条目(添加具有不同 IP 地址的端口 80/443)。如果我运行此脚本,我“假设”连接不会中断,除非我删除 IP。我这样想对吗?

这是我的脚本:

iptables --flush
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

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

iptables -A INPUT -p tcp --dport  80 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -s 1.2.3.4 -j ACCEP

iptables -A INPUT -p tcp --dport 80 -j DROPT
iptables -A INPUT -p tcp --dport 443 -j DROP

iptables -A INPUT -j DROP
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -j LOG
iptables -A INPUT -j REJECT

答案1

有多种方法可以向现有链中添加新规则。例如;

  • 您应该编写一个 shell 脚本,读取文件中的 IP 地址并将其插入到链中。

    #!/bin/bash
    for ip in `cat ipadresses.txt`
    do
        iptables -I INPUT -p tcp -s $ip -m multiport --dports80,443 -j ACCEPT
    done
    
  • 您应该将当前规则保存到一个文件中,然后直接在文件内添加规则,然后再次从该文件恢复规则。

    /sbin/iptables-save > /path/to/save/iptables.rules
    or
    /sbin/iptables save > /path/to/save/iptables.rules
    

    使用任何文本编辑器编辑 iptables.rules 后,您应该复制任何行并更改源 IP 地址。

     # Generated by iptables-save v1.4.14 on Tue Aug 19 00:22:21 2014
    *mangle
    :PREROUTING ACCEPT [9809:4375246]
    :INPUT ACCEPT [9809:4375246]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [4718:585599]
    :POSTROUTING ACCEPT [4718:585599]
    COMMIT
    # Completed on Tue Aug 19 00:22:21 2014
    # Generated by iptables-save v1.4.14 on Tue Aug 19 00:22:21 2014
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
    -A INPUT -s 1.2.3.4/32 -p tcp -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 443 -j DROP
    -A INPUT -j DROP
    -A INPUT -j LOG
    -A INPUT -j REJECT --reject-with icmp-port-unreachable
    -A OUTPUT -j ACCEPT
    COMMIT
    # Completed on Tue Aug 19 00:22:21 2014
    # Generated by iptables-save v1.4.14 on Tue Aug 19 00:22:21 2014
    *nat
    :PREROUTING ACCEPT [6:352]
    :POSTROUTING ACCEPT [70:4526]
    :OUTPUT ACCEPT [70:4526]
    COMMIT
    # Completed on Tue Aug 19 00:22:21 2014
    

编辑文件后,您应该通过以下方式恢复规则

    iptables-restore < /path/to/save/iptables.rules

综上所述;

  • 您不需要刷新所有规则来添加新 IP,只需插入新规则即可。
  • 您有一个通用的丢弃规则,因此您不需要更多规则来丢弃具有 80 和 443 目标端口的口袋。
  • 您不需要每次都执行 iptables -I 命令。

相关内容