iptables 和 ufw 的区别
iptables 和 ufw 是 Linux 系统中用于管理防火墙的工具,但它们的设计目标和使用方式有所不同。
iptables:功能强大,适合高级用户和复杂场景,但配置复杂。
ufw:简单易用,适合普通用户和基本防火墙需求。
如果你只需要基本的防火墙功能,推荐使用 ufw;如果需要更复杂的网络配置,可以使用 iptables。两者可以结合使用,ufw 的底层实际上也是基于 iptables 的。
iptables
iptables 是 Linux 内核中 Netfilter 框架的用户空间工具,用于配置和管理网络数据包的过滤、网络地址转换(NAT)等。
特点
底层工具:
iptables 是底层的防火墙工具,直接操作内核的 Netfilter 框架。
提供了非常强大的功能,可以精细控制网络流量。
复杂性:
配置复杂,需要用户熟悉网络协议、链(Chains)、表(Tables)和规则(Rules)等概念。
适合高级用户或需要复杂网络配置的场景。
灵活性:
支持多种表(如 filter、nat、mangle 等)和链(如 INPUT、OUTPUT、FORWARD 等)。
可以实现复杂的网络策略,如端口转发、流量控制、NAT 等。
持久化:
iptables 规则默认不会持久化,重启后会丢失。
需要手动保存规则(如使用 iptables-save)并在启动时加载(如使用 iptables-restore)。ufw(Uncomplicated Firewall)
ufw 是一个基于 iptables 的前端工具,旨在简化防火墙配置,适合普通用户使用。
特点
简化配置:
ufw 提供了简单的命令行接口,用户无需深入了解 iptables 的复杂概念。
适合初学者或需要快速配置防火墙的场景。
默认规则:
ufw 默认阻止所有传入连接,允许所有传出连接。
用户只需开放需要的端口或服务。
服务支持:
ufw 支持通过服务名称(如 ssh、http)开放端口,无需记住端口号。
例如:sudo ufw allow ssh 会开放 SSH 端口(22)。
持久化:
ufw 规则会自动持久化,重启后仍然有效。
日志记录:
ufw 提供了简单的日志功能,可以记录被阻止的连接。主要区别
特性 iptables ufw
目标用户 高级用户、系统管理员 普通用户、初学者
配置复杂度 复杂,需要熟悉网络协议和规则 简单,提供友好的命令行接口
功能 强大,支持复杂的网络策略 简化,适合基本防火墙需求
持久化 需要手动保存和加载规则 自动持久化
服务支持 不支持服务名称,需手动指定端口 支持服务名称(如 ssh、http)
日志记录 需要手动配置 提供简单的日志功能使用场景
iptables
需要精细控制网络流量(如 NAT、端口转发、流量限制等)。
需要实现复杂的网络策略。
用户熟悉 iptables 的配置和管理。
ufw
快速配置基本的防火墙规则。
用户不熟悉 iptables 或不需要复杂的网络配置。
适合个人电脑或简单的服务器环境。示例
iptables 示例
开放 TCP 端口 80:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
保存规则:
sudo iptables-save > /etc/iptables/rules.v4
加载规则:
sudo iptables-restore < /etc/iptables/rules.v4
ufw 示例
开放 TCP 端口 80:
sudo ufw allow 80/tcp
启用防火墙:
sudo ufw enable
查看状态:
sudo ufw status
Ubuntu 上使用 ufw 配置
在 Ubuntu 上使用 ufw 配置防火墙并确保服务可用,以下是针对五台服务器的详细步骤。我们将根据每台服务器的角色开放必要的端口,并确保服务器之间的通信正常。
sudo ufw status numbered
sudo ufw status numbered # 查看规则编号
sudo ufw delete 1 # 删除编号为 1 的规则
sudo ufw delete allow 6379/tcp # 删除 Redis 端口规则
sudo ufw delete allow 3306/tcp # 删除 MySQL 端口规则
sudo ufw delete allow 2181/tcp # 删除 ZooKeeper 端口规则
sudo ufw delete allow 9092/tcp # 删除 Kafka 端口规则
sudo ufw delete allow 8080/tcp # 删除 Tomcat 端口规则
sudo netstat -tuln | grep -E ‘6379|3306|2181|9092|8080’
sudo ss -tuln | grep -E ‘6379|3306|2181|9092|8080’
确认服务端口
根据描述,各服务器的服务端口如下:
MySQL 主备(209 和 210)
MySQL: 3306(TCP)
Keepalived VRRP: 112(UDP)
Java 应用服务器(202 和 211)
Tomcat: 8088(TCP)
Nginx: 8066(TCP)
Redis: 3306(TCP)和 26379(TCP)
Zookeeper: 2181(TCP)
Kafka: 9092(TCP)
UDP 车道服务: 8899(UDP)
Keepalived VRRP: 112(UDP)
Redis 哨兵(205)
Redis: 3306(TCP)和 26379(TCP)安装和启用 UFW
如果未安装 ufw,先安装并启用:
sudo apt update
sudo apt install ufw
sudo ufw enable配置 UFW 规则
根据每台服务器的角色,开放相应的端口。
MySQL 主备
允许 MySQL 端口
sudo ufw allow 3306/tcp
允许 Keepalived VRRP 端口
sudo ufw allow 112/udp
允许 Tomcat 端口
sudo ufw allow 8088/tcp
允许 Nginx 端口
sudo ufw allow 8066/tcp
允许 Redis 端口
sudo ufw allow 3306/tcp
sudo ufw allow 26379/tcp
允许 Zookeeper 端口
sudo ufw allow 2181/tcp
允许 Kafka 端口
sudo ufw allow 9092/tcp
允许 UDP 车道服务端口
sudo ufw allow 8899/udp
允许 Keepalived VRRP 端口
sudo ufw allow 112/udp
Redis 哨兵
允许 Redis 端口
sudo ufw allow 3306/tcp
sudo ufw allow 26379/tcp允许 SSH 访问
确保开放 SSH 端口(默认 22),以便远程管理:
sudo ufw allow 22/tcp检查 UFW 状态
查看当前的 ufw 规则:
sudo ufw status verbose
输出示例:
Status: active
To Action From
3306/tcp ALLOW Anywhere
112/udp ALLOW Anywhere
8088/tcp ALLOW Anywhere
8066/tcp ALLOW Anywhere
2181/tcp ALLOW Anywhere
9092/tcp ALLOW Anywhere
8899/udp ALLOW Anywhere
22/tcp ALLOW Anywhere
- 测试服务可用性
在配置完规则后,测试服务的连通性,确保所有服务正常运行。可以使用以下工具测试:
telnet:测试 TCP 端口。
nc:测试 TCP/UDP 端口。
nmap:扫描端口状态。
例如:
telnet <目标IP> <端口号>
nc -vz <目标IP> <端口号>
nmap <目标IP>