0%

iptables与firewalld防火墙

iptables与firewalld防火墙

了解防火墙管理工具

防火墙虽有软件或硬件之分但主要功能还是依据策略对外部请求进行过滤,成为公网与内网之间的保护屏障,防火墙会监控每一个数据包并判断是否有相应的匹配策略规则,直到满足其中一条策略规则为止,而防火墙规则策略可以是基于来源地址,请求动作或协议来定制的,最终仅让合法的用户请求流入到内网中,其余的均被丢弃

在红帽RHEL7系统中firewalld服务取代了iptables服务,但依然可以使用iptables命令来管理内核的netfilter。

但其实iptables服务与firewalld服务都不是真正的防火墙,它们都只是用来定义防火墙规则功能额度”防火墙管理工具”,将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能,所以其实在配置规则的思路上是完全一致的。

规则链与策略

在iptables命令中设置数据过滤或处理数据包的策略叫规则,将多个规则合成一个链

对应到iptables命令中常见额度控制类型有:

ACCEPT:允许通过

LOG:记录日志信息,然后传给下一条规则继续匹配

REJECT:拒绝通过,必要时会给出提示

DROP:直接丢弃,不给出任何回应

其中REJECT和DROP的操作都是将数据包拒绝,但REJECT会再回复一条”您的信息我已受到,但被扔掉了”

而规则链则依据处理数据包的位置不同而进行分类:

PREROUTING:在进行路由选择前处理数据包

INPUT:处理出站的数据包

OUTPUT:处理转发的数据包

FORWARD:处理转发的数据包

POSTROUTING:在进行路由选择后处理数据包

iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,那么规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记

nat表:修改数据包中的源、目标IP地址或端口

filter表:确定是否放行该数据包(过滤)

规则表的先后顺序:raw > mangle > nat > filter

规则链的先后顺序:

入站顺序:PREROUTING > INPUT

出站顺序:OUTPUT > POSTOUTING

转发顺序:PREROUTING > FORWARD > POSTROUTING

还有三点注意事项:

1、没有指定规则表则默认指filter表

2、不指定规则链则指表内所有的规则链

3、在规则链中匹配规则时会依次检查,匹配即停止(LOG规则例外),若没匹配项则按链的默认状态处理

基本的命令参数

iptables命令用于管理防火墙的规则策略

格式为:iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

SNAT与DNAT

SNAT即源地址转换技术,能够让多个内网用户通过一个外网地址上网

DNAT即目的地址转换技术,能够让往外IP用户访问局域网内不同的服务器

firewalld防火墙

firewalld服务是红帽RHEL7系统中默认的防火墙管理工具,特点是拥有运行配置与永久配置选项且能够支持动态更新以及“zone”的区域功能概念。

区域概念及作用

防火墙的网络区域定义了网络连接的可信等级,我们可以根据不同场景来调用不同的firewalld区域

区域 默认规则策略
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 拒绝流入的数据包,除非与输出流量数据包相关

默认区域是public

字符管理工具

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

firewalld服务有两份规则策略配置记录:

    Runtime:当前正在生效额度

    Permanent:永久生效的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
1、查看当前的区域:
firewall-cmd --get-default-zone

2、查看eno16777728网卡的区域:
firewall-cm --get-zone-of-interface=eno16777728

3、在public中分别查询ssh与http服务是否被允许:
firewall-cmd --zone=public --query-service=shh
firewall-cmd --zone=public --query-service=http

4、设置默认规则为dmz:
firewall-cmd --set-default-zone=dmz

5、让“永久生效”的配置文件立即生效:
firewall-cmd --reload

6、启动/关闭应急状况模式,阻断所有网络连接:
应急状况模式启动后会禁止所有的网络连接,一切的请求也都会拒绝,当心,请慎用
firewall-cmd --panic-on
firewall-cmd --panic-off

7、允许https服务流量通过public区域,要求立即生效且永久生效:
方法1:分别设置当前生效与永久有效的规则记录
firewall-cmd --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-service=https
方法2、设置永久生效的记录后读取记录
firewall-cmd --permanent --zone=puvlic --add-service=https
firewall-cmd --reload

8、不再允许http服务流量通过public区域,要求立即生效且永久生效:
firewall-cmd --permannent --zone=public --remove-service=http
firewall-cmd --reload

9、允许8080和8081端口流量通过public区域,立即生效且永久生效:
firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
firewall-cmd --reload

10、查看模拟9中端口操作是否成功
firewall-cmd --zone-public --list-ports
firewall-cmd --permannent --zone=public --list-ports

11、将eno16777728网卡的区域修改为external,重启后生效:
firewall-cmd permannent --zone=external --change-interface=eno16777728
firewall-cmd --get-zone-of-interface=eno16777728

12、设置富规则,拒绝192.168.10.0/25网段的用户访问ssh服务
firewall-cmd --permannent --zone=public --add-rich-rule="rule
family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"

服务的访问控制列表

Tcp_wrappers(即Transmission Control Protocol Wrappers)是一款基于IP层的ACL访问控制列表流量监控程序,它能够根据来访主机地址与本机目标服务程序做允许或拒绝规则,控制列表修改后会立即生效,系统将会检查允许规则,如果匹配允许则直接放行流量,若拒绝规则中匹配则直接拒绝,都不匹配默认也会放行

允许名单:/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后缀 .linux.com 所有DNS后缀为.linux.com的主机
指定主机名称 test.linux.com 主机名称为test.llinux.com的主机
指定所有客户端 ALL 所有主机全部包括在
1
2
3
4
5
6
7
1、限制只有192.168.10.0/24网段的主机可以访问本机的httpd服务:
编辑允许规则:
vim /etc/hosts.allow
httpd:192.168.10.
拒绝其他所有的主机:
vim /etc/hosts.deny
httpd:*

使用ssh服务管理远程主机