linux
防火墙,常用的包括三种:ufw
、 firewalld
和 iptables
。学习难度依次递增。
常见的防火墙分为两种,一种是3层防火墙,另一种是 7 层防火墙。
在 TCP/IP 的七层网络中,第三层是网络层,三层防火网会在这层对源地址和目标地址进行检测。但七成防火墙会对 源端口、目标端口、源ip、目标ip 全都进行检测。
因为原生的 iptable
配置麻烦,学习成本较高。 ufw
全称 Uncomplicated Firewall
是 ubuntu
提供的一个 iptables
的接口。同时支持 ipv4
和 ipv6
。
最新版的UFW默认启用了IPV6配置,你也可以通过以下命令进行检查:
# cat /etc/default/ufw | grep -i ipv6
IPV6=yes
默认情况下,UFW
设置了:禁止所有流量转入,允许所有流量转出。(这点和 iptable 的默认允许所有流量转入不同)。
我们也可以更改此默认配置:
cat /etc/default/ufw |grep -i default_input # 加 -i 是关闭大小写区分。
DEFAULT_INPUT_POLICY="DROP"
允许 80 端口的 tcp 流量包进入
sudo ufw allow 22/tcp
拒绝 88 端口的 tcp 流量包进入与流出
sudo ufw deny 88/tcp
允许特定的 ip 源的访问
sudo ufw allow from 192.168.1.1
Centos7
以上的发行版都试自带了firewalld
防火墙的,firewalld
去带了iptables
防火墙。其原因是iptables
的防火墙策略是交由内核层面的netfilter
网络过滤器来处理的,而firewalld则是交由内核层面的nftables
包过滤框架来处理。 相较于iptables
防火墙而言,firewalld
支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld
预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
关于 firewall 防火墙配置,需要注意的是:
这里需要首先说明的是,在执行命令时,如果没有带 --permanent 参数表示配置立即生效,但是不会对该配置进行存储,相当于重启服务器就会丢失。如果带上则会将配置存储到配置文件,,但是这种仅仅是将配置存储到文件,却并不会实时生效,需要执行 firewall-cmd --reload 命令重载配置才会生效。
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 # 查询是否放开
iptables 的结构
iptables -> Tables -> Chains -> Rules
简单地讲,tables由chains组成,而chains又由rules组成。iptables 默认有四个表Filter, NAT, Mangle, Raw,其对于的链如下图。
ufw
是Ubuntu系统上对于iptables的简化操作工具firewall
是centos系列系统弃用iptables后的一个新防火墙
https://www.leftso.com/article/2411200920192618.html