Firewalld防火墙应用

防火墙的介绍小弟就不在这里做详细的讲解了,那么我们直奔主题吧!

 

Firewalld的网络区域:

       区域                                          说明                     

trusted(信任区域)

可接收所有的网络

public(公共区域)

除非与传出的流量相关,或与ssh或dhcpv6-client预定义服务匹配,否则拒绝流量传入。在公共区域内,不能相信网络内的其他计算机不会对计算机造成危害,只能接收经过选择的连接。并且,该区域是新添加网络接口的默认区域。

work(工作区域)

除非与传出流量相关,或与ssh、ipp-client、dhcpv6-client预定于服务匹配,否则拒绝流量传入,用于工作区。信任网络内的其他计算机不会危害计算机,仅接收经过选择的连接

home(家庭区域)

除非与传出流量相关,或者与ssh、ipp-client、mdns、samba-client、dhepv6-client预定义服务匹配,否则拒绝流量传入,用于家庭网络。任网络内的其他计算机不会危害计算机,仅接收经过选择的连接

internal(内部区域)

除非与传出流量相关,或者ssh、ipp-client、mdns、samba-client、dhcpv6-client预定义服务匹配,否则拒绝流量传入,用于内部网络。信任网络内的其他计算机不会危害计算机,仅接收进经过选择的连接

external(外部区域)

除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝流量传入。通过此区域转发的ipv4传出流最终将进行地址伪装,可用于为路由器启用了伪装功能的外部网络

Dmz(隔离区域,也叫非军事区域)

除非与传出的流量相关,或与ssh预定义服务匹配,否则拒绝流量传入

Block(限制区域)

除非与传出流量相关,否则拒绝所有传入流量

Drop(丢弃区域)

除非与传出流量相关,否则丢弃所有传入流量,并且不产生包含ICMP(Intermet Control Message Protocol,互联网控制报文协议)的错误响应

 

不知道各位大哥看没看懂上面的区域介绍,这时候在心里默念没看懂得的,请回过头去继续看,否则不要往下看。小弟也是有脾气的

 

下面我们开始讲解firewalld命令(本来还有图形化管理的;但是,要那玩意干啥)

 

Firewalld命令:

开启、关闭、查看firewalld状态

  在安装centos7系统时,会自动安装firewalld服务程序和图形化工具firewalld-config。执行以下命令可以启动,停止,查看firewalld服务状态,并为它设置开机自启动

[root@localhost ~]# systemctl start firewalld      //启动服务

[root@localhost ~]# systemctl stop firewalld      //停止服务

[root@localhost ~]# systemctl enable firewalld      //开机自启动

Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.

Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.

[root@localhost ~]# systemctl status firewalld      //查看firewalld状态

● firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)

   Active: active (running) since 一 2019-07-22 21:29:40 CST; 48s ago

     Docs: man:firewalld(1)

 Main PID: 1732 (firewalld)

   CGroup: /system.slice/firewalld.service

           └─1732 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

 

7月 22 21:29:39 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...

7月 22 21:29:40 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.

 

 

获取firewalld预定义信息:

  Firewalld-cmd预定义信息主要包括三种,可用区域可用的服务以及可用的ICMP阻塞类型。查看具体命令如下

[root@localhost ~]# firewall-cmd --get-zones     //显示预定义区域

block dmz drop external home internal public trusted work

 

[root@localhost ~]# firewall-cmd --get-service    //显示预定义的服务

RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client

 dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

 

[root@localhost ~]# firewall-cmd --get-icmptypes      //显示预定义icmp类型

address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown

 host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option

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

l  destination-unreachable    目的地不可达

l  echo-reply               应答回应(pong)

l  parameter-problem        参数问题

l  redirect                 重新定向

l  router-advertisement      路由器通告

l  router-solicitation         路由器征询

l  source-quench           源端抑制

l  time-execeded           超时

l  timestamp-reply          时间戳应答回应

l  timestamp-request        时间戳请求

 

区域管理

 

使用firewall-cmd命令可以实现获取和管理区域,为指定区域绑定网络接口等功能,在下面的表中列出了firewall-cmd命令的区域管理选项说明。

选项

说明

--get-default-zone

显示网络连接或接口的默认区域

--set-default-zone=<zone>

设置网络连接或接口的默认区域

--get-active-zones

显示已激活的所有区域

--get-zone-of-interface=<interface>

显示制定接口绑定的区域

--zone=<zone> --add-interface=<interface>

为指定的接口绑定区域

--zone=<zone> --change-interface=<interface>

为指定的区域更改绑定的网络接口

--zone=<zone> --remove-interface=<interface>

为指定的区域删除绑定的网络接口

--list-all-zones

显示所有的区域及其规则

[--zone=<zone> --list-all]

显示所有指定区域的所有规则,省略--zone=<zone>时表示对默认区域进行操作

 

本来应该给各位大哥做演示的,但是想想大哥们的智商应该比我高一些,所以不需要做演示了,能看到这一步,你们应该都自己做了演示!

 

 

服务管理:

  为了方便管理,firewalld预先定义了很多服务,存放在/usr/lib/firewalld/services/目录中,服务通过单个的xml配置文件来指定,这些配置文件则按以下格式命名:service-name.xml,每个文件对应一项具体的网络服务,如ssh服务等。与之对应的配置文件中记录了各项服务所使用的tcp/udp端口,在最新版本的firewalld中默认定义了70多种服务供我们使用,对于每个网络服务区域,均可以配置允许访问的服务。当默认提供的服务不适用或者不需要自定义某项的端口时,我们需要将service配置文件放置在/etc/firewalld/services/目录中,service具有以下优点:

  1. 通过服务名字来管理规则更加人性化
  2. 通过服务来组织端口分组更加高效,如果一个服务使用了若干个网络接口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式

 

下表列出了firewall-cmd命令区域中服务管理的常规选项说明:

选项

说明

[--zone=<zone>] --list-services

显示指定区域内允许访问的所有服务

[--zone=<zone>] --add-service=<service>

为指定区域设置允许访问的某项服务

[--zone=<zone>] --remove-service=<service>

删除指定区域已设置的允许访问的某项服务

[--zone=<zone>] --list-ports

显示指定区域内允许访问的所有端口

[--zone=<zone>] --add-port=<port>[portid]/<protocol>

为指定区域设置允许访问某个/某段端口号(包括协议名)

[--zone=<zone>] --remove-port=<port>[portid]/<protocol>

删除指定区域已设置的允许访问的端口号(包括协议名)

[--zone=<zone>] --list-icmp-blocks

显示指定区域内拒绝访问的所有icmp类型

[--zone=<zone>] –add-icmp-block=<icmptype>

为指定区域设置拒绝访问的某项icmp类型

[--zone=<zone>] --remove-icmp-block=<icmptype>

删除指定区域已设置的拒绝访问的某项ICMP类型,省略--zone=<zone>时表示对默认区域进行操作

具体操作如下:

 

  1. 为默认区域设置允许访问服务

[root@localhost services]# firewall-cmd --get-default-zone     //查看系统当前的默认区域

Public

 

[root@localhost services]# firewall-cmd --list-services    //显示默认区域允许访问的所有服务

ssh dhcpv6-client

 

[root@localhost services]# firewall-cmd --add-service=https   //配置默认区域允许访问https服务

Success

 

[root@localhost services]# firewall-cmd --list-services

ssh dhcpv6-client https

 

  1. 为internal区域设置允许访问的服务:

配置internal区域允许访问mysql服务

[root@localhost services]# firewall-cmd --zone=internal --add-service=mysql

success

 

        

[root@localhost services]# firewall-cmd --zone=internal --list-services

ssh mdns samba-client dhcpv6-client mysql

 

设置internal区域不允许访问samba-client服务

(解析:在internal区域中没有的服务都是禁止的,所以我们将samba-client移除就可以了)

[root@localhost services]# firewall-cmd --zone=internal --remove-service=samba-client

Success

 

[root@localhost services]# firewall-cmd --zone=internal --list-services

ssh mdns dhcpv6-client mysql

 

端口管理

  在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开。但是,对于非预定义的服务,只能手动为指定的区域添加端口。例如,执行以下操作可实现在internal区域打开443/tcp端口

 

[root@localhost services]# firewall-cmd --zone=internal --list-ports

 

[root@localhost services]# firewall-cmd --zone=internal --add-port=443/tcp

success

[root@localhost services]# firewall-cmd --zone=internal --list-ports

443/tcp

如果希望在internal禁止接口,将它移除就可以了

[root@localhost services]# firewall-cmd --zone=internal --remove-port=443/tcp

success

 

两种配置模式:

  firewall-cmd命令工具有两种配置模式。运行模式(runtime mode)表示当内存中运行防火墙配置,在系统或firewalld服务重启,停止时将永久失效,永久模式(permanent mode)表示在重启防火墙或重新加载防火墙时规则配置,是永久存储在配置文件中的。

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

1.--reload:重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置

2.--permanent:带有此选项的命令用于配置永久性规则,这些规则只有在重新启动firewalld或则重新加载防火墙规则时才会生效,若不带此选项,表示用于运行时规则

3.--runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置

 

 

 

Firewalld实战:

  听了小弟介绍这么九,那么,这个舞台交给你们了。

 

实验需求:

  1. 网关服务器连接互联网网卡为ens32地址为100.1.1.10,为公网IP,分配到firewall的external(外部)区域,连接内网网卡为ens34地址为192.168.1.1,分配到firewall的trusted(信任区域),连接服务器网卡为ens35地址为192.168.2.1,分配到firewall的dmz(非军事化)区域
  2. 网站服务器和网关服务器均通过SSH来远程管理,为了安全,将SSH默认端口改12345,网站服务器开启https,过滤为加密的http协议流量
  3. 网站服务器拒绝ping命令

 

需求给你们了,按照需求来做吧。

 

网关服务器开启路由转发功能:

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

其他的就是一些firewall策略,你们懂的

 

 

Firealld高级配置

 

 

IP地址与端口转发简介:(一段不说小弟很难懂,虽然你们能看懂,但是我就是要写出来)

在互联网发展初期,设计者们并没有想到互联网发展到现在这空前繁荣的阶段。所以设计Ipv4地址空间只有32位bit。但是随着互联网的发展,IP地址变得严重缺乏,并且地址分配不均匀。所以就在原有的ipv4地址空间的基础上划分出来三段私网地址空间。10.0.0.0/8,127.16.0.0/12和192.168.0.0/16。这些地址可以在企业或者公司内部重复使用。但是不能用于互联网,因为上述三个范围的地址无法在internet上被路由。

 于是NAT(网络地址转换)技术便产生了。当用户数据包经过NAT设备时,NAT设备将源地址替换为公网IP地址。而返回的数据包九可以被路由。NAT技术一般都是在企业边界路由器或者防火墙来配置。

Firewalld支持两种类型的NAT:IP地址伪装和端口转发

 

1、  IP地址伪装

IP地址伪装(masquerade),通过地址伪装。NAT设备将经过设备的包转发到指定接收方。同时将通过数据包的源地址更改为其自己的接口地址。当返回数据包到达时。会将目的dizhi 修改为原始主机的地址并进行路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。类似于NAT技术中的端口多路复用(PAT),IP地址伪装仅支持Ipv4,不支持Ipv6.

2、  端口转发

端口转发(Forward-port),也称为目的地址转换或端口映射。通过端口转发,将指定IP地址及端口的流量转发到相同计算机的不同端口,或不同计算机上的端口,企业内网的服务器一般都采用私网地址,可以通过端口转发将使用私网地址的服务器发布到公网,以便让互联网用户进行访问,例如:当接收互联网用户的http请求时,网关服务器判断数据包的目标地址与目标端口。一旦匹配指定规则,则将其目标地址修改为内网真正的服务器地址,从而建立有效的HTTP协议连接。

 

Firewalld-cmd高级配置

 

  1. firewalld中理解直接规则,这个我们就不理解了,知道有这个东西就行。
  2. 使用富语言:(这个才是主流,把它学会一切好说)

Firewalld的富语言(rich language)提供了一种不需要了解iptables语法的通过高级语言配置复杂Ipv4和Ipv6防火墙规则的机制,为管理员提供了一种表达性语言,同故宫这种语言可以表达firewalld的基本语法中为涵盖的自定义防火墙规则。例如:仅允许从单个IP地址(而非同故宫某个区域路由的所有IP地址)连接到服务

富规则可用于表达基本的允许/拒绝规则,也可以用于配置记录(面向syslog和auditd),以及端口转发,伪装和速率限制。下面是表达富规则的基本语法:

rule [family=”<rule family>”]

[source address=”<address>”[invert=”True”]]

[destination address=”<address>”[invert=”True”]]

[<element>]

[log [perfix=”<perfix text>”] [level=”<log level>”] [limit value=”rate/duration”]]

[audit]

[accept|reject|drop]

规则的每一个单一元素都能够以option=value的形式来采用附加参数

 

2.1)规则顺序

  一旦向某个区域(一般指防火墙)中添加了多个规则,规则的排序会在很大程度上影响防火墙的行为,对于所有的区域,区域内的规则的基本配许是相同的。如果区域中的任何规则与包均不匹配,通常会拒绝该包。此外,在匹配某个记录规则后将继续正常处理包。

  直接规则是个例外,大部分直接规则将首先进行解析,然后由firewalld进行其他处理,但是直接规则语法允许管理员在任何区域中的任何位置插入任何规则。

 

2.2)测试与调试

  为了便于测试和调试,几乎所有的规则都可以与超时一起添加到运行配置。当包含超时的规则添加到防火墙是。计时器便正对该规则开始倒计时,一旦规则的计时器达到0秒,便从运行时配置中删除该规则。

  在使用远程防火墙是,使用超时会是一种及其有用的工具,特别是在测试更复杂达到规则集时,如果规则有效,则挂历元可以再次添加该规则,如果规则没有按照预期运行,甚至可能将管理员锁定而使用其服务进入系统,那么规则将会被自动删除,以允许管理员可以继续工作。

  通过在启用规则的firewall-cmd命令的结尾加选项—timeout=<TIMEINSECONDS>可向运行时规则中添加超时。

2.3)理解富规则命令

  Firewall-cmd有四个通项可以用于处理富规则,所有这些项都可以通常规的—permanent或--zone=<ZONE>选项出合使用。

选项

说明

--add-rich-rule=’RULE’

向指定区域中添加RULE,如果没有指定区域,则为默认区域

--remove-rich-rule=’RULE’

从指定区域中删除RULE,如果没有指定区域,则默认区域

--query-rich-rule=’RULE’

查询RULE是否已添加到指定区域,如果未指定区域,则为默认区域,规则存在则返回0,否则返回1

--list-rich-rules

输出指定区域的所有富规则,如果未指定区域,则为默认区域

  任何已配置的富规则都会显示在firewall-cmd --list-all和firewall-cmd –list-all-zones输出结果。具体语法解释如下。

l  source:限制源IP地址,源地址可以是一个Ipv4、Ipv6地址或者一个网络地址段。

l  destination:限制目标地址,目标地址使用跟源地址相同的语法。

l  element:要素,该项只能是以下几种要素类型之一service、port、protocol、icmp-block、masquerade和forward-port

  1. service:服务名称是firewalld提供的其中一种服务。要获得支持的服务列表,输入以下命令:firewall-cmd –get-services。Ruguo 一个服务提供了一个目标地址,它和规则中的目标地址冲突,则会导致一个错误。命令格式为:servicename=service_name。
  2. Port:端口可以是独立端口数字、或者是端口范围,如5060-5062。协议为TCP或UDP命令格式为:port port-number_or_range protocol=protocol.
  3. Protocol:协议,可以是一个协议id好,或则是一个协议名。查询可用协议,请查阅/etc/protocols。命令格式为:protocol value=protocol_name_or_ID.
  4. Icmp-block:阻断一个或多个ICMP类型,要获得支持的ICMP类型列表输入firewall-cmd --get-icmptypes命令即可查看,命令格式为:icmp-block name=icmptype_name。
  5. Masquerade:规则里的IP伪装。用源地址而不是目的地址来把伪装限制在一个范围内。
  6. Forward-port:将指定的TCP或UDP协议的数据包转发到本机的其他端口、或另一台机器,或另一台机器上的其他端口。Port和to-port可以是一个单独的端口数字,或一个端口范围。而目的地址是一个简单的IP地址。命令格式为,forward-port port=Number_or_range protocol=protocol to-port=number_or_range to_add=address

l  log:注册有内核日志的连接请求到规则中、如系统日志,可以定义一个前缀文本把日志信息作为前缀加入,日志等级可以是emerg、alert、crit、error、warning、notice、into或debug中的一个。可以选择日志的用法,按以下方式限制日志:log [perfix=perfix text] [level=log level] limit value=rate/duration。持续的单位为s、m、h、d、s表示秒,m表示分钟、h表示小时、d表示天数。最大限定值是1/d(每天最多有一条日志进入)。

l  addit:审核,审核类型可以是accept、reject或drop中的一种,但不能在audit命令或指定。因为审核类型将会从规则动作中自动收集。审核不包括自身参数,但可以选择性的增加限制。审核的使用是可选择的。

l  accpt|reject|drop:可以是accept、reject、或者drop中的一个行为。命令格式为accept|reject [type=reject type] |drop。指定accept时,所有新的连接请求都将被允许。指定reject时,连接将被拒绝,发起端接到一个拒绝信息。指定drop时,所有数据包会被丢弃,并且不会向发起段发送任何信息。

 

2.4)配置规则举例

 

  1. 为认证包头协议AH使用新的ipv4和ipv6来连接。

[root@localhost ~]# firewall-cmd --add-rich-rule='rule protocol value=ah accept'

Success

 

  1. 允许新的ipv4和ipv6连接FTP,并使用审核每分钟记录一次。

[root@localhost ~]# firewall-cmd --add-rich-rule='rule service name=ftplog limit value=1/m audit accept'

Success

 

3.允许来自192.168.0.0/24地址的tftp协议的ipv4连接并且使用系统日志没分钟记录一次。

[root@localhost ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept'

success

4.为RADIUS协议拒绝所有来自1:2:3:4:5:6::的新ipv6连接,日志前缀为“dns”,级别为“info”,并且每分钟最多记录三次,接收来自其他发起端新的ipv6地址。

[root@localhost ~]# firewall-cmd --add-rich-rule="rule family="ipv6" source address="1:2:3:4:5:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" accept"

success

5.将源192.168.2.2 地址加入白名单,一允许来自这个源地址的所有连接。

[root@localhost ~]# firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.2" accept"

Success

6.拒绝来自public区域中IP地址192.168.0.11的所有流量。

[root@localhost ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.11" reject"

Success

7.丢弃来自默认区域中任何位置的所有传入的ipsec esp协议包。

[root@localhost ~]# firewall-cmd --zone=public --add-rich-rule='rule protocol value="esp" drop'

Success

8.查询默认区域所有的富规则:

[root@localhost ~]# firewall-cmd --list-rich-rule

rule protocol value="ah" accept

rule service name="ftplog" audit limit value="1/m" accept

rule family="ipv6" source address="1:2:3:4:5:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" accept

rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept

rule family="ipv4" source address="192.168.2.2" accept

rule family="ipv4" source address="192.168.0.11" reject

rule protocol value="esp" drop

 

 

好了,以上就是我对firewalld的总结了,希望对你们有帮助。

 

 

posted @ 2019-07-24 10:00  Wulinux  阅读(883)  评论(0编辑  收藏  举报