Ubuntu 防火墙iptables和 ufw
文章目录
- iptables 和 ufw 的区别
- Ubuntu 上使用 ufw 配置
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>