防火墙工具引起的问题

起因

因为觉得服务器的内存占用太高,但是不知道要清理哪些进程,于是重启了一下服务器。重启服务器之后Xshell连不上了,于是折腾了一个晚上,搞明白了关于防火墙的一些相关知识。

同时突然想起之前一次使用firewall-cmd开放端口后,服务器也无法远程连接,可能也就是和今天学到的有关吧。

各种防火墙工具

在 Linux 系统中,有多种防火墙工具可供选择,每种工具都有其特点和适用场景。以下是常见防火墙工具的梳理,包括它们的异同、开机自启动方法以及常用命令。


1. iptables

特点

  • 底层工具:直接操作 Linux 内核的 Netfilter 框架。
  • 静态规则:规则是静态的,修改后需要手动保存。
  • 灵活性高:适合需要精细控制规则的高级用户。

开机自启动

  • iptables 本身不是一个服务,但可以通过以下方法实现开机自启动:
    • Debian/Ubuntu:使用 iptables-persistent 包。
      • sudo apt-get install iptables-persistent
    • CentOS/RHEL:使用 iptables-services 包。
      • sudo yum install iptables-services
      • sudo systemctl enable iptables
      • sudo systemctl start iptables

常用命令

  • 查看规则:sudo iptables -L -v -n
  • 添加规则:sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • 保存规则:sudo iptables-save > /etc/iptables/rules.v4
  • 加载规则:sudo iptables-restore < /etc/iptables/rules.v4

2. firewalld

特点

  • 动态管理:支持运行时更新规则,无需重启服务。
  • 高级抽象:使用 zones 和 services 简化配置。
  • 适合服务器:常用于 CentOS、RHEL、Fedora。

开机自启动

  • 启用开机自启动:
    • sudo systemctl enable firewalld
    • sudo systemctl start firewalld

常用命令

  • 查看状态:sudo firewall-cmd --state
  • 查看当前区域规则:sudo firewall-cmd --list-all
  • 添加服务:
    • sudo firewall-cmd --zone=public --add-service=ssh --permanent
    • sudo firewall-cmd --reload
  • 添加端口:
    • sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
    • sudo firewall-cmd --reload

3. UFW(Uncomplicated Firewall)

特点

  • 简单易用:适合初学者或需要快速配置的场景。
  • 基于 iptables:底层仍然使用 iptables
  • 适合桌面:常用于 Ubuntu 和基于 Ubuntu 的发行版。

开机自启动

  • 启用开机自启动:
    • sudo systemctl enable ufw
    • sudo systemctl start ufw

常用命令

  • 查看状态:sudo ufw status
  • 启用 UFW:sudo ufw enable
  • 允许服务:sudo ufw allow ssh
  • 允许端口:sudo ufw allow 80/tcp
  • 删除规则:sudo ufw delete allow 80/tcp

4. nftables

特点

  • iptables 的继任者:更高效、更灵活。
  • 统一框架:支持 IPv4 和 IPv6。
  • 适合高级用户:语法更复杂,但功能更强大。

开机自启动

  • 启用开机自启动:
    • sudo systemctl enable nftables
    • sudo systemctl start nftables

常用命令

  • 查看规则:sudo nft list ruleset
  • 添加规则:sudo nft add rule ip filter input tcp dport 22 accept
  • 保存规则:sudo nft list ruleset > /etc/nftables.conf
  • 加载规则:sudo nft -f /etc/nftables.conf

5. 总结对比

工具特点开机自启动方法适用场景
iptables静态规则,灵活性高使用 iptables-persistent 或 iptables-services高级用户、服务器
firewalld动态管理,支持 zones 和 servicessystemctl enable firewalld服务器、云环境
UFW简单易用,基于 iptablessystemctl enable ufw桌面、简单服务器
nftablesiptables 的继任者,高效灵活systemctl enable nftables高级用户、现代 Linux 系统

6. 如何选择?

  • 如果你需要精细控制规则,选择 iptables 或 nftables
  • 如果你是初学者或需要快速配置,选择 UFW
  • 如果你需要动态管理规则,选择 firewalld

避免防火墙冲突

防火墙冲突通常发生在同时使用多个防火墙工具(如 iptablesfirewalldUFW 等)时,因为它们可能会修改相同的底层规则表(如 iptablesnftables),导致规则覆盖或不一致的行为。以下是避免防火墙冲突的方法:


1. 只使用一个防火墙工具

这是避免冲突的最简单和最有效的方法。选择一个适合你需求的工具,并禁用其他工具。

选择工具的建议

  • 简单易用:选择 UFW(适合桌面用户或初学者)。
  • 动态管理:选择 firewalld(适合服务器或需要频繁更新规则的场景)。
  • 精细控制:选择 iptablesnftables(适合高级用户)。

2. 禁用其他防火墙工具

如果你决定使用某个工具,请确保禁用其他工具。

禁用 firewalld

sudo systemctl stop firewalld
sudo systemctl disable firewalld

禁用 UFW

sudo ufw disable

禁用 iptables(如果使用 firewalld 或 UFW)

  • 如果你使用 firewalldUFW,通常不需要手动禁用 iptables,因为它们会管理 iptables 规则。
  • 如果你直接使用 iptables,请确保没有其他工具干扰。

3. 检查当前使用的工具

检查 firewalld 是否运行

sudo systemctl status firewalld

检查 UFW 是否运行

sudo ufw status

检查 iptables 规则

sudo iptables -L -v -n

4. 避免手动修改底层规则

  • 如果你使用 firewalldUFW,尽量避免直接使用 iptablesnftables 修改规则,因为这可能导致冲突。
  • 如果你需要直接操作底层规则,请确保了解工具之间的交互方式。

5. 规则持久化

确保规则在重启后仍然有效,避免因规则丢失而导致的安全问题。

firewalld

  • 使用 --permanent 参数保存规则:
  sudo firewall-cmd --zone=public --add-service=ssh --permanent
  sudo firewall-cmd --reload

UFW

  • 启用 UFW 并添加规则:
  sudo ufw enable
  sudo ufw allow ssh

iptables

  • 使用 iptables-save 保存规则:
  sudo iptables-save > /etc/iptables/rules.v4

6. 示例:从 firewalld 切换到 UFW

如果你决定使用 UFW,可以按照以下步骤切换:

停止并禁用 firewalld

sudo systemctl stop firewalld
sudo systemctl disable firewalld

启用 UFW

sudo ufw enable

添加规则

sudo ufw allow ssh
sudo ufw allow http

检查状态

sudo ufw status

7. 总结

  • 只使用一个防火墙工具,避免同时启用多个工具。
  • 禁用其他工具,确保规则不会被覆盖。
  • 确保规则持久化,避免重启后丢失。

默认防火墙工具

发行版默认工具特点其他支持工具
UbuntuUFW简单易用,适合初学者iptables, firewalld, nftables
DebianUFW简单易用,适合初学者iptables, firewalld, nftables
CentOSfirewalld动态管理,支持 zones 和 servicesiptables, nftables
RHELfirewalld动态管理,支持 zones 和 servicesiptables, nftables
Fedorafirewalld动态管理,支持 zones 和 servicesiptables, nftables
Arch Linux无默认工具用户自行选择iptables, nftables, firewalld
openSUSESuSEfirewall2 / firewalld旧版使用 SuSEfirewall2,新版使用 firewalldiptables, nftables

理论上,大多数防火墙工具可以在所有 Linux 发行版上使用,但实际使用中可能会受到以下限制:

  1. 发行版的默认工具:不同发行版可能有自己的默认防火墙工具。
  2. 软件包管理器的支持:某些工具可能需要从源码编译安装,或者依赖特定的库。
  3. 兼容性问题:同时使用多个防火墙工具可能会导致规则冲突。

但是强烈建议就用默认的工具或者使用非默认的工具时一定要禁用其他工具,不要混用不同的防火墙工具,导致规则覆盖或不一致的行为!!!

防火墙和安全组

  • 防火墙
    • 是一种网络安全系统,用于监控和控制进出网络的流量。
    • 通常部署在单个服务器或网络边界(如路由器、网关)。
    • 基于规则(如 IP 地址、端口、协议)来决定是否允许或拒绝流量。
  • 安全组
    • 是一种虚拟防火墙,通常用于云计算环境(如 AWS、阿里云、腾讯云)。
    • 作用于虚拟机实例(如云服务器)或网络接口。
    • 基于规则(如 IP 地址、端口、协议)来控制进出实例的流量。
特性防火墙安全组
应用场景物理服务器、网络边界云计算环境中的虚拟机实例
实现方式软件(如 iptables)或硬件云计算平台的虚拟网络层
规则管理静态,需手动保存动态,修改后立即生效
部署位置网络边界或单个主机虚拟机实例或网络接口
性能取决于硬件或软件实现由云计算平台提供
管理复杂度较高,适合高级用户较低,适合普通用户

对于云服务器来说,安全组和防火墙相当于双重保障,在使用时如果发现某一端口开放了但是无法使用,就要查看安全组和防火墙是否都开放了该端口。

相关问题分析

多个防火墙工具导致冲突

问题原因:之前的这一次问题可能就是由于我在Ubuntu上安装了firewall-cmd,然后使用firewall-cmd进行了端口配置,导致其他工具(ufw)的配置被覆盖了,22端口(SSH服务)也被关闭了,所以无法进行远程连接。

解决办法:关闭和禁用其他防火墙服务,只保留一个防火墙工具,避免发生冲突。

防火墙服务没有开启

问题原因:由于防火墙服务(ufw)没有开启,重启之后端口的相关配置没有被加载(22端口未开启),所以无法进行远程连接。

解决办法:开启防火墙服务(开机自启动)。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇