仓酷云

标题: 来一发CentOS上经由过程iptables完成NAT功效 [打印本页]

作者: 逍遥一派    时间: 2015-1-14 20:18
标题: 来一发CentOS上经由过程iptables完成NAT功能
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!实行:以下模子,node1为内网主机,IP地点为192.168.10.2;node3为外网主机,IP地点为10.72.37.177(假定此地点为公网地点),node3上供应webserver和FTPServer的功效;内网主机node2主机有2块网卡,地点分离为eth0:192.168.10.1和eth2:10.72.37.91(假定此地点为公网地点);
现请求在node2上经由过程iptables设置完成SNAT功效,并做以下限定:
1、node1能够会见node3供应的web办事和ftp办事
2、node1只能够ping毗连、ssh毗连node3
来一发CentOS上经由过程iptables完成NAT功能
登录/注册后可看大图

SNAT完成的历程:
node1与node2都是内网主机处于统一网段,以是node1是默许间接能够ping通node2主机上eth1的地点192.168.10.1;将node1主机的网关指向192.168.10.1后,node1就能够间接ping通node2的eth0上的外网地点10.72.37.91;
但此时内网主机node1一定是没法ping通外网主机node3的地点,此时开启node2主机的路由转发功效,便可完成将node1的哀求报文,经过node2转发送到node3主机上,可是node3呼应此报文时,发明源地点为192.168.10.1,与本人不在统一网段内,便会交由网关往转发,而node3的网关默许也是没法辨认此收集,以是呼应报文也就没法前往到node2;
以是便可以设置,node2把node1的哀求报文转收回往之前,将哀求报文的源地点由192.168.10.2转换为10.72.37.91后再送至node3主机上,此过程当中node2同时会主动天生一张NAT会话表,纪录下经过node2被转发的每笔记录;
node3封装呼应报文时,发明源地点为10.72.37.91,以是呼应报文的方针地点就会是10.72.37.91,呼应报文即会被前往给node2,此时node2上就会查询NAT会话表,主动再做方针地点转换,将呼应报文送至node1,此即完成了内网主机node1与外网主机node3通讯了;iptables的SNAT便是完成此功效;
此过程当中报文在node1、node2和node3之间传输路径以下图:
来一发CentOS上经由过程iptables完成NAT功能
登录/注册后可看大图

一个哀求报文经过node2主机路由判别后,必要被转收回往的话,此哀求报文则会经由node2主机上netfilter的链的按次为PREROUTING-->FORWARD-->OUTROUTING,以是SNAT的划定规矩需设置在OUTROUTING链上,而filter的划定规矩就必要在FORWARD链上设置了(此路径中只要在FORWARD链上有filter功效表,PREROUTING和OUTROUTING链上不做filter);

总结:为了完成node1能够与node3通讯需做的设置有:
1、node1主机的默许网关指向node2的eth1的地点
1、node2主机上的开启路由转发功效
2、node2主机上设置SNAT功效

设置历程:
node1上:
#ping192.168.10.1##是能够间接ping通的
#routeadddefaultgw192.168.10.1##增加路由指向192.168.10.1
#ping10.72.37.91##便可ping通node2主机上的另外一个地点

node2上:
#sysctl-wnet.ipv4.ip_forward=1##开启node2主机上的路由转发功效

node1上:
#ping10.72.37.177##此时,node1上临时是没法ping通node3的,可是此时ping的哀求包是已能够发送到node3的

node3上:
#iptables-tfilter-AINPUT-jLOG##在node3主机的INPUT链上增加LOG功效
#tail/var/log/messages##便可看到,已纪录到来自192.168.10.2即node1的ICMP哀求报文
……kernel:IN=eth0OUT=MAC=1c:6f:65:03:1b:9a:00:0c:29:fa:ea:2d:08:00SRC=192.168.10.2DST=10.72.37.177LEN=84TOS=0x00PREC=0x00TTL=63ID=0DFPROTO=ICMPTYPE=8CODE=0ID=4876SEQ=9
##假如此时在OUTPUT链上也纪录LOG的话,也是能够看到SRC=10.72.37.177DST=192.168.10.2的呼应报文,只不外是这个呼应报文终极没法投递node1

node2上
#iptables-tnat-APOSTROUTING-s192.168.10.0/24-jSNAT--to-source10.72.37.91
##在node2主机上的的POSTROUTING链上向NAT表中增加,界说来自192.168.10.0的主机,不管是利用何种协定,不管会见哪一个收集,统统代办署理进来,将源地点转换成10.72.37.91
#iptables-tnat-LPOSTROUTING-nv##在nat表的POSTROUTING链上便可看到我们增加的划定规矩

此时,node1便可以ping通node3,而在node3主机上的log中能够看到ICMP的哀求报文SRC=10.72.37.91DST=10.72.37.177和呼应报文SRC=10.72.37.177DST=10.72.37.91;注重此时的与node3通讯的IP地点已被SANT转换为10.72.37.91了;

node1上
#curl-Ihttp://10.72.37.177##测试毗连node3的web办事
#tail/var/log/nginx/access.log##node3上检察会见日记中,客户端源地点的已经是被转换后的10.72.37.91

依照请求node1只能够向node3倡议ping、shh、web会见哀求,以是在node2上的filter表的FORWARD链上增加以下划定规矩:
#iptables-tfilter-PFORWARDDROP
#iptables-tfilter-IFORWARD1-s192.168.10.0/24-picmp--icmp-type8-jACCEPT
##转发来自192.168.10.0/24的ICMP协定的哀求报文
#iptables-tfilter-IFORWARD1-s10.72.37.0/24-picmp--icmp-type0-jACCEPT
##转发来自10.72.37.0/24的ICMP协定的呼应报文
#iptables-tfilter-AFORWAORD-s192.168.10.0/24-ptcp-mstate--stateNEW-mmultiport--destination-ports21,22,80-jACCEPT
##转发来自192.168.10.0/24的形态为NEW,会见ftp,ssh,web的哀求
#iptables-tfilter-AFORWARD-mstate--stateESTABLISHED,RELATED-jACCEPT
##转发一切形态为ESTABLISHED和RELATED(forftp)形态的哀求





node1经由过程node3上的21端口和ftpserver创建下令毗连后,由于ftpserver默许是事情在主动形式,以是node1还需会见node3上的一个年夜于1024的随机端口来创建数据毗连,即必要node2大将一切一切年夜于1024的端口都转发至node3;可是本实行又请求只同意转发21,22,80端口;
此时请求node3主机上需已装载内核模块nf_contrack_ftp;这个模块能够监控ftp把持流,可以事前晓得将要创建的ftp数据毗连所利用的端口,从而能够同意响应的数据包经由过程,即便防火墙没有开放这个端口:
#modprobenf_contrack_ftp##手动装载此内核模块
#lsmod|grepftp##此时便可看到已装载
##大概写到设置文件/etc/sysconfig/iptables-config,便可不需每次往手动装载,即便重启后也会主动装载,增加一行:IPTABLES_MOUDLES=”nf_contrack_ftp”

倘使node3没有装载内核模块nf_conntrack_ftp,在node1上毗连node3上的ftp办事时,就会有以下报错信息:没法创建数据毗连到(10.72.37.177)端口29814
lftpuser2@10.72.37.177:~>debug
lftpuser2@10.72.37.177:~>ls
----正在毗连到10.72.37.177(10.72.37.177)端口21
<---220(vsFTPd2.2.2)
--->FEAT
<---211-Features:
<---EPRT
<---EPSV
<---MDTM
<---PASV
<---RESTSTREAM
<---SIZE
<---TVFS
<---UTF8
<---211End
--->OPTSUTF8ON
<---200AlwaysinUTF8mode.
--->USERuser2
<---331Pleasespecifythepassword.
--->PASSXXXX
<---230Loginsuccessful.
--->PASV
<---227EnteringPassiveMode(10,72,37,177,116,118).
----正在创建数据毗连到(10.72.37.177)端口29814
`lsat0[正在创建数据毗连...]
...
以上,即基于node2主机上的FORWARD链完成了收集防火墙,内网主机经由过程node2会见外网时,经由过程FORWARD链完成了会见把持。
欢迎大家来到仓酷云论坛!
作者: 再见西城    时间: 2015-1-15 20:54
标题: 来一发CentOS上经由过程iptables完成NAT功能
Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。
作者: 只想知道    时间: 2015-1-18 18:22
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
作者: 不帅    时间: 2015-1-27 16:35
对我们学习操作系统有很大的帮助,加深我们对OS的理解。?
作者: 柔情似水    时间: 2015-2-5 14:54
尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。
作者: 再现理想    时间: 2015-2-12 11:00
首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。
作者: 因胸联盟    时间: 2015-3-3 03:51
学习Linux系统在服务中的配置方法及使用方法。Linux在服务器中应用相当广,应对常用的apache,samba,ftp等服务器基本配置清楚了解。[重点,应巩固学习]
作者: 山那边是海    时间: 2015-3-11 10:45
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
作者: 愤怒的大鸟    时间: 2015-3-18 15:56
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
作者: 莫相离    时间: 2015-3-26 12:46
其实老师让写心得我也没怎么找资料应付,自己想到什么就写些什么,所以不免有些凌乱;很少提到编程,因为那些在实验报告里已经说了,这里再写就多余了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2