Firewalld 的区域(zone)


概述
  • 区域(zone)是针对特定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的规则集。
  • 不同的区域(zone)可允许不同的网络服务和入站流量的类型,而拒绝其他任何流量。
  • 要分离内部网络和互联网的接口,你可以在internal区域上允许DHCP,但在external区域仅允许HTTP和SSH。
常用 zone 的命令
  • 查看
    # 查看所有区域
    sudo firewall-cmd --list-all-zones
    # 查看public区域配置
    sudo firewall-cmd --zone=public --list-all
    # 查看默认zone
    sudo firewall-cmd --get-default-zone
    
  • 修改
    # 将默认的zone修改为work
    ~$ firewall-cmd --set-default-zone=work     
    success
    # 查看默认的 zone
    ~$ firewall-cmd --get-default-zone     
    work     
    
  • 查看所有 zone
    ~$ sudo firewall-cmd --get-zones
    block dmz drop external home internal public trusted work
    
    • public(公共) —— [默认]公网访问,不受任何限制。
    • work(工作) —— 用于工作区。基本信任的网络,仅仅接收经过选择的连接。
    • home(家庭) —— 用于家庭网络。基本信任的网络,仅仅接收经过选择的连接。
    • trusted(信任) —— 接收的外部网络连接是可信任、可接受的。
    • block(限制) —— 任何接收的网络连接都被IPv4icmp-host-prohibited信息和IPv6icmp6-adm-prohibited信息所拒绝。
    • dmz(隔离区) —— 英文"demilitarized zone"的缩写,此区域内可公开访问,它是非安全系统与安全系统之间的缓冲区。
    • drop(丢弃) —— 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
    • external(外部) —— 允许指定的外部网络进入连接,特别是为路由器启用了伪装功能的外部网。
    • internal(内部) —— 内部访问。只限于本地访问,其他不能访问。
Zone下的网卡
  • 查看网卡的 zone
    $ sudo firewall-cmd --get-active-zones
    public
      interfaces: lo
    # 查看 lo 的 zone
    ~$ sudo firewall-cmd --get-zone-of-interface=lo   
    public
    
  • 给指定网卡增加 zone
    ~$ sudo firewall-cmd --zone=public --add-interface=lo
    success
    ~$ sudo firewall-cmd --get-active-zones
    public
      interfaces: lo
    
  • 修改指定网卡的 zone
    ~$ sudo firewall-cmd --zone=internal --change-interface=lo
    success
    ~$ sudo firewall-cmd --get-active-zones
    internal
      interfaces: lo
    
  • 移除指定网卡的 zone
    ~$ sudo firewall-cmd --zone=internal --remove-interface=lo
    success
    
Zone下的 service
  • 查看所有的 servie
    ~$ sudo firewall-cmd --get-service
    client bgp bitcoin bitcoin-rpc ctdb dhcp dhcpv6 dns docker-registry ftp git http https imap imaps ipp ipsec irc ircs isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps mongodb mysql nfs nfs3 ntp nut openvpn privoxy proxy-dhcp ptp redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc smtp ssh svn syslog syslog-tls telnet tftp tftp-client xmpp-server zabbix-agent zabbix-server
    
  • 查看当前 zone下的 service
    ~$ sudo firewall-cmd --list-service
    dhcpv6-client ssh
    
  • 把 http 服务增加到 public 的 zone 下
    # 永久增加
    ~$ sudo firewall-cmd --zone=public --add-service=http --permanent
    success
    # 指定查看 zone=public 下的service
    ~$ sudo firewall-cmd --zone=public --list-service
    dhcpv6-client ssh http
    
    • zone/service的配置文件模板存放路径
      /usr/lib/firewalld/zones          # zones配置路径
      /usr/lib/firewalld/services       # services配置路径
      
实例
  • 把 ftp 服务自定义端口1121,添加到 work 的 zone下放行
    # 复制ftp的配置文件到/etc/firewalld/services
    ~$ sudo cp /usr/lib/firewalld/services/ftp.xml  /etc/firewalld/services/
    # 编辑该文件,将port="21"改为port="1121"
    ~$ sudo vim /etc/firewalld/services/ftp.xml
    <?xml version="1.0" encoding="utf-8"?>
    <service>
      <short>FTP</short>
      <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
      <port protocol="tcp" port="1121"/>
      <module name="nf_conntrack_ftp"/>
    </service>
    
    # 将 ftp 服务永久添加到 work 的 zone 下
    ~$ sudo firewall-cmd --zone=work --add-service=ftp --permanent
    # 重新加载
    ~$ sudo firewall-cmd --reload
    
  • 给一台服务器配置防火墙,希望允许外网使用httphttps来访问,你的组织(1.1.0.0/16)和工作组(1.1.1.0/8)使用 ssh 访问,并且你的工作组可以访问 samba 服务。
     # 在 public 区域中增加 http、https,移除 dhcpv6、ssh
     sudo firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
     sudo firewall-cmd --permanent --zone=public --remove-service=ssh
     sudo firewall-cmd --permanent --zone=public --add-service=http
     sudo firewall-cmd --permanent --zone=public --add-service=https
    
     # 移除 internal 区域的 mdns、samba-client 和 dhcpv6-client 服务,并增加你的组织为源
     sudo firewall-cmd --permanent --zone=internal --remove-service=mdns
     sudo firewall-cmd --permanent --zone=internal --remove-service=samba-client
     sudo firewall-cmd --permanent --zone=internal --remove-service=dhcpv6-client
     sudo firewall-cmd --permanent --zone=internal --add-source=1.1.0.0/16
    
     # 允许 1.1.1.0/8 网段的主机访问 samba 服务
     sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family=ipv4 source address="1.1.1.0/8" service name="samba" accept'
     # 将 public 区域的目标设为 DROP
     sudo firewall-cmd --permanent --zone=public --set-target=DROP
     # 使用一个富规则
     sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule protocol value="icmp" accept'
     # 重载配置
     sudo firewall-cmd --reload
    
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐