LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4499|回复: 11

FreeBSD下用squid + ipfilter实现透明代理:

[复制链接]
发表于 2004-2-12 09:04:09 | 显示全部楼层 |阅读模式
测试环境:
# 此处假设环境为:
# A机双网卡,安装系统FreeBSD4.9,通过局域网上网,网关192.168.0.3
rl0接外网,地址:192.168.0.211   #此处”外网”也即能上网的局域网
rl1接内网,地址:192.168.1.211
# B机单网卡,安装系统winXP
地址:192.168.1.217
一、编译内核:
cd /usr/src/sys/i386/conf
cp GENERIC mykernel
ee mykernel
添加:
options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCK #这一句默认全部BLOCK,可以不要
ident mykernel                     #标识内核
#这里有个奇怪的地方,有次我输入错误了,变成indent mykernel结果mykernel文件中的有效定义部份全都跑到中间去了,当然编译时也报错了。不知道这个是什么命令。
编译:
1、cd /usr/src
make buildkernel KERNCONF=mykernel
make installkernel KERNCONF=mykernel
两句也可合二为一:make kernel KERNCONF=mykernel
不知道为什么,我用的是同一张4.9mini盘,可是开始几次可以这样编译,但是有时候又不行,只有如下这样编译了。
2、/usr/sbin/config mykernel
cd ../../compile/mykernel
make depend
make
make install
二、安装squid:(用ports,前提是能上网)
我曾经试着从网上下载了squid安装包用在linux中的方法一样进行解压安装,但是发现编译选项在linux中与BSD中是不一样的,我按照Ports中的Makefile来进行编译也不成功,后来就只有用ports来进行安装了,好在安装非常简单。
cd /usr/ports/www/squid
make install
make clean
# squid.conf位于:/usr/local/etc/squid/squid.conf
# squid命令位于:/usr/local/sbin/squid
配置squid.conf文件:(主要是以下一些选项)
http_port 3128
acl all src 0.0.0.0/0.0.0.0   #这里设为全部通过,具体用户控制方法可以查阅squid说明
cache_effective_user nobody
cache_effective_group nobody
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
emulate_httpd_log on    #这一句是为了让access.log日志文件有时间显示
保存后退出:
/usr/local/sbin/squid –z   #建立缓存目录,然后chmod更改缓存目录权限
/usr/local/sbin/squid     #启动squid,
此时如果有时不能启动,多半是因为/usr/local/squid/logs这里的权限不对,将之设为777就好了。
三、编辑/etc/rc.conf:(注意不能有ipfirewall)
gateway_enable=”YES”
named_enable=”YES”
ipfilter_enable=”YES”
ipfilter_program=”/sbin/ipf”
ipfilter_rules=”/etc/ipf.rules”    #此文件自定义,为包过滤规则文件
ipfilter_flags=””

ipnat_enable=”YES”
ipnat_program=”/sbin/ipnat”
ipnat_rules=”/etc/ipnat.rules”    #此文件自定义,为nat规则文件
ipnat_flags=”-Ds”

ipmon_enable=”YES”
ipmon_program=”/sbin/ipmon”
ipmon_flags=”YES”
四、编辑/etc/ipf.rules文件:(若此文件规则不得法,则有可能启动报错)
block in quick all with short
block in quick all with ipopts
pass in quick on lo0
pass out quick on lo0 all
pass in quick all
pass out quick all     #允许所以通过,当然不安全,规则自己设定,这是我只是测试用
五、编辑/etc/ipnat.rules文件:
rdr rl10.0.0.0/0 port 80 -> 192.168.1.211 port 3128 tcp/udp
map rl0 192.168.1.0/24 -> 192.168.0.211/32 portmap tcp/udp 10000:65000
六、启动:
ipf –f /etc/ipf.rules
ipnat –f /etc/ipnat.rules
ipnat –l    #查看nat规则
/usr/local/squid/logs/access.log   日志记录文件

有时重启系统以后会出现一些有关DNS之类的错误提示,多半是由于/etc/ipf.rules规则设置有误,还有一点,我这样配置好以后,开始并不能正常工作,要等一阵,有时要挺长时间,透明代理才能正常工作,不知道为什么,我装了几次都是这样。由于我也是菜鸟级别的,大家有什么建议及意见,欢迎一起交流。
发表于 2004-2-12 10:37:47 | 显示全部楼层

有点意思

想问一下,你这个透明代理就是squid,如果你在ipnat.rules里面没有rar那么一条规则,那么应该是没有代理作用的,那么我想知道加这一条规则和不加在意义上面有什么区别吗?
最终都会map为192.168.0.211这个地址!
 楼主| 发表于 2004-2-12 10:43:46 | 显示全部楼层
如果你加了这一条,才能将80端口指向代理的3128端口,这样你的squid控制语句才会起作用。才是真正的代理,要不然只是一个nat,也就不会有缓存等等了。
发表于 2004-2-12 10:51:45 | 显示全部楼层

哦,我明白了!

主要是提供了一个缓存机制,减少了网络流量,然后就是还有squid控制!这个控制也可以使用ipf控制,等于最后的好处就是多了一个缓存,我这样理解不知道可以吗?
 楼主| 发表于 2004-2-12 11:04:00 | 显示全部楼层
对于ipf控制我不太清楚,squid可以通过多种方式对网内机器进行控制,如:通过MAC地址、对用户进行分类、增添用户认证、上网时间限制、网址屏敝等等,感觉功能还是比较强大的,当然主要是增加了缓存,一个大的缓存在用户比较多的时候还是能起到加快网页浏览的作用的。
发表于 2004-2-12 11:17:54 | 显示全部楼层

哦,谢谢指教

又上了一课!
 楼主| 发表于 2004-2-12 11:24:49 | 显示全部楼层
呵呵,哪里哪里,我学习BSD也才两个星期:)我很菜的。
发表于 2004-2-12 17:13:30 | 显示全部楼层
最初由 尘飞扬 发表
对于ipf控制我不太清楚,squid可以通过多种方式对网内机器进行控制,如:通过MAC地址、对用户进行分类、增添用户认证、上网时间限制、网址屏敝等等,感觉功能还是比较强大的,当然主要是增加了缓存,一个大的缓存在用户比较多的时候还是能起到加快网页浏览的作用的。


能不能把具体的配置文件写出来。

还有,如果在内核加上
options IPFILTER_DEFAULT_BLOCK
而没有ifnat.rules和ipf.rules文件,那会怎样呢?(理论上讲)
 楼主| 发表于 2004-2-12 17:42:32 | 显示全部楼层
理论上讲,我想想,如果编译加了
options IPFILTER_DEFAULT_BLOCK
又没有ipf.rules那估计你的网络就完蛋了。
至于ipnat.rules如果没有,那代理也不起作用,也无法进行nat
发表于 2004-2-12 21:57:15 | 显示全部楼层
是的,没有ipf.rules我的局网不能上网了。且我也不能远程登录了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表