1、 Linux 防火墙简介
Linux 防火墙是一种位于内部网络与外部网络之间的网络安全系统,是一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙主要通过Netfilter与TCPwrappers两个机制来管理的。
管理防火墙的两种方式:
1)iptables
使用较为复杂,但功能强大。iptables 是交由内核层面的netfilter网络过滤器来处理。
2)firewalld
使用相对简单,firewalld是交由内核层面的nftables包过滤框架来处理。相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
2、firewalld常用的区域
firewalld中将过滤规则集合称之为zone。一个zone就是一套过滤规则,数据包必须要经过某个zone才能入站或出站。firewalld将网卡对应到不同的区域(zone),zone 默认共有9个,分别为block、dmz、drop external、home、internal、public、trusted、work。不同的区域之间的差异是其对待数据包的默认行为不同,根据区域名字我们可以很直观的知道该区域的特征,在CentOS7系统中,默认区域被设置为public。firewalld 中最上层的组织是区域。如果一个包匹配区域相关联的网络接口或源 IP/掩码 ,它就是区域的一部分。
常用区域如下表,
区域 | 说明 |
trusted (信任区域) | 可接收所有的网络连接 |
public (公共区域) | 除非与传出流量相关。或与ssh或dhcpv6- client预定义服务匹配,否则拒绝流量传入, 在公共区域内, 不能相信网络内的其他计算机不会对计算机造成危害, 只能接收经过选择的连接。 该区域是新添加网络接口的默认区域。 |
work (工作区域) | 除非与传出流量相关,或与ssh、 ipelieat、dhepv-client 预定义服务匹配, 否则拒绝 流量传入,用于工作区。 相信网络内的其他计算机不会危害计算机, 仅接收经过选择 的连接 |
home (家庭区域) | 除非与传出流量相关, 或与ssh、ip-client. mdns、 samba-client、dhepv6-clicnt 预定 义服务匹配,否则拒绝流量传入,用于家庭网络。 信任网络内的其他计算机不会危害 计算机, 仅接收经过选择的连接 |
internal (内部区域) | 除非与传出流量相关, 或与ssh、ipelient、mdns、 samba-client. dbepv6-client 预定 义服务匹配,否则拒绝流量传入,用于内部网络。 信任网络内的其他计算机不会危害 计算机, 仅接收经过选择的连接 |
extemal (外部区域) | 除非与传出流量相关,或与ssh预定义服务匹配, 否则拒绝流量传入。通过此区域转 发的IPv4传出流量将进行地址伪装, 可用于为路由器启用了伪装功能的外部网络。 |
dmz (隔离区域也称为非军事区域) | 除非 与传出的流量相关,或与ssh预定义服务匹配, 否则拒绝流量传入 |
block (限制区城) | 除非与传出流量相关,否则拒绝所有传入流量 |
drop (丢弃区域) | 除非与传出流量相关,否则丢弃所有传入流量, 并且不产生包含ICMP(Intermet Control Message Protocol,互联网控制报文协议》的错误响应 |
3、firewalld-cmd终端管理工具
可以使用 firewalld-cmd 命令来管理我们的防火墙规则,安装 firewalld 这个软件包,系统就会提供该命令工具。firewalld-cmd有两种模式,Runtime模式是当前立即生效,重启后失效。Permanent模式是当前不生效,重启后生效。firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且会随着系统的重启而失效。如需让配置策略一直存在,可以使用永久(Permanent)模式了,只需用firewall-cmd命令正常设置防火墙策略时添加--permanent参数,此时配置的防火墙策略就可以永久生效。但永久生效模式设置的策略只有在系统重启之后才能自动生效。如让配置的策略立即生效,需要手动执行firewall-cmd --reload命令。
用法如下:
firewalld-cmd [OPTIONS…]
参数选项:
参数 | 作用 |
--get-default-zone | 查询默认的区域名称 |
--set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
--get-zones | 显示可用的区域 |
--get-services | 显示预先定义的服务 |
--get-active-zones | 显示当前正在使用的区域与网卡名称 |
--add-source= | 将源自此 IP 或子网的流量导向指定的区域 |
--remove-source= | 不再将源自此 IP 或子网的流量导向某个指定区域 |
--add-interface=<网卡名称> | 将源自该网卡的所有流量都导向某个指定区域 |
--change-interface=<网卡名称 | 将某个网卡与区域进行关联 |
--list-all | 显示当前区域的网卡配置参数、资源、端口, 以及服务等信息 |
--list-all-zones | 显示所有区域的网卡配置参数、资源、端口, 以及服务等信息 |
--add-service=<服务名> | 设置默认区域允许该服务的流量 |
--add-port=<端口号/协议> | 设置默认区域允许该端口的流量 |
--remove-service=<服务名> | 设置默认区域不再允许该服务的流量 |
--remove-port=<端口号/协议> | 设置默认区域不再允许该端口的流量 |
--reload | 让“永久生效”的配置规则立即生效, 并覆盖当前的配置规则 |
--panic-on | 开启应急状况模式 |
--panic-off | 关闭应急状况模式 |
使用示例:
1)查看firewalld服务当前所使用的区域
$ firewall-cmd --get-default-zone
public
$
2)查询指定网卡在firewalld服务中绑定的区域
$ firewall-cmd --get-zone-of-interface=ens160
public
$
3)firewalld服务的默认区域设置为public
$ firewall-cmd --set-default-zone=public
Warning: ZONE_ALREADY_SET: public
success
$
4)启动和关闭firewalld防火墙服务的应急状况模式
如果想在1s内或其它情况下阻断一切网络连接,可以使用此模式。该模式会切断一切网络连接,使用时需慎重。
$ firewall-cmd --panic-on
success
$ firewall-cmd --panic-off
success
$
5)查询SSH和HTTPS协议的流量是否允许放行
$ firewall-cmd --zone=public --query-service=ssh
yes
$ firewall-cmd --zone=public --query-service=https
no
$
6)将HTTPS协议的流量设置为永久允许放行
$ firewall-cmd --permanent --zone=public --add-service=https
success
$ firewall-cmd --reload
success
$ firewall-cmd --zone=public --query-service=https
yes
$
注意:执行firewall-cmd --reload
命令后设置才会生效
7)将HTTP协议的流量设置为永久拒绝
默认情况下HTTP协议的流量就没有被允许,则会提示“Warning: NOT_ENABLED: http”
$ firewall-cmd --permanent --zone=public --remove-service=http
Warning: NOT_ENABLED: http
success
$ firewall-cmd --reload
success
$
注意:执行firewall-cmd --reload
命令后设置才会生效
8)将运行时配置保存为永久配置
firewall-cmd --runtime-to-permanent
4、常用命令
1)基本操作
查看状态
systemctl status firewalld
或者
firewall-cmd --state
启动
systemctl start firewalld
停止
systemctl stop firewalld
开机启动
systemctl enable firewalld
禁用启动
systemctl disable firewalld
2)配置firewalld
查看版本
firewall-cmd --version
查看帮助
firewall-cmd --help
查看设置
显示状态: firewall-cmd --state
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包
firewall-cmd --panic-on
取消拒绝状态
firewall-cmd --panic-off
查看是否拒绝
firewall-cmd --query-panic
更新防火墙规则
firewall-cmd --reload firewall-cmd --complete-reload
注意:firewall-cmd --reload
和firewall-cmd --complete-reload
区别是第一个无需断开连接,也是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务
将接口添加到区域,默认接口都在public
。
firewall-cmd --zone=public --add-interface=eth0
注意:永久生效需加上 --permanent
然后reload
防火墙
设置默认接口区域
firewall-cmd --set-default-zone=public
查看所有打开的端口
firewall-cmd --zone=dmz --list-ports
添加一个端口到区域
firewall-cmd --zone=dmz --add-port=8080/tcp
注意:若要永久生效参考上述方法
添加服务
服务需要在配置文件中添加,/etc/firewalld
目录下有services
文件夹
firewall-cmd --zone=work --add-service=smtp
移除服务
firewall-cmd --zone=work --remove-service=smtp
例如,
#拒绝172.27.10.0/22网络用户访问ssh
firewall-cmd --permanent --zone=classroom --add-rich-rule='rule
family=ipv4 source address=172.27.10.0/22 service name=ssh reject'
#端口转发 :将来自172.25.0.0/24子网5432的端口流量转发到本地的80端口
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source
address=172.25.0.0/24 forward-port port=5423 protocol=tcp to-port=80'
#在默认区域中,允许每分钟对ftp有两次新连接,临时生效
firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'
#丢弃来自默认区域中任何位置的所有传入IPsec esp协议包。
firewall-cmd --permanet --add-rich-rule='rule protocol value=esp drop'
#在192.168.10/24子网中的vnc区域,接受端口7900~7905上的所有TCP包。
firewall-cmd --permanent --zone=vnc --add-rich-rule='family-ipv4
source address=192.168.1.0/24 port prt=7900-7905 protocol=tcp accept'
#允许172.25.1.0/32子网访问http,并记录此流量,但限制每秒3个新连接
firewall-cmd --permanet --add-rich-rle='rule familiy-ipv4 source address=172.25.0.0/32
service name="http" log level=notice prefix="NEW HTTP" limit value="3/s" accept'
5、端口流量转发
端口流量转发就是把一个端口的数据转发到另外一个端口。可以实现用户通过其他端口号也能访问ssh服务,不需要修改ssh的端口。
命令写法:
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
例如,
$ firewall-cmd --permanent --zone=public --add-forward-port=port=28974:proto=tcp:toport=22:toaddr=192.168.10.10
success
$ firewall-cmd --reload
success
$