CentOS简单iptables脚本

作者:zhangyunlong 发布时间: 2024-12-09 阅读量:5 评论数:0

整理一份正在使用的防火墙配置脚本

  • 服务器环境: 常规Centos8

  • 项目有使用Docker容器, 存在互联多主机

  • 强制使用白名单防护

  • iptables资源包.zip


食用方式

1. 先停止firewalld(如果有)
systemctl stop firewalld 

2. 禁止firewalld自启动
systemctl disable firewalld

3. 安装iptables
rpm -Uvh iptables*.rpm

4. 启用iptables
systemctl enable iptables
systemctl start iptables
systemctl status iptables 

5. 重启docker服务(如果有)
systemctl restart docker

6. 添加ip白名单, 执行脚本
chmod +x iptables.sh
sh iptables.sh

iptables.sh脚本内容如下:

#!/bin/bash

echo "[INFO] 初始化 iptables 防火墙规则..."

# ===== 清空主要链,但保留 DOCKER/DOCKER-USER 等特殊链 =====
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
# 如果存在就清空,不存在就忽略
# 不清 DOCKER 链,避免影响 Docker 网络
iptables -F DOCKER-USER 2>/dev/null || true
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -t nat -F OUTPUT

# 将docker0及其子网的出网流量封包为宿主机ip, 根据实际情况修改docker0虚拟网卡ip
iptables -t nat -A POSTROUTING -s 172.16.0.0/12 -j MASQUERADE

# ===== 设置默认策略 =====
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# ===== 基本规则 =====
iptables -A INPUT -i lo -j ACCEPT  # 允许本地回环
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  # 允许放行已建立的连接

# ===== SSH 端口(永远放行)=====
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# ===== 容器访问宿主机 & 容器互联:允许常见 Docker bridge 网段 =====
for subnet in {17..31}; do
  iptables -A INPUT -s 172.$subnet.0.0/16 -j ACCEPT
  iptables -A FORWARD -s 172.$subnet.0.0/16 -j ACCEPT
done
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# ===== 白名单配置 =====
WHITELIST=(
"192.168.234.59" 
"192.168.51.171"
"192.168.101.158"
)

for ip in "${WHITELIST[@]}"; do
    iptables -A INPUT -p tcp -s "$ip" --dport 80:30000 -j ACCEPT
done

# ===== 明确拒绝其他访问(可选,实际 DROP 策略已经生效)=====
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP

# ===== 持久化配置 =====
service iptables save

# ===== 显示结果 =====
echo "[INFO] iptables 配置完成,当前规则如下:"
iptables -L -n -v --line-numbers

评论