资源描述
Linux搭建局域网代理服务器
信息安全03-1班 张川 王孟玉
〖摘要〗
本文是linux作为寝室代理服务器的一个实现,力求让普通用户在阅读此文后能快速搭建一个实用且高效的linux代理服务器。文中介绍了关于nat技术和iptables的一些基本概念,以及怎样在linux下通过nat技术代理内网用户上网及发布内网服务等。
〖关键字〗Linux Slackware iptables 发行版
〖Summary〗
This article is a linux Be a realization of the bedroom proxy server, try hard for to let the common customer be able to build quickly after read this text a practical and efficiently of linux proxy server.It introduced some basic concepts concerning the nat technique and the iptables in the text, and how pass the nat technique to act for to get to the Internet and release inside the net customer under the linux etc. is inside the net service.
〖Key word〗 Linux Slackware Iptables distribution
正文:
1.代理服务器:
1.1代理服务器概述
代理服务器(Proxy Server)是运行特定服务器程序的计算机。代理服务器拥有两个网络接口,一个接口用于连接Internet,另一个接口则用于连接内部网络。代理服务器能够对Internet保护内部IP地址,只有运行Proxy Server的计算机的IP地址才是在Internet中可见的。也就是说,代理服务器作为一种双宿主主机,它直接暴露与Internet,代理内部网络用户向Internet发出请求,并把接受的信息反馈给用户,为内部网络用户连接Internet提供必要的屏蔽。当然,除此之外,代理服务器还具有充分利用带宽,将局域网用户连接到Internet等功能。
IP地址是不可再生的宝贵资源,一般网络中只分配了有限的IP地址,但是,却需要为网络内的所有计算机提供Internet访问能力,那么,可以通过使用代理服务器来实现这一点。代理服务器至少安装有两个网络适配器,一个连接至Internet,另一个连接至本地局域网络,通过代理服务器软件实现IP地址转换和IP转发。
2. 本文所有到的实验环境如下
2.1网络拓扑
2.2相关设备
LINUX网关服务器 SLACKWARE 10.2 (kernel 2.6.13) 两张网卡
Windows server 2003 WEB服务器 单网卡
WINDOWS XP主机一台(客户端) 单网卡
D-link 5口 10M/100M交换机一个
2.3相关软件
本次实验是用的服务器系统为SLACKWARE kernel 2.6.13
防火墙软件:IPTABLES
SLACKWARE :介绍
SLACKWARE Linux是由Patrick Volkerding开发的GNU/Linux发行版。与很多其他的发行版不同,它坚持KISS(Keep It Simple Stupid)的原则,并以简洁、安全和稳定所著称。
3. 防火器简介 :IPTABLES(原理)
netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。
系统缺省的表为"filter",该表中包含了INPUT、FORWARD和OUTPUT 3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略(policy)来处理该数据包。
4. NAT原理(snat,dnat,masquerade)
4.1什么是NAT
NAT英文全称是Network Address Translation,称是网络地址转换,它是一个IETF标准, 允许一个机构(包括多个网络节点)以一个地址出现在Internet上。NAT将每个局域网节点的地址转换成一个IP地址,反之亦然。它也可以应用到防火墙技术里,把个别IP地址隐藏起来不被外界发现,使外界无法直接访问内部网络设备,同时,它还帮助网络可以超越地址的限制,合理地安排网络中的公有Internet 地址和私有IP地址的使用。
4.2为什么要进行NAT
在内部网络中使用内部地址,通过NAT把内部地址翻译成合法的IP地址在Internet上使用,其具体的做法是把IP包内的地址域用合法的IP地址来替换。NAT设备维护一个状态表(路由表,所以也称NAT为软路由),用来把非法的IP地址映射到合法的IP地址上去。每个包在NAT设备中都被翻译成正确的IP地址。在内部网络中,使用内部地址的计算机开设了网络服务(80,21等),当外部ip想访问这些服务时,NAT网关把外部访问ip翻译成内部ip,也就是说,把内部开设的服务,映射到一个合法的ip和端口上,已供外部访问。
4.3如何在linux配置nat
下面以一张截图做详细的介绍
详细的步骤如下
步骤一:配置:
这里我用的是联想的d-link 530tx网卡,所以载入via-rhine模块,这相当于是网卡的驱动,
由于eth0连接的是adsl,所以我设置的是动态IP。
Tulip 是我acction网卡的模块,如果大家用的是其他网卡这两处要做相应的修改。
ifconfig eth1 192.168.0.1 netmask 255.255.255.0 up
这里设置的是我acction网卡的IP及子网掩码。这张网卡接的是交换机,作为代理寝室上网的网关。
pppoe-start >/dev/null 2>&1
拨号成功后并不在屏幕上显示提示信息,前提是以通过pppoe-setup设置。不同的发行版可能略有区别,比如在redhat 9上就是adsl-setup,adsl-start
Echo “nameserver 61.139.2.69”>/etc/resolv.conf
设置DNS:61.139.2.69由当地ISP提供。
lynx -mime_header -auth=dark81ue:loveblue \
"http://www.3322.org/dyndns/update?system=dyndns&hostname=wolveseyes.3322.org"
这里是将我申请动态域名wolveseyes.3322.org绑定到我拨号IP。
dark81ue是我的帐号,当然红色部分就是我的密码了。
这时可以ping wolveseyes.3322.org验证一下,正常的话,应该返回我拨号上网的IP。
步骤二:防火墙配置:NAT
载入ip_nat_ftp和ip_conntrack_ftp是让内网能正常访问外网的ftp。
iptables –f
清空所有规则
iptables –t nat –f
清空nat表中的所有规则
iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –j MASQUERADE
将192.168.0.0/24网段的ip进行ip伪装,MASQUERADE作用和snat一样,不过对于拨号的动态IP更适合.
echo 1 > /proc/sys/net/ipv4/ip_forward 打开系统的IP转发功能
现在把内网机器的网关设置成192.168.0.1/255.255.255.0,填上DNS:61.139.2.69就可以上网了。
步骤三:发布内网服务器
这个例子中,我把内网ip为192.168.0.10的80端口映射到wolveseyes.3322.org绑定的IP上,也就是我拨号获得的IP,这样外网用户可以直接通过wolveseyes.3322.org 80端口访问我内网192.168.0.10在80端口上提供的服务。这里的80是192.168.0.10的webserver,发 布其他的内网服务器也是同样的道理。
同样用这个方法也可以让基于点对点协议的下载软件(如:BT emule)获得更高的下载速度。
步骤四:一些限制
由于IPTABLES默认是允许本机所有通讯,这点和isa不一样,所以我们应该有所限制以提高网络的安全。
我只做了1-1024,的端口限制,低端口只允许22(openssh)和21(vsftp)通过。当然如果你的服务器自身不需要上网你可以禁止服务器本机的所有通讯,再打开相应的服务端口。
步骤五:开机自动拨号及加载防火墙
SLACKWARE采用的是BSD style 的启动脚本,这不同与很多主流的发行版。BSD style的优势就是很简洁和便于修改。
修改/etc/rc.d/rc.local
cd /etc/rc.d
vi rc.local
加入
#begin
#pppoe
modprobe via-rhine
ifconfig eth0 up
modprobe tulip
ifconfig eth1 192.168.0.1 netmask 255.255.255.0 up
pppoe-start >/dev/null 2>&1
lynx -mime_header -auth=dark81ue:******** \
"http://www.3322.org/dyndns/update?system=dyndns&hostname=wolveseyes.3322.org"
#nat
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
#gen
iptables -t filter -I INPUT -p tcp -m multiport --dport 22,21 -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --dport 1:1024 -j DROP
# wang meng yu radmin
iptables -t nat -A PREROUTING --dst wolveseyes.3322.org -p tcp --dport 210 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A POSTROUTING --dst 192.168.0.10 -p tcp --dport 210 -j SNAT --to-source 192.168.0.1
iptables -t nat -A OUTPUT --dst wolveseyes.3322.org -p tcp --dport 210 -j DNAT --to-destination 192.168.0.10
# wang meng yu web
iptables -t nat -A PREROUTING --dst wolveseyes.3322.org -p tcp --dport 80 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A POSTROUTING --dst 192.168.0.10 -p tcp --dport 80 -j SNAT --to-source 192.168.0.1
iptables -t nat -A OUTPUT --dst wolveseyes.3322.org -p tcp --dport 80 -j DNAT --to-destination 192.168.0.10
# wang meng yu emule
iptables -t nat -A PREROUTING --dst wolveseyes.3322.org -p tcp --dport 4888 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A POSTROUTING --dst 192.168.0.10 -p tcp --dport 4888 -j SNAT --to-source 192.168.0.1
iptables -t nat -A OUTPUT --dst wolveseyes.3322.org -p tcp --dport 4888 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A PREROUTING --dst wolveseyes.3322.org -p udp --dport 4888 -j DNAT --to-destination 192.168.0.10
iptables -t nat -A POSTROUTING --dst 192.168.0.10 -p udp --dport 4888 -j SNAT --to-source 192.168.0.1
iptables -t nat -A OUTPUT --dst wolveseyes.3322.org -p udp --dport 4888 -j DNAT --to-destination 192.168.0.10
# den ling emule
iptables -t nat -A PREROUTING --dst wolveseyes.3322.org -p tcp --dport 3132 -j DNAT --to-destination 192.168.0.2
iptables -t nat -A POSTROUTING --dst 192.168.0.2 -p tcp --dport 3132 -j SNAT --to-source 192.168.0.1
iptables -t nat -A OUTPUT --dst wolveseyes.3322.org -p tcp --dport 3132 -j DNAT --to-destination 192.168.0.2
iptables -t nat -A PREROUTING --dst wolveseyes.3322.org -p udp --dport 3132 -j DNAT --to-destination 192.168.0.2
iptables -t nat -A POSTROUTING --dst 192.168.0.2 -p udp --dport 3132 -j SNAT --to-source 192.168.0.1
iptables -t nat -A OUTPUT --dst wolveseyes.3322.org -p udp --dport 3132 -j DNAT --to-destination 192.168.0.2
#end
保存退后,重新启动,一切正常的话就可以在不用在登陆进系统的情况下,就可以自动拨号并加载防火墙了。
结束语
iptables是linux下的通用防火墙,在各个发行版的配置是一致的,因为它面向的是内核接口,所以此文已适合与其他的发行版。
iptables有很多高级功能需要为内核打上补丁才能使用,但这已不在本文范围之内,有兴趣的朋友可以自己研究。
通过这次实验我们自己也学到了不少东西,特别是在做端口映射遇到了不少麻烦,但最后还是得以解决。
参考文献
iptables 指南 1.1.19
展开阅读全文