Linux中的火墙策略

1 netfilter简介

Natfilter 是集成到linux内核协议栈中的一套防火墙系统,用户可通过运行在用户空间的工具来把相关配置下发给Netfilter 。
Netfilter 提供了整个防火墙的框架,各个协议基于Netfilter 框架来自己实现自己的防火墙功能。每个协议都有自己独立的表来存储自己的配置信息,他们之间完全独立的进行配置和运行。

  1. Netfilter 中包含一些表(table),不同的表用来存储不同功能的配置信息。
  2. 每个table 里有多个chain,chain表示对报文的拦截处理点。
  3. 每个chain包含一些用户配置的rule,一条rule包含了一个或多个匹配规则(match)和一个执行动作(target)。如果报文符合匹配规则后,需要根据该执行动作(target)来处理报文。
    在这里插入图片描述

2 火墙管理工具的切换

在rhel8中默认使用的是firewalld
(1)iptables——>firewalld

在这里插入图片描述
(2)firewalld——>iptables
在这里插入图片描述
3 iptables的使用

(1)iptables的下载:dnf install iptables-services.x86_64 -y

在这里插入图片描述
(2)启动iptables服务:systemctl start iptables.service
(3)查看iptables的状态:systemctl status iptables.service
在这里插入图片描述
(4)火墙策略的永久保存

  • iptables策略记录文件:/etc/sysconfig/iptables
  • 两种永久保存策略

1.手动指定路径及文件名: iptales-save > /etc/sysconfig/iptables
2. 自动保存策略到火墙策略记录文件:service iptables save
在这里插入图片描述

4 火墙默认策略

4.1 iptables默认的3张表

(1)filter表

  • 三个链:INPUT、FORWARD、OUTPUT
  • 作用:过滤数据包 内核模块:iptables_filter

(2)Nat表

  • 三个链:PREROUTING、POSTROUTING、OUTPUT
  • 作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat

(3)Mangle表

  • 五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
  • 作用:修改数据包的服务类型

4.2 iptables默认的5条链

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

规则链功能
INPUT进来的数据包应用此规则链中的策略
OUTPUT外出的数据包应用此规则链中的策略
FORWARD转发数据包时应用此规则链中的策略
PREROUTING转发数据包时应用此规则链中的策略(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

5 iptables命令

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
iptables规则设定后立即生效

5.1 iptables的参数

	-t		##指定表名称
	-n		##不做解析
	-L		##查看
	-A		##添加策略
	-p		##协议
	--dport		##目的地端口
	-s		##来源
	-j		##动作
			ACCEPT	##允许
			DROP	##丢弃
			REJECT	##拒绝
			SNAT	##源地址转换
		DNAT	##目的地地址转换
	-N		##新建链
	-E		##更改链名称
	-X		##删除链
	-D		##删除规则
	-I		##插入规则
	-R		##更改规则
	-P		##更改默认规则

(1)查看规则表的信息

  • iptables -t filter -L:查看filter表的规则信息

在这里插入图片描述

  • iptables -t filter -nL:查看filter表的信息不做解析

在这里插入图片描述

(2)刷新表的规则

  • 刷新nat表的规则:iptables -t nat -F

在这里插入图片描述

  • 刷新所有表的规则:iptables -F

在这里插入图片描述

(3)添加表的规则

	iptables -A INPUT  -s 172.25.254.144 -p tcp --dport 22 -j DROP
	  ## -A 插入规则 -s 来源   -p  协议   --dport  目的地端口   -j动作 
	  ##没有指定表时默认对filter表操作

在这里插入图片描述

测试结果:
在这里插入图片描述

(4)插入表的规则

  • 插入规则

     iptables -I INPUT 1  -s 172.25.254.144 -p tcp --dport 22 -j REJECT
    

在这里插入图片描述
144主机的测试结果:
在这里插入图片描述
(5)修改表中链的规则

	iptables -R INPUT 1 -s 172.25.254.144 -p tcp --dport 22 -j  REJECT
	## 该主机拒绝172.25.254.144访问22端口,即拒绝172.25.254.144远程连接该主机

在这里插入图片描述

测试结果:
在这里插入图片描述

(6)设置默认策略:默认策略一般只有两种(DROP|ACCEPT)
iptables -P INPUT DROP:把默认规则给拒绝了,并且没有定义哪个动作,所有关于外界连接都被拒绝了
在这里插入图片描述
测试:
在这里插入图片描述

  • 新建链: iptables -N linux
  • 修改规则链的名称:iptables -E linux westos
  • 删除链:iptables -X westos

在这里插入图片描述

5.2 数据包状态

  • 添加一条入站规则,对进来的包的状态进行检测,已经建立tcp连接的包以及该连接相关的包允许通过:

     iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
       ####    RELATED:建立过连接的
       ####    ESTABLISHED:正在连接的
      ####     NEW:新的
    
  • 允许回环接口访问:iptables -A INPUT -i lo -m state --state NEW -j ACCEPT

  • 允许防火墙本机对外开放TCP端口22

     iptables -A INPUT -p tcp --dport 22 -m state  --state NEW -j ACCEPT
    
  • 防火墙拒绝所有的访问:iptables -A INPUT -j REJECT

在这里插入图片描述

5.3 nat设置路由转换

在任何一个IP数据包中,都会有Source IP Address与Destination IP Address这两个字段,数据包所经过的路由器也是根据这两个字段是判定数据包是由什么地方发过来的,它要将数据包发到什么地方去。iptables的DNAT与SNAT就是根据这个原理,对Source IP Address与Destination IP Address进行修改。
在这里插入图片描述

图中正菱形的区域是对数据包进行判定转发的地方。在这里,系统会根据IP数据包中的destination ip address中的IP地址对数据包进行分发。如果destination ip adress是本机地址,数据将会被转交给INPUT链。如果不是本机地址,则交给FORWARD链检测。

5.3.1 双网卡主机的配置

  • 网卡enp1s0:

在这里插入图片描述

  • 网卡enp8s0:

在这里插入图片描述
在这里插入图片描述
(1)SNAT:源网络地址转换,SNAT就是重写包的源IP地址。

  • SNAT 只能用在nat表的POSTROUTING链里:iptables -t nat -A POSTROUTING -o enp1s0-j SNAT --to-source 172.25.254.20 , 告诉系统把即将要流出本机的数据的source ip address修改成为172.25.254.20

(2)DNAT:目的网络地址转换,重写包的目的IP地址:iptables -t nat -A PREROUTING -i enp1s0 -j DNAT --to-dest 1.1.1.1

在这里插入图片描述

(3)确认打开内核路由转发功能:sysctl -a | grep ip_forward
在这里插入图片描述

5.3.2 单网卡主机的配置

(1)单网卡主机的网卡配置文件
在这里插入图片描述
(2)设置单网卡主机的网关和ip
在这里插入图片描述
在这里插入图片描述

5.3.3 测试

(1)单网卡主机测试:

可以ping通真机,单网卡主机登陆真机时,在真机上查看登陆过真机的设备,显示的是172.25.254.20主机登陆
在这里插入图片描述

(2)真机测试:

真机可以ping通单网卡主机,而且当真机登陆172.25.254.20时,实际登陆的主机是1.1.1.1
在这里插入图片描述

6 firewalld

  • 锁定 iptables服务:systemctl mask iptables.service
  • 开启systemctl服务: start firewalld.service

在这里插入图片描述

6.1 firewalld的域

作用
trusted接受所有的网络连接
trusted用于家庭网络,允许接受ssh mdns ipp-client samba-client dhcp-client
work工作网络 ssh ipp-client dhcp-client
public公共网络 ssh dhcp-client
dmz军级网络 ssh
block拒绝所有
drop丢弃,所有数据全部丢弃无任何回复
internal内部网络 ssh mdns ipp-client samba-client dhcp-client
externalipv4网络地址伪装转发 sshd

关于firewalld的设定原理及数据存储

  • /etc/firewalld/firewalld.conf :火墙配置文件
  • /lib/firewalld :火墙模块目录
    在这里插入图片描述

6.2 firewalld的管理命令

(1) 查看火墙状态:firewall-cmd --state
(2) 查看当前火墙中生效的域:firewall-cmd --get-active-zones
(3)查看默认域:firewall-cmd --get-default-zone
(4)查看默认域中的火墙策略:firewall-cmd --list-all

在这里插入图片描述

(5)查看指定域的火墙策略:firewall-cmd --list-all --zone=work
(6)设定默认域:firewall-cmd --set-default-zone=trusted
(7) 查看所有可以设定的服务:firewall-cmd --get-services

在这里插入图片描述

(8) 在火墙中添加http服务:firewall-cmd --permanent --add-service=http

  • 重新加载防火墙:firewall-cmd --reload
  • 查看默认域中的火墙策略:firewall-cmd --list-all

在这里插入图片描述

(9)移除防火墙中的cockpit 服务:firewall-cmd --permanent --remove-service=cockpit

  • 重新加载防火墙:firewall-cmd --reload

在这里插入图片描述

(10)指定数据来源访问指定域:firewall-cmd --permanent --add-source=1.1.1.0/24 --zone=block

  • 重新加载防火墙:firewall-cmd --reload
  • 查看默认域中的火墙策略:firewall-cmd --list-all
  • 查看当前火墙中生效的域:firewall-cmd --get-active-zones

在这里插入图片描述
(11)删除自定义域中的数据来源:firewall-cmd --permanent --remove-source=1.1.1.0/24 --zone=block

  • 重新加载防火墙: firewall-cmd --reload
  • 查看默认域中的火墙策略:firewall-cmd --list-all

在这里插入图片描述

(12)添加指定域的网络接口:firewall-cmd --permanent --add-interface=ens1 --zone=public

  • 重新加载防火墙:firewall-cmd --reload
  • 查看当前火墙中生效的域:firewall-cmd --get-active-zones

在这里插入图片描述
(13)更改网络接口到指定域:firewall-cmd --permanent --change-interface=ens1 --zone=block

  • 重新加载防火墙:firewall-cmd --reload
  • 查看当前火墙中生效的域:firewall-cmd --get-active-zones

在这里插入图片描述

(14)删除指定域的网络接口 :firewall-cmd --permanent --remove-interface=ens1 --zone=block

  • 重新加载防火墙:firewall-cmd --reload
  • 查看当前火墙中生效的域:firewall-cmd --get-active-zones

在这里插入图片描述

6.2 firewalld的高级规则

(1)添加高级规则

	firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.44 -p tcp --dport 22 -j REJECT
  • 查看规则: firewall-cmd --direct --get-all-rules

在这里插入图片描述

  • 测试:172.25.254.44主机不能连接该主机

在这里插入图片描述

(2)删除高级规则

	firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.44 -p tcp --dport 22 -j REJECT
  • 查看规则: firewall-cmd --direct --get-all-rules
    在这里插入图片描述

6.3 nat设置路由转换

双网卡主机

(1)SNAT

  • 打开地址伪装功能:firewall-cmd --permanent --add-masquerade
  • 重新家在防火墙:firewall-cmd --reload

在这里插入图片描述
(2)DNAT:目的网络地址转换

	 firewall-cmd --permanent --remove-forward-port=port=22:proto=tcp:toaddr=1.1.1.1
	  ###       --permanent 是此条命令永久生效,不会随firewall的重启而失效
	  ###      --add-forward-port 添加端口转发操作
	  ###       port=20 被转发端口为20端口
	  ###        proto=tcp 转发协议为tcp协议
	  ###       toaddr=1.1.1.1  转发目标ip 不设置则为默认的本机ip

在这里插入图片描述
(3)测试:

  • 真机可以ping通ip为1.1.1.1的主机

在这里插入图片描述

  • 真机远程登录到172.25.254.20时,自动跳转登陆到目的主机1.1.1.1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值