linux 的防火墙 ufw、firwalld、iptables

jupiter
2023-08-09 / 1 评论 / 394 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年08月09日,已超过422天没有更新,若内容或图片失效,请留言反馈。

1.防火墙综述


linux 防火墙,常用的包括三种:ufwfirewalldiptables。UFW、firewall、iptables,其中,UFW是Debian系列的默认防火墙,firewall 是红帽系列7及以上的防火墙(如CentOS7.x),iptables是红帽系列6及以下(如CentOS6.x)的防火墙,3者学习难度依次递增。

常见的防火墙分为两种,一种是3层防火墙,另一种是 7 层防火墙。

在 TCP/IP 的七层网络中,第三层是网络层,三层防火墙会在这层对源地址和目标地址进行检测。但七层防火墙会对 源端口、目标端口、源ip、目标ip 全都进行检测。

2.ufw

2.1 概述

因为原生的 iptable 配置麻烦,学习成本较高。 ufw全称 Uncomplicated Firewallubuntu提供的一个 iptables 的接口。同时支持 ipv4ipv6

最新版的UFW默认启用了IPV6配置,你也可以通过以下命令进行检查:

# cat /etc/default/ufw | grep -i ipv6
IPV6=yes

2.2 默认策略

默认情况下,UFW 设置了:禁止所有流量转入,允许所有流量转出。(这点和 iptable 的默认允许所有流量转入不同)。
我们也可以更改此默认配置:

cat /etc/default/ufw |grep -i default_input  # 加 -i 是关闭大小写区分。
DEFAULT_INPUT_POLICY="DROP"

2.3 安装启动与关闭

sudo apt-get install ufw # 安装
sudo ufw enable # 启动防火墙并设置开机启动
sudo ufw default deny # 关闭外部主机对本机的访问(不影响本机对外部主机访问)
sudo ufw disable # 关闭防火墙并关闭开机自启
sudo ufw status # 查看防火墙状态

2.4 设置UFW规则

sudo ufw allow port_number // 开放 port_number 端口
 
sudo ufw allow from 192.168.1.1 // 允许指定主机的访问
 
sudo ufw allow ssh // 禁止外部访问ssh服务 
# 由于在/etc/services中, 22端口对应的服务名是ssh。
# 上面的命令也等价于sudo ufw allow 22

sudo ufw allow 80/tcp  // 也可以指定端口号和协议
// 当没有给出协议的时候,UFW 同时创建tcp和udp的规则。

sudo ufw allow 7100:7200/tcp // 批量管理端口

sudo ufw allow from 64.63.62.61 to any port 22 // 允许指定 IP 地址访问指定端口

sudo ufw allow from 192.168.1.0/24 to any port 3306 // 允许子网

sudo ufw deny from 23.24.25.0/24 //禁止来自23.24.25.0/24的所有连接

sudo ufw allow in on eth2 to any port 3306 //  允许指定网络接口的连接

sudo ufw deny proto tcp from 23.24.25.0/24 to any port 80,443 //禁止从23.24.25.0/24对80和443端口的访问

2.5 删除 UFW 规则

有两种不同的方式可以删除 UFW 规则。通过规则序号和通过指定的规则。

通过规则序号来删除 UFW 规则很简单,特别是你刚接触 UFW。

想要通过规则序号来删除,你需要找到你想删除的规则序号。想要这么做,运行下面的命令:

sudo ufw status numbered

输出:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 8080/tcp                   ALLOW IN    Anywhere

想要删除规则,序号为3,这个规则允许对端口8080的连接,你可以使用下面的命令:

sudo ufw delete 3

删除规则的第二种方法就是指定实际的规则。例如,如果你添加过一个打开端口8069的规则,你可以通过下面的命令删除它:

sudo ufw delete allow 8069

2.6 重置 UFW

重置 UFW 将会禁用 UFW,删除所有激活的规则。如果你想撤销所有的应用规则,并且重新开始时,这个很有用。

想要重置 UFW,简单输入下面的命令:

sudo ufw reset

3.firewall

3.1 概述

Centos7以上的发行版都试自带了firewalld防火墙的,firewalld去带了iptables防火墙。其原因是iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。 相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

关于 firewall 防火墙配置,需要注意的是:

这里需要首先说明的是,在执行命令时,如果没有带 --permanent 参数表示配置立即生效,但是不会对该配置进行存储,相当于重启服务器就会丢失。如果带上则会将配置存储到配置文件,,但是这种仅仅是将配置存储到文件,却并不会实时生效,需要执行 firewall-cmd --reload 命令重载配置才会生效。

3.2 规则配置

  • 查看默认域的配置
firewall-cmd --list-all
  • 应急命令
firewall-cmd --panic-on     # 拒绝所有流量,远程连接会立即断开,只有本地能登陆
firewall-cmd --panic-off    # 取消应急模式,但需要重启firewalld后才可以远程ssh
firewall-cmd --query-panic  # 查看是否为应急模式
  • 管理端口
firewall-cmd --add-port=<port>/<protocol>    # 添加端口/协议(TCP/UDP)
firewall-cmd --remove-port=<port>/<protocol> # 移除端口/协议(TCP/UDP)
firewall-cmd --list-ports                    # 查看开放的端口
  • 开放指定端口,并重新加载
firewall-cmd --add-port=443/tcp --permanent # 开放端口
firewall-cmd --reload                       # 重新加载
firewall-cmd --query-port=443/tcp           # 查询是否放开

4.iptables

  • 通过四表五连进行管理,比较复杂,暂时放弃学习,等用到了再学。

参考资料

  1. linux 的防火墙 ufw、firwalld、iptables 、 - 沧海一声笑rush - 博客园 (cnblogs.com)
  2. ubuntu防火墙设置 (ufw、iptables)-小白实操记录
  3. 如何在 Ubuntu 20.04 上使用 UFW 来设置防火墙 - 知乎 (zhihu.com)
  4. Linux 防火墙教程:IPTables 表、链、规则基础-云社区-华为云 (huaweicloud.com)
  5. iptables的四表五链与NAT工作原理 - 知乎 (zhihu.com)
0

评论 (1)

打卡
取消
  1. 头像
    Andy Pang
    Linux · Google Chrome

    画图

    回复