Linux防火墙iptables之SNAT与DNAT

目录

SNAT策略及应用

SNAT策略概述

SNAT策略典型应用环境

  • 局域网主机共享单个公网ip地址接入internet

SNAT策略原理

  • 源地址转换,source Network Addresss Translation
  • 修改数据包的源地址

SNAT工作原理

  • 数据包从内网发送到公网时,SNAT会把数据包的源ip由私网ip转换成公网ip,当相应的数据包从公网发送到内网时,会把数据包的目的ip由公网转换为私网ip。

SNAT转换前提条件

  • 局域网各主机以真确设置ip地址、子网掩码、默认网关地址。
  • linux网关开启ip路由转发

临时打开

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 #读取修改后的配置

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

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

iptables -t nat -A POSTROUTING -s 192.168.239.0/24 -o ens36 -j SNAT --to-source 12.0.0.1-12.0.0.10
内网IP 出站外网网卡 外网I

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

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

测试SNAT

实验拓扑图

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

1.配置双网卡ens33作为内网ipens37作为外网网关路由器

[root@localhost network-scripts]# vim ifcfg-ens33 #编辑内网配置文件

[root@localhost network-scripts]# vim ifcfg-ens37  #编辑外网网卡配置文件

[root@localhost ~]# systemctl restart network #重启网卡服务

开启路由转发功能

[root@localhost ~]# vim /etc/sysctl.conf  #编辑配置文件

[root@localhost ~]# sysctl -p   #读取修改后的配置文件
net.ipv4.ip_forward = 1
[root@localhost ~]# systemctl stop firewalld.service #关闭防火墙
[root@localhost ~]# setenforce 0 #临时关闭

2.配置内网客户机(192.168.239.200)相关配置

3.配置外网服务器(12.0.0.100)的相关配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33  #编辑外网配置文件

3.1搭建本地yum仓库

[root@localhost ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@localhost yum.repos.d]# mkdir 123.txt
[root@localhost yum.repos.d]# mv *.repo 123.txt/
[root@localhost yum.repos.d]# vim file.repo

[root@localhost yum.repos.d]# yum clean all && yum makecache #清除缓存建立源数据

[root@localhost yum.repos.d]# yum install httpd -y  #安装http网页服务

[root@localhost yum.repos.d]# systemctl restart httpd  #开启服务
[root@localhost yum.repos.d]# netstat -natp |grep httpd #查看服务是否开启
tcp6 0 0 :::80 :::* LISTEN 7420/httpd

4.内网客户机ping外网服务器及自己主机

5.此时使用内网客户机浏览器输入http://12.0.0.12既可以看到外网的http服务页面

6.外网服务器查看跟踪http访问日志

7.网关服务器开启SNAT

[root@localhost ~]# vim /etc/sysctl.conf  #编辑配置文件

[root@localhost ~]# sysctl -p   #读取修改后的配置文件
net.ipv4.ip_forward = 1

8.配置网关服务器的iptables规则

搭建本地yum残酷并安装安装iptables防火墙和iptables-services管理程序

yum install iptables iptables-services -y#安装iptables防火墙和iptables-services管理程序
systemctl start iptables.service

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

10.添加 SNAT转换∶固定的公网IP地址

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

实现了地址转换

小知识扩展

  • 一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。
  • 专业的事情要让专业的设备去干,让专业的硬件防火墙或专业的路由器干会更好

DHAT原理及应用

DNAT应用环境

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

DNAT原理

  • 修改数据包的目的地址

DNAT转换前提条件

  • 局域网的服务器能够访问Internet
  • 网关的外网地址有正确的DNS解析记录
  • Linux网关开启IP路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysct1 -p

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

把从ens33进来的要访问web服务的数据包目的地址转换为192.168.239.150

iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.12 -p tcp--dport 80 -j DNAT --to 192.168.239.150

iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.12 -p tcp--dport 80-j DNAT --to-destination 192.168.239.150
入站|外网网卡 | 外网ip 内网服务器ip

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

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

发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接

#发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
iptables-t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.239.150:22

测试DNAT

实验拓扑图

在上面的SNAT实验进行修改

1.将原有的vin7内网改为外网

2.将之前的外网服务器改为内网客户机

[root@localhost httpd]# vim /etc/sysconfig/network-scripts/ifcfg-ens33   #修改网卡配置文件

[root@localhost httpd]# systemctl restart network

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

在网关服务器添加iptables规则

内网服务器重启http服务器

[root@localhost httpd]# systemctl restart httpd

测试外网客户机是否可以访问内网服务器http服务

在内网服务器http服务站点目录新建目录再次测试是否可以访问

[root@localhost httpd]# cd /var/www/html/
[root@localhost html]# mkdir centos7

规则的导出、导入

自定义导出备份规则

导入备份文件内的规则

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)分析

示例:

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

  1. Linux防火墙iptables学习

    http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过 ...

  2. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  3. Linux防火墙(Iptables)的开启与关闭

    Linux防火墙(iptables)的开启与关闭 Linux中的防火墙主要是对iptables的设置和管理. 1. Linux防火墙(Iptables)重启系统生效 开启: chkconfig ipt ...

  4. linux 防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  5. Linux防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  6. linux 防火墙 iptables实例讲解

    端口为例): 显示现有规则: iptables –L -n 清空现有规则表: iptables -F 黑名单:先允许所有数据包通过,后逐条添加黑名单规则. iptables –A INPUT–p tc ...

  7. Linux防火墙iptables基础详解

    原文来自于:https://www.linuxidc.com/Linux/2017-01/140073.htm(引用自) 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分 ...

  8. Linux防火墙--iptables学习

    iptables是Linux系统提供的一个强大的防火墙工具,可以实现包过滤.包重定向.NAT转换等功能.iptables是免费的,iptables是一个工具,实际的功能是通过netfilter模块来实 ...

  9. Iptables 下 SNAT、DNAT和MASQUERADE三者之间的区别

    Iptables 中可以灵活的做各种网络地址转换(NAT,Network Address Translation) 网络地址转换(NAT)主要有两种:SNAT 和 DNAT,但是也有一种特例 MASQ ...

随机推荐

  1. Java基础之详谈IO流

    Java基础知识.IO流详细讲解.你所要的IO这里都有

  2. java的collection类

    collection来源于java.util包. Collection 接口常用的方法 size():返回集合中元素的个数 add(Object obj):向集合中添加一个元素 addAll(Coll ...

  3. 2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机)

    2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出 ...

  4. 小米电视去广告之adb实战

    近日闲来无事,对小米电视的开机广告.系统内置应用决定进行一波优化 安卓系统大部分都有一个"开发者模式", 在这个模式下可以放开手脚对系统进行一系列操作 此次要针对小米电视的UI使用 ...

  5. 杭电2091空心三角形Java(AC)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2091 把三角形写入二维数组里,然后输出出来 注意事项: 1.三角形后面没有空格(每一层的后面) 2.三角形 ...

  6. 阿里云IoT流转到postgresql数据库方案

    之前写过一篇如使用阿里云上部署.NET 3.1自定义运行时的文章,吐槽一下,虽然现在已经2022年了,但是阿里云函数计算的支持依然停留在.NET Core 2.1,更新缓慢,由于程序解包大小的限制,也 ...

  7. 睡前聊一聊"spring bean 生命周期"

    spring bean 生命周期=实属初销+2个常见接口+3个Aware型接口+2个生命周期接口 实属初销:spring bean生命周期只有四个阶段,即实例化->属性赋值->初始化-&g ...

  8. python学习-Day35

    目录 今日内容详细 代码创建进程 创建进程的方式 第一种创建进程的方式 创建进程的第二种方式 进程实现并发 join方法 进程间数据默认隔离 进程对象属性和方法 进程号如何查看 查看进程号的方法 杀死 ...

  9. 攻防世界-MISC:can_has_stdio?

    这是攻防世界MISC高手进阶区的题目,题目如下: 点击下载附件一,解压后得到一个txt文件,打开后内容如下: 根据百度搜索的结果可知这是一种叫做BrainFuck的语言,BrainFuck是由Urba ...

  10. 同时将代码备份到Gitee和GitHub

    同时将代码备份到Gitee和GitHub 如何将GitHub项目一步导入Gitee 如何保持Gitee和GitHub同步更新 如何将GitHub项目一步导入Gitee 方法一: 登陆 Gitee 账号 ...