当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > ipf+ipnat+ipfw建立带流量控制的透明网关

Unix/Linux
mysql+httpd+gd+php+zend
automake 小回顾
unix黑客精神的最好诠释
www
sun t3存储的设置
RPM简明中文手册
Linux爱好者入门教程 序章 (持续更新)
第一章 Linux基础知识 (飘心)
linux下进程与线程
浅谈如何学习linux
第二章 Linux安装
硬件安装指南
Windows 2000 的桌面不見了的解決方法
部分的ADSL路由器默认帐号密码
如何设定安全log服务器呢?
iptables 规则速查
网友学习 Linux 的七点忠告
sniffer的含义及原理
Linux编程白皮书 第二章 内存管理
Linux编程白皮书 第二章 内存管理 2.1.1 请求调页 --2.1.5 访问控制

Unix/Linux 中的 ipf+ipnat+ipfw建立带流量控制的透明网关


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 77 ::
收藏到网摘: n/a

ipf+ipnat+ipfw建立带流量控制的透明网关
FreeBSD新手,第一次写心得,不清楚之处还敬请原谅。有问题的地方还望不吝指教!谢谢! 近日因为宿舍的adsl猫的路由功能被电信屏蔽,因此使用FreeBSD5.1+ipf+ipnat+ipfw+双网卡+pppoe搞定带流量控制的透明网关。 原来使用ipfw+natd,因为pppoe得到的tun0的ip是动态的,无法做到端口映射。虽然可以成功代理和可控,但是没有达到预定目的,故弃用。 下面是我的配置过程: (1)当然是重新编译内核。(注:如果你是新装的系统,建议修改完cpu类型以后来一次make world,可以提高系统的效率。) 添加下列项目: options IPSTEALTH \是防火墙透明 options IPFILTER \打开ipf options IPFILTER_LOG \打开ipf的日志 options IPFILTER_DEFAULT_BLOCK \ipf默认规则,deny all 然后编译内核。 注意:如果要ipf和ipfw同时使用,切记要将ipf编译到内核里面,然后再kld ipfw。如果将两者都编译进内核会导致系统启动的时候卡在一个检测网络接口的地方。 (2)安装新内核以后,就是详细配置相关规则了。 (a):ppp拨号的设置比较简单,下面就给出一个示范性的ppp.conf文件,内容如下: default: set log Phase Chat LCP IPCP CCP tun command set redial 15 28800 set reconnect 15 28800 pppoe: #加入在kernel中配置的会连接ADSL设备的网卡的名称,我的是rl0 set device PPPoE:rl0 set mru 1492 set mtu 1492 set speed sync enable lqr set lqrperiod 5 set cd 5 set dial set login set timeout 0 set authname Your UserName used to login set authkey Your Password used to login set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 add default HISADDR # Add a (sticky) default route enable dns (b):在rc.conf中添加下列项目: ppp_enable="YES" ppp_mode="ddial" \断线自动重拨 ppp_mode="background" ppp_profile="pppoe" \根据你的ppp.conf文件设置,这里我使用的是pppoe ipfilter_enable="YES" ipnat_enable="YES' gateway_enable="YES" 然后重新启动系统使系统自动拨号,启用ipf防火墙。 注意:因为默认的ipf规则是block all,因此使用网络管理配置的此时会失去与系统的联系。因此需要预先在/etc目录中添加暂时性的ipf.rules项目。 暂时性的ipf.rules内容如下:pass in all pass out all (c):重新启动以后就可以看到ipf已经起到作用了。又因为我们使用的是pppoe拨号,因此得到的是动态ip。我们要想详细配置防火墙和端口映射就需要写一个脚本(ipf.sh)来自动生成ipf.rules和ipnat.rules。然后把它放到自启动目录中,加上可执行属性,使系统启动以后可以自动生成规则集。 示范性脚本如下: #!/bin/sh ########################################## #ipf.sh 是一个自动检测ADSL分配的IP地址和利用这个IP地址动态创建IPFILTER过 #滤规则的脚本。 #使用方法: #步骤一:要确定使用ipf.sh脚本的服务器能正常使用ADSL拨号和IPFILTER能正常运 #行。 #步骤二:把ipf.sh脚本修改成你的实际网络情况。修改如下: #内部网卡设备号、内部网段、服务器IP地址、ADSL拨号网络设备号或自己增加网络设备 #和相应的过滤规则。 #步骤三:把ipf.sh移动到 /usr/local/etc/rc.d中,记得加上可执行属性。 ############################################################### #内部网卡设备号vr0 INTARNDEV="vr0" INTARN=`ifconfig $INTARNDEV | grep inet | cut -d ' ' -f 2` #内部网段192.168.0.0/24 INTARNNET="192.168.0.0/24" #服务器IP地址 #注意:服务器IP地址为0.0.0.0时是不会做相应的服务映射,只在填写了正确的IP地址后才会映射到该IP地址上。 INTARNFTP="0.0.0.0" #FTP服务器 INTARNSSH="0.0.0.0" #SSH服务器 INTARNEMAIL="0.0.0.0" #EMAIL服务器 INTARNDNS="0.0.0.0" #DNS服务器 INTARNWEB="0.0.0.0" #WEB服务器 INTARNSSL="0.0.0.0" #SSL服务器 INTARNRTSP="0.0.0.0" #RTSP服务器 INTARNMYSQL="0.0.0.0" #MYSQL服务器 INTARNJABBER="0.0.0.0" #JABBER服务器 #ADSL拨号网络设备号tun0 ADSLDEV="tun0" ADSLIP=`ifconfig $ADSLDEV | grep inet | cut -d ' ' -f 2` until [ $ADSLIP ] do sleep 5 done #动态生成ipnat.rules规则 echo '######################################################' > /etc/ipnat.rules echo '#/etc/ipnat.rules #' >> /etc/ipnat.rules echo '######################################################' >> /etc/ipnat.rules echo '' echo '#把所有的内部网络IP伪装成ADSL拨号IP' >> /etc/ipnat.rules echo 'map '$ADSLDEV' '$INTARNNET' -> '$ADSLIP'/32 portmap tcp/udp 10000:65000' >> /etc/ipnat.rules if [ $INTARNFTP != "0.0.0.0" ] then echo '' echo '#把对ADSL拨号IP的FTP服务映射到服务网络的FTP服务器上'