首页 > 其他 > 详细

Iptables2

时间:2014-03-30 04:52:00      阅读:704      评论:0      收藏:0      [点我收藏+]

1.IPtables的网络"防火"功能

上一篇讲的防火墙主于主机设置,也就是对一台机子的设置,主要是对filter的INPUT和OUTPUT的过滤,这篇来讲讲Iptables的网络防火功能.route和NAT

2.route路由

bubuko.com,布布扣

如图:A主机本身没有公网IP,它要访问web服务器需要B主机做路由,而B本身也是一台Linux主机,我们如何通过B主机访问互联网呢?

2-1.首先为计算机A添加一条路由

只要是去往192.168.0.0/16这个网络的报文请求都由172.16.251.233这个地址作为网关.

vim /etc/sysconfig/network-script/route-eth0

添加一条:192.168.0.0/16 via 172.16.251.233

bubuko.com,布布扣

尝试去用A主机去pingB主机的外网网卡

bubuko.com,布布扣

这里有疑问了,我们的B主机并没有开启forward功能,为什么A主机能ping通B主机的外网网卡?在Linux中有一个很重要的概念,对于Linux而言,IP地址并不是网卡的,而是内核的.所以这里可以ping通

2-2.开启B主机的forward功能并查看

使用命令:sysctl -w net.ipv4.ip_forward=1(只是临时有效),cat /proc/sys/net/ipv4/ip_forward

bubuko.com,布布扣

2-3.这时候A主机能ping通C主机吗?

来看看

bubuko.com,布布扣

可以看到是ping不通的,为什么?是A的报文不能到达C吗?其实不是的,是A的报文到达了C,而C的网关没有指向B,所以C找不到路回话,所以要给C的网关指向B(在NAT中,就不需要C指网关了,因为NAT中B和C就是在一个网段内的)

2-4.设置web服务器的网关指向192.168.1.10

bubuko.com,布布扣

2-5.使用A主机pingC主机,A和C已经建立连接

bubuko.com,布布扣

2-6.这时候来分析这种情况,如下图中,我们要让主机A可以上网,主机D不能上网,该如何实现

bubuko.com,布布扣

2-7.给主机D加个路由,并查看是否能ping通服务器C,这里主机D是笔者的真实机(物理机windows 8系统的)

bubuko.com,布布扣

2-8.尝试分别用主机A和主机D访问主机C的web服务

bubuko.com,布布扣

bubuko.com,布布扣

2-9.限制主机D访问web,这里主要是设置转发的了,因为是路由啊.有两种策略,一是内网内所有的主机都可以访问web,只限制D主机,二是内网内所有的主机都不能访问web,只开放A主机,只是使用第二种.首先在B主机上关闭所有的转发功能,并尝试用主机A和主机D访问

使用命令:关闭主机B的路由功能

bubuko.com,布布扣

主机A访问web

bubuko.com,布布扣

主机D访问web

bubuko.com,布布扣

2-10.查看主机B是否匹配到拦截的报文

使用命令:iptables –L –nv

bubuko.com,布布扣

2-11:在主机B上设置过Iptables给主机A放行

使用命令:iptables –A FORWARD –s 172.16.251.209 –d 192.168.1.105 –p tcp –dport 80 –j ACCEPT

允许进来

bubuko.com,布布扣

使用命令:iptables –A FORWARD –s 192.168.1.105 –d 172.16.251.209 –p tcp –sport 80 –j ACCEPT

允许出去

bubuko.com,布布扣

2-12.分别再次尝试主机A和主机D能否访问web

A主机访问

bubuko.com,布布扣

D主机访问

bubuko.com,布布扣

2-13.查看web服务器的httpd日志,为了和后面的NAT做比较的,route直接使用自己的网址访问了web,而后面做NAT的时候用的是B主机的公网IP,这里只是为了自己记忆

bubuko.com,布布扣

3.NAT网络地址转换

bubuko.com,布布扣

Basic 静态NAT:每个内网内的主机在NAT服务器上都有对应的一个公网地址来完成对内网地址的转换

NAPT:动态每个内网主机在NAT服务器上只有一个公网IP,各个内网主机在转换IP的时候使用不同的端口,而NAT内部自建有一个会话表,记录各个IP和端口的对应信息.如:内网要访问web,NAT服务器会把内网的192.168.1.10:22022转换成自己的2.2.2.2:33033与1.1.1.1:80通信,当报文返回的时候,都返回给2.2.2.2:33033,而NAT服务器通过查询自建的表,又把数据发送给192.168.1.10:22022,所以数据出去的时候会修改源地址,数据回来的时候会修改目标地址.(只是把私有ip转换成公网ip,所以-to-source是B主机的公网网卡的ip)

源地址转换:SNAT,用于让内网主机访问互联网

目标地址转换:DNAT,让互联网上主机访问本地内网中某服务器上的服务

iptables正是基于SNAT和DNAT这两个机制实现地址转换技术

3-1.在上面的基础上,建立一条NAT规则,(笔者的B主机的内网IP改变了,为172.16.251.244,需要重新指一下路由,其他的都不变)

首先在B主机上的nat表中添加一条规则:

使用命令:iptables –t nat –A POSTROUTING –s 172.16.251.209 –d 192.168.1.105 –j SNAT --to-source 192.168.1.10

bubuko.com,布布扣

3-2.再用A主机去访问C主机

A主机访问C主机

bubuko.com,布布扣

看C主机的IP来源

bubuko.com,布布扣

可以和2-13比较,看出来route和NAT的区别

3-3.A主机请求C主机,对于含有hello字符的包都丢弃

首先笔者已经在C主机的index.html内添加了hello(这里的字符区分大小写),并且为了区别,新建了一个网页aa.html

在B主机上建立规则

bubuko.com,布布扣

尝试访问C主机的index.html和aa.html页面

bubuko.com,布布扣

查看B主机的规则是否被匹配到

bubuko.com,布布扣

4.DNAT(目标地址转换),如图:

bubuko.com,布布扣

现在A主机要访问web服务,但是不直接访问C的地址,而是访问B的外网IP,B实际上是没有web服务的,他只是把目标地址C映射到本地的外网端口上,让外网的用户看起来好像是B提供了web服务一样,但实际上web服务是有C提供的......诶 好乱

4-1.尝试用外网访问NAT服务器的

bubuko.com,布布扣

4-2.在NAT服务器上添加一条规则

使用命令:iptables –t nat –A PREROUTING –d 172.16.251.244 –p tcp –dport 80 –j DNAT –to-destination 192.168.1.105

意思是:只要访问目标地址是172.16.251.244的,并且目标ip是80的,都转发到192.168.1.105的80端口上,这就是目标地址转换,DNAT

bubuko.com,布布扣

4-3.再次尝试访问NAT,可以看到访问成功

bubuko.com,布布扣

5.练习题:基于FORWARD链转发对内部ftp服务的访问

bubuko.com,布布扣

vsftp服务比较特别,它有两条通道,一条命令通道,一条数据通道,所以要放行的话,必须两条通道都放行,我们已经知道他的命令通道的接口是tcp的21号端口,而数据通道的接口是随机的.那如何实现转发呢?

5-1. 注意事项

首先要加载ip_nat_ftp和ip_conntrack_ftp这两个模块,这是临时生效的

使用命令:modprobe ip_nat_ftp

modprobe ip_conntrack_ftp

在/etc/sysconfig/iptables-config中,

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"这是永久生效的

5-2.写iptables的配置信息


iptables -A FORWARD -d 192.168.1.105 -s 172.16.251.209 -p tcp --dport 21 -j ACCEPT       #对于目标地址是192.168.1.105 源地址是172.16.251.209,协议是tcp,目标端口是21的都放行
iptables -A FORWARD -s 192.168.1.105 -d 172.16.251.209 -p tcp --sport 21 -j ACCEPT        ##对于源地址是192.168.1.105 目标地址是172.16.251.209,协议是tcp,源端口是21的都放行
iptables -A FORWARD -s 172.16.251.209 -d 192.168.1.105 -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT       #状态是RELATED,ESTABLISHED的放行
iptables -A FORWARD -d 172.16.251.209 -s 192.168.1.105 -p tcp -m state --state ESTABLISHED -j ACCEPT        #状态是ESTABLISHED的放行


Iptables2,布布扣,bubuko.com

Iptables2

原文:http://lidefu.blog.51cto.com/3429777/1386485

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!