目录

  • 1. 防火墙管理工具的切换
  • 2. iptables的使用
  • 3.关于firewalld的域
  • 4.firewalld的基本管理命令
  • 5.firewalld的高级规则
  • 6.firewall中的NAT规则


防火墙是一组规则。当数据包进出受保护的网络区域时,进出内容(特别是关于其来源、目标和使用的协议等信息)会根据防火墙规则进行检测,以确定是否允许其通过。
iptables 是 Linux 系统上管理防火墙规则的工具。另一方面,firewalld 也是 Linux 机器上管理防火墙规则的工具。
iptables和firewalld将用户的安全设定执行到内核的netfilter中,他们的作用都是用于维护规则,而真正使用规则干活的是netfilter。

1. 防火墙管理工具的切换

Redhat Linux系统中默认使用firewalld

1.1、 firewalld切换到iptables

①:安装iptables软件 :dnf install iptables-services.x86_64 -y ②:关闭firewalld服务,设定开机不自启 ;还可以更深度的注销firewalld服务(注销服务表示:系统重启后不会启动服务,也无法使用start ,enable 操作)

redis linux 防火墙放行 linux防火墙策略_源地址


③:systemctl enable --now iptables ##开启iptables服务,并设定开机自启

redis linux 防火墙放行 linux防火墙策略_redis linux 防火墙放行_02


1.2、iptables切换到firewalld

①:关闭iptables,设定开机不自启;注销服务

redis linux 防火墙放行 linux防火墙策略_linux_03


②:取消对firewalld服务的注销,否则无法执行开启操作;开启firewalld服务

redis linux 防火墙放行 linux防火墙策略_iptables_04

2. iptables的使用

2.1、iptables3表5链
五链: 链是规则的集合

链的名称

解释

PREROUTING

数据包进入路由表之前,对数据包做路由选择前应用此链路中的规则

INPUT

进来的数据包应用此规则链中的规则

FORWARD

转发数据包时应用此规则链中的规则

OUTPUT

外出的数据包应用此规则链中的规则

POSTROUTING

数据包做路由选择后发送后到网卡接口之前应用此链中的规则

三表: 表是链的集合

表的名称

存放的链

Filter

INPUT;OUTPUT;FORWARD(过滤数据包)

NAT

PREROUTING;POSTOUTING ;INPUT ;OUTPUT( 用于网络地址转换 )

Mangle

INPUT ;OUTPUT ;FORWARD ;POSTROUTING ;PREROUTING

2.2、iptables命令

  • iptables策略记录文件 :/etc/sysconfig/iptables
  • iptables命令可对防火墙规则做出临时更改,重启iptables服务后,还原到原始设定
  • 在对iptables规则更改后,可使用以下任意一条命令永久保存策略
  • iptables-save > /etc/sysconfig/iptables
  • service iptables save

iptables 命令常用参数

解释

-t

指定表名称(不知道表名称时,默认修改filter表)

-n

不做解析

-L

查看

-A

添加策略(策略顺序依次叠加)

-P

指定协议

- -dport

目的端口号

-s

源地址

-j

指定动作:ACCEPT ##允许; DROP ##丢弃 ; REJECT ##拒绝 ; SNAT ##源地址转换 ; DNAT

-N

新建链

-E

更改链名称

-X

删除链

-D

删除指定规则

-I

插入规则(可指定具体的位置,默认在第一条插入)

-R

更改规则

-P

更改默认规则(只能设定ACCEPT,DROP)

-F

清除所有规则

-m

扩展各种模块,比如state模块

注意: iptables执行规则时,是从规则表中从上至下顺序执行的,如果遇到匹配的规则,执行后就不再往下检查了,如果没遇到匹配的规则,就一条一条往下进行匹配,当所有规则读取完成后,再执行默认规则。

示例: 在192.168.1.19主机上设定防火墙策略

示例1:

iptables -F ##清空所有规则;

iptables -A INPUT -j REJECT ##增加一条拒绝所有进来的数据包的规则;

iptables -A INPUT -s 192.168.1.29 -p TCP --dport 22 -j ACCEPT ##增加一条数据包源地址是192.168.1.29主机,目的端口号为22,允许通过的规则;

在192.168.1.29主机ssh远程连接192.168.1.19主机,连接被拒绝,因为192.168.1.29主机符合第一条规则中的all条件,规则被执行,防火墙检测不再往下读取策略。

redis linux 防火墙放行 linux防火墙策略_源地址_05


redis linux 防火墙放行 linux防火墙策略_redis linux 防火墙放行_06


示例2:

iptables -F ##清空所有规则;

iptables -A INPUT -s 192.168.1.29 -p TCP --dport 22 -j ACCEPT ##增加一条数据包源地址是192.168.1.29主机,目的端口号为22,允许通过的规则;

iptables -I INPUT -s 192.168.1.29 -p TCP --dport 80 -j ACCEPT ##插入一条数据包源地址是192.168.1.29主机,目的端口号为80,允许通过的规则(插入后规则顺序为1);

iptables -P INPUT DROP ##修改默认规则为DROP;

redis linux 防火墙放行 linux防火墙策略_linux_07


在192.168.1.29主机ssh远程连接192.168.1.19主机,匹配第二条规则,连接成功 ;在192.168.1.29主机ping192.168.1.19主机,不符合设定的两条规则,执行默认规则,连接状态为DROP,无反应。

redis linux 防火墙放行 linux防火墙策略_iptables_08


2.3、state模块

state模块是iptables的扩展模块,可以让iptables实现 连接追踪机制 ,它把’‘连接’'分为四种状态。通过state模块判断报文是为了回应我们之前发出的报文还是主动向我们发送的报文,可以防止恶意攻击主动连接到你的主机;还可对RELATED,ESTABLISHED,我们所信任的数据包,指定防火墙规则,避免多条规则检测等待,提高数据传输效率。

数据包状态

解释

NEW

这个数据包是一条连接收到的第一个数据包

ESTABLISHED状态

正在建立的连接,只要一个数据包发送并接到应答,那么这个连接中的其他数据包的状态就为ESTABLISHED

RELATED

RELATED状态数据包是指被动产生的响应数据包,而且这个数据包不属于现在任何连接的数据包,是和一个已建立的连接相关的

INVALID状态

一个包无法被识别,或者这个包没有任何状态,一般这种数据包都是被拒绝的

示例:

iptables -I INPUT -m state --state RELATED,ESTABLISHED -j REJECT ##设定状态为RELATED,ESTABLISHED的数据包拒绝通过;

在192.168.1.29主机上ping192.168.1.19主机,第一条数据包状态为NEW,采用默认规则,通过防火墙,连接成功,第二条数据包状态为ESTABLISHED,数据包被防火墙拒绝。

redis linux 防火墙放行 linux防火墙策略_iptables_09


2.4、nat表中的地址转换

双网卡主机:192.168.1.19 ; 172.25.254.19 ;开启内核路由转发功能,在这台主机上设定iptables;

redis linux 防火墙放行 linux防火墙策略_iptables_10


redis linux 防火墙放行 linux防火墙策略_iptables_11


192.168.1.29主机, 172.25.254.39主机 ,均作为测试主机

SNAT源地址转换:

①:在172.25.254.39主机上设定网关为 172.25.254.19(与双网络卡主机iP2一致),使其可以和192.168.1.19 通信;

redis linux 防火墙放行 linux防火墙策略_redis linux 防火墙放行_12


redis linux 防火墙放行 linux防火墙策略_iptables_13


②:在双网卡主机上设定iptables策略:iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.1.19 ##在nat表中添加路由转发之后,把从ens160网络接口出去的数据包源地址转换成 192.168.1.19的规则;

redis linux 防火墙放行 linux防火墙策略_源地址_14


③:在172.25.254.39主机上测试,可以ping通192.168.1.29主机,也可以ssh 远程连接192.168.1.29主机;

redis linux 防火墙放行 linux防火墙策略_redis linux 防火墙放行_15


④:在192.168.1.29主机上查看登陆者的信息,是192.168.1.19主机而不是172.25.254.39。

redis linux 防火墙放行 linux防火墙策略_firewall_16


DNAT目的地址转换:

①:在双网卡主机上设定iptables策略:iptables -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 172.25.254.39 ##在nat表中添加路由转发之前,把从ens160网络接口进来的数据包的目的地址转换为 172.25.254.39

redis linux 防火墙放行 linux防火墙策略_linux_17


②:在192.268.1.29主机上ssh 远程登录 192.168.1.19主机,登录成功后,查看当前主机ip,实际上连接的是172.25.254.39主机

redis linux 防火墙放行 linux防火墙策略_linux_18

3.关于firewalld的域


说明

trusted

接受所有的网络连接

home

用于家庭网络;允许接受ssh mdns ipp-client samba-client dhcp-client

work

工作网络 ; ssh ipp-client dhcp-cilent

public

公共网络; ssh dhcp-client

dmz

军级网络 ;ssh

block

拒绝所有

drop

丢弃 ;所有数据全部丢弃无任何回复

internal

内部网络; ssh mdns ipp-client samba-client dhcp-client

external

ipv4网络地址伪装转发; sshd

4.firewalld的基本管理命令

  • 火墙配置目录 : /etc/firewalld
  • 火墙模块目录 : /lib/firewalld

命令

作用

firewall-cmd --state

查看火墙状态

firewall-cmd --get-active-zones

查看火墙中生效的域

firewall-cmd --get-default-zone

查看默认域

firewall-cmd --list-all

查看默认域中的火墙策略

firewall-cmd --list-all --zone=work

查看指定域的火墙策略

firewall-cmd --set-default-zone=trusted

设定默认域

firewall-cmd --get-services

查看所有可以设定的服务

firewall-cmd --permanent --remove-service=cockpit

移除服务( --permanent #永久)

firewall-cmd --reload

重新加载火墙的规则配置

firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block

指定数据来源访问指定域

firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block

删除自定域中的数据来源

firewall-cmd --permanent --remove-interface=ens224 --zone=public

删除指定域的网络接口

firewall-cmd --permanent --add-interface=ens224 --zone=block

添加指定域的网络接口

firewall-cmd --permanent --change-interface=ens224 --zone=public

更改网络接口到指定域

示例:

①:基本查看命令

redis linux 防火墙放行 linux防火墙策略_源地址_19


redis linux 防火墙放行 linux防火墙策略_linux_20


redis linux 防火墙放行 linux防火墙策略_redis linux 防火墙放行_21


redis linux 防火墙放行 linux防火墙策略_redis linux 防火墙放行_22


②:在192.168.1.19主机上指定192.168.1.10/24网段的主机访问drop域;在192.168.1.29主机上ping192.168.1.19主机,数据包被丢弃,无反应

redis linux 防火墙放行 linux防火墙策略_源地址_23


redis linux 防火墙放行 linux防火墙策略_iptables_24


③:添加172.25.254.19IP对应的网络接口ens224到block域中;在172.25.254.29主机上ping172.25.254.19,数据包被拒绝

redis linux 防火墙放行 linux防火墙策略_redis linux 防火墙放行_25


redis linux 防火墙放行 linux防火墙策略_firewall_26

5.firewalld的高级规则

命令写法相似于iptables命令

示例:

在192.168.1.19主机上设定只有192.168.1.29主机可以访问它的22端口,其他均不允许

redis linux 防火墙放行 linux防火墙策略_redis linux 防火墙放行_27


在192.168.1.29主机上ping192.168.1.19主机,访问被拒绝;但是可以在192.168.1.29主机上ssh远程登录192.168.1.19主机

redis linux 防火墙放行 linux防火墙策略_firewall_28

6.firewall中的NAT规则

双网卡主机:192.168.1.19 ; 172.25.254.19 ;在这台主机上设定火墙规则;

192.168.1.29主机, 172.25.254.29主机 ,均作为测试主机;

SNAT源地址转换:

①:在双网卡主机开启地址伪装功能 :firewall-cmd --add-masquerade --permanent

redis linux 防火墙放行 linux防火墙策略_源地址_29


②:在172.25.254.29主机上设定网关为172.25.254.19;ssh远程连接192.168.1.29主机,登录成功;

redis linux 防火墙放行 linux防火墙策略_firewall_30


③:在192.168.1.29主机查看到登录用户的IP为192.168.1.19而不是172.25.254.29

redis linux 防火墙放行 linux防火墙策略_linux_31


DNAT目的地址转换:

①:在双网卡主机添加端口转发规则:firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toaddr=172.25.254.29 ##把访问22端口的数据包的目的地址转换为172.25.254.29;

redis linux 防火墙放行 linux防火墙策略_源地址_32


②:在192.168.1.29主机ssh远程登录192.168.1.19主机,登录成功后查看ip,实际上登录的是172.25.254.29主机

redis linux 防火墙放行 linux防火墙策略_iptables_33