【linux进阶9】linux中的iptables火墙优化策略

一、基本命令

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

在这里插入图片描述

SNAT:用的是POSTROUTING,在路由之后做,参数用-o表示出口
DNAT:用的是PREROUTING,在路由之前做,参数用-i表示进入口

此外,prerouting 和postrouting 也经常用于NAT配置网关机进行网络地址转换使用,这时候有一下规律:
POSTROUTING是源地址转换(SNAT),要把你内部网络上受防火墙保护的ip地址转换成你本地的公网地址才能让它们上网。
PREROUTING是目的地址转换(DNAT),要把别人的公网IP换成你们内部的IP,才让访问到你们内部受防火墙保护的服务器。

二、火墙的切换

firewalld----->iptables

dnf install iptables-services.x86_64 --allowerasing
systemctl disable firewalld.service 
systemctl mask firewalld.service 
systemctl enable --now iptables.service 

三、iptables的使用及火墙使用规则

(1)、名词解释

input 输入
output 输出
forward 转发(经过内核)
postrouting 路由之后
prerouting 路由之前

(2)、表格解释

filter经过内核处理的数据包括input,output,forward
nat不经过内核处理(地址转换和地址伪装部分)包括input,output,postrouting ,prerouting
mangle包含全部内容对内容做补充说明

在这里插入图片描述

(3)、iptables使用方式

如果不指名表格默认都fitter表

1)、基本命令

1、基本命令
service iptables save保存当前规则到永久文件
永久文件的保存地址为/etc/sysconfig/iptables
每次重启iptables后都会重新读取iptables的永久文件的规则

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

常用组合命令如下:

iptables -nL                                   查看链条规则(默认为filter表)
iptables -t filter -L                          查看filter表链接情况
iptables -t filter -nL                         查看链接情况,不做地址解析
iptables -F                                    清除所有规则,重启iptables服务后可恢复正常
iptables-save                                  保存当前iptables设置
iptables -t nat -nL                            查看nat表
iptables -A INPUT  -j REJECT                   添加一个新的input链
iptables -D INPUT 1                            删除第一个链接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT  添加tcp协议的22端口

2)、具体使用方法

2、刷掉所有的规则,重启iptables

iptables -nL    
iptables -F 
iptables -nL 
systemctl restart iptables.service               重启iptables服务
iptables -nL 

刷掉所有规则后,没有保存在永久文件中,所以重启后会还原
在这里插入图片描述

3、添加链条,删除链条
添加在input中添加一条链
在这里插入图片描述
删除刚刚这条链条
在这里插入图片描述
4、刷掉所有的规则,设置拒绝所有人访问
在这里插入图片描述
此时我们的ssh连接不上
在这里插入图片描述
5、设置访问端口
在filter表的INPUT链中添加拒绝所有访问请求的策略,接着再添加规则,接受通过tcp的22端口(ssh远程连接默认使用22端口)

在这里插入图片描述
此时还是连接拒绝,因为iptables的读取规则是从上到下读取的
在这里插入图片描述
现在在第一行的位置,插入一条规则,内容是允许tcp的22端口接入
在这里插入图片描述
再次ssh连接发现成功
在这里插入图片描述
6、利用-R更改,对ip来源高级设定

对于之前的前两条规则,更改链接:允许172.25.42网段链接,拒绝172.254.14网段链接

iptables -R INPUT 1 -s 172.25.42.0/24 -p tcp --dport 22 -j ACCEPT
iptables -R INPUT 2 -j REJET 
iptables -nL

按照现在的读取顺序来说,172.25.42.xx/24网段的可以ssh连接,其他网段的不能连接
在这里插入图片描述

结果发现以真机(172.25.42.250)可以连接本机172.25.42.100
在这里插入图片描述
将此台虚拟机更改ip为172.25.25.100,将另外一台机器设置为172.25.25.200后访问发现
虽然都是同一网段,但是访问失败
在这里插入图片描述
在这里插入图片描述
将第一条规则更改为允许172.25.25.200访问
在这里插入图片描述
结果发现172.25.25.200可以用ssh进行连接
在这里插入图片描述

记得将本虚拟机的ip还原为172.25.42.100

7、更改默认规则

iptables -P INPUT DROP                   可以链接,但是丢弃掉全部请求
iptables -P INPUT ACCEPT                 接受请求

8、新建一个链:

iptables -N  westos                               新建westos链
iptables -E  westos westos1 更名为westos1
iptables -X  westos1                              删除westos1

四、优化火墙状态处理

(1)、数据请求状态

RELATED建立过链接的
ESTABLISHED建立过链接的
NEW新链接的

(2)、加快数据请求火墙处理

为了优化处理速度,加快筛选过滤速度,对数据包状态进行编辑,加快火墙助理

1 iptables  -F                                                                去掉现有火墙策略
2 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            接受所有建立过连接、正在连接的数据包
3 iptables -A INPUT -m state --state NEW -i LO -j ACCEPT                      接受所有来自本机回环接口的新的数据包
4 iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT          接受所有来自对于tcp的22端口的数据包
5 iptables -A INPUT -m state --state NEW -j REJECT                            拒绝其他其他新的数据包
iptables-save 

结果是:优化后的火墙,对于第一次访问的数据进行第4条判断,再次访问时进行第2条的判断,加快过滤速度

五、iptables的NAT桥接

(1)、实验环境

实验环境
真实主机 :ip为172.25.254.250
双网卡主机westosa(虚拟机):ip1为172.25.42.100,ip2为172.25.254.100
单网卡主机westosb(虚拟机):ip为172.25.42.200

双网卡主机westosa
在这里插入图片描述
单网卡主机westosb
在这里插入图片描述
流程图
在这里插入图片描述

SNAT:用的是POSTROUTING,在路由之后做,参数用-o表示出口
DNAT:用的是PREROUTING,在路由之前做,参数用-i表示进入口

(2)、SNAT源地址转换

想要实现单网卡主机(172.25.42.200)和真实主机172.25.254.250的互通,可以用双网卡主机的内核做地址转换(地址伪装)。用双网卡主机的172.25.42.100的ens3网卡接收对来自于单网卡主机172.25.42.200的数据包,然后双网卡主机ens3网卡将数据经过内核转换给172.25.254.200的ens8网卡,并将数据的源地址更改为双网卡的172.25.254.200地址。

因为SNAT源地址转换是在路由之后POSTROUTING链中进行的,即我们需要双网卡的nat表的POSTROUTING链中添加策略

1、进行双网卡主机westosa设定
因为是路由之后,所以更改双网卡主机的数据包的ens8网卡,将传递给真机的数据包更改源地址为ens8
POSTROUTING,在路由之后做,参数用-o表示出口

iptables -t nat -A POSTROUTING -o ens8 -j SNAT --to-source 172.25.254.100       路由后操作POSTROUTING,将en3网卡输出的ip都伪装为172.25.254.100
sysctl -a |grep ip_forward                                                      图1、查看路由功能是否开启
vim /etc/sysctl.conf                                                            图2、打开路由功能 
sysctl -p                                                                       使得内核路由功能生效
iptables -t nat -nL                                                                       图3、查看当前的SNAT

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

在这里插入图片描述

2、单网卡主机westosb设定
将单网卡的网关设置为双网卡主机ens8网卡的ip172.25.42.100,这样可以使得数据可以与双网卡主机的ens3网卡进行通信,然后通过ens8网卡和外界进行连接

实验结果1:单网卡主机(172.25.42.200)能与不同网段的主机(172.25.254.250)通过双网卡主机路由直接ping通
在这里插入图片描述
实验结果2:单网卡主机(172.25.42.200)能与不同网段的主机(172.25.254.250)通过双网卡主机路由进行ssh连接,w -i 可以查看到,当前的ssh连接是通过172.25.42.100路由转发的。
在这里插入图片描述

实验结果3:此时我们的真机不能访问到westosb,因为数据的流向是单向的,只能从westosb到真机。要实现在这个的话也可以用DANT去做
在这里插入图片描述

(3)、DNAT目的地地址转换

为了实现真实主机
在路由之前做,参数用-i表示进口做

DNAT:用的是PREROUTING,在路由之前做,参数用-i表示进入口

DNAT目的地地址转换是在路由之前PREROUTING链中进行的,即我们需要在nat表的PREROUTING链中添加策略,指定对所有从ens8接口输入的数据用DNAT转换其目的地地址为westosb为172.25.42.200
1、在双网卡主机中进行操作
更改DNAT

iptables -F                 
iptables -t nat -F
iptables -t nat -A PREROUTING -i ens8 -j DNAT --to-dest 172.25.42.200

在这里插入图片描述

2、实验结果
实验结果发现虽然连接的是westosa(172.25.254.100),但是访问到的是westosb(172.25.42.200)
在这里插入图片描述

六、firewall

(1)、firewall的开启

systemctl disable --now iptables.service 
systemctl unmask firewalld.service 
systemctl enable --now firewalld.service 
systemctl mask iptables.service 

(2)、firewalld的模式

trusted信任模式:接受所有连接
home家庭网络:允许ssh,mdns, ipp-client, samba-client, dhcp-client
work工作网络:允许ssh, ipp-client, dhcp-client
public公共模式:ssh,dhcp-client
dmz军工级:ssh
block拒绝所有
drop丢弃,所有的连接都不回复
intter内部网络:ssh,mdns,ipp-client,samba-client
externalipv4网络地址伪装发送 sshd

(1)设定信任模式时
在这里插入图片描述
(2)设定public模式时
在这里插入图片描述
(3)设定block模式
在这里插入图片描述

(3)、firewalld的文件及其设定原理

  • 更改firewalld状态后,配置文件/etc/firewalld/firewalld.conf内容会改变
  • 封装的各个firewalld状态文件的子配置文件地址/usr/lib/firewall/
  • 各个软件运用时,火墙的运用模块:/usr/lib/firewalld/services/
  • 火墙添加永久允许模时,配置文件更改地址:cd /etc/firewalld/zones/

(4)、 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##移除服务
firewall-cmd --reload重启服务
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block##指定数据来源访问指定域
firewall-cmd --reload
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##更改网络接口到指定域

(5)、编写一个火墙服务文件

1.拷贝其中一个文件,取名为westos.xml

cp /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/westos.xml

2.更改其中内容

vim /usr/lib/firewalld/services/westos.xml 

在这里插入图片描述
3.重启火墙,查看火墙中的westos文件

systemctl restart firewalld.service 
firewall-cmd --get-services | grep westos

在这里插入图片描述
4.火墙添加westos文件,移除文件
在这里插入图片描述

firewall-cmd --permanent --remove-service=westos 

七、firewalld的高级使用

(1)、对单独ip访问设置不同的域

firewall-cmd --permanent --add-source 172.25.0.0/24 --zone=trusted            此ip访问时,设置为信任域
firewall-cmd --reload 
firewall-cmd --permanent --remove-source 172.25.0.0/24 --zone=trusted         移除
firewall-cmd --reload 

(2)、对不同网卡进行不同域的设置

firewall-cmd --permanent --remove-interface=ens9 --zone=public 
firewall-cmd --permanent --remove-interface=ens8 --zone=public 
firewall-cmd --permanent --add-interface=ens8 --zone=trusted 
firewall-cmd --reload 
firewall-cmd --list-all
firewall-cmd --list-all --zone=trusted 
firewall-cmd --permanent --change-interface=ens8 --zone=public        修改回来

在这里插入图片描述
此时ens3的ip地址的aphche不可以被访问到(未添加http服务)
此时ens8的ip地址的aphche不可以被访问到(信任模式)

八、firewalld的桥接

(1)、SNAT

双网卡主机

 firewall-cmd --permanent --add-masquerade     开启地址伪装
 firewall-cmd --reload 

单网卡
单网卡(172.25.14.100)网关设置为双网卡的同网段(172.25.254.200)即可连接不同网段主机
在这里插入图片描述

(2)、DNAT

目的地地址转接
双网卡主机

[root@service ~] firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toaddr=172.25.254.214                   将登陆本机的ip转接到172.25.14.200 
success
[root@service ~] firewall-cmd --reload 
success

在这里插入图片描述

在这里插入图片描述
结果:ssh-l访问双网卡主机时会伪装转接到单网卡主机上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值