1.防火墙综述
linux
防火墙,常用的包括三种:ufw
、 firewalld
和 iptables
。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 Firewall
是 ubuntu
提供的一个 iptables
的接口。同时支持 ipv4
和 ipv6
。
最新版的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)