iptables:

显式扩展、网络防火墙

显式扩展:multiport, iprange, string, time, connlimit, limit, state

state:无关是哪种协议

/proc/net/nf_conntrack

/proc/sys/net/nf_conntrack_max

NEW, ESTABLISHED, RELATED, INVALID

RELATED:一个新的链接请求发起时本来是NEW,但是对ftp这样的应用来讲,数据链接是与一个已存在的命令链接或控制链接是相互关联的,因此在这种场景中,数据链接新发起的链接状态可以识别                                            为NEW,实际上更多在nf_conntrack_ftp打开以后被识别成RELATED请求,不过RELATED这个链接请求建立完成后,后续的传输过程中都是ESTABLISHED。



iptables:

nat:Network Address Translation,安全性(隐藏本地网络的主机),网络层+传输层

proxy:代理,应用层,是一种特定应用的代理

nat:(只对用于请求报文来说)

SNAT:只修改请求报文的源地址;

DNAT:只修改请求报文的目标地址;

nat表:

PREROUTING:DNAT

OUTPUT

POSTROUTING:SNAT

源地址转换:(任何一个目标地址转换都会有一个源地址转换,只不过源地址转换可能是NAT Server查找nat会话表完成的)

iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP(要求外部IP固定)

iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE(不要求外部地址固定,地址伪装)

目标地址转换:(主要作用:把内网的主机映射进公网中,让公网的客户端来访问)

iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]



NAT实现方式
SNT示例
node1是Gateway,内网网卡IP:172.16.100.10  外网网卡IP:192.168.184.141
node2是内网主机,做Clent   IP:172.16.100.9
node3是外网主机,做Server  IP:192.168.184.143
# vim /etc/sysctl.d/99-sysctl.conf   //开启主机网络转发功能
net.ipv4.ip_forward = 1
# sysctl -p    //重读内核
   net.ipv4.ip_forward = 1
# cat /proc/sys/net/ipv4/ip_forward   //进行验证
1   
三台Linux主机的网络配置环境,跟随笔4的配置环境一样,但是需要把服务器即node3上添加的路由(指向Gateway外网网卡)删除 
# route del -net 172.16.100.0 netmask 255.255.255.0  
期望内网主机访问外网主机时,是基于源地址转换的方式进行
# yum install httpd -y  //在node3上安装并启动web服务
# curl http://192.168.184.143  //此时用内网主机即客户端是无法访问外网主机的web服务的,因为内网主机可以通过Gateway把数据转发出去,                                   但是外网主机143的响应报文无法响应内网主机。
# tcpdump -i eth0 host 172.16.100.9   //在外网服务器上做抓包分析 如果想让外网服务器回应给内网主机的请求,可在外网主机上加一条路由,
# route add -net 172.16.100.0/24 gw 192.168.184.141    //如果目标网路是172.16.100.0网络,那么就把网关设置为192.168.184.141这个IP
这是再用上述的请求和抓包分析就可以看出是成功的 下面把服务器143上的指向192.168.184.141的路由规则删除
# route del -net 172.16.100.0/24 
下面在NAT Server上添加一条Iptables规则,将所有来自于172.16.100.0网络即内网中的主机的请求,统统把请求的源地址改为192.168.184.141即网关的外网地址。
此时在NAT Server中NAT表上并没有任何规则 所有源地址转换只能在POSTROUTING上定义
# iptables -t nat -A POSTROUTING -s 172.16.100.0/24 ! -d 172.16.100.0/24 -j SNAT --to-source 192.168.184.141
        //指定时nat表的POSTROUTING链上,源地址时172.16.100.0网络范围内,目标地址是非172.16.100.0网络范围内的IP地址都可以,
        //然后做源地址转换SNAT,把源地址转换为192.168.184.141 # tail /var/log/httpd/access_log    //查看服务器的访问日志,可以看到都是192.168.184.141访问的 现在把三台主机反转一下即把外网主机当作客户端,把内网主机当作Server端
# iptables -t nat -F   //清空规则
#yum install httpd -y  //在内网主机上安装web服务,并启动
NAT Server向外宣称192.168.184.141(服务器外网网卡)本主机有web服务,但其实没有web服务,只是内网主机有web服务,所以会做目标地址转换
# iptables -t nat -A PREROUTING -d 192.168.184.141 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.9   
     //目标地址是141主机上的80端口,但是141主机上并没有80端口,所以做目标地址转换,把目标地址转换到提供web服务的内网主机172.16.100.9
# curl http://192.168.184.141   //使用外网请求NAT Server的web服务,会被转发到内网中去
<h1>Test Page on RS1 172.16.100.9</h1> 下面把NAT Server的ssh服务也转发到内网去
# iptables -t nat -A PREROUTING -d 192.168.184.141 -p tcp --dport 22 -j DNAT --to-destination 172.16.100.9   下面是端口映射的示例
把内网主机的web服务改为监听在8080端口上
node2 ~]# vim /etc/httpd/conf/httpd.conf    //内网主机上修改
          Listen 8080   //改为8080
# systemctl restart httpd    //可以看到内网主机已经监听了8080 此时如果再用外网主机请求141的web服务,就无法请求了 需要把NAT Server中的iptables规则进行修改 SNAT话题:
有时候在互联网上访问时还会遇到互联网地址有一个外网地址,但是需要ADSL拨号上网, SNAT可以代替内网主机访问互联网,即通过SNAT Server的外网网卡上网的,但是如果使用ADSL拨号上网的话,外网网卡的IP的是一直变化的,这个问题如何解决? 
那么就使用一种NAT技术叫做"地址伪装"( Masquerading),即自动找一个合适的外网地址,当源地址(即外网网卡IP)转换时自动把这个外网地址当作的源地址。 下面node1仍然是NAT Server,即代理内网主机与外网联系
node2仍然作为内网主机访问外网
node3仍然作为web服务器供node2访问
# iptables -t nat -L -n -v   //清空node1之前定义的iptables规则
# iptables -t nat -A POSTROUTING -s 172.16.100.0/24 ! -d 172.16.100.0/24 -j MASQUERADE  //在node1上添加地址伪装,

5、iptables之nat的更多相关文章

  1. 动手实验iptables的NAT功能实现流量穿透

    1.NAT和iptables理论见: http://lustlost.blog.51cto.com/2600869/943110 2.引子 近期,有同事抱怨说数据入库时,由于数据库所在的服务器只有内网 ...

  2. iptables配置——NAT地址转换

    iptables nat 原理同filter表一样,nat表也有三条缺省的"链"(chains): PREROUTING:目的DNAT规则 把从外来的访问重定向到其他的机子上,比如 ...

  3. 用iptables 做NAT代理上网

    背景:有一台A服务器不能上网,和B服务器通过内网来连接,B服务器可以上网,要实现A服务器也可以上网. 内网主机: A eth1:172.16.1.8 外网主机: B eth0:10.0.0.61外网主 ...

  4. 亲测可用,iptables实现NAT转发。

    环境 服务器A:192.168.1.7 服务器B: 192.168.1.160 需求 实现将本机(192.168.1.7:7410)端口流量转发给(192.168.1.160:9200). 1. 内核 ...

  5. zabbix和iptables的nat表结合使用

    A 机器要去访问C机器,但是无法直接访问到A可以访问到B机器,B机器可以访问到C机器这时候就可以再B机器设置nat,让A机器访问C机器 正好工作中zabbix server要监控2个http地址,缺无 ...

  6. iptables之NAT端口转发设置

    背景:服务器A:103.110.114.8/192.168.1.8,有外网ip,是IDC的一台服务器服务器B:192.168.1.150,没有外网ip,A服务器是它的宿主机,能相互ping通服务器C: ...

  7. iptables之NAT代理-内网访问外网

    1.前言 本文使用NAT功能:内网服务器,想上网又不想被攻击. 工作原理:内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做 ...

  8. 用iptables做NAT代理,使内网机器上外网

    现状:服务器A只有一个内网IP,不能上外网,内网IP与服务器B内网相通:服务器B有一个内网IP和公网IP.想实现服务器A也能上外网. 1 2 3 4 服务器A:内网网卡:eth0 内网IP:192.1 ...

  9. Docker iptables failed: iptables -t nat -A DOCKER -p tcp

    Dokcer网络问题 因为操作或修该过iptables导致docker容器出现如下错误: [root@mysqlserver ~]# docker restart cvnavi-centos-tomc ...

随机推荐

  1. python小练习:读入一个考试得分,判断这个分数是哪个等级,并输出,考虑异常场景

    读入一个考试得分,判断这个分数是哪个等级,并输出. 等级:>=90 优 ,>=80且小于90 良,>=70 且小于80,中,>=60且<70及格  <60 不及格 ...

  2. 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

    本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...

  3. 委托、匿名函数到lambda表达式

    在C#2.0之前就有委托了,在2.0之后又引入了匿名方法,C#3.0之后,又引入了Lambda表达式,他们三者之间的顺序是:委托->匿名表达式->Lambda表达式,微软的一步步升级,带给 ...

  4. OCR技术初识

    一.什么是OCR OCR英文全称是Optical Character Recognition,中文叫做光学字符识别.它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接 ...

  5. AspectJ框架基于注解的AOP实现

    AspectJ的AOP实现:有两种方式,一种是基于XML配置文件,一种是基于注解的,由于注解更为常用,这里 这里只针对注解来学习. ---------------------------------- ...

  6. vi/vim 命令速查手册

    vi 的基本概念 基本上vi可分为三种操作状态,分别是命令模式(Command mode).插入模式(Insert mode)和底线命令模式(Last line mode),各模式的功能区分如下: 1 ...

  7. 注册登录二合一之bootstrap

    来源 https://bootsnipp.com/snippets/featured/login-and-register-tabbed-form jquery插件 需导入bootstrap插件 这个 ...

  8. mysql Column count doesn't match value count at row 1

    今天执行批量插入的操作,发现报了错 mysql Column count doesn't match value count at row 1. 后来发现原因:是由于写的SQL语句里列的数目和后面的值 ...

  9. spring boot 1.x完整学习指南(含各种常见问题servlet、web.xml、maven打包,spring mvc差别及解决方法)

    spring boot 入门 关于版本的选择,spring boot 2.0开始依赖于 Spring Framework 5.1.0,而spring 5.x和之前的版本差距比较大,而且应该来说还没有广 ...

  10. 2018-2019-1 20189206 《Linux内核原理与分析》第六周作业

    linux内核分析学习笔记 --第五章 系统调用的三层机制 学习重点--深入理解系统调用的过程 给MenuOS添加命令 添加命令的方式较为简单,在LinuxKernel/menu/test.c目录下, ...