前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS上的FirewallD简介

CentOS上的FirewallD简介

作者头像
Noel
发布2018-09-04 10:02:47
6140
发布2018-09-04 10:02:47

FirewallD是防火墙用于实现持久化网络流量规则的前端控制器。它提供命令行和图形界面,可在大多数Linux发行版中使用。与直接控制iptables相比,使用FirewallD有两个主要区别:

  1. FirewallD使用 区域服务 而不是链和规则。
  2. 它动态管理规则表,允许不破坏现有会话和连接的时候更新规则表。

注意FirewallD是iptables之上的一层封装,可以更轻松地管理iptables规则 - 它不是 iptables的替代品。虽然FirewallD仍然可以使用iptables命令,但建议仅使用FirewallD的命令。

本指南将向您介绍FirewallD及其区域和服务的概念,并向您展示一些基本配置步骤。

安装和管理FirewallD

默认情况下,CentOS 7中已经包含FirewallD,但它处于非活动状态。控制它其实与其他系统单元相同。

1.要启动该服务并在启动时启用FirewallD:

代码语言:txt
复制
sudo systemctl start firewalld 
sudo systemctl enable firewalld

要停止并禁用它:

代码语言:txt
复制
sudo systemctl stop firewalld
sudo systemctl disable firewalld

2.检查防火墙状态。输出应该是提示running或者not running

代码语言:txt
复制
sudo firewall-cmd --state

3.要查看FirewallD守护程序的状态:

代码语言:txt
复制
sudo systemctl status firewalld

输出示例:

代码语言:txt
复制
firewalld.service - firewalld - dynamic firewall daemon
      Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled)
      Active: active (running) since Wed 2015-09-02 18:03:22 UTC; 1min 12s ago
    Main PID: 11954 (firewalld) 
      CGroup: /system.slice/firewalld.service
                    └─11954 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

4.重新加载FirewallD配置:

代码语言:txt
复制
sudo firewall-cmd --reload

配置FirewallD

Firewalld使用XML文件配置。除了非常特殊的配置之外,应使用firewall-cmd而不是这些xml文件。

配置文件位于两个目录中:

  • /usr/lib/FirewallD默认配置,比如默认区域和公共服务。避免修改它们,因为每个firewalld包更新都会覆盖这些文件。
  • /etc/firewalld系统配置文件,这些文件将覆盖默认配置。

配置表

Firewalld使用两个配置表:Runtime(运行时表)和Permanent(持久化表)。重启系统或重新启动FirewallD服务不保留运行时的配置更改,而永久更改不会应用于正在运行的系统。

默认情况下,firewall-cmd命令适用于运行时配置,但使用--permanent标志将建立持久配置。要添加和激活永久规则,可以使用以下两种方法之一。

1.将规则同时添加到永久集和运行时集。

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-service=http --permanent 
sudo firewall-cmd --zone=public --add-service=http

2.将规则添加到永久集并重新加载FirewallD。

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-service=http --permanent 
sudo firewall-cmd --reload

注意reload命令将删除所有运行时配置并应用永久配置。因为firewalld动态管理规则集,所以它不会破坏现有的连接和会话。

防火墙区

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

区域也可以应用于不同的网络接口。例如内网和外网,您可以在内网使用DHCP,但在外网上只允许HTTP和SSH。未明确设置为特定区域的任何接口都将附加到默认区域。

要查看默认区域:

代码语言:txt
复制
sudo firewall-cmd --get-default-zone

要更改默认区域:

代码语言:txt
复制
sudo firewall-cmd --set-default-zone=internal

要查看网络接口使用的区域:

代码语言:txt
复制
sudo firewall-cmd --get-active-zones

输出示例:

代码语言:txt
复制
public
  interfaces: eth0

要获取特定区域的所有配置:

代码语言:txt
复制
sudo firewall-cmd --zone=public --list-all

输出示例:

代码语言:txt
复制
public (default, active)
  interfaces: ens160
  sources:
  services: dhcpv6-client http ssh
  ports: 12345/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

要获取所有区域的所有配置:

代码语言:txt
复制
sudo firewall-cmd --list-all-zones

输出示例:

代码语言:txt
复制
block
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

  ...

work
  interfaces:
  sources:
  services: dhcpv6-client ipp-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

使用服务

FirewallD基于配置规则对于特定网络服务过滤不同数据。可以创建自定义服务规则并将其添加到任何区域。默认支持的服务的配置文件位于/usr/lib/firewalld/services,用户创建的服务文件位于/etc/firewalld/services

要查看默认的可用服务:

代码语言:txt
复制
sudo firewall-cmd --get-services

例如,要启用或禁用HTTP服务:

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --remove-service=http --permanent

允许或拒绝任意端口/协议

例如:在端口12345上允许或禁用TCP流量。

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent
sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent

端口转发

以下示例规则将流量从80端口转发到同一服务器上的12345端口 。

代码语言:txt
复制
sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345

要将端口转发到其他服务器

1.在所需区域中激活伪装。

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-masquerade

2.添加转发规则。此示例将流量从当前服务器80端口转发到IP是123.456.78.9的远程服务器的8080端口。

代码语言:txt
复制
sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9

要删除规则,请替换--add--remove。例如:

代码语言:txt
复制
sudo firewall-cmd --zone=public --remove-masquerade

用FirewallD构造规则表

例如,如果您运行的是Web服务器,以下是使用FirewallD为您的Linode分配基本规则的方法。

1.将dmz区域指定为eth0网卡的默认区域。在提供的默认区域中,dmz是最适合此应用程序的区域,因为它只允许SSH和ICMP。

代码语言:txt
复制
sudo firewall-cmd --set-default-zone=dmz
sudo firewall-cmd --zone=dmz --add-interface=eth0

2.将HTTP和HTTPS的永久服务规则添加到dmz区域:

代码语言:txt
复制
sudo firewall-cmd --zone=dmz --add-service=http --permanent
sudo firewall-cmd --zone=dmz --add-service=https --permanent

3.重新加载FirewallD,以便规则立即生效:

代码语言:txt
复制
sudo firewall-cmd --reload

如果你现在运行firewall-cmd --zone=dmz --list-all,这应该是输出:

代码语言:txt
复制
dmz (default) 
  interfaces: eth0
  sources:   
  services: http https ssh
  ports:   
  masquerade: no   
  forward-ports:   
  icmp-blocks:   
  rich rules:

上面配置的意思是:dmz区域是我们的默认区域,适用于eth0接口的所有网络数据和端口。允许传入HTTP(端口80),HTTPS(端口443)和SSH(端口22)流量,因为对IP版本没有限制,这将适用于IPv4和IPv6,不允许伪装端口转发。我们没有限制ICMP包,因此完全允许ICMP流量,并且没有富规则。允许所有传出流量。

高级配置

服务和端口适用于基本配置,但对于高级方案可能限制太多。Rich Rules和Direct Interface允许完全自由的为任何端口、协议、地址和操作添加自定义规则到任何区域。

富规则

富规则语法很广泛,但在firewalld.richlanguage(5)手册页(或man firewalld.richlanguage在终端中查看)中有详细说明。使用firewall-cmd 和参数--add-rich-rule--list-rich-rules以及--remove-rich-rule来管理富规则。

以下是一些常见示例:

允许来自主机192.168.0.14的所有IPv4流量。

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

拒绝从主机192.168.1.10到端口22的IPv4 TCP流量。

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'

允许从主机10.1.0.3到端口80的IPv4 TCP流量,并将其本地转发到本地6532端口。

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'

将端口80上的所有IPv4流量转发到主机172.31.4.2上的端口8080(伪装应在区域上处于活动状态)。

代码语言:txt
复制
sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2'

列出您当前的富规则:

代码语言:txt
复制
sudo firewall-cmd --list-rich-rules

iptables直接接口

对于最高级的用法,或者对于iptables专家,FirewallD提供了一个直接接口,允许使用原始iptables命令。除非加上参数--permanent,否则规则是运行时的。

要查看添加到FirewallD的所有自定义链或规则:

代码语言:txt
复制
firewall-cmd --direct --get-all-chains
firewall-cmd --direct --get-all-rules

讨论iptables语法细节超出了本指南的范围。如果您想了解更多信息,可以查看我们的iptables指南

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装和管理FirewallD
  • 配置FirewallD
    • 配置表
      • 防火墙区
        • 使用服务
        • 允许或拒绝任意端口/协议
          • 端口转发
          • 用FirewallD构造规则表
          • 高级配置
            • 富规则
              • iptables直接接口
              • 更多信息
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档