当前位置: 首页 > article >正文

Ubuntu 防火墙iptables和 ufw

文章目录

    • iptables 和 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>

http://www.kler.cn/a/569230.html

相关文章:

  • C# 13与.NET 9革新及工业开发应用
  • 经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑
  • 2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析《更新中》
  • 大白话面试遇难题,应对策略是什么?
  • LeetCode:132. 分割回文串 II(DP Java)
  • OpenCV计算摄影学(7)HDR成像之多帧图像对齐的类cv::AlignMTB
  • 选开源CMS建站系统时,插件越多越好吗?
  • Apache部署Vue操作手册(SSL部分)
  • 【Linux文件IO】系统IO详情
  • torch.einsum 的 10 个常见用法详解以及多头注意力实现
  • Android SystemUI深度定制实战:下拉状态栏集成响铃功能开关全解析
  • 图像分类项目1:基于卷积神经网络的动物图像分类
  • 【AI实践】xiaozhi-esp32虾哥开源版-分析
  • PyTorch 中的 nn.ModuleList 是什么?与普通列表有啥区别?
  • C#调用CANoeCLRAdapter.dll文章(一)
  • Go语言学习笔记(六)——标准库
  • 算法系列之双指针(待完善题目)
  • openssl下aes128算法xts模式加解密运算实例
  • MySQL零基础教程13—分组查询(group by 和 having)
  • 消息中间件应用的常见问题与方案?