分享
 
 
 

Ipf+ipnat+ipfw建立带流量控制的透明网关

王朝other·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

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服务器上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 20 -> '$INTARNFTP' port 20' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 21 -> '$INTARNFTP' port 21' >> /etc/ipnat.rules

fi

if [ $INTARNSSH != "0.0.0.0" ]

then

echo ''

echo '#把对ADSL拨号IP的SSH服务映射到服务网络的网管工作站上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 22 -> '$INTARNSSH' port 22' >> /etc/ipnat.rules

fi

if [ $INTARNEMAIL != "0.0.0.0" ]

then

echo ''

echo '#把对ADSL拨号IP的EMAIL服务映射到服务网络的EMAIL服务器上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 25 -> '$INTARNEMAIL' port 25' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 110 -> '$INTARNEMAIL' port 110' >> /etc/ipnat.rules

fi

if [ $INTARNDNS != "0.0.0.0" ]

then

echo ''

echo '#把对ADSL拨号IP的DNS服务映射到服务网络的DNS服务器上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 53 -> '$INTARNDNS' port 53' >> /etc/ipnat.rules

fi

if [ $INTARNWEB != "0.0.0.0" ]

then

echo ''

echo '#把对ADSL拨号IP的WEB服务映射到服务网络的WEB服务器上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 80 -> '$INTARNWEB' port 80' >> /etc/ipnat.rules

fi

if [ $INTARNSSL != "0.0.0.0" ]

then

echo ''

echo '#把对ADSL拨号IP的SSL服务映射到服务网络的SSL服务器上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 443 -> '$INTARNSSL' port 443' >> /etc/ipnat.rules

fi

if [ $INTARNRTSP != "0.0.0.0" ]

then

echo ''

echo '#把对ADSL拨号IP的RTSP服务映射到服务网络的RTSP服务器上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 554 -> '$INTARNRTSP' port 554' >> /etc/ipnat.rules

fi

if [ $INTARNMYSQL != "0.0.0.0" ]

then

echo ''

echo '#把对ADSL拨号IP的MYSQL服务映射到服务网络的MYSQL服务器上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 3306 -> '$INTARNMYSQL' port 3306' >> /etc/ipnat.rules

fi

if [ $INTARNJABBER != "0.0.0.0" ]

then

echo ''

echo '#把对ADSL拨号IP的JABBER(客户端口5222和服务器端口5269)服务映射到服务网络的JABBER服务器上' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 5222 -> '$INTARNJABBER' port 5222' >> /etc/ipnat.rules

echo 'rdr '$ADSLDEV' '$ADSLIP'/32 port 5269 -> '$INTARNJABBER' port 5269' >> /etc/ipnat.rules

fi

#动态生成ipf.rules规则

echo '#######################################################' > /etc/ipf.rules

echo '#/etc/ipf.rules #' >> /etc/ipf.rules

echo '#######################################################' >> /etc/ipf.rules

echo '#阻塞所有存在安全问题的数据包'>> /etc/ipf.rules

echo 'block in log quick all with short' >> /etc/ipf.rules

echo 'block in log quick all with ipopts' >> /etc/ipf.rules

echo 'block in log quick all with frag' >> /etc/ipf.rules

echo 'block in log quick all with opt lsrr' >> /etc/ipf.rules

echo 'block in log quick all with opt ssrr' >> /etc/ipf.rules

echo '' >> /etc/ipf.rules

echo '#外部网络的数据只有FTP(使用20和21端口)、www、dns、smtp、pop3、mysql、ssh、rtsp、jabber和ssl的服务可以进入'

>> /etc/ipf.rules

if [ $INTARNFTP != "0.0.0.0" ]

then

echo 'pass in quick on '$ADSLDEV' proto tcp from any to any port = 20 keep state' >> /etc/ipf.rules

echo 'pass in quick on '$ADSLDEV' proto tcp from any to any port = 21 keep state' >> /etc/ipf.rules

fi

if [ $INTARNSSH != "0.0.0.0" ]

then

echo 'pass in quick on '$ADSLDEV' proto tcp from any to any

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有