【linux防火墙】设置开启路由转发,SNAT和DNAT转换原理及应用实操,添加自定义链归类iptables规则

news2024/11/15 19:40:07

目录

一、关于iptables规则的保存

1.1持久保存规则

1.2加载规则

1.3开机自动加载规则

1.4使用iptables-service软件来进行规则的保存和加载(不建议使用)

二、SNAT和DNAT的原理和应用

SNAT的原理与应用:

DNAT的原理和应用:

实操步骤:网关服务器

第一步:先设置网关服务器的ip地址,两张网卡,ens33设置为内网,ens36设置为外网

第二步:开启路由转发功能

第三步:设置iptables的转换规则

实操步骤:内网服务器

第一步:修改内网服务器的网关ip地址,为网关服务器的ip地址

第二步:开启本机httpd服务,并写上一个测试网页index.html内容为test

实操步骤:外网服务器

第一步:先修改外网服务器的ip地址和网关,都应该是12段的,ip地址是12.0.0.100,网关地址是12.0.0.1

第二步:开启httpd服务。

验证结果:

SNAT的结果验证:

DNAT的结果验证:

三、自定义链

3.1添加自定义链

3.2设置自定义链的策略,并将其生效

3.3删除自定义链


一、关于iptables规则的保存

昨天写了iptables的设置,但是都是临时生效的,一旦电脑重启,那么就会失效,如何永久保存,需要借助iptables-save命令,开机生效需要借助iptables-restore命令,并写入规定的配置文件中。

1.1持久保存规则

##单独使用iptables-save命令可以进行查询
[root@WG opt]#iptables-save

##将其所有的规则放置到一个自定义文件中
[root@WG opt]#iptables-save > /opt/iptables_rules

##使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限

1.2加载规则

##清空filter表
[root@WG opt]#iptables -F
##清空nat表
[root@WG opt]#iptables -F -t nat
##重新加载保存的规则
[root@WG opt]#iptables-restore < /opt/iptables_rules 

1.3开机自动加载规则

第一种:个性化设置放到用户家目录下的配置文件~/.bashrc

第二种:放到全局配置文件中,/etc/profile中,对所有用户生效

第三种:放到开机自启的最后一项,加载系统服务的配置文件中,可以让系统重启即可生效

综上所述,建议放在系统自带的配置/etc/rc.d/rc.local中

[root@WG rc.d]#vim rc.local 

iptables-restore < /opt/iptables_rules

##千万不要忘记加上执行权限,非常重要!!
[root@localhost ~]#chmod +x /etc/rc.d/rc.local
[root@localhost ~]#ll /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 512 11月 30 14:27 /etc/rc.d/rc.local

 

为了防止该文件被删除,可以使用chattr +i 给文件加上不可删除权限 

1.4使用iptables-service软件来进行规则的保存和加载(不建议使用)

##需要安装iptables-services软件
[root@centos7 ~]#yum -y install iptables-services

##备份配置文件
[root@centos7 ~]#cp /etc/sysconfig/iptables{,.bak}

#第一种:保存现在的规则到文件中方法1
[root@centos7 ~]#/usr/libexec/iptables/iptables.init save
#第二种:保存现在的规则到文件中方法2
[root@centos7 ~]#iptables-save > /etc/sysconfig/iptables

#开机启动
[root@centos7 ~]#systemctl enable iptables.service    
[root@centos7 ~]#systemctl mask firewalld.service nftables.service

 

二、SNAT和DNAT的原理和应用

SNAT的原理与应用:

SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由) SNAT原理:源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映谢

SNAT转换前提条件:

1.局域网各主机已正确设置IP地址、子网掩码、默认网关地址

2.Linux网关开启IP路由转发 linxu系统本身是没有转发功能 只有路由发送数据

DNAT的原理和应用:

DNAT应用环境:在Internet中发布位于局域网内的服务器 DNAT原理:目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映谢。

DNAT转换前提条件:

1.局域网的服务器能够访问Internet

2.网关的外网地址有正确的DNS解析记录

3. Linux网关开启IP路由转发

实操步骤:网关服务器

第一步:先设置网关服务器的ip地址,两张网卡,ens33设置为内网,ens36设置为外网

[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]#vim ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.20.8
NETMASK=255.255.255.0

[root@localhost network-scripts]#vim ifcfg-ens36
TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.1
NETMASK=255.255.255.0
[root@localhost network-scripts]#systemctl restart network
[root@localhost network-scripts]#ip a

第二步:开启路由转发功能

##查询内核参数
sysctl -a |grep "ip_forward"

##添加永久开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 ##注意空格

##生效
sysctl -p

也可以在这查看/proc/sys/net/ipv4/ip_forward
/proc文件夹中就是内存的一些信息

第三步:设置iptables的转换规则

##表示当内网192.168.20.0网段的主机访问外网的时候,网关服务器会通过SNAT转换源ip地址为网关服务器的公网ip12.0.0.1
[root@WG opt]#iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -j SNAT --to 12.0.0.1

##表示当外网服务器访问网关服务器的公网ip的80端口时,会通过DNAT技术跳转至内网的192.168.20.10的80端口
[root@WG opt]#iptables -t nat -A PREROUTING -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.20.10
##这就是端口映射,NAT-SERVER,保护了内网服务器不会受到攻击,因为外网只能接触到网关服务器ip

1、需要注意,这里是网卡比较少,所以没有指定流量流入和流出的网卡, 建议加上

iptables -t nat -A POSTROUTING -o ens36 -s 192.168.20.0/24 -j SNAT --to 12.0.0.1

iptables -t nat -A PREROUTING  -i ens36 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.20.10

2、设置完成以后,建议可以查看验证一下,iptables -vnL -t nat

实操步骤:内网服务器

第一步:修改内网服务器的网关ip地址,为网关服务器的ip地址

[root@lan ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33 
[root@lan ~]#systemctl restart network
[root@lan ~]#route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.20.8    0.0.0.0         UG    100    0        0 ens33
192.168.20.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

##需要将其网关的ip修改为网关服务器的内网ip地址

第二步:开启本机httpd服务,并写上一个测试网页index.html内容为test

[root@lan ~]#systemctl start httpd
[root@lan ~]#echo test > /var/www/html/index.html

实操步骤:外网服务器

第一步:先修改外网服务器的ip地址和网关,都应该是12段的,ip地址是12.0.0.100,网关地址是12.0.0.1

[root@wan ~]#cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.1

[root@wan ~]#systemctl restart network
[root@wan ~]#route -n 

第二步:开启httpd服务。

[root@wan ~]#echo hhhhhh > /var/www/html/index.html
[root@wan ~]#systemctl start httpd

验证结果:

SNAT的结果验证:

#内网主机
[root@lan ~]#curl 12.0.0.100

##外网主机
[root@wan ~]#tail -f /var/log/httpd/access_log 

DNAT的结果验证:

##内网服务器的日志
[root@lan ~]#tail -f /var/log/httpd/access_log 

##外网主机访问网关服务器的公网ip地址
[root@wan ~]#curl 12.0.0.1
test

拓展 :当外网主机访问网关服务器的公网ip主机的80端口时候,将其映射为内网主机192.168.20.10的8080端口

第一步:在原有基础上删除DNAT的设置,重新写入策略,将其映射到内网主机的8080端口 

[root@localhost ~]#iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.20.10:8080

 第二步:找到内网的httpd服务的配置文件,进行修改为监听8080端口,重新启动httpd服务

[root@lan ~]#vim /etc/httpd/conf/httpd.conf
42 Listen 8080 ##修改为监听8080度那口
[root@lan ~]#systemctl restart httpd

验证结果

 

三、自定义链

3.1添加自定义链

[root@localhost ~]#iptables -t filter -N WEB
##指定是在filter下面去天剑WEB链,不写默认是filter

3.2设置自定义链的策略,并将其生效

第一步:先设置了WEB的两条策略,拒绝目标端口为8080,允许目标端口为80

第二步:将其策略调用在filter的INPUT链中,作用到源ip为192.168.20.10的主机上

第三步:测试主机可以访问80端口

第四步:修改端口为8080,重启httpd服务后,测试另一台主机访问,不可以访问8080端口

[root@localhost ~]#iptables -I WEB -p tcp --dport 80 -j ACCEPT 
[root@localhost ~]#iptables -A WEB -p tcp --dport 8080 -j REJECT 
[root@localhost ~]#iptables -A INPUT -s 192.168.20.10 -j WEB 
[root@localhost ~]#iptables -vnL

##修改httpd的端口以后重启服务
[root@localhost ~]#sed -i.bak 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf 
[root@localhost ~]#systemctl restart httpd

##这是192.168.20.10主机
[root@lan ~]#curl 192.168.20.18:80
生效
[root@lan ~]#curl 192.168.20.18:8080
curl: (7) Failed connect to 192.168.20.18:8080; 拒绝连接

3.3删除自定义链

##删除INPUT调用的自定义链WEB的策略
[root@localhost ~]#iptables -D INPUT 1

##清空自定义链的内容
[root@localhost ~]#iptables -F WEB 

##删除对应的自定义链
[root@localhost ~]#iptables -X WEB
[root@localhost ~]#iptables -vnL

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1273035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL之 InnoDB逻辑存储结构

InnoDB逻辑存储结构 InnoDB将所有数据都存放在表空间中&#xff0c;表空间又由段&#xff08;segment&#xff09;、区&#xff08;extent&#xff09;、页&#xff08;page&#xff09;组成。InnoDB存储引擎的逻辑存储结构大致如下图。下面我们就一个个来看看。 页&#xff08…

【Qt绘图】之绘制坦克

使用绘图事件&#xff0c;绘制坦克。 效果 效果很逼真&#xff0c;想象力&#xff0c;有没有。 示例 代码像诗一样优雅&#xff0c;有没有。 包含头文件 #include <QApplication> #include <QWidget> #include <QPainter>绘制坦克类 class TankWidge…

机器人RL数据集探索

机器人RL数据集探索 相关资料汇总 相关资料汇总

hutool的bug之 DateUtil.endOfDay(DateUtil.date())

hutool 工具类DateUtil 使用时谨慎 DateUtil.endOfDay 得到的时间保存到数据时会增加一秒 首先比较下时间的long值&#xff1a; 这样就很明显的看出来&#xff0c;hutool工具类的date是毫秒位多了.999,保存到mysql 的时候&#xff0c;MySQL数据库对于毫秒大于500的数据进行…

SPI学习

SPI介绍 SPI&#xff1a;串行外设设备接口&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步通信总线。 全双工&#xff1a;同一时刻&#xff0c;能同时接收数据和发送数据。 半双工&#xff1a;同一时刻&am…

树与二叉树堆:经典OJ题集

目录 查找值为x的结点&#xff1a; 思路分析&#xff1a; 单值二叉树&#xff1a; 示例&#xff1a; 思路分析&#xff1a; 相同的树&#xff1a; 示例&#xff1a; 思路分析&#xff1a; 二叉树的前序遍历&#xff1a;——使用前序遍历把结点元素放入数组中 题…

二分算法(整数二分、浮点数二分)

文章目录 二分一、整数二分&#xff08;一&#xff09;整数二分思路&#xff08;二&#xff09;整数二分算法模板1.左查找&#xff08;寻找左侧边界&#xff09;2.右查找&#xff08;寻找右侧边界&#xff09;3.总模板 &#xff08;三&#xff09;题目&#xff1a;数的范围 二、…

算法通关村第五关—Hash基础知识(青铜)

Hash基础 一、Hash的概念和基本特征 哈希(Hash)也称为散列&#xff0c;就是把任意长度的输入&#xff0c;通过散列算法&#xff0c;变换成固定长度的输出&#xff0c;这个输出值就是散列值。很多人可能想不明白&#xff0c;这里的映射到底是啥意思&#xff0c;为啥访问的时间…

【brpc学习实践】ParallelChannel的使用与并行请求

概览 ParallelChannel (有时被称为“pchan”)同时访问其包含的sub channel,并合并它们的结果。用户可通过CallMapper修改请求,通过ResponseMerger合并结果。ParallelChannel看起来就像是一个Channel: 支持同步和异步访问。 发起异步操作后可以立刻删除。 可以取消。 支持超…

Vue生命周期:组件的生命之旅

&#x1f343;引言 在Vue.js中&#xff0c;每个组件都有其独特的生命周期。这个生命周期指的是组件从创建到销毁的一系列过程。了解并正确使用Vue的生命周期钩子&#xff0c;对于优化组件性能、管理组件状态以及实现特定功能至关重要。本文将详细介绍Vue的生命周期及其各个阶段…

mysql mybatis分页查询 大数据量 非常慢

查阅了很多博客和资料&#xff0c;这篇文章以思路为准&#xff0c;详细代码不细说&#xff0c;都是非常简单的方法&#xff0c;一看就明白。具体实现稍微百度一下就能出来。仅供参考。 如题&#xff1a;单表数据已经达到4千万条数据&#xff0c;通过mybatis的分页查询效率非常低…

如何提高销售技巧,增加客户的成交率?

如何提高销售技巧&#xff0c;增加客户的成交率&#xff1f; 在如今的市场环境中&#xff0c;销售技巧的高低往往决定了你是否能够成功地打动客户的心。想要提高销售业绩&#xff0c;除了产品质量和服务的保障&#xff0c;更需要你精进销售技巧&#xff0c;从而让客户愿意为你…

一种快速设计射频功放IC流程分享

No.1设计目标 在功率放大器PA中&#xff0c;输出级以及输出匹配决定了该功放的线性度、效率等关键性能指标&#xff0c;通常被优先考虑。在这个项目中输出级功放关键性能指标如下&#xff1a; 带宽&#xff1a;12-13 GHz OP1dB>13dBm 输出级 Power gain>5dB DE_P1dB&…

TCP解帧解码、并发送有效数据到FPGA

TCP解帧解码、并发送有效数据到FPGA 工程的功能&#xff1a;使用TCP协议接收到网络调试助手发来的指令&#xff0c;将指令进行解帧&#xff0c;提取出帧头、有限数据、帧尾&#xff1b;再将有效数据发送到FPGA端的BRAM上&#xff0c;实现信息传递。 参考&#xff1a;正点原子启…

基于springboot实现的在线考试系统

一、系统架构 前端&#xff1a;html | js | css | jquery | bootstrap 后端&#xff1a;springboot | springdata-jpa 环境&#xff1a;jdk1.7 | mysql | maven 二、 代码及数据库 三、功能介绍 01. 登录页 02. 管理员端-课程管理 03. 管理员端-班级管理 04. 管理员端-老师管理…

【CAN通信】CanIf模块详细介绍

目录 1.内容简介 2.CanIf详细设计 2.1 CanIf功能简介 2.2 一些关键概念 2.3依赖的上下层模块 2.4 功能详细设计 2.4.1 Hardware object handles 2.4.2 Static L-PDUs 2.4.3 Dynamic L-PDUs 2.4.4 Dynamic Transmit L-PDUs 2.4.5 Dynamic receive L-PDUs 2.4.6Physi…

微信小程序 - 开发版、体验版、正式版共享本地缓存

问题描述 最近突然发现一个大问题啊&#xff0c;小程序切换版本环境的时候发现数据被污染了&#xff0c;瞬间就怀疑不同环境版本的小程序本地缓存是否共享的&#xff1f;&#xff01; 果然是&#xff01; 解决方案 我们可能马上想到解决方案就是&#xff1a;给每一个环境版本…

不想花钱用aspera?这些免费的替代方案也同样快速哦

Aspera FASP是一款高速数据传输软件&#xff0c;被广泛应用于大文件的快速传输。然而&#xff0c;Aspera FASP并不便宜&#xff0c;对于一些小型企业或个人用户来说可能无法负担。因此&#xff0c;为了满足大家的需求&#xff0c;本文将介绍一些免费且同样快速的Aspera替代方案…

【meta】Scaling Speech Technology to 1,000+ Languages

nvidia-NeMo包含TTS的模型&#xff0c;开源数据 uroma转写工具介绍 uroman转写工具 N-to-M mapping 转写的规范&#xff0c;包含一些中文-拼音&#xff0c;拉丁文-读法的规则转换。字符串匹配规则下的查字典&#xff1b; 将字母对应到发音单元 转写规范 转写过程尽量做到可…

Android Studio初学者实例:Fragment学习--仿美团外卖界面

本次课程为Fragment为主题&#xff0c;课程的示例仿美团外卖界面&#xff0c;不同于底部导航栏的Fragment案例&#xff0c;此界面分为左侧切换与顶部切换。本文先是发布代码与效果&#xff0c;后续讲解将会在后续补充。先看看效果&#xff1a; 首先是布局文件代码&#xff1a;A…