centos7/redhat7已经默认使用firewalld作为防火墙,其使用的方式已经变化,基于iptables的防火墙默认
不启用,但是仍可以继续使用
注意:centos7/redhat7中有几种防火墙共存:firewalld、iptables、ebtablesd、
默认使用的是firewalld作为防火墙,管理工具是firewalld、
Centos7的内核版本是3.10
uname -r
在此版本的内核里防火墙的包过滤机制是firewalld,使用firewalld来管理netfilter,不过底层调用的还是iptables,因为这几种damon是冲突的,所以建议禁用其他服务
systemctl status {firewalld,iptables,ip6tables,ebtables}
禁止iptables、ip6tables、ebtables
systemctl mask {iptables,ip6tables,ebtables}
firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的防火墙管理工具。拥有运行时配置和永久配置选项。它
也支持允许服务或者应用程序直接添加防火墙规则的接口。以前的system-config-firewall防火墙模型是静态的,每次修改都要求防火墙
完全重启。这个过程包括内核netfilter防火墙模块的卸载和新配置所需模块的装载等。 相反,firewall daemon动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。
什么是区域:网路区域定义了网络连接的等级
数据包要想进入到内核里必须通过某一个区域zone中的一个区域,而不同的区域里定义的规则不一样(即信任度不一样,过滤签强度也不一样),可以根据网卡所连接的安全性来判断,这张网卡的流量到底使用哪一个区域。
例如: 上图网卡eth0的流量全部使用zone区域1过滤规则,网卡eth1的流量全部使用zione区域2过滤规则 。。。。。
注意:一张网卡只能绑定到一个区域,而一个区域可以绑定多块网卡
什么是服务 :服务就是 端口和协议入口的组合
区域的概念:
丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似我们之前使用的 iptables -j drop,一旦使用丢弃规则将意味着不存在响应。
阻塞区域(Block Zone):阻塞区域会拒绝进入网络的连接,并且返回icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接
公共区域(Public Zone):只接受那些被选中的连接,默认只允许ssh和dhcpv6-client,这个区域是缺省区域zone
外部区域(External Zone):这个区域相当于路由器的启用伪装(masqmasquerading)选项。只有指定的连接会被接受,即ssh,而其他的连接将被丢弃或者不被接受
隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义。它也拥有只通过被选中连接的特性,即ssh。
工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允许ssh,ipp-client和dhcpv6-client
家庭区域(Home Zone):这个区域专门用于家庭环境。它同样只允许被选中的连接,即ssh,ipp-client,mdns,Samba-client和dhcpv6-client
内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,它也只有通过被选中的连接,和home区域一样。
信任区域(Trusted Zone):信任区域允许所有网络通信通过。记住:因为trusted是最被信任的,即使设置没有任何的服务,那么也是被允许的,因为trusted是允许所有连接的以上是系统定义的所有的zone,但是这些zone区域并不是在使用,只有活跃的区域才有实际操作意义。
-
获取firewalld的状态
firewall-cmd --state
2.在不改变状态的情况下重新加载防火墙
firewall-cmd --reload
注意:如果你使用--complete-reload,状态信息将会丢失
3.获取支持的区域列表
firewall-cmd --get-zones
这条命令输出后分别用空格分开
4.获取所有支持的服务
firewall-cmd --get-services
这条命令输出后分别用空格分开
每个服务都是firewalld相关的端口和选项还有规则的集合,也就是把服务看成是firewalld的某一个选项规则或端口的集合,被启动的服务会在firewalld开启时、运行时自动加载。
默认情况下很多服务是有效的
列出有效的服务
cd /usr/lib/firewalld/services/
想要创建自己的服务就可以在目录下面指定好
例如:现在我想添加一个rhmp服务,端口号为1935。
首先任选一种服务复制过来:
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
接下来把复制过来的文件重命名为rhmp.xml
mv ssh.xml rhmp.xm
接下来打开并编辑文件的头部、描述、协议和端口号,以供rhmp服务使用
vim rhmp.xml
重启firewalld服务激活这些设置
firewall-cmd --reload
为确认服务是否已经正常启动 ,获取服务列表
firewall-cmd --get-services
5.获取所有支持的ICMP类型
firewall-cmd --get-icmptype
这条命令输出之后用空格分隔列表
6.列出全部启用的区域防火墙策略
例如:服务、端口和协议的组合、端口、数据包转发、伪装、ICMP拦截或自定义规则等
firewall-cmd --list-all-zones
上面的命令将会列出每种区域如block、dmz、drop、external、home、internal、public、trusted以及work。如果区域还有其它详细规则(rich-rules)、启用的服务或者端口,这些区域信息也会分别被罗列出来。
7.输出区域全部启用的防火墙策略,如果省略区域,将显示默认的区域
firewall-cmd --list-all
输出指定启动区域的防火墙策略
firewall-cmd --zone=public --list-all
8.查看默认区域
firewall-cmd --get-default-zone
public是默认区域在/etc/firewalld/firewalld.conf文件中定义成DefaultZone=public。
9.设置默认区域
firewall-cmd --set-default-zone=drop
查看默认区域
firewall-cmd --get-default-zone
流入默认区域中配置的接口的新访问请求将被置入新的默认区域,当前活动的连接请求将不受影响。
10、获取活动的区域
firewall-cmd --get-active-zones
这条命令将输出每个区域所含的接口:区域名、接口名
11.查看某个接口是属于哪个区域的
firewall-cmd --get-zone-of-interface=eno16777736
这条命令将输出接口所属的区域的名称
12.将接口(网卡)添加到区域中
firewall-cmd --zone=public --add-interface=eno16777736
如果接口不属于区域,将被增加到区域中,如果区域省略了,将使用默认区域,接口在重新加载后将重新应用
13.修改接口所属区域
firewall-cmd --zone=public --Change-interface=eno16777736
这个选项与--add-interface相似,但是当接口已经存在于另一个区域的时候,该接口将被添加到新的区域。
14、从区域中删除一个接口
firewall-cmd --zone=public --remove-interface=eno16777736
如果某个接口不属于任何区域,那么这个接口所有的数据包使用默认的区域(zone)规则。
15.查询区域中是否包含某个接口
firewall-cmd --zone=drop --query-interface=eno33554984
如果区域被省略了,将使用默认区域
16.列举区域中启用的服务
firewall-cmd --zone=public --list-services
如果区域被省略了,将使用默认区域
17.启用、禁用及查询应急模式阻断所有网络连接 ,以防出现紧急状况
firewall-cmd --panic-on
firewall-cmd --panic-off
firewall-cmd --query-panic
处理运行时区域:
运行时模式下对区域进行的修改不是永久有效的。重新加载或者重启后修改将失效。
-
给某个区域开启某个服务