防火墙--firewalld

时间:2020-03-31 13:18:36   收藏:0   阅读:61

一、firewalld基本概述

1)RHEL/CentOS 7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems, Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。

2)相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

3)Firewalld规则配置,从外访问服务器内部如果没有添加规则默认是阻止,从服务器内部访问服务器外部默认是允许

技术分享图片

二、防火墙区域管理策略

划分不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。

“区域”是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 FirewallD 后,public 将是默认区域。

区域也可以用于不同的网络接口。例如,要分离内部网络和互联网的接口,你可以在 internal 区域上允许 DHCP,但在 external区域仅允许 HTTP 和 SSH。未明确设置为特定区域的任何接口将添加到默认区域。

技术分享图片

zone区域相关指令:

技术分享图片

#显示总共可用的区域
[root@firewall ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

#显示默认的区域 
[root@firewall ~]# firewall-cmd --get-default-zone 
public

#显示获取的区域
[root@firewall ~]# firewall-cmd --get-active-zones 

#设置默认的区域
[root@firewall ~]# firewall-cmd --set-default-zone="dmz"
success
[root@firewall ~]# firewall-cmd --set-default-zone="public"
success

#得到特定区域的所有配置
[root@firewall ~]# firewall-cmd --zone=public --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

# 查看zone所有打开的端口:
firewall-cmd --zone=dmz --list-ports

# 加入一个端口到区域:
firewall-cmd --zone=dmz --add-port=8080/tcp

三、防火墙端口访问策略

技术分享图片

使用firewalld允许客户请求的服务器的80/tcp端口,仅临时生效,如添加--permanent重启后则永久生效

#临时添加允许放行单个端口
[root@firewall ~]# firewall-cmd --add-port=80/tcp
success

#临时添加放行多个端口
[root@firewall ~]# firewall-cmd --add-port={80/tcp,8080/tcp}
success

#永久添加多个端口,需要添加--permanent,并且需要重载firewalld
[root@firewall ~]# firewall-cmd --add-port={80/tcp,8080/tcp} --permanent
success
[root@firewall ~]# firewall-cmd --list-ports
[root@firewall ~]# firewall-cmd --reload
success
[root@firewall ~]# firewall-cmd --list-ports
80/tcp 8080/tcp

#通过--list-ports检查端口放行情况
[root@firewall ~]# firewall-cmd --list-ports
80/tcp 8080/tcp

#移除临时添加的端口规则
[root@firewall ~]# firewall-cmd --remove-port={80/tcp,8080/tcp}
success

四、防火墙服务访问策略

技术分享图片

使用firewalld允许客户请求服务器的http https协议,仅临时生效,如添加--permanent重启后则永久生效

#临时添加允许放行单个服务
[root@firewall ~]# firewall-cmd --add-service=http
success
[root@firewall ~]# firewall-cmd --list-services
dhcpv6-client http ssh

#临时添加放行多个服务
[root@firewall ~]# firewall-cmd --add-service={http,https}
success

#永久添加多个服务,需要添加--permanent,并且需要重载firewalld
[root@firewall ~]# firewall-cmd --add-service={http,https} --permanent
success
[root@firewall ~]# firewall-cmd --list-services
dhcpv6-client ssh
[root@firewall ~]# firewall-cmd --reload
success
[root@firewall ~]# firewall-cmd --list-services
dhcpv6-client http https ssh

#通过--list-services检查服务放行情况
[root@firewall ~]# firewall-cmd --list-services
dhcpv6-client http https ssh

#移除临时添加的http https协议
[root@firewall ~]# firewall-cmd --remove-service={http,https}
success
[root@firewall ~]# firewall-cmd --list-services
dhcpv6-client ssh

五、防火墙端口转发策略

端口转发是指传统的目标地址映射,实现外网访问内网资源,流量转发命令格式为:

firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

如果需要将本地的10.0.0.61:5555端口转发至后端172.16.1.9:22端口:

技术分享图片

#1、开启masquerade,实现地址转换
[root@Firewalld ~]# firewall-cmd --add-masquerade --permanent

#2、配置转发规则
[root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=5555:proto=tcp:toport=22:toaddr=172.16.1.9
[root@Firewalld ~]# firewall-cmd –reload

六、防火墙富规则策略

firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置, 优先级在所有的防火墙策略中也是最高的,帮助信息如下:

[root@Firewalld ~]# man firewall-cmd            # 帮助手册
[root@Firewalld ~]# man firewalld.richlanguage  # 获取富规则手册
    rule
        [source]
        [destination]
        service|port|protocol|icmp-block|masquerade|forward-port
        [log]
        [audit]
        [accept|reject|drop]

rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
destination address="address[/mask]" invert="True"
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]
accept | reject [type="reject type"] | drop


#富规则相关命令
--add-rich-rule=‘<RULE>‘        #在指定的区添加一条富规则
--remove-rich-rule=‘<RULE>‘     #在指定的区删除一条富规则
--query-rich-rule=‘<RULE>‘      #找到规则返回0 ,找不到返回1
--list-rich-rules               #列出指定区里的所有富规则

1)允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问10050端口

[root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=10.0.0.1/32 service name=http  accept‘
success
[root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=172.16.1.0/24 port port="10050" protocol="tcp" accept‘
success
[root@firewall ~]# firewall-cmd --list-rich-rules
rule family="ipv4" source address="10.0.0.1/32" service name="http" accept
rule family="ipv4" source address="172.16.1.0/24" port port="10050" protocol="tcp" accept

2)默认public区域对外开放所有人能通过ssh服务连接,但拒绝172.16.1.0/24网段通过ssh连接服务器

[root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=172.16.1.0/24 service name="ssh" drop‘
success

3)允许所有人能访问http,https服务,但只有10.0.0.1主机可以访问ssh服务

[root@firewall ~]# firewall-cmd --add-service={http,https}
success
[root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=10.0.0.1/32 service name=ssh accept‘
success

4)当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.9的22端口

[root@firewall ~]# firewall-cmd --add-masquerade
success
[root@firewall ~]# firewall-cmd --add-rich-rule=‘rule family=ipv4 source address=10.0.0.1/32 forward-port port="5555" protocol="tcp" to-port="22" to-addr="172.16.1.6"‘
success

5)查看设定的规则,如果没有添加--permanent参数则重启firewalld会失效。富规则按先后顺序匹配,按先匹配到的规则生效

[root@firewall ~]# firewall-cmd --list-rich-rules
rule family="ipv4" source address="10.0.0.1/32" service name="http" accept
rule family="ipv4" source address="172.16.1.0/24" port port="10050" protocol="tcp" accept
rule family="ipv4" source address="172.16.1.0/24" service name="ssh" drop
rule family="ipv4" source address="10.0.0.1/32" service name="ssh" accept
rule family="ipv4" source address="10.0.0.1/32" forward-port port="5555" protocol="tcp" to-port="22" to-addr="172.16.1.6"

原文:https://www.cnblogs.com/hujinzhong/p/12603348.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!