​​​​​​​​​​​​概述
保证数据的安全性是继可用性之后最为重要的一项工作,防火墙技术作为公网与内网之间的保护屏障,起着至关重要的作用。
本章节内将会分别使用iptables、firewall-cmd、firewall-config和Tcp_wrappers等防火墙策略配置服务,够熟练的对请求数据包流量进行过滤,还能够基于服务程序进行允许和关闭操作,从更好的层面保证了Linux系统的安全运行。

一、 防火墙管理工具

保证数据的安全性是继可用性之后最为重要的一项工作,防火墙技术作为公网与内网之间的保护屏障,虽然有软件或硬件之分(系统防火墙、硬件防火墙、行为管理设备等),但主要功能都是依据策略对外部请求进行过滤,防火墙技术能够做到监控每一个数据包并判断是否有相应的匹配策略规则,直到匹配到其中一条策略规则或执行默认策略为止,防火墙策略可以基于来源地址、请求动作或协议等信息来定制,最终仅让合法的用户请求流入到内网中,其余的均被丢弃。

防火墙作为公网与内网之间的保护屏障

红帽RHEL7系统中Firewalld服务取代了Iptables服务,但其实Iptables服务与Firewalld服务都不是真正的防火墙,它们都只是用来定义防火墙策略功能的“防火墙管理工具”,真正定义好的防火墙策略会被内核中的netfilter网络过滤器接收,从而真正实现了防火墙功能。
在Linux系统中其实同时有多个防火墙管理工具共同存在,作用都是为了方便运维人员管理Linux系统的防火墙策略,但最终真正的数据过滤功能是由系统内核中netfilter网络过滤器来实现的,红帽RHEL7系统中的防火墙没有变,而是防火墙的规则策略管理工具换了而已,虽然各个工具之间各有优劣特色,但对于防火墙策略的配置思路上是保持一致的,从多个防火墙管理工具中任选一款来学透即可,完全能够满足日常的工作所需。

Netfilter和firewalld概念

Linux内核包含一个强大的网络过滤子系统netfilter。netfilter子系统允许内核模块对遍历系统的每个数据包进行检查。这表示在任何传入、传出或转发的网络数据包到达用户空间中的组件之前,都可以通过编程方式检查、修改、丢弃或拒绝这些数据包。这是RHEL7计算机上构建防火墙的主要构建快。

与netfilter交互

尽管系统管理员理论可以编写自己的内核模块与netfilter交互,但通常不会这样做。取而代之,会使用其他程序来与netfilter交互。这些程序中,最常见和最知名的是iptables。
之前的RHEL版本中,iptables是内核netfilter子系统交互的主要方法。iptables是一个命令工具,它仅能调整IPv4防火墙规则。为保证更完整的防火墙覆盖率,需要使用其他实用程序,例如用于IPv6的ip6tables和用于软件桥的ebtables。

二、iptables

在较早期的Linux系统中想配置防火墙默认使用的都是iptables防火墙管理命令,而新型Firewalld防火墙管理服务已经被投入使用多年,但目前还有大量的生产环境中在使用着iptables命令来管理着防火墙的规则策略。

2.1 策略与规则链
防火墙会从上至下来读取规则策略,一旦匹配到了合适的就会去执行,并立即结束匹配工作,但也有转了一圈之后发现没有匹配到合适规则的时候,那么就会去执行默认的策略。
对防火墙策略的设置有两种,一种是“通”,一种是“堵”——当防火墙的默认策略是拒绝的,我们就要设置允许规则,否则谁都进不来了,而如果防火墙的默认策略是允许的,我们就要设置拒绝规则,否则谁都能进来了,起不到防范的作用。
iptables命令把对数据进行过滤或处理数据包的策略叫做规则,将多条规则又存放到一个规则链中,规则链是依据处理数据包位置的不同而进行的分类,包括有:
#进行路由选择前处理数据包(PREROUTING)
# 处理流入的数据包(INPUT)
# 处理流出的数据包(OUTPUT)
# 处理转发的数据包(FORWARD)

# 在进行路由选择后处理数据包(POSTROUTING)
从内网向外网发送的数据一般都是可控且良性的,因此显而易见我们使用最多的就是INPUT数据链,这个链中定义的规则起到了保证我们私网设施不受外网骇客侵犯的作用。
比如社区物业有两条规定——“禁止小商贩进入社区,各种车辆都需要登记”,这两条安保规定很明显应该是作用到了社区的正门(流量必须经过的地方),而不是每家每户的防盗门上。
根据我们前面提到的防火墙策略的匹配顺序规则,我们可以猜想有多种情况——比如来访人员是小商贩,则会被物业保安直接拒绝在大门外,也无需再对车辆进行登记,
如果来访人员是一辆汽车,那么因为第一条禁止小商贩策略就没有被匹配到,因而按顺序匹配到第二条策略,需要对车辆进行登记,再有如果来访的是社区居民,则既不满足小商贩策略,也不满足车辆登记策略,因此会执行默认的放行策略。

不过只有规则策略还不能保证系统的安全,还应该知道该怎么样处理这些被匹配到的流量,比如:“允许”、“登记”、“拒绝”、“不处理”,
这些动作对应到iptables命令术语中是:
# ACCEPT(接收数据包)
# LOG(记录日志信息)
# REJECT(拒绝流量通过)
# DROP(丢弃数据包)
# SNAT(源地址转换)
# DNAT(目标地址转换)

允许动作和记录日志工作都比较好理解,这两条拒绝动作的不同点,其中REJECT和DROP的动作操作都是将数据包拒绝,DROP是直接将数据包抛弃不响应,而REJECT会拒绝后再回复一条“您的信息我已收到,但被扔掉了”,让对方清晰的看到数据被拒绝的响应。
将Linux系统设置成REJECT拒绝动作策略后,对方会看到本机的端口不可达的响应:

# [root@rhce ~]# ping -c 4 192.168.10.10
#  PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
# From 192.168.10.10 icmp_seq=1 Destination Port Unreachable
# From 192.168.10.10 icmp_seq=2 Destination Port Unreachable

2.2 基本的命令参数
iptables是一款基于命令行的防火墙策略管理工具,由于该命令是基于终端执行且存在有大量参数的,无需深入的了解诸如“四表五链”的理论概念,只需要掌握常用的参数并做到灵活搭配即可,以便于能够更顺畅的胜任工作所需。
iptables命令可以根据数据流量的源地址、目的地址、传输协议、服务类型等等信息项进行匹配,一旦数据包与策略匹配后,iptables就会根据策略所预设的动作来处理这些数据包流量。
防火墙策略的匹配顺序规则是从上至下的,因此要把较为严格、优先级较高的策略放到靠前位置,否则有可能产生错误。

表名包括:

# raw:高级功能,如:网址过滤。
# mangle:数据包修改(QOS),用于实现服务质量。
# net:地址转换,用于网关路由器。
# filter:包过滤,用于防火墙规则。

iptables命令主要参数:

参数 作用
-P 设置默认策略:iptables -P INPUT (DROP
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-Inum 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
–dport num 匹配目标端口号
–sport num 匹配来源端口号

iptables命令-L参数查看已有的防火墙策略:

# [root@rhce ~]# iptables -L

iptables命令-F参数清空已有的防火墙策略:

# [root@rhce ~]# iptables -Fiptables -Xiptables -Z
# [root@rhce ~]# iptables -L
# Chain INPUT (policy ACCEPT)
# target prot opt source destination

将INPUT链的默认策略设置为拒绝:
如前面所提到的防火墙策略设置无非有两种方式,一种是“通”,一种是“堵”,当我们将INPUT链设置为默认拒绝后,就需要往里面写入允许策略,否则所有流入的数据包都会被默认拒绝掉,规则链的默认策略拒绝动作只能是DROP,而不能是REJECT。
# [root@rhce ~]# iptables -P INPUT DROP
# [root@rhce ~]# iptables -L
# Chain INPUT (policy DROP)
# target prot opt source destination

向INPUT链中添加允许imcp数据包流入的允许策略:
我们经常会使用到ping命令来检查对方主机是否在线,现在向防火墙INPUT链中添加一条允许imcp协议数据包流入的策略,默认允许了ping命令检测行为。

# [root@rhce ~]# ping -c 4 192.168.10.10
# PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
# --- 192.168.10.10 ping statistics ---4 packets transmitted, 0 received, 100% packet loss, time 3000ms# [root@rhce ~]# iptables -I INPUT -p icmp -j ACCEPT
# [root@rhce ~]# ping -c 4192.168.10.10
# PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.156 ms64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.117 ms

删除INPUT链中的那条策略,并将默认策略还原为允许:

# [root@rhce ~]# iptables -D INPUT 1
# [root@rhce ~]# iptables -P INPUT ACCEPT
# [root@rhce ~]# iptables -LChain INPUT (policy ACCEPT)target prot opt source destination

设置INPUT链只允许指定网段访问本机的22端口,拒绝其他所有主机的数据请求流量:
防火墙策略是按照从上至下顺序匹配的,要记得将允许动作放到拒绝动作上面,否则所有的流量就先被拒绝了。

# [root@rhce ~]# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
# [root@rhce ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
# [root@rhce ~]# iptables -L

使用IP地址在192.168.10.0/24网段内的主机访问服务器的22端口:

# [root@Client A ~]# ssh 192.168.10.10
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is 70:3b:5d:37:96:7b:2e:a5:28:0d:7e:dc:47:6a:fe:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
# root@192.168.10.10's password:
Last login: Sun Feb 12 01:50:25 2017
# [root@Client A ~]#

使用IP地址在192.168.20.0/24网段外的主机访问服务器的22端口(被拒绝):

# [root@Client B ~]# ssh 192.168.10.10
Connecting to 192.168.10.20:22...
Could not connect to '192.168.10.20' (port 22): Connection failed.

向INPUT链中添加拒绝所有人访问本机12345端口的防火墙策略:

# [root@rhce ~]# iptables -I INPUT -p tcp --dport 12345 -j REJECT
# [root@rhce ~]# iptables -I INPUT -p udp --dport 12345 -j REJECT
# [root@rhce ~]# iptables -L

向INPUT链中添加拒绝来自于指定192.168.10.5主机访问本机80端口(web服务)的防火墙策略:

# [root@rhce ~]# iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
# [root@rhce ~]# iptables -L

向INPUT链中添加拒绝所有主机不能访问本机888端口和1000至1024端口的防火墙策略:

# [root@rhce ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
# [root@rhce ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
# [root@localhost ~]# iptables -L

iptables命令配置的防火墙规则默认会在下一次重启时失效,如果让配置的防火墙策略永久生效,执行保存:

# [root@rhce ~]# service iptables save
# iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

开放指定的端口

# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
允许本地回环接口(即运行本机访问本机) # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许已建立的或相关连的通行 # iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口
# iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口
# iptables -A INPUT -j reject #禁止其他未允许的规则访问
# iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问

屏蔽IP

# iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
# iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到    123.255.255.254的命令
# iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
# iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令

查看已添加的iptables规则

# iptables -L -n -v

删除已添加的iptables规则
将所有iptables以序号标记显示,执行:

# iptables -L -n --line-numbers

比如要删除INPUT里序号为8的规则,执行:

# iptables -D INPUT 8

三、 Firewalld

RHEL7是多款防火墙管理工具并存的系统,Firewalld动态防火墙管理器服务(Dynamic Firewall Manager of Linux systems)是目前默认的防火墙管理工具,同时拥有命令行终端和图形化界面的配置工具,即使是对Linux命令并不熟悉的同学也能快速入门,相比于传统的防火墙管理工具还支持了动态更新技术。
加入了“zone区域”的概念,简单来说就是为用户预先准备了几套防火墙策略集合(策略模板),然后我们可以根据生产场景的不同而选择合适的策略集合,实现了防火墙策略之间的快速切换。
例如我们有一台笔记本电脑每天都要在办公室、咖啡厅和家里使用,按常理推断最安全的应该是家里的内网,其次是公司办公室,最后是咖啡厅,如果我们需要在办公室内允许文件共享服务的请求流量、回到家中需要允许所有的服务,而在咖啡店则是除了上网外不允许任何其他请求,在以前我们只能频繁的进行手动设置,而现在只需要预设好zone区域集合,然后轻轻点击一下就可以切换过去了上百条策略了,极大的提高了防火墙策略的应用效率

常见的zone区域名称及应用可见下表(默认为public):

区域 默认规则策略
trusted 允许所有的数据包
home 拒绝流入的数据包,除非与输出流量数据包相关或是ssh,mdns,ipp-client,samba-client与dhcpv6-client服务则允许
internal 等同于home区域
work 拒绝流入的数据包,除非与输出流量数据包相关或是ssh,ipp-client与dhcpv6-client服务则允许
public 拒绝流入的数据包,除非与输出流量数据包相关或是ssh,dhcpv6-client服务则允许
external 拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许
dmz 拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许
block 拒绝流入的数据包,除非与输出流量数据包相关
drop 拒绝流入的数据包,除非与输出流量数据包相关

配置防火墙设置
系统管理员可通过三种主要方式与firewalld交互:
 直接编辑/etc/firewalld 中的配置文件(本章节讨论)
 使用firewall-config 图形工具
 从命令行使用firewall-cmd

fireawlld配置文件
firewalld配置文件存储在两个位置:/etc/firewalld 和 /usr/lib/firealld。如果相同名称的配置文件同时存储在两个位置中,则将使用 /etc/firewalld 中的版本。这允许管理员覆盖默认区域和设置,而不必担心其更改被软件包更新所擦除。

预定义firewalld服务

# [root@server ~]# firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns
freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-
client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-
wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql
proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client
transmission-client vdsm vnc-server wbem-https
# [root@server ~]#

还存在许多其他预定义服务。可以在/usr/lib/firewalld/service目录总找到并定义firewalld软件包中所含预定义服务的配置文件。

# [root@server services]# pwd
/usr/lib/firewalld/services
# [root@server services]# ls
amanda-client.xml        iscsi-target.xml  pop3s.xml
bacula-client.xml        kerberos.xml      postgresql.xml
bacula.xml               kpasswd.xml       proxy-dhcp.xml

省略。。。。。

屏蔽iptables和ip6tables服务

3.1 终端管理工具

firewall-cmd命令是Firewalld动态防火墙管理器服务的命令行终端。
它的参数一般都是以“长格式”来执行的

参数 作用
–get-default-zone 查询默认的区域名称
–set-default-zone=<区域名称> 设置默认的区域,永久生效
–get-zones 显示可用的区域
–get-services 显示预先定义的服务
–get-active-zones 显示当前正在使用的区域与网卡名称
–add-source= 将来源于此IP或子网的流量导向指定的区域
–remove-source= 不再将此IP或子网的流量导向某个指定区域
–add-interface=<网卡名称> 将来自于该网卡的所有流量都导向某个指定区域
–change-interface=<网卡名称> 将某个网卡与区域做关联
–list-all 显示当前区域的网卡配置参数,资源,端口以及服务等信息
–list-all-zones 显示所有区域的网卡配置参数,资源,端口以及服务等信息
–add-service=<服务名> 设置默认区域允许该服务的流量
–add-port=<端口号/协议> 允许默认区域允许该端口的流量
–remove-service=<服务名> 设置默认区域不再允许该服务的流量
–remove-port=<端口号/协议> 允许默认区域不再允许该端口的流量
–reload 让“永久生效”的配置规则立即生效,覆盖当前的

Firewalld服务对防火墙策略的配置默认是当前生效模式(RunTime),配置信息会随着计算机重启而失效,如果想要让配置的策略一直存在,那就要使用永久生效模式(Permanent),命令中加入–permanent参数。
但这个永久生效模式对它设置的策略需要重启后才能自动生效,如果想让配置的策略立即生效,手动执行一下–reload参数。

显示默认区域设置为dmz,来自192.168.0.0/24网络的所有流量都被分配给internal区域,而internal区域上打开了用于mysql的网络端口

查看Firewalld服务当前所使用的zone区域:

#[root@rhce ~]# firewall-cmd --get-default-zone

public
查询eno16777728网卡在Firewalld服务中的zone区域:

#[root@rhce ~]# firewall-cmd --get-zone-of-interface=eno16777728
public

将Firewalld防火墙服务中eno16777728网卡的默认区域修改为external,重启后再生效:

# [root@rhce ~]# firewall-cmd --permanent --zone=external
--change-interface=eno16777728success
# [root@rhce ~]# firewall-cmd --get-zone-of-interface=eno16777728
public
# [root@rhce ~]# firewall-cmd --permanent --get-zone-of-interface
=eno16777728
external

将Firewalld防火墙服务的当前默认zone区域设置为public:

# [root@rhce ~]# firewall-cmd --set-default-zone=public
success
# [root@rhce ~]# firewall-cmd --get-default-zone
public
# [root@rhce ~]# firewall-cmd --get-active-zones

启动/关闭Firewalld防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器时请慎用。):

# [root@rhce ~]# firewall-cmd --panic-on
success
# [root@rhce ~]# firewall-cmd --panic-off
success

查询在public区域中的ssh与https服务请求流量是否被允许:

# [root@rhce ~]# firewall-cmd --zone=public --query-service=ssh
yes
# [root@rhce ~]# firewall-cmd --zone=public --query-service=httpsno

将Firewalld防火墙服务中https服务的请求流量设置为永久允许,并当前立即生效:

# [root@rhce ~]# firewall-cmd --zone=public --add-service=https
success
# [root@rhce ~]# firewall-cmd --permanent --zone=public --add-service=https
success
# [root@rhce ~]# firewall-cmd --reload
success

将Firewalld防火墙服务中http服务的请求流量设置为永久拒绝,并当前立即生效:

# [root@rhce ~]# firewall-cmd --permanent --zone=public
--remove-service=http
success
# [root@rhce ~]# firewall-cmd --reload
success

将Firewalld防火墙服务中8080和8081的请求流量允许放行,但仅限当前生效:

# [root@rhce ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
# [root@rhce ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp

将原本访问本机888端口号的请求流量转发到22端口号,要求当前和长期均有效:

流量转发命令格式:

# firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址># [root@rhce ~]# firewall-cmd --permanent --zone=public
--add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
success
# [root@rhce ~]# firewall-cmd --reload
success

在客户机使用ssh命令尝试访问192.168.10.10主机的888端口:

# [root@client A ~]# ssh -p 888 192.168.10.10
The authenticity of host '[192.168.10.10]:888 ([192.168.10.10]:888)' can't be established.
ECDSA key fingerprint is b8:25:88:89:5c:05:b6:dd:ef:76:63:ff:1a:54:02:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.10.10]:888' (ECDSA) to the list of known hosts.
# root@192.168.10.10's password:
Last login: Sun Jul 19 21:43:48 2017 from 192.168.10.10

在Firewalld防火墙服务中配置一条富规则,拒绝所有来自于192.168.10.0/24网段的用户访问本机ssh服务(22端口):

# [root@rhce ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule    family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
success
# [root@rhce ~]# firewall-cmd --reload
success

在客户机使用ssh命令尝试访问192.168.10.10主机的ssh服务(22端口):

# [root@client A ~]# ssh 192.168.10.10
Connecting to 192.168.10.10:22...
Could not connect to '192.168.10.10' (port 22): Connection failed.

3.2富规则
除了firewalld 提供的常规区域和服务语法之外,管理员还有另外两种选项来添加防火墙规则:直接规则和富规则。

直接规则
直接规则允许管理员将手动编码的 {ip,ip6,eb}tables 规则插入到firewalld 管理区域中。尽管这些规则很强大,并且暴露的内核 netfilter 子系统功能不会通过其他手段暴露,但可能难以管理。直接规则所提供的灵活性也低于标准规则和富规则。

富规则
firewalld 富规则为管理员提供了一种表达性语言,通过这种语言可表达 firewalld 的基本语法中未涵盖的自定义防火墙规则;例如,仅允许从单个IP地址(而非通过某个区域路由的所有IP地址)连接到服务。

排序规则


实例:





富规则记录






示例参考P115

实验练习:

1、基本操作

systemctl mask iptables
systemctl mask ip6tables
systemctl mask ebtables
firewall-cmd --help
firewall-cmd --list-all
firewall-cmd --get-active-zones
firewall-cmd --zone=work --list-all
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=public
firewall-cmd --add-service=http
firewall-cmd --remove-service=http
firewall-cmd --add-port=8080/tcp
firewall-cmd --remove-port=8080/tcp
firewall-cmd --add-source=192.168.100.0/24
firewall-cmd --remove-source=192.168.100.0/24
firewall-cmd --add-icmp-block=echo-request
firewall-cmd --remove-icmp-block=echo-request
firewall-cmd --zone=work --add-service=http
firewall-cmd --permanent --zone=work --add-service=http
firewall-cmd --reload
firewall-cmd --get-zone-of-interface=eno16777736
firewall-cmd --get-zone-of-source=192.168.100.0/24

2、允许网站访问

#在qin1上

yum install httpd
echo firewalldtest > /var/www/html/index.html
systemctl restart httpd
firewall-cmd --permanent --add-icmp-block=echo-request
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload

#在qin2上

ping 192.168.100.1
ssh 192.168.100.1
http://192.168.100.1

3、接口和source冲突

#在qin1上

yum install httpd
echo firewalldtest > /var/www/html/index.html
systemctl restart httpd
firewall-cmd --add-source=192.168.100.0/24
firewall-cmd --add-service=http

测试qin2通过ping、ssh、http等方式访问qin1,可访问qin1网站是否可行
firewall-cmd --zone=drop --change-interface=eno16777736
测试qin2通过ping、ssh、http等方式访问qin1,可访问qin1网站是否可行
firewall-cmd --zone=trusted --change-source=192.168.100.0/24
测试qin2通过ping、ssh、http等方式访问qin1,可访问qin1网站是否可行
#此实验不可加–permanent,否则无法生效

4、富规则端口转发

#在qin1上

setenforce 0
systemctl start firewalld
firewall-cmd --add-service=http
firewall-cmd --add-port=8899/tcp
yum install -y httpd
vim /etc/hosts
192.168.100.1   www.qin.com     #增加
192.168.100.1   www.bing.com        #增加
vim /etc/httpd/conf/httpd.conf
Listen 8899             #增加
mkdir /var/www/qin
mkdir /var/www/bing
echo qin80 > /var/www/qin/index.html
echo bing8899 > /var/www/bing/index.html
vim /etc/httpd/conf.d/0.conf
<VirtualHost 192.168.100.1:80>
DocumentRoot "/var/www/qin"
ServerName www.qin.com
</VirtualHost>
<VirtualHost 192.168.100.1:8899>
DocumentRoot "/var/www/bing"
ServerName www.bing.com
</VirtualHost>
systemctl restart httpd

#在qin1和qin2上

http://192.168.100.1
http://192.168.100.1:8899# 在qin1上
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" forward-port port="80"     protocol="tcp" to-port="8899""
firewall-cmd --reload

在qin1和qin2上
http://192.168.100.1 #qin1不过防火墙,所以不做转发,qin2过防火墙,产生端口转发

3.3 端口转发










端口转发示例 ssh 443端口转发





desktop 主机可以通过443端口使用sshd服务。

3.4 图形管理工具

Firewalld防火墙图形化的界面如图所示,功能分别为1:选择"当前立即生效(Runtime)"或"重启后长期生效(Permanent)"配置、2:可选策略集合区域列表、3:常用系统服务列表、4:当前正在使用的区域、5:管理当前被选中区域中的服务、6:管理当前被选中区域中的端口、7:开启或关闭SNAT(伪装)技术、8:设置端口转发策略、9:控制ICMP协议请求流量、10:管理防火墙的富规则、11:管理网卡设备、12:被选中区域的服务,前面有√的表示允许放行、13:Firewalld防火墙图形化工具的状态。
Firewall-config图形化管理工具在配置策略后,不需要点击保存或完成按钮,只要有修改内容工具就会自动保存好。
将当前区域中http服务的请求流量允许放行,但仅限当前生效,如图所示:


添加一条允许放行8080-8088端口号(tcp协议)入站请求数据的策略,并且将配置模式提前设置为永久长期生效,以达到重启后依然生效的目的,配置过程如图所示。

配置防火墙策略允许8080-8088端口号的请求流量数据

在菜单中点击Reload Firewalld选项,来让配置文件立即生效,这与在命令行终端中执行了–reload参数的效果是一样的

让防火墙永久生效策略配置信息立即生效
SNAT源地址转换协议是为了解决IP地址资源匮乏问题而设计的技术协议,SNAT技术能够使得多个内网用户通过一个外网IP地址上网
如图所示,在一个局域网中有多台主机,如果网关之上没有经过SNAT处理,那么请求过后的回复数据包就不能在互联网中找到这个私网IP地址,所以用户也就不能顺利取得想要的资源了,

没有使用SNAT技术的网络 但是在如所示的拓扑中,因使用了SNAT源地址转换技术,服务器应答后先由网关服务器接收,再分发给内网的用户主机,从而使得用户顺利的拿到了所需资源。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807142252250.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MDI5Mjk3,size_16,color_FFFFFF,t_70) 使用SNAT技术处理过的网络 使用iptables命令做SNAT源地址转换是一件很麻烦的事情,但在Firewalld防火墙图形化工具中,我们只需要按照如图所示,点击开启伪装区域技术就自动开启了SNAT源地址转换技术,具体效果以后来验证。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807142213713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MDI5Mjk3,size_16,color_FFFFFF,t_70) 开启防火墙的SNAT(伪装)技术 将所有向本机888端口请求的流量转发到22端口上,然后让防火墙配置策略当前及重启后都生效,只要能实现需求的功能,无论用文本管理工具还是图形管理工具都是可以的。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807141957797.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MDI5Mjk3,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807142032907.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MDI5Mjk3,size_16,color_FFFFFF,t_70) 让防火墙永久生效策略配置信息立即生效 在Firewalld中的“富规则”代表着更细致、更详细的策略配置方法,可以针对某个系统服务、端口号、来源地址、目的地址等诸多元素进行有针对性的策略配置,富规则策略的优先级是在策略中最高的。如图所示,可以让192.168.10.20的主机能够访问到本机的1234端口号。

配置防火墙富规则策略 如果生产环境中有多块网卡在同时提供着服务(这种情况很常见),自然对内网和对外网的网卡要选择的防火墙策略区域也不一样,如图所示,将网卡与防火墙策略zone区域做绑定,这样对不同网卡来源的请求流量进行不同策略区域的有针对性监控,效果会更好将网卡与防火墙zone区域做绑定 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807141617969.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MDI5Mjk3,size_16,color_FFFFFF,t_70)

四、服务的访问控制列表

Tcp_wrappers是红帽RHEL7系统中默认已经启用的一款流量监控程序,它能够根据来访主机地址与本机目标服务程序做允许或拒绝操作。
换句话说,Linux系统中其实有两个层面的防火墙,第一种是前面讲到的基于TCP/IP协议的流量过滤防护工具,而Tcp_wrappers服务则是能够对系统服务进行允许和禁止的防火墙,从而在更高层面保护了Linux系统的安全运行。
控制列表文件修改后会立即生效,系统将会先检查允许策略规则文件(/etc/hosts.allow),如果匹配到相应的允许策略则直接放行请求,如果没有匹配则会去进一步匹配拒绝策略规则文件(/etc/hosts.deny)的内容,有匹配到相应的拒绝策略就会直接拒绝该请求流量,如果两个文件全都没有匹配到的话也会默认放行这次的请求流量。
下表中列出了常见的情况:

客户端类型 示例 满足示例的客户端列表
单一主机 192.168.10.10 IP地址为192.168.10.10的主
指定网段 192.168.10. IP段为192.168.10.0/24的主机
指定网段 192.168.10.0 255.255.255.0 IP段为192.168.10.0/24的主机
指定DNS后缀 .rhce.com 所有DNS后缀为.rhce.com的主机
指定主机名称 www.rhce.com 主机名称为www.rhce.com的主机
指定所有客户端 ALL 所有主机全部包括在内

在正式配置Tcp_wrappers服务前有两点注意的地方,
第一,在写禁止项目的时候一定要写上的是服务名称,而不是某种协议的名称,
第二,推荐先来编写拒绝规则,这样可以比较直观的看到相应的效果。
先来通过拒绝策略文件禁止下所有访问本机sshd服务的请求数据(无需修改原有的注释信息):

# [root@rhce ~]# vim /etc/hosts.deny
sshd:*# [root@rhce ~]# ssh 192.168.10.10ssh_exchange_identification: read: Connection reset by peer

接下来在允许策略文件中添加放行所有来自于192.168.10.0/24这个网段访问本机sshd服务请求的策略,服务器马上就允许了访问sshd服务的请求,效果非常直观:

# [root@rhce ~]# vim /etc/hosts.allow
# See 'man tcpd' for information on tcp_wrappers
sshd:192.168.10.# [root@rhce ~]# ssh 192.168.10.10# The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is 70:3b:5d:37:96:7b:2e:a5:28:0d:7e:dc:47:6a:fe:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.#vroot@192.168.10.10's password:
Last login: Wed May 4 07:56:29 2016

1:红帽RHEL7系统中iptables已经被firewalld服务彻底取代?
错,在系统中iptables和firewalld服务均可使用。
2:请您简述下防火墙拒绝规则中的DROP和REJECT动作有何不同之处?
DROP动作是丢包,不响应,而REJECT动作是拒绝请求,回应给对方拒绝信息。
3:如何将iptables服务的INPUT规则链默认策略设置为DROP动作?
执行命令iptables -P INPUT DROP后即可生效。
4:使用iptables命令配置禁止来自于192.168.10.0/24网段访问本机sshd服务(22端口)的防火墙策略应该怎么写?
执行命令iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j REJECT后即可生效。
5:请您简述下firewalld防火墙管理工具的zone区域作用?
我们可以依据不同的工作场景来调用不同的firewalld区域,实现对大量防火墙策略的快速切换。
6:如何在firewalld防火墙管理工具中将默认的zone区域设置为dmz?
执行命令firewall-cmd --set-default-zone=public后即可生效。
7:如何让firewalld防火墙管理工具中永久生效策略(Permanent)立即生效可用呢?
执行命令firewall-cmd --reload后即可生效。
8:使用SNAT源地址转换协议的目的是什么?
SNAT源地址转换协议是为了解决IP地址资源匮乏问题而设计的技术协议,SNAT技术能够使得多个内网用户通过一个外网IP地址上网。
9:Tcp_wrappers服务分别有允许策略配置文件和拒绝策略配置文件,请问匹配顺序是怎么样的?
Tcp_wrapper会依次匹配允许策略配置文件→拒绝策略配置文件,如果都没有匹配到也会默认放行流量。

firewalld 端口、富规则相关推荐

  1. linux防火墙富规则,Firewalld防火墙富规则策略-实践案例下

    FirewallD 提供了支持网络/防火墙区域定义网络链接以及接口安全等级的动态防火墙管理工具. Firewalld支持服务.端口.转发一键配置生效.同时还支持不同网络接口绑定不同区域,不同区域配置不 ...

  2. linux防火墙富规则,[Linux]Redhat7防火墙配置汇总

    Redhat7防火墙常用配置 重启防火墙服务 systemctl restart firewalld.service 查看防火墙服务状态 systemctl status firewalld.serv ...

  3. 关于centos中firewalld端口相关配置

    参考文章:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/se ...

  4. 【Verilog HDL】第四章 模块的端口连接规则——污水处理模型

    先放上连接规则的简图,再详细解释 1. 构建模型--污水处理之流水模型 我们先将上述结构构件一个简单模型,以帮助我们理解. 污水:输入数据 净水:输出数据 双向数据暂不讨论,取输入和输出的交集即可 污 ...

  5. 荣耀路由pro没有虚拟服务器,荣耀路由怎么设置端口映射规则

    端口映射功能,可以将荣耀路由 WAN IP 的一个端口映射到局域网中的一台计算机上.当因特网用户访问该 IP 的该端口时,荣耀路由将会自动将该请求映射到已指定的计算机上,并通过该计算机对外提供服务.如 ...

  6. 华为A1路由器虚拟服务器,华为a1路由器怎么设置端口映射规则

    华为a1路由器可以设置端口触发规则,也可以设置端口映射规则,前者小编已经和大家聊过,今天再来聊聊怎么设置端口映射规则,如果您感兴趣的话那就快来看看吧! 设置端口映射规则步骤 第一步: 电脑连接到路由器 ...

  7. 华为荣耀2s设置虚拟服务器教程,荣耀路由2S怎么设置端口映射规则

    荣耀路由2S除了可以让用户玩转wifi之外还有一些比较高级的玩法,例如设置端口触发规则和设置端口映射规则等等.前者小编已经和大家聊过了,今天小编再来告诉大家怎么设置端口映射规则,快来看看吧! 设置端口 ...

  8. 雷神的微软平台安全宝典:使用源端口访问规则来限制访问

    现在讨论一种安全访问之前谈论过的RDP服务的方法.实际上,笔者还从来没有看到这种方法被合理并且有效地使用过.这是创建访问控制规则的过程,而这些规则基于客户端试图建立连接的源端口而创建.笔者曾经见过一种 ...

  9. 荣耀路由x1 虚拟服务器,荣耀路由X1增强版怎么设置端口映射规则

    荣耀路由X1增强版既可以设置端口触发规则也可以设置端口映射规则,例如从因特网实时访问家庭网络摄像头.控制家庭网络中的智能设备等等.如果您还不知道怎么操作的话那就让小编来告诉您吧! 设置端口映射规则步骤 ...

最新文章

  1. HttpClient 教程 (二)
  2. 手把手教你做关键词匹配项目(搜索引擎)---- 第九天
  3. 【遥感数字图像处理】基础知识:第五章 遥感图像增强处理方法总结
  4. 计算机硬盘怎么设置ntfs,每次设置系统后,能否更改计算机硬盘分区的fat32和ntfs格式?...
  5. oppoR17手机计算机的隐藏功能,OPPO R17 Pro隐藏了很多你不知道的黑科技,让你高效使用手机...
  6. 使用redis解决并发操作问题
  7. 新增加的HTTP状态码 -- 103
  8. 机器学习专项练习笔记(持续更新)
  9. 企业微信管理员可以看到打卡位置吗
  10. 制造业数字化转型的困难_制造业数字化转型的难点与对策
  11. 【NLP】LSTM 唐诗生成器 pytorch 版
  12. Dell服务器的iDRAC虚拟控制台无法连接
  13. 电视行业和政策发展历程
  14. 算法学习笔记【1】——二分查找
  15. Python3.x 标准模块库目录(下篇)
  16. IDEA中插件加载不出来问题解决
  17. 有关lpk.dll病毒的清除方法
  18. null和空字符串('')的区别
  19. 写php需要什么软件?
  20. 孪生素数(与质数的后代有联系

热门文章

  1. 带口罩的你,还能等到 iPhone 的屏下指纹吗?
  2. 微信小程序禁用页面滚动的几种方式
  3. C语言之联合(union)的妙用
  4. 贝叶斯推理:一个更有趣的例子
  5. 向量点乘、叉乘、矩阵乘法和np.dot
  6. 面试突击:线程池有几种创建方式?推荐使用哪种?
  7. 本地 vs 云:大数据厮杀的最终幸存者会是谁?— InfoQ专访阿里云智能通用计算平台负责人关涛...
  8. Linux awk print
  9. 航司的客户等级分类及价值分析
  10. 【SA8295P 源码分析】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解析