FirewallD入门手册

Posted Linux无限探索

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FirewallD入门手册相关的知识,希望对你有一定的参考价值。

FirewallD 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则 - 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议使用 FirewallD 时仅使用 FirewallD 命令

 

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

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

本手册将向您介绍 FirewallD 的区域和服务的概念,以及一些基本的配置步骤。

安装与管理 FirewallD

CentOS 7 和 Fedora 20+ 已经包含了 FirewallD,但是默认没有激活。可以像其它的 systemd 单元那样控制它。

1、 启动服务,并在系统引导时启动该服务:
sudo systemctl start firewalld
sudo systemctl enable firewalld

要停止并禁用:

sudo systemctl stop firewalld
sudo systemctl disable firewalld
2、 检查防火墙状态。输出应该是 running或者 not running。
sudo firewall-cmd --state
3、 要查看 FirewallD 守护进程的状态:
sudo systemctl status firewalld

示例输出

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 配置:
sudo firewall-cmd --reload
配置 FirewallD

FirewallD 使用 XML 进行配置。除非是非常特殊的配置,你不必处理它们,而应该使用 firewall-cmd

配置文件位于两个目录中:
/usr/lib/FirewallD下保存默认配置,如默认区域和公用服务。避免修改它们,因为每次 firewall 软件包更新时都会覆盖这些文件。
/etc/firewalld 下保存系统配置文件。 这些文件将覆盖默认配置。

配置集

FirewallD 使用两个配置集:“运行时”和“持久”。 在系统重新启动或重新启动 FirewallD 时,不会保留运行时的配置更改,而对持久配置集的更改不会应用于正在运行的系统。

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

1、 将规则同时添加到持久规则集和运行时规则集中。
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=http
2、 将规则添加到持久规则集中并重新加载 FirewallD。
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

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

防火墙的区域

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

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

要找到默认区域: 

sudo firewall-cmd --get-default-zone

要修改默认区域:

sudo firewall-cmd --set-default-zone=internal

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

sudo firewall-cmd --get-active-zones

示例输出:

public
  interfaces: eth0

要得到特定区域的所有配置:

sudo firewall-cmd --zone=public --list-all

示例输出:

public (default, active)
  interfaces: ens160
  sources:
  services: dhcpv6-client http ssh
  ports: 12345/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

要得到所有区域的配置: 

sudo firewall-cmd --list-all-zones

示例输出:

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 中。

要查看默认的可用服务:

sudo firewall-cmd --get-services

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

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --remove-service=http --permanent
允许或者拒绝任意端口/协议

比如:允许或者禁用 12345 端口的 TCP 流量。

sudo firewall-cmd --zone=public --add-port=12345/tcp --permanent
sudo firewall-cmd --zone=public --remove-port=12345/tcp --permanent
端口转发

下面是在同一台服务器上将 80 端口的流量转发到 12345 端口。

sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345

要将端口转发到另外一台服务器上:

1、 在需要的区域中激活 masquerade。
sudo firewall-cmd --zone=public --add-masquerade
2、 添加转发规则。例子中是将 IP 地址为 :123.456.78.9 的远程服务器上 80 端口的流量转发到 8080 上。
sudo firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9

要删除规则,用 --remove替换 --add。比如:

sudo firewall-cmd --zone=public --remove-masquerade
用 FirewallD 构建规则集

例如,以下是如何使用 FirewallD 为你的服务器配置基本规则(如果您正在运行 web 服务器)。

1、将 eth0的默认区域设置为 dmz。 在所提供的默认区域中,dmz(非军事区)是最适合于这个程序的,因为它只允许 SSH 和 ICMP。
sudo firewall-cmd --set-default-zone=dmz
sudo firewall-cmd --zone=dmz --add-interface=eth0
2、把 HTTP 和 HTTPS 添加永久的服务规则到 dmz 区域中:
sudo firewall-cmd --zone=dmz --add-service=http --permanent
sudo firewall-cmd --zone=dmz --add-service=https --permanent
3、 重新加载 FirewallD 让规则立即生效:
sudo firewall-cmd --reload

如果你运行 firewall-cmd --zone=dmz --list-all, 会有下面的输出:

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。 不允许IP 伪装以及端口转发。 我们没有 ICMP 块,所以 ICMP 流量是完全允许的。没有丰富Rich规则,允许所有出站流量。

高级配置

服务和端口适用于基本配置,但对于高级情景可能会限制较多。 丰富Rich规则和直接Direct接口允许你为任何端口、协议、地址和操作向任何区域 添加完全自定义的防火墙规则。

丰富规则

丰富规则的语法有很多,但都完整地记录在 firewalld.richlanguage(5) 的手册页中(或在终端中 man firewalld.richlanguage。)使用 --add-rich-rule、 --list-rich-rules、 --remove-rich-rule。 和 firewall-cmd命令来管理它们。

这里有一些常见的例子:

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

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 流量。

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 端口上。 

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\'

将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)。

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\'

列出你目前的丰富规则:

sudo firewall-cmd --list-rich-rules
iptables 的直接接口

对于最高级的使用,或对于 iptables 专家,FirewallD 提供了一个直接Direct接口,允许你给它传递原始 iptables 命令。 直接接口规则不是持久的,除非使用 --permanent。

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

firewall-cmd --direct --get-all-chains
firewall-cmd --direct --get-all-rules

讨论 iptables 的具体语法已经超出了这篇文章的范围。如果你想学习更多,你可以查看我们的 iptables 指南。

 

via: https://www.linode.com/docs/security/firewalls/introduction-to-firewalld-on-centos

作者:Linode 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

原文来自:https://linux.cn/article-8098-1.html

本文地址: https://www.linuxprobe.com/centos-firewalld.html编辑:李帅,审核员:逄增宝

本文原创地址:https://www.linuxprobe.com/centos-firewalld.html

Linux系统安全之CentOS 7 firewalld防火墙入门详解

在Internet中,企业通过架设各种应用系统来为用户提供各种网络服务,比如Web网站、电子邮件、FTP服务器等。而且大部分都是使用Linux服务器进行搭建的。那么,想要保护这些服务器,过滤非授权的访问,甚至恶意进入内部网络 。就需要使用到——防火墙

防火墙除了硬件防火墙之外,Linux系统的防火墙也十分强大,今天主要认识CentOS 7系统的防火墙——firewalld

一、Linux防火墙基础

不管是Linux系统、Windows系统的防火墙或者是硬件防火墙都是设置不同网络与网络安全之间的一系列部件的组合,也是不同安全域之间信息的唯一出(入)口。通过检测、限制并更改跨越防火墙的数据流。尽可能地对外屏蔽网络内部的信息、结构和运行状态,且可以有选择的接受外部外部网络的访问。在内外网之间架起一道安全的屏障,以避免发生不知情的情况下进入内部网络,对我们内部网络产生一定的威胁。

从传统意义上来说防火墙分为三类:包过滤、应用代理、状态检测。无论一个防火墙的实现过程有多复杂,说到底都是在这三种技术的基础上进行扩展的。

Linux的防火墙体系主要工作在网络层,属于典型的包过滤防火墙(也称为网络层防火墙)。

包过滤防火墙的工作原理:

  • 工作在网络层,针对IP数据包;
  • 静态的打开端口、具有一定的安全隐患;
  • 体现在对包内的IP地址、端口等信息的处理上;

状态检测防火墙的工作原理:

  • 工作在网络层;
  • 动态的打开端口;

应用代理防火墙的工作原理:

  • 工作在应用层;

Linux系统的防火墙体系基于内核编码实现,既有非常稳定的性能和高效率,也因此获得广泛的应用。Linux系统的防火墙主要有:firewalld、iptables、ebtables。不过在CentOS 7 系统中默认使用firewalld来管理netfilter子系统。

  • netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”的防火墙功能体系;
  • firewalld:指用于管理Linux防火墙的命令程序,属于“用户态”的防火墙的管理体系。

严格意义上来说,netfilter才是Linux系统的防火墙,firewalld只是管理netfilter的工具而已!

二、firewalld概述

1.firewalld简介

firewalld提供了支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具,支持ipv4、ipv6防火墙以及以太网桥,并且拥有两种配置模式:运行时配置与永久配置。它还支持服务或应用程序直接添加防火墙规则。

2.firewalld的区域

firewalld将所有的网络数据流量划分为多个区域,从而简化防火墙管理。根据数据包的源IP地址或传入网络接口等条件,将数据流量转入相应区域的防火墙规则。对于进入系统的数据包,首先检查的就是其源地址。

firewalld数据处理流程:
首先检查的就是其源地址。

  • 若源地址关联到特定的区域,则执行该区域所制定的规则;
  • 若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则;
  • 若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则;

默认区域不是单独的区域,而是执行系统上定义的某个其他区域。默认情况下,默认区域是public,系统管理员可以根据实际情况进行修改。

以上匹配规则,按照先后顺序,第一个匹配的规则胜出(从上往下、找到即停!)

在每个区域中都可以配置其要打开或者关闭的一系列服务或端口,firewalld的每个预定义的区域默认都开启一些相应的服务,如图:
技术图片

传出流量:简单来说就是访问的资源不是防火墙本身,而是通过防火墙的流量称为传出流量。

3.firewalld防火墙的配置方法

在CentOS 7 系统中,可以使用三种方式配置防火墙:

  • firewall-config图形工具;
  • firewall-cmd命令行工具;
  • /etc/firewalld/中的配置文件;

通常情况下,不建议直接修改其配置文件!

(1)图形化管理工具

打开图形化管理工具的两种方式:

1)图形化桌面

技术图片
技术图片

2)通过终端命令打开
[root@localhost ~]# firewall-config

技术图片
由于图形化简单易懂,所以这里就不详细介绍了!

(2)firewall-cmd命令行工具

1)启动、停止、查看firewalld服务
[root@localhost ~]# systemctl start firewalld
//启动firewalld服务
[root@localhost ~]# systemctl enable firewalld
//将firewalld服务设置为开机自启动
[root@localhost ~]# systemctl status firewalld
//查看firewalld服务状态
[root@localhost ~]# firewall-cmd --state
//查看firewalld服务状态
[root@localhost ~]# systemctl stop firewalld
//停止firewalld服务
[root@localhost ~]# systemctl disable firewalld
//将firewalld服务设置为开机不自动启动
2)获取预定义信息
[root@localhost ~]# firewall-cmd --get-zones
//显示预定义的区域信息
[root@localhost ~]# firewall-cmd --get-services
//显示预定义的服务(服务较多,大部分都是常用的,这里就不介绍了)
[root@localhost ~]# firewall-cmd --get-icmptypes
//显示预定义的ICMP类型

firewall-cmd --get-icmptypes命令执行结果中各类的含义:

  • destination-unreachable:目的地址不可达;
  • echo-reply:应答回应;
  • parameter-problem:参数问题;
  • redirect:重新定向;
  • router-advertisement:路由器通告;
  • router-solicitation:路由器征寻;
  • source-quench:源端抑制;
  • time-exceeded:超时;
  • timestamp-reply:时间戳应答回应;
  • timestamp-request:时间戳请求;
3)区域管理

区域管理命令的常用选项,如图:
技术图片

[root@localhost ~]# firewall-cmd --get-default-zone
//显示当前系统中的默认区域
[root@localhost ~]# firewall-cmd --list-all
//显示默认区域的所有规则
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
//显示网络接口ens33对应的区域
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33
The interface is under control of NetworkManager, setting zone to ‘internal‘.
success
//将网络接口ens33对应区域改为internal区域
[root@localhost ~]#  firewall-cmd --zone=internal --list-interfaces 
ens33
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal
//验证
[root@localhost ~]# firewall-cmd --get-active-zones
internal
  interfaces: ens33
//显示所有激活区域
4)服务管理

在最新版本firewalld中默认定义了70多种服务供我们使用,对于每个网络区域,均可以配置允许访问服务。当需要添加的服务在列表中没有的话,可以添加端口。

区域服务管理的常用选项,如图:
技术图片

[root@localhost ~]# firewall-cmd --list-services
dhcpv6-client ssh
//显示默认区域允许访问的服务
[root@localhost ~]# firewall-cmd --add-service=http
//设置默认区域允许访问http服务
[root@localhost ~]# firewall-cmd --list-services
dhcpv6-client ssh http
//验证效果
[root@localhost ~]# firewall-cmd --zone=internal --add-port=80/tcp
success
//在internal区域上允许TCP协议80端口访问
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=443/tcp
success
//在internal区域上禁止TCP协议443端口访问
[root@localhost ~]# firewall-cmd --list-all --zone=internal
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 80/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 
//查看指定区域的详细配置

使用firewall-cmd命令行工具有两种配置模式:

  • 运行时模式:表示当前内存中运行的防火墙配置,在系统重启或者firewalld服务重启时配置将会失效;
  • 永久模式:表示重启firewalld服务或重启系统时,系统将自动的加载防火墙的规则配置,是永久存储在配置文件中;

firewall-cmd命令工具与配置模式相关的三个选项:

  • --reload:重新加载防火墙并保持状态信息,即将永久配置应用为运行时配置;
  • --permanent:带此选项的命令用于设置永久规则,这些规则只有在重新启动firewalld服务是规则才会生效;若不带此选项,表示用于设置运行时规则;
  • --runtime-to-permanent:将当前的运行配置写入规则配置文件中,使其成为永久配置。

关于firewalld防火墙介绍到此结束!

以上是关于FirewallD入门手册的主要内容,如果未能解决你的问题,请参考以下文章

Centos7防火墙 firewalld入门

CentOS-7防火墙配置信息(firewalld)

Firewalld入门使用

Linux系统安全之CentOS 7 firewalld防火墙入门详解

《网络安全入门到精通》-1.2 - Linux系统 - firewalld防火墙&iptables防火墙

Firewalld安全技术介绍