草庐IT

Linux防火墙iptables之SNAT与DNAT

sukapulai 2023-04-10 原文

目录

SNAT策略及应用

SNAT策略概述

开启SNAT的命令

临时打开

永久打开

SNAT转换1:固定的公网IP地址

SNAT转换2:非固定的公网IP地址(共享动态IP地址)

SNAT案例

实验准备

配置网关服务器(192.168.217.254/12.0.0.254)的相关配置

配置外网服务器(12.0.0.12)的相关配置

修改客户端

ping一下网关和外网服务器

开启ip转发功能

实验内外网访问

配置网关服务器的iptables规则

小知识扩展

DNAT策略与应用

DNAT应用环境

DNAT原理

DNAT转换前提条件

DNAT转换1∶ 发布内网的Web服务

DNAT转换2∶ 发布时修改目标端口

DNAT案例

修改客户端

修改内网服务器

在网关服务器添加iptables规则

测试外网是否能访问内网

规则的备份及还原

tcpdump—Linux抓包


SNAT策略及应用

SNAT策略概述

SNAT 应用环境

局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由

SNAT原理

源地址转换,Source Network Address Translation

修改数据包的源地址

SNAT转换前提条件

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

Linux网关开启IP路由转发

开启SNAT的命令

查看当前服务器的路由表

临时打开

echo 1 >/proc/sys/net/ipv4/ip_forward

sysctl -w net.ipv4.ip forward=1

永久打开

vim /etc/ sysctl. conf
net. ipv4.ip_ forward = 1                #将此行写入配置文件
 
sysctl -P                #读取修改后的配置

SNAT转换1:固定的公网IP地址

#配置SNAT策略,实现snat功能,将所有192.168.217.0这个网段的ip的源ip改为10.0.0.1
iptables -t nat -A POSTROUTING -s 192.168.217.0/24 -o ens33 -j SNAT --to 10.0.0.1
                                                         可换成单独IP   出站外网网卡                  外网IP

iptables -t nat -A POSTROUTING -s 192.168.217.0/24 -o ens33 -j SNAT --to-source 10.0.0.1-10.0.0.10
                                                                   内网IP   出站外网网卡                                            外网IP或地址池

SNAT转换2:非固定的公网IP地址(共享动态IP地址)

iptables -t nat -A POSTROUTING -s 192.168.127.0/24 -o ens33 -j MASQUERADE

SNAT案例

实验准备

配置网关服务器(192.168.217.254/12.0.0.254)的相关配置

添加一块网卡

复制并修改ens36卡

#切换至网卡配置文件所在目录
[root@localhost network-scripts]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens36

修改ens33网卡

修改ens36网卡

重启网卡

配置外网服务器(12.0.0.12)的相关配置

修改ens33网卡

重启网卡

如果有多张网卡,单独重启一张网卡

ifdown ens33 ; ifup ens33

安装阿帕奇服务

yum install httpd -y

如果安装不上的话,搭个本地仓库

修改客户端

ping一下网关和外网服务器

外网服务器ping不通的话去网关服务器修改内核的配置文件

开启ip转发功能

修改内核的配置文件

vim /etc/sysctl.conf 

net. ipv4.ip_ forward = 1      #将此行写入配置文件

sysctl -p                               #读取修改后的配置

实验内外网访问

登陆外网服务器

查看外网的http访问日志,跟踪一下

配置网关服务器的iptables规则

安装iptables,关闭防火墙和selinux,开启iptables

[root@localhost network-scripts]#yum install -y iptables*
@localhost network-scripts]#systemctl stop firewalld.service 
[root@localhost network-scripts]#setenforce 0
[root@localhost network-scripts]#systemctl start iptables.service

查看网关服务器的iptables规则并清除

iptables -nL                   #查看规则
iptables -nL -t nat         #查看规则
iptables -F                   #清除iptables的规则
iptables -F -t nat         #清除iptables的规则

iptables -t -nat -A POSTROUTING   修改源地址  -s  指定局域网网段网关  -o  出站网卡 -j 控制类型  --to  指定要转换成的公网ip 

客户端重新访问外网服务器,再查看外网的http访问日志

实现了地址转换

小知识扩展

一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。

专业的事情要让专业的设备去干,让专业的硬件防火墙或专业的路由器干会更好

DNAT策略与应用

DNAT应用环境

在Internet中发布位于局域网内的服务器

DNAT原理

目标地址转换,Destination Network Address Translation
修改数据包的目标地址

DNAT转换前提条件

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

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

Linux网关开启IP路由转发

vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1 
sysctl -p

DNAT转换1∶ 发布内网的Web服务

iptables -t nat -A PREROUTING (修改目的地址) -i 指定从哪个网卡进入数据 -d 指定外网来的数据包的目的ip -p 指定tcp协议 --dport 数据包的目的端口 -j DNAT --to 端口


iptables -t nat -A PREROUTING (修改目的地址) -i 指定从哪个网卡进入数据 -d 指定外网来的数据包的目的ip -p 指定tcp协议 --dport 数据包的目的端口 -j DNAT --to 端口
#把从ens36进来的要访问web服务的数据包目的地址转换为 192.168.217.20:80

iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 8080 -j DNAT --to 192.168.217.20:80

DNAT转换2∶ 发布时修改目标端口

#发布局域网内部的OpenSSH服务器, 外网主机需使用80端口进行连接
ciptables -t nat -A POSTROUTING -s 192.168.217.80/24 -o ens36 -j SNAT --to 12.0.0.254

DNAT案例

修改客户端

修改内网服务器

在网关服务器添加iptables规则

#先清空规则

[root@localhost yum.repos.d]#iptables -F -t nat

#添加规则

测试外网是否能访问内网

在内网服务器中重启httpd服务

[root@localhost network-scripts]# systemctl restart httpd
[root@localhost network-scripts]# cd /var/www/html  
[root@localhost html]# vim index.html      更改网页内容

在内网服务器上实时跟踪一下 

规则的备份及还原

备份 

重定向输出

删除规则并查看

实现快速还原,重定向输入从文件读取

保存到默认配置文件当中

iptables-save >/etc/sysconfig/iptables      重定向输入到默认配置文件当中

清楚规则关掉iptables

再查看nat

已经成功了

tcpdump—Linux抓包

tcpdump tcp-i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp∶ ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

(2)-i ens33 ∶只抓经过接口ens33的包

(3)-t ∶不显示时间戳

(4)-s 0 ∶ 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包

(5)-c 100 ∶只抓取100个数据包

(6)dst port ! 22 ∶不抓取目标端口是22的数据包

(7)src net 192.168.1.0/24 ∶数据包的源网络地址为192.168.1.0/24。Net:网段,host:主机

(8)-w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析

有关Linux防火墙iptables之SNAT与DNAT的更多相关文章

  1. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  2. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

  3. ruby - 如何在 Ruby 中获取 linux 系统信息 - 2

    如何在Ruby中获取linux系统(这必须适用于Fedora、Ubuntu等)的软件/硬件信息? 最佳答案 Chef背后的优秀人才,拥有一颗名为Ohai的优秀gemhttps://github.com/opscode/ohai以散列形式返回系统信息,例如操作系统、内核、规范、fqdn、磁盘、空间、内存、用户、接口(interface)、sshkey等。它非常完整,非常好。它还会安装命令行二进制文件(也称为ohai)。 关于ruby-如何在Ruby中获取linux系统信息,我们在Stack

  4. ruby - rbenv:在 Linux Mint 上找不到 gem 命令 - 2

    我在LinuxMint17.2上。我最近使用apt-getpurgeruby​​删除了ruby​​。然后我安装了rbenv然后rbenvinstall2.3.0所以现在,~/.rbenv/versions/2.3.0/bin/ruby存在。但是现在,我无法执行geminstallrubocop。我明白了:$geminstallrubocoprbenv:gem:commandnotfoundThe`gem'commandexistsintheseRubyversions:2.3.0但是我可以~/.rbenv/versions/2.3.0/bin/geminstallrubocop。但是,

  5. ruby - 在 Linux 上编译 Ruby 1.9.2 所需的先决条件? - 2

    我是Ruby和RoR的新手。我有一个带有Ubuntu镜像的干净Linode实例,我想从源代码编译Ruby而不是使用apt-get。我已经在谷歌上搜索了执行此操作的说明,但经过一些尝试后,当我尝试运行一些教程示例时,我不断收到有关缺少zlib和其他一些包的错误。任何人都可以给我详细的说明(或链接),教我如何在从源代码编译Ruby之前安装必要的必备包吗?我的目的是编译Ruby的最新稳定版本,然后安装Rubygems和Rails。提前感谢您的帮助!!! 最佳答案 Thisblogpost涵盖从源代码编译ruby​​所需的包和安装过程;它引

  6. Linux网络编程必备的POSIX API的细节 - 2

    目录POSIXAPI大集合五元组三次握手的过程,内核协议栈分析listen函数DDOS攻击,洪水攻击DDOS攻击的应对措施数据发送 怎么保证顺序?如何保证包地顺序到达(序号+确认应答机制+重传)TCP断开连接的过程问题1.大量的CLOSE_WAIT+FIN_WAIT2是为啥?time_wait状态存在的原因?POSIXAPI大集合五元组(sip,sport,dip,dport,protocol)三次握手的过程,内核协议栈分析内核协议栈中是有内核数据结构的.  我们send/write数据,都是先发送到内核协议栈中,然后由内核协议栈封装发送到物理介质中传输到对端的对端的接收过程也是经有内核协议栈

  7. Linux export 命令及如何删除export设置的环境变量 - 2

    背景:Linuxexport命令用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。语法:export[-fnp][变量名称]=[变量设置值]参数说明:-f 代表[变量名称]中为函数名称。-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。-p 列出所有的shell赋予程序的环境变量。实例:列出当前所有的环境变量#export-p//列出当前的环境变量值定义环境变量赋值#exportMYENV=7//定义环境变量并赋值添加环境变量:默认保存在

  8. Linux操作系统CentOS7安装Nginx[详细版] - 2

    Nginx安装1.官网下载Nginx2.使用XShell和Xftp将压缩包上传到Linux虚拟机中3.解压文件nginx-1.20.2.tar.gz4.配置nginx5.启动nginx6.拓展(修改端口和常用命令)(一)修改nginx端口(二)常用命令1.官网下载Nginxhttp://nginx.org/en/download.html这里我下载的是1.20.2版本,大家按需下载对应稳定版即可2.使用XShell和Xftp将压缩包上传到Linux虚拟机中没有XShell可以参考《Linux操作系统CentOS7连接XShell》3.解压文件nginx-1.20.2.tar.gz1)检查是否存

  9. 【Linux】初识Linux --指令Ⅰ - 2

    Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法,Linux…感兴趣就关注我吧!你定不会失望。目录1.ls显示当前目录下的文件内内容2.pwd-显示用户当前所在的目录3.cd-改变工作目录。将当前工作目录改变到指定的目录下1.cd-回到上一次待的工作空间2.cd..返回上一层目录1.相对路径:cd../aurora2.绝对路径:cd/home/aurora/lesson1/aurora3.cd~进入用户家目录4.cd/进入root目录4.mkdir-新建目录5.rmdir/rm-删除1.rmdir删除空文件夹2.rm删除1.rm-f2.rm-i3.rm-r1.ls显示当前目

  10. 从零开始学习Linux运维,成为IT领域翘楚(二) - 2

    文章目录🔥Linux系统目录结构🔥Linux用户和用户组🔥Linux用户管理🔥Linux系统目录结构文件系统组织结构⭐ /lib系统开机所需要最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。⭐ /lost+found一般情况下是空的,当系统非法关机后,这里就存放了一些文件。⭐ /etc所有系统管理所需要的配置文件和子目录my.conf⭐ /usr用户的很多应用程序和文件都放在这个目录下。⭐ /bin是Binary的缩写,这个目录存放着经常使用的命令⭐ /sbin(usr/sbin、/usr/local/sbin)sbin就是peruse

随机推荐