Ubuntu 防火墙iptables和 ufw

文章目录

    • [iptables 和 ufw 的区别](#iptables 和 ufw 的区别)
    • [Ubuntu 上使用 ufw 配置](#Ubuntu 上使用 ufw 配置)

iptables 和 ufw 的区别

iptables 和 ufw 是 Linux 系统中用于管理防火墙的工具,但它们的设计目标和使用方式有所不同。

iptables:功能强大,适合高级用户和复杂场景,但配置复杂。

ufw:简单易用,适合普通用户和基本防火墙需求。

如果你只需要基本的防火墙功能,推荐使用 ufw;如果需要更复杂的网络配置,可以使用 iptables。两者可以结合使用,ufw 的底层实际上也是基于 iptables 的。

  1. iptables

    iptables 是 Linux 内核中 Netfilter 框架的用户空间工具,用于配置和管理网络数据包的过滤、网络地址转换(NAT)等。

    特点

    底层工具:

    iptables 是底层的防火墙工具,直接操作内核的 Netfilter 框架。

    提供了非常强大的功能,可以精细控制网络流量。

    复杂性:

    配置复杂,需要用户熟悉网络协议、链(Chains)、表(Tables)和规则(Rules)等概念。

    适合高级用户或需要复杂网络配置的场景。

    灵活性:

    支持多种表(如 filter、nat、mangle 等)和链(如 INPUT、OUTPUT、FORWARD 等)。

    可以实现复杂的网络策略,如端口转发、流量控制、NAT 等。

    持久化:

    iptables 规则默认不会持久化,重启后会丢失。

    需要手动保存规则(如使用 iptables-save)并在启动时加载(如使用 iptables-restore)。

  2. ufw(Uncomplicated Firewall)

    ufw 是一个基于 iptables 的前端工具,旨在简化防火墙配置,适合普通用户使用。

    特点

    简化配置:

    ufw 提供了简单的命令行接口,用户无需深入了解 iptables 的复杂概念。

    适合初学者或需要快速配置防火墙的场景。

    默认规则:

    ufw 默认阻止所有传入连接,允许所有传出连接。

    用户只需开放需要的端口或服务。

    服务支持:

    ufw 支持通过服务名称(如 ssh、http)开放端口,无需记住端口号。

    例如:sudo ufw allow ssh 会开放 SSH 端口(22)。

    持久化:

    ufw 规则会自动持久化,重启后仍然有效。

    日志记录:

    ufw 提供了简单的日志功能,可以记录被阻止的连接。

  3. 主要区别

    特性 iptables ufw

    目标用户 高级用户、系统管理员 普通用户、初学者

    配置复杂度 复杂,需要熟悉网络协议和规则 简单,提供友好的命令行接口

    功能 强大,支持复杂的网络策略 简化,适合基本防火墙需求

    持久化 需要手动保存和加载规则 自动持久化

    服务支持 不支持服务名称,需手动指定端口 支持服务名称(如 ssh、http)

    日志记录 需要手动配置 提供简单的日志功能

  4. 使用场景

    iptables

    需要精细控制网络流量(如 NAT、端口转发、流量限制等)。

    需要实现复杂的网络策略。

    用户熟悉 iptables 的配置和管理。

    ufw

    快速配置基本的防火墙规则。

    用户不熟悉 iptables 或不需要复杂的网络配置。

    适合个人电脑或简单的服务器环境。

  5. 示例

    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'

  1. 确认服务端口

    根据描述,各服务器的服务端口如下:

    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)

  2. 安装和启用 UFW

    如果未安装 ufw,先安装并启用:

    sudo apt update

    sudo apt install ufw

    sudo ufw enable

  3. 配置 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

  4. 允许 SSH 访问

    确保开放 SSH 端口(默认 22),以便远程管理:

    sudo ufw allow 22/tcp

  5. 检查 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

  1. 测试服务可用性
    在配置完规则后,测试服务的连通性,确保所有服务正常运行。可以使用以下工具测试:
    telnet:测试 TCP 端口。
    nc:测试 TCP/UDP 端口。
    nmap:扫描端口状态。
    例如:
    telnet <目标IP> <端口号>
    nc -vz <目标IP> <端口号>
    nmap <目标IP>
相关推荐
比奇堡派星星1 小时前
module_init 详解
linux·arm开发·驱动开发
大白的编程日记.1 小时前
【Linux学习笔记】Linux基本指令及其发展史分析
linux·笔记·学习
若云止水2 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_list_init
nginx·ubuntu·list
web130933203982 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
JANGHIGH2 小时前
Ubuntu 20.04下配置VSCode以支持OpenCV库开发
vscode·opencv·ubuntu
若云止水2 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(5)
网络·nginx·ubuntu
陈小也~2 小时前
Ubuntu22.04安装docker教程
linux·运维·docker·容器
aFakeProgramer2 小时前
Unix/Linux 系统中的一个命令行工具—— od 详解
linux·服务器·unix
是阿牛啊2 小时前
【ubuntu20安装usv_sim_lsa (无人水面航行器模拟环境) - v0.3】
ubuntu·ros·osg·usv_sim
基哥的奋斗历程2 小时前
RockyLinux 为 k8s 集群做准备
linux·容器·kubernetes