目录
- 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 操作)
③:systemctl enable --now iptables
##开启iptables服务,并设定开机自启
1.2、iptables切换到firewalld
①:关闭iptables,设定开机不自启;注销服务
②:取消对firewalld服务的注销,否则无法执行开启操作;开启firewalld服务
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条件,规则被执行,防火墙检测不再往下读取策略。
示例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;
在192.168.1.29主机ssh
远程连接192.168.1.19主机,匹配第二条规则,连接成功 ;在192.168.1.29主机ping
192.168.1.19主机,不符合设定的两条规则,执行默认规则,连接状态为DROP,无反应。
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主机上ping
192.168.1.19主机,第一条数据包状态为NEW,采用默认规则,通过防火墙,连接成功,第二条数据包状态为ESTABLISHED,数据包被防火墙拒绝。
2.4、nat表中的地址转换
双网卡主机:192.168.1.19 ; 172.25.254.19 ;开启内核路由转发功能,在这台主机上设定iptables;
192.168.1.29主机, 172.25.254.39主机 ,均作为测试主机
SNAT源地址转换:
①:在172.25.254.39主机上设定网关为 172.25.254.19(与双网络卡主机iP2一致),使其可以和192.168.1.19 通信;
②:在双网卡主机上设定iptables策略:iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.1.19
##在nat表中添加路由转发之后,把从ens160网络接口出去的数据包源地址转换成 192.168.1.19的规则;
③:在172.25.254.39主机上测试,可以ping
通192.168.1.29主机,也可以ssh
远程连接192.168.1.29主机;
④:在192.168.1.29主机上查看登陆者的信息,是192.168.1.19主机而不是172.25.254.39。
DNAT目的地址转换:
①:在双网卡主机上设定iptables策略:iptables -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 172.25.254.39
##在nat表中添加路由转发之前,把从ens160网络接口进来的数据包的目的地址转换为 172.25.254.39
②:在192.268.1.29主机上ssh
远程登录 192.168.1.19主机,登录成功后,查看当前主机ip,实际上连接的是172.25.254.39主机
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 | 更改网络接口到指定域 |
示例:
①:基本查看命令
②:在192.168.1.19主机上指定192.168.1.10/24网段的主机访问drop域;在192.168.1.29主机上ping
192.168.1.19主机,数据包被丢弃,无反应
③:添加172.25.254.19IP对应的网络接口ens224到block域中;在172.25.254.29主机上ping
172.25.254.19,数据包被拒绝
5.firewalld的高级规则
命令写法相似于iptables命令
示例:
在192.168.1.19主机上设定只有192.168.1.29主机可以访问它的22端口,其他均不允许
在192.168.1.29主机上ping
192.168.1.19主机,访问被拒绝;但是可以在192.168.1.29主机上ssh
远程登录192.168.1.19主机
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
;
②:在172.25.254.29主机上设定网关为172.25.254.19;ssh
远程连接192.168.1.29主机,登录成功;
③:在192.168.1.29主机查看到登录用户的IP为192.168.1.19而不是172.25.254.29
DNAT目的地址转换:
①:在双网卡主机添加端口转发规则:firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toaddr=172.25.254.29
##把访问22端口的数据包的目的地址转换为172.25.254.29;
②:在192.168.1.29主机ssh
远程登录192.168.1.19主机,登录成功后查看ip,实际上登录的是172.25.254.29主机