当前位置:   article > 正文

centos7防火墙(firewalld、iptables)_centos7 iptables firewalld

centos7 iptables firewalld

一、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-configFirewall
  • 1

2、区域管理类命令

firewall-cmd --set-default-zone=trusted  #设置默认区域为trusted,允许所有的通过,会改变防火墙配置文件:/etc/firewalld/firewalld.conf中的默认值
firewall-cmd --get-default-zone         #查看默认区域
firewall-cmd --get-active-zones         #查看(活动区域)默认接口和区域
firewall-cmd --get-zones                #列出所有可用的区域
firewall-cmd --list-all --zone=public   #查看public区域已配置的规则(只显示/etc/firewalld/zones/public.xml中防火墙策略)
firewall-cmd --list-all-zones           #查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3、端口管理:
firewall-cmd --permanent --list-port --zone=public            #查看端口,不加zone就是查询默认zone
firewall-cmd --zone=public --add-port=3306/tcp --permanent    #允许tcp的3306端口到public区域。
#–zone:作用域;–add-port=80/tcp:添加端口,格式为:端口/通讯协议;–permanent:永久生效,没有此参数重启后失效
firewall-cmd --reload                                         #重新加载防火墙配置,并不中断用户连接,即不丢失状态信息
firewall-cmd --zone=public --remove-port=3306/tcp--permanent  #从public区将tcp的3306端口移除
firewall-cmd --add-port=2048-2050/udp --zone=public           #允许某一范围的端口,如允许udp的2048-2050端口到public区域
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
4、服务管理:
firewall-cmd --get-services                                #查看预定义服务 :
firewall-cmd --add-service=http --zone=public --permanent  #添加http服务到public区域
systemctl restart firewalld                                #重启防火墙服务才生效(permanent状态): 
firewall-cmd --remove-service=http --permanent --zone=public #移除public区域的http服务,不使用--zone指定区域时使用默认区域:
firewall-cmd --add-service=http --add-service=https        #将多个服务添加到某一个区域,不添加--permanent选项表示是即时生效的临时设置
  • 1
  • 2
  • 3
  • 4
  • 5
5、伪装ip:
firewall-cmd --query-masquerade                # 检查是否允许伪装IP
firewall-cmd --permanent --add-masquerade      # 允许防火墙伪装IP
firewall-cmd --permanent --remove-masquerade   # 禁止防火墙伪装IP
  • 1
  • 2
  • 3
6、端口转发:

当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端
口,之后配置防火墙的端口转发,将流量转发过去。
例:

1. firewall-cmd --permanent --add-masquerade                     #开启地址伪装。
2. firewall-cmd --add-forward-port=port=8080:proto=tcp:toport80  #添加转发8080--》80
3. firewall-cmd --add-port=8080/tcp
4. firewall-cmd --remove-service=http                            #删除80端口的协议。
  • 1
  • 2
  • 3
  • 4
7、多区域的应用:

1)可以根据不同的接口配置不同的区域
2)可以对同一个接口,对不同网段的ip/流量,配置不同的访问
例:

1. 一个接口只能对应一个区域,将接口与指定区域关联:
firewall-cmd --change-interface=ens75 --zone=drop
2. 根据不同的访问来源网段,设定至不同的区域规则:
firewall-cmd --add-source=192.168.75.0/24 --zone=public
firewall-cmd --add-source=192.168.85.0/24 --zone=drop
firewall-cmd --get-active-zones :查看(活动区域)默认接口和区域。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/184254?site
推荐阅读
相关标签
  

闽ICP备14008679号