Linux 系统中使用 iptables 来封禁指定的 IP 段

以下是针对 183.7.0.0/16 封禁 24 小时的操作步骤:

1. 添加封禁规则

# 封禁 183.7.0.0/16 的所有入站流量
sudo iptables -I INPUT -s 183.7.0.0/16 -j DROP

# 封禁 183.7.0.0/16 的所有出站流量(可选)
sudo iptables -I OUTPUT -d 183.7.0.0/16 -j DROP

2. 保存 iptables 规则(确保重启后不丢失)

# 对于 CentOS/RHEL/Rocky Linux
sudo service iptables save
# 或
sudo /sbin/iptables-save

# 对于 Ubuntu/Debian
sudo apt-get install iptables-persistent
sudo netfilter-persistent save

3. 设置定时解封(24小时后自动解除)

使用 at 命令

# 安装 at(如果尚未安装)
sudo apt-get install at  # Ubuntu/Debian
sudo yum install at      # CentOS/RHEL

# 设置 24 小时后执行解封
echo "sudo iptables -D INPUT -s 183.7.0.0/16 -j DROP && sudo iptables -D OUTPUT -d 183.7.0.0/16 -j DROP" | at now + 24 hours

命令结构分解

echo "sudo iptables -D INPUT -s 183.7.0.0/16 -j DROP && sudo iptables -D OUTPUT -d 183.7.0.0/16 -j DROP" | at now + 24 hours

1. echo 部分

echo "sudo iptables -D INPUT -s 183.7.0.0/16 -j DROP && sudo iptables -D OUTPUT -d 183.7.0.0/16 -j DROP"

  • 作用:输出字符串到标准输出
  • 输出内容:两条 iptables 命令用 && 连接

2. 管道符 |

  • 作用:将 echo 命令的输出作为 at 命令的输入
  • 效果:相当于手动在 at 交互界面中输入这些命令

3. at 部分

at now + 24 hours

  • 作用:设置一个 24 小时后执行的一次性任务
  • 时间格式:now + 24 hours 表示从当前时间算起 24 小时后

4. 命令内容详解

第一条命令:
sudo iptables -D INPUT -s 183.7.0.0/16 -j DROP

  • -D INPUT:从 INPUT 链中删除规则
  • -s 183.7.0.0/16:指定源 IP 段
  • -j DROP:丢弃数据包
  • 作用:解除对 183.7.0.0/16 入站流量的封禁

第二条命令:

sudo iptables -D OUTPUT -d 183.7.0.0/16 -j DROP

  • -D OUTPUT:从 OUTPUT 链中删除规则
  • -d 183.7.0.0/16:指定目标 IP 段
  • 作用:解除对 183.7.0.0/16 出站流量的封禁

连接符 &&

  • 作用:逻辑与操作,只有第一条命令执行成功后才会执行第二条
  • 好处:如果第一条命令失败(规则不存在),不会执行第二条

完整执行流程

<0l>

  • 当前时刻:设置 at 任务
  • 24小时后:atd 服务自动执行:
    sudo iptables -D INPUT -s 183.7.0.0/16 -j DROP
    sudo iptables -D OUTPUT -d 183.7.0.0/16 -j DROP
  • 效果:解除对 183.7.0.0/16 的封禁
  • 4. 验证规则

    # 检查是否添加成功
    sudo iptables -L INPUT -n | grep 183.7.0.0
    sudo iptables -L OUTPUT -n | grep 183.7.0.0
    
    # 查看所有 iptables 规则
    sudo iptables -L -n

    发表评论

    您的邮箱地址不会被公开。 必填项已用 * 标注

    滚动至顶部
    ×
    问题求助