ubuntu

ubuntu防火墙案例分析

小樊
50
2025-10-12 07:28:31
栏目: 智能运维

Ubuntu防火墙案例分析:UFW与iptables的典型应用场景

1. Web服务器基础防护:允许HTTP/HTTPS与SSH访问

Web服务器是企业对外提供服务的关键节点,需确保HTTP(80端口)、HTTPS(443端口)的正常访问,同时限制SSH(22端口)仅能被管理员IP访问,防止未授权登录。
UFW配置示例

# 启用UFW并设置默认策略(拒绝所有入站,允许所有出站)
sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允许HTTP(80/tcp)和HTTPS(443/tcp)入站
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 允许特定管理员IP(如192.168.1.100)访问SSH(22/tcp)
sudo ufw allow from 192.168.1.100 to any port 22

# 查看规则状态确认
sudo ufw status verbose

效果:仅允许外部用户访问Web服务,且SSH访问被限制在指定IP,降低了服务器被暴力破解的风险。

2. 数据库服务器安全隔离:限制应用层访问

数据库(如MySQL的3306端口)存储着核心业务数据,需严格限制仅应用服务器(如192.168.2.0/24子网)能访问,避免外部直接连接导致的数据泄露。
UFW配置示例

# 允许应用服务器子网访问MySQL(3306/tcp)
sudo ufw allow from 192.168.2.0/24 to any port 3306

# 拒绝其他所有IP访问3306端口(默认策略已拒绝入站,此步可省略但建议显式配置)
sudo ufw deny 3306/tcp

# 查看规则
sudo ufw status

效果:数据库仅对内部应用层开放,外部用户无法直接连接,提升了数据安全性。

3. 高可用集群内部通信:放行集群节点端口

MySQL Galera Cluster、Redis Cluster等高可用集群需要节点间进行数据同步(如Galera的4567、4568、4444端口),需放行集群内部IP段的通信,确保集群正常运行。
iptables配置示例

# 清空现有规则(谨慎操作,需确保不影响现有服务)
sudo iptables -F
sudo iptables -X

# 设置默认策略(拒绝所有入站,允许所有出站)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 允许集群节点间通信(192.168.20.0/24子网)
sudo iptables -A INPUT -s 192.168.20.0/24 -j ACCEPT

# 允许Galera集群特定端口(4567/tcp、4568/tcp、4444/tcp)
sudo iptables -A INPUT -p tcp --dport 4567 -s 192.168.20.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 4568 -s 192.168.20.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 4444 -s 192.168.20.0/24 -j ACCEPT

# 记录并拒绝其他所有输入(便于排查问题)
sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROPPED: "
sudo iptables -A INPUT -j DROP

# 保存规则(Ubuntu需安装iptables-persistent)
sudo netfilter-persistent save

效果:集群节点间能正常同步数据,外部IP无法访问集群内部端口,保障了集群的高可用性。

4. 防止SSH暴力破解:限制连接频率

SSH服务是管理员远程管理的关键通道,常成为暴力破解的目标。通过UFW的limit功能,可限制同一IP在30秒内最多尝试6次连接,超过则暂时拒绝,降低破解风险。
UFW配置示例

# 限制SSH(22/tcp)连接频率(30秒内最多6次)
sudo ufw limit ssh/tcp

# 查看规则(注意:limit规则会自动生成ACCEPT和DENY规则)
sudo ufw status

效果:当同一IP频繁尝试SSH登录时,会被暂时拒绝,有效防止暴力破解。

5. 端口转发:将外网端口映射到内网数据库

企业内网数据库(如192.168.2.70的3306端口)通常不直接对外开放,但运维人员需要通过外网访问。可通过iptables的端口转发功能,将外网IP(如192.168.2.61的3001端口)映射到内网数据库端口。
iptables配置示例

# 开启IP转发(临时生效)
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

# 永久开启IP转发(编辑/etc/sysctl.conf,取消net.ipv4.ip_forward=1的注释)
sudo sysctl -p

# 将外网3001端口转发到内网3306端口
sudo iptables -t nat -A PREROUTING -d 192.168.2.61 -p tcp --dport 3001 -j DNAT --to-destination 192.168.2.70:3306
sudo iptables -t nat -A POSTROUTING -d 192.168.2.70 -p tcp --dport 3306 -j MASQUERADE

# 保存规则(Ubuntu需安装iptables-persistent)
sudo netfilter-persistent save

效果:运维人员可通过外网IP的3001端口访问内网数据库,无需直接暴露内网端口,提升了安全性。

6. GitHub Actions Runner镜像安全加固:最小化入站规则

GitHub Actions Runner镜像用于执行CI/CD流水线,需严格控制入站流量,仅允许必要的端口(如SSH、HTTPS)访问,防止恶意代码窃取仓库信息。
UFW配置示例

# 重置UFW规则(清除现有配置)
sudo ufw reset

# 设置默认策略(拒绝所有入站,允许所有出站)
sudo ufw default deny incoming
sudo ufw default deny outgoing

# 允许SSH(22/tcp)用于Runner注册(仅允许GitHub的IP段,此处简化为示例)
sudo ufw allow 22/tcp

# 允许HTTPS(443/tcp)用于与GitHub API通信
sudo ufw allow 443/tcp

# 启用UFW
sudo ufw --force enable

效果:Runner镜像仅允许必要的网络通信,减少了攻击面,符合CI/CD环境的安全要求。

0
看了该问题的人还看了