从CentOS7开始,默认使用firewalld来配置防火墙,没有安装iptables
firewalld定义区域来进行管理,将所有传入流量划分成区域,每个区域有自己的规则,下表是一些初始区域配置
firewall-cmd --set-default-zone=public //定义默认区域
firewall-cmd --reload //使配置生效
任何新网络接口都默认设置为public区域
区域名称 |
默认配置 |
trusted |
可信区域,防火墙放行一切流量。等同于关闭防火墙功能。 |
home |
区域内主动发起连接的流入回程数据包允许通过,默认放行ssh,mdns,ipp-client,samba-client或dhcpv6-client服务。 |
internal |
与home区域相同 |
work |
区域内主动发起连接的流入回程数据包允许通过,放行ssh,dhcpv6-client服务 |
external |
区域内主动发起连接的流入回程包允许通过,放行ssh服务匹配,开启地址伪装功能 |
dmz |
区域内主动发起连接的流入回程数据包允许通过,放行ssh服务匹配 |
block |
区域内主动发起连接的流入回程数据包允许通过 |
drop |
对进入该区域的所有数据包丢弃,并且不进行任何回包,区域内主动发起连接的流入回程数据包允许通过 |
public :默认区域,拒绝除与出站有关的通信或预定义服务(SSH)以外的所有进站通信
firewall-cmd 命令行工具
参数 |
作用 |
--get-default-zone |
直访默认的区域名称 |
--set-default-zone=<区域名称> |
设置默认的区域,使其永久生效 |
--list-all |
显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
--list-all-zones |
显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
--get-zones |
显示可用的区域 |
--get-active-zones |
显示当前正在使用的区域、来源地址和网卡名称 |
--add-source= |
将源自此IP或子网的流量导向指定的区域 |
--remove-source= |
不再将源自此IP或子网的流量导向指定的区域 |
--change-source= |
将源自此IP或子网的流量导向指定到新的区域 |
--add-interface=<网卡名称> |
将源自该网卡的所有流量都导向某个指定区域 |
--change-interface=<网卡名称> |
将某个网卡与区域进行关联 |
--get-services |
显示预定义的服务 |
--add-service=<服务名> |
设置默认区域允许该服务的流量 |
--add-port=<端口号/协议> |
设置默认区域允许该端口的流量 |
--remove-service=<服务名> |
设置默认区域不再允许该服务的流量 |
--remove-port=<端口号/协议> |
设置默认区域不再允许该端口的流量 |
--permanent |
让配置永久生效 |
--reload |
让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
规则匹配(优先级按顺序如下):
1、source,来源地址
2、Interface,接收请求的网卡
3、zone,默认的区域
Firewall有两种模式
runtime临时模式:修改规则马上生效,但如果重启服务则马上失效,测试时使用
permanent持久模式:修改规则后需要reload重载配置服务才会生效,生产使用
设置防火墙规则 示例:
绑定某个端口到某个zone,网卡接口默认绑定到默认的zone
#绑定接口到home区域
firewall-cmd --permanent --zone=home --change-interface=eth0
#将接口解绑
firewall-cmd --permanent --zone=home --remove-interface=eth0
绑定来源IP到某个zone 示例:
#将地址绑定在home区域
firewall-cmd --permanent --zone=home --add-source=192.168.100.100
#源地址解绑
firewall-cmd --permanent --zone=home --remove-source=192.168.100.100
#修改源地址
firewall-cmd --permanent --zone=drop --change-source=192.168.100.100
firewalld管理端口和协议 示例:
#查询哪些端口开放了
firewall-cmd --zone=drop --permanent --list-ports
#放行22端口
firewall-cmd --zone=drop --permnaent --add-port=22/tcp
#移除22端口
firewall-cmd --zone=drop --permanent --remove-port=22/tcp
#查询drop区域开放了哪些协议
firewall-cmd --zone=drop --permanent --list-protocols
#允许icmp协议流量
firewall-cmd --zone=drop --permanent --add-protocols=icmp
#禁止icmp协议流量
firewall-cmd --zone=drop --permanent --remove-protocols=icmp
firewalld管理端口转发 示例:
#将访问888端口流量转发到本机22端口
firewall-cmd --permanent --add-forward-port=port=888:proto=tcp:toport=22
#将访问88端口流量转发到ip 的主机的22端口,需要开启masquerade
firewall-cmd --permanent --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.100.100
(备注:需要在内核开启包转发功能)
sysctl -w net.ipv4.ip_forward=1
阻止流量 示例:
#将来源IP(IP段)指定到某个区域,drop丢弃
firewall-cmd --add-source=1.1.1.1 --zone=drop