Firewalld基本使用

基本介绍

frirewalld服务和iptables一样,是linux操作系统的一个系统安全工具,实际上firewalld底层依然是基于iptables的四表五链,控制系统数据包的进出站规则、和数据包处理的策略,iptables用起来不是很方便,初学者可能会被整懵逼,firewalld提供了两种友好的配置方式:命令行配置工具和图形化配置工具

区域zone

zonefirewalld中的一种预定义的访问规则或者说是模式,类似于windows下的家庭组、公用网络、工作网络的概念,通过选择不同的策略模式,从而提供不同的数据包进出规则,下面是firewalld默认的一些zone:

zone策略备注
trusted在此策略下允许所有数据包允许流入和流出在可信网络下的一种方式
home家庭网络类似于Windows上的家庭组
internal
work工作网络
public公共区域,阻止所有传入的连接,除非与流出的流量有关,默认仅允许sshdhcp客户端,放行所有出站连接常用于非可信网络环境下的一种策略,默认区域
external
dmz
block
drop默认阻止所有传入的连接,无任何应答,除非与本机流出的流量有关ping都不通的

接口interface

接口即网卡设备,一个zone可以指定多块网卡,但一块网卡仅允许绑定一个zone,因为不同的zone定义了不同的规则,规则之间会有冲突。

基本选项

firewalld的命令行命令为:firewall-cmdfirewall-cmd基本都是长选项,下面是一些比较常用的选项:

选项作用备注
--get-default-zone获取默认的区域设置信息
--get-active-zones获取有关当前活动的作用域的信息
--list-all获取有关当前作用域下的所有规则、策略信息
--add-service添加某一个已知的服务以执行放行规则--add-service=[servicename]多个使用--add-service={name1,name2}
--remove-service从某个区域下移除某条服务的规则,参数为服务名
--add-source添加来源IP的信息--add-source=10.0.0.0/24
--zone指定某条规则添加到哪一个区域--zone=drop
--add-port添加放行的端口,需跟随连接类型TCP/UDP--add-port=80/tcp多个端口使用--add-port={port1/type,port2/type}
--remove-port从当前区域中移除某个放行/阻止的端口
--permanent永久生效的规则默认情况下未指定--permanent关键字的规则一律都是临时生效且立即生效,这些规则在服务重启或主机重启后都会失效,若指定了该关键字则并不会立即生效,重启服务或重启主机生效,若立即生效,需再次执行一次临时规则添加才能生效
--add-forward-port添加端口转发规则将指定端口和指定协议的数据转发至特定的端口和与之对应的主机
--add-masqueradeIP地址伪装对出站数据执行SNAT转换,对入站数据执行DNAT转换
--add-rich-rule添加富规则添加对数据包更详细更定制化的进出站规则,处于zone的之上

注: 服务都是以特定格式的xml文件存储于/usr/lib/firewalld/services下,您也可添加自定义的服务名,添加完成需重启firewalld以使配置文件被载入。

firewalld示例

通常,在生产环境,集群内部大部分主机是没有公网IP的,不能通过SSH直接连接(需要部署弹性公网IP或是部署OpenVPN服务),此时我们也可以在firewall中添加包转发策略来实现内部主机的访问,注意:在使用该方法的时候,这台运行了firewall的管理主机必须具备公网IP

  1. 通过管理机实现多台主机的内部跳板

    首先在管理主机添加规则:

    #将本机的5007端口映射到172.16.1.7的22端口
    firewall-cmd --add-forward-port=port=5007:proto=tcp:toport=22:toaddr=172.16.1.7
    #将本机的5008端口映射到172.16.1.8的22端口
    firewall-cmd --add-forward-port=port=5008:proto=tcp:toport=22:toaddr=172.16.1.8
    #永久生效
    firewall-cmd --add-forward-port=port=5008:proto=tcp:toport=22:toaddr=172.16.1.8 --permanent
    firewall-cmd --add-forward-port=port=5007:proto=tcp:toport=22:toaddr=172.16.1.7 --permanent
    

    通过ssh连接测试:

    ssh root@10.0.0.61 -p5007
    

  2. 集群架构内部所有主机都通过管理机进行上网,管理主机通常具备公网IP,可以实现上网,如果您的集群环境是aliyun环境,则可通过购买NAT网关实例进行上网

    在管理主机添加以下防火墙规则:

    #开启IP伪装功能
    firewall-cmd --add-masquerade
    

    web节点主机的eth1添加一个gateway,追加下面的内容到/etc/sysconfig/network-scripts/ifcfg-eth1文件内最后一行:

    GATEWAY=172.16.1.61
    

    web节点主机添加一个可用的DNS服务器,在/etc/resolv.conf文件内添加:

    nameserver 223.5.5.5
    

    测试:

  3. 管理主机仅允许公司的10.0.0.1的IP地址连接,其他统统拒绝.

    首先设置管理主机的firewalld默认的区域为:drop

    firewall-cmd --set-default-zone=drop
    

    添加允许10.0.0.1到本机防火墙规则:

    firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=ssh accept'
    

    测试:

  4. 在集群前端的负载均衡主机节点上,仅放行80443端口,22端口只有10.0.0.1能正常连接,其他统统拒绝.

    设置默认的区域为drop:

    firewall-cmd --set-default-zone=drop
    

    添加规则:

    firewall-cmd --add-service={http,https}
    firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=ssh accept'
    

    测试:

  5. 9000端口或任意服务的端口做成一个服务名称(Service)名字比如:php-fpm,则代表放行9000

    检查php-fpm的监听端口:

    phpfpm1

    新增.xml文件,vim /usr/lib/firewalld/services/php-fpm.xml,粘贴下面的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <service>
      <short>PHP-FPM</short>
      <description>The php-fpm service.</description>
      <port protocol="tcp" port="9000"/>
    </service>
    

    重启firewalld服务:

    systemctl restart firewalld
    

    测试:

    firewall-cmd --add-service=php-fpm
    

    php-fpm2

备份firewalld防火墙配置 备份/etc/firewalld下的所有文件即可,尤其是/etc/firewalld/zones下面的xml文件,已添加的永久规则都在其内。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×