iptables与Firewalld防火墙的配置

前言

(1)iptables与firewalld都不是真正的防火墙,可以理解为一种服务,对防火墙策略定义的防火墙管理工具
(2)防火墙会从上至下的顺序来读取配置的策略规则
(3)防火墙策略按一定规则检查数据流是否可以通过防火墙的基本安全控制机制
(4)规则本质就是对出入的数据进行检测,过滤

作用

(1)对源目地址、端口号、协议、应用等信息来定制规则,保护特定网络免受“不信任”的网络的攻击
(2)保证两网之间进行合法通信

一、iptables防火墙
iptables服务把用于处理或过滤流量的策略条目称之为规则;多条规则可以组成一个规则链。
早期的Linux系统中,默认使用的是iptables防火墙管理服务来配置防火墙。

过程:

1、依据数据包处理位置的不同进行分类

进行路由选择前处理数据包PREROUTING
外——内处理流入的数据包(INPUT)
内——外处理流出的数据包(OUTPUT)
通过第三方处理转发的数据包(FORWARD)
进行路由选择后处理数据包POSTROUTING

2、匹配策略规则采取的动作

ACCEPT允许通过
LOG允许通过但登记
REGECT拒绝并提示
DROP仅拒绝

3、防火墙根据安全策略定义规则对包进行处理

基本的命令参数

iptables命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功,iptables就会根据策略规则所预设的动作来处理这些流量。另外,再次提醒一下,防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误。

参数作用
-P默认策略
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-I在规则链的头部加入新规则
-D删除某一条规则
-s匹配来源地址,加!表示除这以外
-d匹配目标地址
-i 网卡名称匹配从这块网卡流入的数据
-o 网卡名称匹配从这块网卡流出的数据
-p匹配协议
–dport匹配目标端口号
–sport匹配源端口号
-j采取的动作
iptables -L                                                         #查看防火墙已有规则链
iptables -F                                                         #清空防火墙已有规则
iptables -L                                                         #查看,此时规则已清空
iptables -P INPUT DROP	                                            #将流入规则链默认权限设置为拒绝,默认拒绝不能是REGECT

规则清空的情况下默认设置为拒绝
在这里插入图片描述

iptables -L                                                         #查看,此时的默认策略为DROP
iptables -I INPUT -p icmp -j ACCEPT                                 #向INPUT链头部中添加允许ICMP流量进入的策略规则
ping -c 4 192.168.14.40                                             #此时可以ping通,但是其余的ssh什么的是不行的

此时ping通
在这里插入图片描述
ssh不通
在这里插入图片描述

在这里插入图片描述

iptables -D INPUT 1                                                 #删除INPUT规则链的第1条规则(即刚刚允许ICMP那条)
iptables -P INPUT ACCEPT                                            #把INPUT规则链默认策略设置为允许
iptables -L                                                         #查看规则链,显示Chain INPUT (policy ACCEPT),ping,ssh什么的都允许
iptables -I INPUT -s 192.168.14.0/24 -p tcp --dport 22 -j ACCEPT    #将INPUT规则链设置为只允许指定网段的主机访问本机的22端口(必须先指明协议才能指明端口号)

在这里插入图片描述

iptables -A INPUT -p tcp --dport 22 -j REJECT                       #向INPUT规则链尾部添加拒绝来自所有主机访问本机22端口的规则(结合上一条规则的效果就是只允许指定网段主机访问本机22端口,拒绝其他主机访问)
iptables -L                                                         #查看已有规则链,此时应有2条,一条允许一条拒绝
iptables -I INPUT -p tcp --dport 12345 -j REJECT                    #向INPUT规则链中添加拒绝所有人访问本机12345端口(tcp+udp)的策略规则
iptables -I INPUT -p udp --dport 12345 -j REJECT
iptables -L
iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT       #向INPUT规则链中添加拒绝192.168.10.5主机访问本机80端口(Web服务)的策略规则
iptables -L
iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT                #向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则
iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
iptables -L
service iptables save                                               #保存并让配置的防火墙策略永久生效(防火墙规则默认会在系统下一次重启时失效)

二、Firewalld防火墙

firewalld(Dynamic Firewall Manager of Linuxsystems,Linux系统的动态防火墙管理器)
拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
只需预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。

firewalld中常见的区域名称(默认为public)以及相应的策略规则如表所示。
在这里插入图片描述
(1)CLI(命令行界面)

常用参数:
在这里插入图片描述
两种模式:

运行时(Runtime)模式:
默认的firewall防火墙策略模式,又称为当前生效模式,策略会随着系统的重启会失效。
永久(Permanent)模式:
在用firewall-cmd命令正常设置防火墙策略时添加–permanent参数,配置的防火墙策略就可以永久生效。但是,使用永久生效模式设置的策略只有在系统重启之后才能自动生效。如果想让永久模式下配置的策略立即生效,需要手动执行firewall-cmd --reload命令。

[root@lizhiqiang Desktop]# firewall-cmd --get-default-zone
public                                               `查看默认区域`
[root@lizhiqiang Desktop]# firewall-cmd --get-zone-of-interface=eno16777736
public                                               `查看当前网卡所在的区域`
[root@lizhiqiang Desktop]# firewall-cmd --permanent --zone=external --change-interface=eno16777736
success                                              `在永久模式下将网卡和external区域关联,并在系统重启后永久生效`
[root@lizhiqiang Desktop]# firewall-cmd --get-zone-of-interface=eno16777736
public                                               `查看eno16777728网卡在当前的区域(应该仍为public)`
[root@lizhiqiang Desktop]# firewall-cmd --permanent --get-zone-of-interface=eno16777736
external                                             `查看eno16777728网卡在永久模式下的区域(应该为external)`
[root@lizhiqiang Desktop]# firewall-cmd --set-default-zone=public
Warning: ZONE_ALREADY_SET: public                    `把firewalld服务的当前默认区域设置为public`
[root@lizhiqiang Desktop]# firewall-cmd --get-default-zone
public                                               `查看firewall当前默认区域`

启动应急模式之前和关闭应急模式之后是ping通的(应急模式慎用)
在这里插入图片描述

[root@lizhiqiang Desktop]# firewall-cmd --panic-on
success                                              `启动应急模式,阻断一切网络连接`
[root@lizhiqiang Desktop]# firewall-cmd --panic-off
success                                              `关闭应急模式`
[root@lizhiqiang Desktop]# firewall-cmd --zone=public --query-service=ssh
yes                                                  `查询public区域当前是否允许SSH服务的流量(查到为yes)`

尝试ssh结果可以
在这里插入图片描述
在这里插入图片描述

[root@lizhiqiang Desktop]# firewall-cmd --zone=public --query-service=https
no                                                   `查询public区域当前是否允许HTTPS服务的流量(查到为no)`
[root@lizhiqiang Desktop]# firewall-cmd --permanent --zone=public --add-service=https
success                                              `添加public区域允许HTTPS服务的流量`
[root@lizhiqiang Desktop]# firewall-cmd --reload
success                                              `让firewall服务永久模式下的策略设置立即生效`
[root@lizhiqiang Desktop]# firewall-cmd --zone=public --query-service=https
yes                                                  `在public区域下查询服务https是否允许https(此时允许)`
[root@lizhiqiang Desktop]# firewall-cmd --zone=public --add-port=8080-8085/tcp
success                                              `设置public区域当前访问8080-8085端口的流量策略设置为允许`
[root@lizhiqiang Desktop]# firewall-cmd --zone=public --list-ports
8080-8085/tcp                                        `查看public区域当前允许通过的端口`
`流量转发命令格式:`
[root@lizhiqiang Desktop]# firewall-cmd --permanent --zone=public --add-forward-port=port=123:proto=tcp:toport=22:toaddr=192.168.14.40
success                                              `在永久模式public区域下将123端口的流量转发至192.168.14.40的22端口`
[root@lizhiqiang Desktop]# firewall-cmd --reload
success                                              `让firewall服务永久模式下的策略设置立即生效`

尝试成功
在这里插入图片描述
在这里插入图片描述

`使用firewall-cmd添加富规则`
[root@lizhiqiang Desktop]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.14.0/24" service name="ssh" reject"
success                                              `拒绝来自public区域中ip地址192.168.14.0/24的所有流量`
[root@lizhiqiang Desktop]# firewall-cmd --reload
success                                               `让firewall服务永久模式下的策略设置立即生效`
                                                    

已拒绝192.168.14.0/24的所有流量
在这里插入图片描述

(2)GUI(图形用户界面)

 是firewalld防火墙配置管理工具的GUI(图形用户界面)版本,几乎可以实现所有以命令行来执行的操作。

在这里插入图片描述

1:选择运行时(Runtime)模式或永久(Permanent)模式的配置。
2:可选的策略集合区域列表。
3:常用的系统服务列表。
4:当前正在使用的区域。
5:管理当前被选中区域中的服务。
6:管理当前被选中区域中的端口。
7:开启或关闭SNAT(源地址转换协议)技术。
8:设置端口转发策略。
9:控制请求icmp服务的流量。
10:管理防火墙的富规则。
11:管理网卡设备。
12:被选中区域的服务,若勾选了相应服务前面的复选框,则表示允许与之相关的流量。
13:firewall-config工具的运行状态。

SNAT是一种为了解决IP地址匮乏而设计的技术,它可以使得多个内网中的用户通过同一个外网IP接入Internet。该技术的应用非常广泛,甚至可以说我们每天都在使用,只不过没有察觉到罢了。比如,当我们通过家中的网关设备(比如无线路由器)访问本书配套站点www.linuxprobe.com时,就用到了SNAT技术。
在下图1的局域网中有多台PC,如果网关服务器没有应用SNAT技术,则互联网中的网站服务器在收到PC的请求数据包,并回送响应数据包时,将无法在网络中找到这个私有网络的IP地址,所以PC也就收不到响应数据包了。在下图2所示的局域网中,由于网关服务器应用了SNAT技术,所以互联网中的网站服务器会将响应数据包发给网关服务器,再由后者转发给局域网中的PC。

图1
在这里插入图片描述

图2
在这里插入图片描述

iptables命令:很麻烦。在图形界面Masquerading页签中勾选Masquerade zone复选框即可。

三、服务的访问控制列表

TCP Wrappers是RHEL
7系统中默认启用的一款流量监控程序,它能够根据来访主机的地址与本机的目标服务程序作出允许或拒绝的操作。换句话说,Linux系统中其实有两个层面的防火墙,第一种是前面讲到的基于TCP/IP协议的流量过滤工具,而TCP
Wrappers服务则是能允许或禁止Linux系统提供服务的防火墙,从而在更高层面保护了Linux系统的安全运行。 TCP
Wrappers服务的防火墙策略由两个控制列表文件所控制,用户可以编辑允许控制列表文件来放行对服务的请求流量,也可以编辑拒绝控制列表文件来阻止对服务的请求流量。控制列表文件修改后会立即生效,系统将会先检查允许控制列表文件(/etc/hosts.allow),如果匹配到相应的允许策略则放行流量;如果没有匹配,则去进一步匹配拒绝控制列表文件(/etc/hosts.deny),若找到匹配项则拒绝该流量。如果这两个文件全都没有匹配到,则默认放行流量。
TCP Wrappers服务的控制列表文件配置起来并不复杂,常用的参数如表所示。

在这里插入图片描述
在配置TCP Wrappers服务时需要遵循两个原则

  编写拒绝策略规则时,填写的是服务名称,而非协议名称;
  建议先编写拒绝策略规则,再编写允许策略规则,以便直观地看到相应的效果。

实例:

 先编辑/etc/host.deny文件,拒绝访问本机sshd服务的所有流量;
 再编辑/etc/hosts.allow文件,允许指定网段访问本机sshd服务。
vim /etc/hosts.deny     #编辑/etc/hosts.deny文件        
sshd:*                  #禁止所有流量访问本机sshd服务
ssh 192.168.10.10       #尝试访问本机sshd服务,发现就算是本机自身也不能访问本机sshd服务
vim /etc/hosts.allow    #编辑/etc/hosts.allow文件
sshd:192.168.10.0/24    #允许指定网段访问本机sshd服务
ssh 192.168.10.10       #尝试访问本机sshd服务,发现可以了

先查看虚拟机网卡的IP地址,查询可否ping通。
如图所示,可以
在这里插入图片描述
编辑/etc/hosts.deny配置文件
在这里插入图片描述
不能ping通,且自身主机也不行
在这里插入图片描述

编辑/etc/hosts.allow配置文件,允许指定网段访问本机sshd服务
在这里插入图片描述
自身主机成功登陆
在这里插入图片描述

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页