目录
- 一、firewalld和iptables
- 二、firewalld
- 1. 对网络区(zone)的理解
- 2. Firewalld的原则:(如果一个客户端访问服务器,服务器根据以下原则决定使用哪个 zone 的策略去匹配)
- 三、firewall-cmd常用命令及存储位置
- 1、安装Firewall 命令:
- 2、区域管理类命令
- 3、ip管理:
- 4、端口管理:
- 5、服务管理:
- 6、伪装ip:
- 7、端口转发:
- 8、多区域的应用:
一、firewalld和iptables
netfilter/iptables是集成在linux2.4.x版本内核中的包过滤防火墙系统。该框架可以实现数据包过滤,网络地址转换以及数据包管理功能。linux中的防火墙系统包括两个部分:netfilte和iptables。netfilte可以对本机所有流入、流出、转发的数据包进行查看、修改、丢弃、拒绝等操作。由于netfilter在内核空间中,用户通常无法接触内核和修改内核,此时需要命令行工具,一般使用iptables、firewalld等工具。使用iptables可以添加、删除具体的过滤规则,iptables默认维护四个表和五个链,所有的防火墙策略规则都将被分别写入表和链中。
centos7系统防火墙模块存放在/lib/modules/3.10.0-514.el7.x86_64/kernel/net/netfilter/目录下,当需要某个模块功能时,可以通过modprobe加载。centos7在原有的netfilter/iptables架构上又增加了firewalld。iptables工具是一个比较低级别的工具,仅可以调整ipv4的防火墙规则,所以在centos7上使用了firewalld作为默认的用户防火墙工具,但当用户使用firewalld编写ipv4防火墙规则时,firewalld依然是调用了底层的iptables实现具体的功能,只是这个调用过程对用户是透明的。
iptables service在 /etc/sysconfig/iptables中储存配置,而 firewalld将配置储存在 /usr/lib/firewalld/(系统配置,尽量不要修改) 和/etc/firewalld/(用户配置地址)中的各种 XML 文件里。
二、firewalld
1. 对网络区(zone)的理解
firewalld将所有的网络流量都分类汇聚到zones中,它通过zones管理防火墙规则,每一个进入系统的数据包,都会首先检查源IP地址和接口,如果与某个zone匹配,则该zone的规则将生效。而每个zone都会有开启或关闭服务和端口的列表,以实现允许或拒绝链接服务和端口。如果数据包的源IP地址和网卡接口都不能和任何zone匹配,则该数据包将匹配默认zone,一般情况下是一个public的默认zone。
firewalld会提供block,dmz,drop,external,home,internal,public,trusted,work这九个zone。比如有一个数据包从eno1网卡进入本机,根据规则进入work这个zone,而在work这个zone中有允许访问http服务的规则,则最后该数据包将可以进入本机并访问http服务
大部分zone都定义的有自己的允许规则,规则通过端口/协议(631/udp)或者预定义的服务(ssh)这种形式设置,如果数据包没有匹配这些允许的规则,则该数据包一般会被防火墙拒绝。但是如果有名为trusted的zone,默认会运行所有的数据流量,如果有一个数据包进入了该zone,则被允许访问所有的资源。
由firewalld 提供的区域按照从不信任到信任的顺序排序:
丢弃区域(Drop Zone)
任何接受的网络数据包都被丢弃,没有任何回复,仅能有发送出去的网络连接(数据包不能进来,但是可以出去)。这个类似与我们之前使用iptables -j drop。
阻塞/限制区域(Block Zone)
阻塞区域会拒绝进入的网络连接,返回icmp-host-prohibited(ICMP-主机-禁止),只有服务器已经建立的连接会被通过,即只允许由该系统初始化的网络连接。
任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-admprohibited 信息所拒绝。
公共区域(Public Zone)
只接受那些被选中的连接,默认只允许 ssh 和 dhcpv6-client。这个 zone 是缺省(即默认)zone。
在公共区域内使用,不能相信网络内其他计算机不会对你造成危害,只能接受经过选取的连接。。
外部区域(External Zone)
这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,即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是允许所有连接的
2. Firewalld的原则:(如果一个客户端访问服务器,服务器根据以下原则决定使用哪个 zone 的策略去匹配)
1)如果一个客户端数据包的源 IP 地址匹配 zone 的 sources,那么该 zone 的规则就适用这个客户端。一个源只能属于一个zone,不能同时属于多个zone。但是一个zone里可以有多个source。
2)如果一个客户端数据包进入服务器的某一个接口(如eth0)匹配zone的interfaces(接口),则么该 zone 的规则就适用这个客户端;一个接口只能属于一个zone,不能同时属于多个zone。但是一个zone里可以有多个接口。
3)如果上述两个原则都不满足,那么缺省的 zone 将被应用。
我们可以使用任何一种 firewalld 配置工具来配置或者增加区域,以及修改配置。工具有 firewall-cmd 这样的命令行工具,或者你也可以在配置文件目录中创建或者拷贝区域文件,/usr/lib/firewalld/zones 被用于默认和备用配置,/etc/firewalld/zones被用于用户创建和自定义配置文件。命令行工具firewall-cmd支持全部防火墙特性。
三、firewall-cmd常用命令及存储位置
1、安装Firewall 命令:
yum install firewalld firewalld-configFirewall2、区域管理类命令
#设置默认区域为trusted,允许所有的通过,会改变防火墙配置文件:/etc/firewalld/firewalld.conf中的默认值firewall-cmd--set-default-zone=trusted#查看默认区域firewall-cmd--get-default-zone tidb-65:~# firewall-cmd --get-default-zonepublic#查看(活动区域)默认接口和区域firewall-cmd--get-active-zones tidb-65:~# firewall-cmd --get-active-zonesdockerinterfaces:docker0public(default