iptables 是 Linux 系统中用于防火墙设置的命令行工具,它可以帮助管理员配置网络传输相关规则。如果你想要使用 iptables 来禁止访问外部 IP,你可以使用以下命令来设置规则:

规则说明

  1. 禁止所有出站连接到外部 IP 的流量:

    1
    sudo iptables -A OUTPUT -d <外部IP地址> -j DROP

    这里 <外部IP地址> 需要替换成你想要禁止访问的具体 IP 地址。

  2. 禁止所有入站连接来自外部 IP 的流量:

    1
    sudo iptables -A INPUT -s <外部IP地址> -j DROP

    同样,<外部IP地址> 需要替换成你想要禁止的 IP 地址。

  3. 如果你想要禁止所有非本地网络的出站连接,可以使用以下命令:

    1
    sudo iptables -A OUTPUT -o ! lo -d 0.0.0.0/8 -j DROP
  4. 如果你想要禁止所有非本地网络的入站连接,可以使用以下命令:

    1
    sudo iptables -A INPUT -i ! lo -s 0.0.0.0/8 -j DROP

请注意,iptables 规则是持久的,除非你手动删除它们或重启 iptables 服务。如果你想要保存你的 iptables 规则,可以使用 iptables-save 命令来保存当前的规则集,并使用 iptables-restore 来恢复它们。

在执行这些操作之前,请确保你了解这些规则的影响,因为错误的规则可能会导致网络连接问题。如果你不确定,最好先在测试环境中进行尝试。

如果你有一个包含多个外部IP地址的清单,并且想要批量应用iptables策略来禁止这些IP地址的访问,你可以使用以下方法:

批量创建规则脚本

  1. 创建一个包含IP地址的文件:首先,将所有需要禁止的IP地址写入一个文本文件中,每行一个IP地址。例如,文件名为 ip_list.txt,内容可能如下:

    1
    2
    3
    192.168.1.1
    10.0.0.1
    172.16.0.1
  2. 使用循环读取文件并应用iptables规则:你可以编写一个简单的shell脚本来读取这个文件,并为每个IP地址应用iptables规则。以下是一个基本的脚本示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/bin/bash

    # 确保脚本以root权限运行
    if [ "$(id -u)" != "0" ]; then
    echo "该脚本必须以root权限运行" 1>&2
    exit 1
    fi

    # 读取ip_list.txt文件中的每个IP地址
    while IFS= read -r ip
    do
    # 应用iptables规则禁止访问该IP
    iptables -A OUTPUT -d "$ip" -j DROP
    # 也可以添加禁止入站的规则
    # iptables -A INPUT -s "$ip" -j DROP
    done < ip_list.txt

    echo "所有IP地址的iptables规则已应用。"
  3. 保存iptables规则:应用完规则后,你需要保存iptables规则,以便在系统重启后仍然有效。可以使用以下命令保存iptables规则:

    1
    sudo iptables-save > /etc/iptables/rules.v4

    注意:这需要你的系统配置了iptables规则的持久化。不同的Linux发行版可能有不同的配置方式。

  4. 重启iptables服务(如果需要):在某些系统中,修改iptables规则后可能需要重启服务以使规则生效。可以使用以下命令:

    1
    sudo systemctl restart iptables
  5. 检查规则是否生效:使用以下命令检查iptables规则是否已经正确设置:

    1
    sudo iptables -L -n -v

请确保在执行这些操作之前备份当前的iptables规则集,以便在出现问题时可以快速恢复。同时,测试你的脚本在安全的环境中运行,以确保它按预期工作,不会影响必要的网络连接。

批量删除规则脚本

要删除之前批量应用的iptables策略,你可以采取以下步骤:

  1. 删除单个IP规则:如果你想要删除针对特定IP地址的规则,你可以使用iptables -D命令,指定要删除的规则序号。首先,使用iptables -L -n -v查看规则列表和它们的序号,然后使用类似下面的命令删除规则:

    1
    sudo iptables -D [链名] [规则序号]

    例如,如果你要删除序号为2的规则,可以使用:

    1
    sudo iptables -D OUTPUT 2
  2. 删除所有针对特定IP的规则:如果你有一个IP地址列表,并且想要删除所有这些IP地址的规则,你可以编写一个脚本来实现。以下是一个示例脚本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/bash

    # 确保脚本以root权限运行
    if [ "$(id -u)" != "0" ]; then
    echo "该脚本必须以root权限运行" 1>&2
    exit 1
    fi

    # 读取ip_list.txt文件中的每个IP地址
    while IFS= read -r ip
    do
    # 使用iptables -S命令获取所有包含该IP的规则的详细信息
    rules=$(sudo iptables -S | grep "$ip")
    # 循环遍历所有规则并删除它们
    while IFS= read -r rule; do
    sudo iptables -D $rule
    done <<< "$rules"
    done < ip_list.txt

    echo "所有指定IP的iptables规则已删除。"
  3. 删除所有规则:如果你想要删除所有的iptables规则,可以使用以下命令:

    1
    sudo iptables -F

    这将清空所有iptables规则,包括INPUT、FORWARD、OUTPUT和所有自定义链的规则。

  4. 保存更改:如果你更改了iptables规则并希望它们在系统重启后仍然有效,你需要更新iptables规则的保存文件。这通常位于/etc/iptables/rules.v4(或/etc/iptables/rules.v6对于IPv6规则)。你可以使用以下命令来更新:

    1
    sudo iptables-save > /etc/iptables/rules.v4
  5. 重启iptables服务(如果需要):在某些系统中,修改iptables规则后可能需要重启服务以使规则生效。可以使用以下命令:

    1
    sudo systemctl restart iptables
  6. 检查规则是否已删除:使用以下命令检查iptables规则是否已经正确删除:

    1
    sudo iptables -L -n -v

在执行删除操作之前,请确保你了解这些操作的影响,因为错误的命令可能会导致网络连接问题。如果你不确定,最好先在测试环境中进行尝试。