linux下的防火墙Netfilter配置:iptables的了解与使用(详细)

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下的防火墙Netfilter配置:iptables的了解与使用(详细)相关的知识,希望对你有一定的参考价值。

什么是iptables

防火墙的基础知识:点击查看

linux系统在内核外加了层访问限制,这个访问限制就是 Netfilter数据包过滤机制(也就是linux的防火墙)。
在Linux上面我们使用内核内建了Netfilter 这个机制,Netfilter 利用一些数据包过滤的规则设置,来定义出什么数据可以接收,什么数据需要剔除,以达到保护主机的目的。
Netfilter 提供了iptables这个软件来作为防火墙数据包过滤的命令。通过iptables写入访问策略,而iptables又是通过表格和链管理这些策略的,写入表格可以用iptables或者firewalld软件


官方定义:
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置


防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。
在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

iptables的三表五链

我上篇文章详细写了,可以点击蓝字查看

iptables规则的读取顺序

自上而下,从第一条开始读,符合规则就直接执行且不再往下读,不符合规则就继续读下一条,如此继续。

实验环境配置

我们需要一台双网卡主机,一台单网卡主机。
双网卡:luckya主机
先添加一块网卡
在这里插入图片描述
在这里插入图片描述
然后对两块网卡进行设置:

网卡ens160:
nm-connection-editor
ip设为静态192.168.187.129

网卡ens224:
nm-connection-editor
ip设为静态192.168.0.100

两个网卡更改完后都需重启网络
nmcli connection reload
nmcli connection up ens160
nmcli connection up ens224

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单网卡:luckyb主机

网卡ens160:
nm-connection-editor
ip设为静态192.168.0.200
网关设为luckya主机的第二块网卡ens224上的ip保证两个主机可以互相通信

网卡更改完后需重启网络
nmcli connection reload
nmcli connection up ens160

在这里插入图片描述
测试设置是否生效:
两台主机互相ping一下,如图,成功!
在这里插入图片描述
在这里插入图片描述

防火墙管理工具切换到iptables

在rhel8中默认使用的是firewalld,所以我们需要下载并切换为iptables。

firewalld---切换到--->iptables
dnf install iptables-services -y
systemctl stop firewalld
systemctl disable firewalld 
systemctl mask firewalld 			
systemctl enable --now iptables

iptales ---切换到---> fiewalld 
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl enable --now firewalld

下载并开启iptables:
在这里插入图片描述

iptables命令及简单使用

语法:
iptables [选项] [参数]
iptables
		-t 		#指定表名称,不指定这个参数默认是filter表
		-n 		#不做解析,保留ip
		-L 		#查看
		-A 		#添加策略
		-p 		#协议
		-m		#状态
		--dport #目的地端口
		-s 		#来源
		-j 		#动作
			ACCEPT 	#允许
			DROP 	#丢弃
			REJECT 	#拒绝
			SNAT 	#源地址转换
			DNAT 	#目的地地址转换
		-N 		#新建链
		-E 		#更改链名称
		-X 		#删除链
		-D 		#删除规则
		-I 		#插入规则
		-R 		#更改规则
		-P 		#更改默认规则

查看表规则
#prot是protocol协议
在这里插入图片描述
添加删除规则
在这里插入图片描述
添加/改名/删除链
在这里插入图片描述

防火墙策略的永久保存

我们使用iptables进行设置时,都是临时的,关机后就会重启恢复到默认,需要保存才不会让设置重置。

/etc/sysconfig/iptables 	#iptables 策略记录文件

永久保存策略两个方式(两个命令):
1、iptales-save > /etc/sysconfig/iptables
2、service iptables save

iptables设置规则使ssh只允许特定用户连接

先设置一个丢弃所有数据包的规则:
iptables -A INPUT -j DROP
然后在单网卡主机测试,如下图会一直没有回应

在这里插入图片描述

filter表INPUT链插入第一条规则,允许22端口的数据包:
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
##如果直接-A加规则会是第二条规则,那么数据包来了后读到第一条直接被丢弃,所以要用-I插入

然后在单网卡主机测试,ssh连接成功!

在这里插入图片描述
在这里插入图片描述

更改filter表INPUT链第一条规则使特定网段的才可以连接:
iptables -R INPUT 1 -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
##现在只有192.168.0.0/24网段的ip可以连

在这里插入图片描述

iptables设置规则不重复过滤数据包

防火墙在进行数据包过滤时如果规则有几万条,每一个数据包都要从头读到尾那么必然会影响过滤速度,添加状态检测会提高效率,比如在第一条添加规则检查这个包是不是以前建立过连接的,如果是,直接让它过,如果不是再往下读,这样重复的包就不会重复过滤。

iptables的数据包状态

数据包状态
RELATED 			#建立过连接的
ESTABLISHED 		#正在连接的
NEW 				#新的连接

设置步骤

filter表INPUT链进行设置:
iptables -F		#清空之前设置的规则
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT	#添加状态检测,连接过的和正在连接的直接允许过
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT	#新的连接里自己访问自己的都允许通过(lo回环接口)
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT	#新的连接里22端口的访问都允许
iptables -A INPUT -m state --state NEW-j REJECT 	#除了上面之外的新连接都拒绝

service iptables save		#保存规则

在这里插入图片描述

iptables设置规则做网关使内网能访问外网

nat表就是用来做地址转换的,我们要让单网卡主机(内网主机)能通过我们的双网卡主机(网关)访问外网,所以我们在nat表里进行设置。

先清除之前的规则:
iptables -F		#清空之前filter表设置的规则
iptables -t nat -F		#清空nat表设置的规则

前提:在我们之前的实验环境设置里已经设置好了网关,然后再开一台虚拟机当外网,总共三台虚拟机
内网:192.168.0.0/24
外网:192.168.187.0/24

第一步:做源地址转换
iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.187.129		#从ens160网卡出去的数据包IP转换为192.168.187.129
#内网访问外网需要伪装成和外网一个网段的地址,所以需要在网关经过内核路由之后做源地址转换
第二步:开启内核路由功能
sysctl -a | grep ip_forward		#检查net.ipv4.ip_forward是否等于1,1开启0关闭
vim /etc/sysctl.conf			#如果是关闭,那么编辑文件
加入:
net.ipv4.ip_forward=1
sysctl -p 						#使设置生效

源地址转换
在这里插入图片描述
开启内核路由功能
在这里插入图片描述
在单网卡主机(内网主机)测试一下,如图,ping和ssh都没问题,测试成功!
#我的外网主机ip是192.168.187.135
在这里插入图片描述

以上是关于linux下的防火墙Netfilter配置:iptables的了解与使用(详细)的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习总结(二十六)防火墙规则之firewalld

Linux软防火墙ACL匹配的优化点

Linux防火墙简介 – iptables配置策略

iptables基础知识

防火墙--------iptables

iptables防火墙