Firewalld 用法解析

作者: 小短腿电工 | 来源:发表于2018-11-03 01:47 被阅读11次

    1.防火墙firewall的基本概述

    现在的RedHat/CentOS7版本默认都使用firewall防火墙了,firewall的配方法大致可以分为图形化和命令行。firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
    firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
    wiki百科↓
    https://fedoraproject.org/wiki/Firewalld

    2.防火墙使用区域管理

    image.png
    阻塞区域(block):任何传入的网络数据包都将被阻止。
    工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
    家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
    公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
    隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
    信任区域(trusted):所有的网络连接都可以接受。
    丢弃区域(drop):任何传入的网络连接都被拒绝。
    内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
    外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
    
    注:FirewallD的默认区域是public。
    firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下。
    
    image.png

    3.防火墙基本指令参数

    firewall-cmd #是命令行配置
    firewall-config #是图形化配置 默认中文不支持福规则的动作设置需要LANG=C 转一下英文ASCII环境

    firewall -cmd 
    1、域zone相关的命令
    --get-default-zone  查询默认的区域名称
    --set-default-zone=<区域名称>   设置默认的区域
    --get-active-zones  显示当前正在使用的区域与网卡名称
    --get-zones 显示总共可用的区域
    --new-zone= 新增区域
    2、services管理的命令
    --get-services  显示预先定义的服务
    --add-service=<服务名> 设置默认区域允许该服务的流量
    --remove-service=<服务名>  设置默认区域不再允许该服务的流量
    3、Port相关命令
    --add-port=<端口号/协议> 设置默认区域允许该端口的流量
    --remove-port=<端口号/协议>  设置默认区域不再允许该端口的流量
    4、网卡相关的命令
    --add-interface=<网卡名称>  将源自该网卡的所有流量都导向某个指定区域
    --change-interface=<网卡名称>   将某个网卡与区域进行关联
    5、查看所有规则的命令
    --list-all  显示当前区域的网卡配置参数、资源、端口以及服务等信息
    加上--permanent 查看永久生效的配置参数、资源、端口以及服务等信息
    6、重载防火墙的策略 
    --reload    让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
    ...
    

    4.防火墙区域配置策略

    image.png

    开始之前确认防火墙是开启的状态

    1、zone区域相关指令
    //查看当前默认区域
    [root@server ~]# firewall-cmd --get-default-zone 
    public
    //查看当前活跃的区域
    [root@server ~]# firewall-cmd --get-active-zone
    public
    interfaces: eth0 eth1 
    //将当前默认区域修改为drop
    firewall-cmd --set-default-zone=drop
    //将网络接口关联至drop区域
    firewall-cmd --permanent  --change-interface=eth0 --zone=drop
    //将192.168.122.0/24网段加入trusted白名单
     firewall-cmd --permanent --add-source=192.168.122.0/24 --zone=trusted
    //重载防火墙
     firewall-cmd --reload
    success
    //查看当前处于活动的区域
    firewall-cmd --get-active-zones
    drop    # 默认区域, eth0接口流量都由drop区域过滤
      interfaces: eth0
    trusted # 数据包的源IP是192.168.122.0/24网段走trusted区域
      sources: 192.168.122.0/24
    2、使用firewalld中各个区域的应用
    //允许10.0.0.1IP地址能访问ssh
     firewall-cmd --add-source=10.0.0.0/24 --permanent --zone=public #默认zone在public
    firewall-cmd --reload
    
    //将192.168.20.0网段加入白名单
    firewall-cmd --add-source=192.168.20.0/24 --permanent --zone=trusted
    firewall-cmd --reload
    //查看设置项
    firewall-cmd --get-active-zone
    drop
      interfaces: eth0 eth1
    public
      sources: 10.0.0.1/32
    trusted
      sources: 192.168.20.0/24
    3、查询firewald指定区域的明细
    firewall-cmd  --list-all --zone=drop #指明要查的zone 加上--permanent查看永久生效的区域的明细
    drop (active)
      target: DROP
      icmp-block-inversion: no
      interfaces: eth0 eth1
      sources:
      services:
      ports:
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    
    4、查询public区域是否允许请求SSH协议的流量 #对应服务对应状态
    firewall-cmd --zone=public --query-service=ssh
    yes
    
    5、恢复默认规则操作
    firewall-cmd --set-default-zone=public
    firewall-cmd --remove-source=192.168.1.0/24 --zone=public --permanent
    firewall-cmd --remove-source=192.168.1.0/24 --zone=trusted --permanent
    firewall-cmd --reload
    

    5.防火墙端口访问策略

    1、开放80端口
    firewall-cmd --permanent --add-port=80/udp --add-port=80/tcp
    firewall-cmd --reload #重载配置生效
    firewall-cmd --list-ports #检查开放的端口
    2、配置防火墙, 访问80udp的端口流量设置为永久拒绝,并立即生效
    firewall-cmd --permanent --remove-port=80/udp
    firewall-cmd --reload && firewall-cmd --list-ports #重载并查看
    

    6.防火墙服务访问策略

    1、开放httpd服务
    firewall-cmd --permanent --add-service=http --add-service=https
    firewall-cmd --reload ; firewall-cmd --list-services # 重载生效并查看
    2、配置防火墙, 请求https协议的流量设置为永久拒绝,并立即生效
    firewall-cmd --permanent --remove-service=https 
    firewall-cmd --reload ; firewall-cmd --list-services # 重载生效并查看
    

    7.防火墙端口转发策略

    端口转发需要用到forward-port

    转发本机80/tcp端口的流量至8080/tcp端口,要求当前和长期有效
    firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:to port=8080:toaddr=10.0.0.61
    移除转发
    firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.0.61
    开启IP伪装
    firewall-cmd --add-masquerade --permanent #IP地址转换
    

    8.防火墙富规则策略

    到重点了,这里上面的条目富规则都可实现
    具体配置案例查询firewalld.richlanguage

    //区里的富规则按先后顺序匹配,按先匹配到的规则生效。#firewall-cmd ↓
    --add-rich-rule='<RULE>'    //在指定的区添加一条富规则
    --remove-rich-rule='<RULE>' //在指定的区删除一条富规则
    --query-rich-rule='<RULE>'  //找到规则返回0 ,找不到返回1
    --list-rich-rules       //列出指定区里的所有富规则
    --list-all 和 --list-all-zones 也能列出存在的富规则
    //在192.168.0.0/24这个段里可以访问tftp服务
    rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" accept
    //来自192.168.0.0/24这个段的8080端口数据转发到本地的80端口
    rule family="ipv4" source address="192.168.0.0/24" forward-port to-addr="local" to-port="8080" protocol="tcp" port="80"
    //拒绝192.168.2.4这个ip访问
    rule family="ipv4" source address="192.168.2.4" drop
    ...
    

    9.防火墙开启内部上网

    firewalld防火墙开启ip伪装
    1、网卡默认是在public的zones内,也是默认zones。永久添加源地址转换功能
    firewall-cmd --add-masquerade --permanent
    firewall-cmd --reload
    2、共享上网
    开启的ip转发后,相当了一台本地的nat服务器。
    将client的网关指向你配置的ip转发服务器的IP。
    只要你的ip转发服务器可以正常解析公网IP(dns可解析公网地址)。
    Clent服务器就可以借助IP转发服务器实现上网(前提是中间路由可达)。

    相关文章

      网友评论

        本文标题:Firewalld 用法解析

        本文链接:https://www.haomeiwen.com/subject/vavhxqtx.html