linux系统防火墙追加篇——iptables

在前面我们已经学习过了系统的防火墙,我们讲过redhat7以上的防火墙软件有两个,分别是firewalld和iptables,上一片我们讲的是firewalld,具体可见firewalld,那么今天我们来了解一下另一个防火墙软件iptables

iptables?

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中对于内外信息的规律时有一定的规则的,对于不同的需求有不同的规则结构,而我们常将这种规则结构称为“四表五链”
在这里插入图片描述

raw表

raw有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能。

filter表

filter主要和自身有关,主要负责防火墙功能 过滤本机流入流出的数据包是默认使用的表
input负责过滤所有目标地址是本机地址的数据包,就是过滤进入主机的数据包
forward负责转发流经主机但不进入本机的数据包,和NAT关系很大
output负责处理源地址的数据包,就是对本机发出的数据包

NAT表

NAT负责网络地址转换,即来源于目的IP地址和端口的转换,一般用于共享上网或特殊端口的转换服务
snat源地址转换
dnat目标地址转换
pnat目标端口转换

mangle表

mangle将报文拆开来并修改报文标志位,最后封装起来

五链:

五链多条链整合起来就叫做表
PREROUTING数据包进入路由之前
INPUT目标地址为本机
FORWARD实现转发
OUTPUT源地址为本机,向外发送
POSTROUTING数据包进入路由之后

应用场景:
其中INPUT, OUTPUT链更多的应用在“主机访火墙”中,即主要针对服务器本机进出数据的安全控制:而FORWARD, PREROUTING, POSTROUTING链更多地应用在“网络防火墙”中,特别是防火墙服务器作为网关使用时的情况。

iptables传输数据包的过程:
在这里插入图片描述
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
② 如果数据包就是进入本机的,它就会沿着图向上移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

iptables的配置

在配置实验之前我们要确定我们的实验环境,同firewalld一样,我们需要两台虚拟机,加上真机共三台主机
真机ip:172.25.254.77
server:eth0:172.25.254.97 eth1:1.1.1.97
client:eth0:1.1.1.117 网关:1.1.1.97

为了不让firewalld影响iptables的过滤规则,我们关闭firewalld
在这里插入图片描述
如上图所是我们在server上关闭了firewalld,开启了iptables并且设置为开机自启动,注:第三条命令unmask是因为我们在上一个实验中将iptables锁住了,所以我们得给他解锁,否则依旧用不了
1.iptables的防火墙策略文件

iptables的防火墙策略文件在/etc/sysconfig/iptables中

在这里插入图片描述
注意:firewalld也是有配置文件的,他的配置文件在/usr/lib/firewalld中
在这里插入图片描述
firewalld在配置文件中修改就等同用firewall-cmd --permanent一样

2.iptables命令的常用参数

iptable 
	-t		##指定表名称 
	-n		##不作解析
	-L		##列出指定表中的策略
	-A		##增加策略
	-p		##网络协议
	--dport ##端口
	-s		##数据来源
	-j		##动作
	ACCEPT	##允许
	REJECT  ##拒绝
	DROP	##丢弃
	-N		##增加链
	-E		##修改链名称
	-X		##删除链
	-D		##删除指定策略
	-I		##插入
	-R		##修改策略
	-P		##修改默认策略

3.查看某个表的策略及清除表策略

iptables  -t filter -nL		#查看filter表中的策略
iptables  -F					#刷掉filter表中的所有策略,当没有用-t指定表名称时默认时filter
service iptables save		#保存当前策略

在这里插入图片描述
在这里插入图片描述
关于保存的话我们先来看一下没有保存,重启iptables后是怎样的
在这里插入图片描述
我们发现重启iptables后又恢复默认了,那么我们刷新后则需要保存,就不会恢复默认了
在这里插入图片描述
在这里插入图片描述
4.更改表的默认策略

iptables -P INPUT DROP		##更改为DROP(丢弃),即不允许通过
iptables -P INPUT ACCEPT	##更改为ACCEPT(接受),即允许通过

我们通过ssh来实验,在INPUT状态下:
在这里插入图片描述
在这里插入图片描述
我们发现可以真机可以连接上server,那么我们更改为DROP
在这里插入图片描述
在这里插入图片描述
显而易见,我们修改过默认策略后ssh就连接不上了
最后我们恢复默认状态
在这里插入图片描述
5.给表中的链添加策略
例如:我们要添加策略使其他主机无法使用22端口(ssh)访问,那么我们需要添加iptables的就是filter表的input链了

iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT

在这里插入图片描述
在这里插入图片描述
在这里我们禁止的相当于是同一个网段的主机访问22端口,那么我们其实也是可以通过-s指定一个ip

iptables -R INPUT 1 -p tcp --dport 22 -s 172.25.254.77 -j REJECT ##修改INPUT的第一条策略为禁止172.25.254.77主机访问22端口

6.手动修改表的链中的策略顺序
我们的iptables的策略是按照上往下依次读取的,有些时候为了一定的功能我们得修改它的策略位置
例如:

iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT ##插入允许所有主机访问22端口策略到第一条

在这里插入图片描述
在这里插入图片描述
我们发现添加了策略1后,我们的第二条策略就失效了
7.删除指定链中的策略

iptables -D INPUT 2 ##删除INPUT中的第二条策略

在这里插入图片描述
8.新建链,修改链名,删除链

iptables -N redhat			##增加链redhat
iptables -E redhat ljz		##改变链名称
iptables -X ljz				##删除链

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

9.源地址转换(火墙伪装)
实验前查看是否开启路由功能:
在这里插入图片描述
注:在这里我们是开启的,如果没有开启可以用命令echo “net.ipv4.ip_forward = 1” >>/etc/sysctl.conf追加修改即可,然后用命令sysctl -p刷新
实验命令:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.97
在路由后对eth0,ip为172.25.254.97做源地址转换

在这里插入图片描述
测试:用client去连接真机
在这里插入图片描述
分析:我们的client是通过网关1.1.1.97即server的eth1网咖进入server,然后经过路由转换到eth0,通过eth0将数据包发送到真机即172.25.254.77上,所以我们看到的77主机上连接者是server

10.目的地址地址转换(端口转发)

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.117

在这里插入图片描述
测试:
用真机去访问server
在这里插入图片描述
分析:
我们的真机的ssh数据包首先从eth0进入server,再没有进行路由前将目的地址更改为1.1.1.117即client,那么就通过server的eth1网咖将数据包发送到client上

11.iptables状态设置
在我们的iptales中有一个state模块,他有四个状态
ESTABLISHED,NEW,RELATED,INVALID

NEW新的数据包请求
RELATED已经完成的数据包请求
ESTABLISHED正在进行的数据包请求
INVALID状态不明的数据包,一般视为恶意的,丢弃
iptables -A INPUT -i lo -j ACCEPT	##允许回环端口,即本机登陆所有服务
iptables -A INPUT -m state --state RELATED,ESTABLISHED  -j ACCEPT	##登陆过的和正在进行的可以允许
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT	##允许新的22端口
iptables -A INPUT -j REJECT		##禁止其他所有端口

在这里插入图片描述
在这里插入图片描述
在这里我们的client一直没有等路过server,所以他是一个新的登陆请求,端口为22,允许
对于第二条策略我们可以用smb或者nfs去实验,这里就不做具体实验了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值