中国Linux论坛 FreeBSD世界版主。用ipfilter实现透明代理。" />

用ipfilter实现透明代理

本人(作者)属新手上路, 才学习了没几天, 刚刚配好了一台代理服务器, 对于高手来讲实在是小菜一碟, 本没有什么可以值得炫耀的. 应 href="http://www.Linuxforum.net">中国Linux论坛 FreeBSD世界版主 href="mailto:yjs@oldhand.org">r00t 的要求, 对配置过程做了一个记录, 不免贻笑大方.
文中如有什么错误, 请与作者
联系. 本文着重介绍配置透明代理, 基本不涉及网络服务器, 含dns, web, email的配置, 这些服务器对于防火墙的要求, 请参照其它介绍.



采用本文内容, 如果造成任何损失, 作者概不负责.



Reference:


IP Filter Based Firewalls HOWTO [ href="http://www.obfuscation.org/ipf/ipf-howto.pdf" target=_blank>PDF
| target=_blank>HTML ] (本文中简称 HOWTO)

target=_blank>Quick CableNet Connections with FreeBSD - By, Leon



系统构成


Gateway:


系统安装FreeBSD 4.5. PENTIUM-S 100, 80M内存, 4G硬盘. 安装双网卡.





Dlink DFE5000TX一块古老的网卡, 老得Windows 98都需要厂家的驱动, Windows 2000厂家都不提供驱动了, 不过BSD/Linux还都支持这块网卡, FreeBSD中为dc0. 该网卡连接内部网络.

Dlink DFE530TX, FreeBSD中为vr0. 该网卡连接 ADSL Modem.


网内客户机


本文中有时称为ClIEnt, 安装Windows XP



网络结构


Gateway dc0分配地址192.168.0.1/24, 通过HUB连接内网Windows XP客户机
192.168.0.4/24, vr0连接ADSL Modem, 通过pppoe拨号上网.采用动态地址.



本文假定Gateway 的 pppoe和DNS已经正常工作, 有关这方面的介绍, 请参照其它文章.



Gateway设置


编译内核




cd /usr/src/sys/i386/conf

cp GENERIC KERNEL1

vi KERNEL1






修改该内核配置文件, 增加如下配置









options IPFILTER
# ipfilter support


options IPFILTER_LOG
# ipmon( log support


options IPFILTER_DEFAULT_BLOCK
# block all packets by default


options RANDOM_IP_ID
# RANDOM_IP_ID causes the ID field in IP packets to be
randomized



# instead of incremented by 1 with each packet generated.


options BRIDGE



options ICMP_BANDLIM
# Rate limit bad replies






#options TCP_DROP_SYNFIN
# drop TCP packets with SYN FIN



# 该参数可以提高系统的安全性,但在作web server时不建议使用,详见LINT





取消内核中所有与IPFIREWALL有关的配置









# options IPFIREWALL
# firewall


# options IPFIREWALL_VERBOSE
# enable logging to syslogd(


# options IPFIREWALL_FORWARD
# enable transparent proxy support


# options IPFIREWALL_VERBOSE_LIMIT=100
# limit verbosity


# options IPFIREWALL_DEFAULT_TO_ACCEPT
# allow everything by default






# options DUMMYNET






调整网络参数





options NMBCLUSTERS=32768



系统安装时该参数很小, 会影响网络的性能. 这个数值只是我简单的配置, 做服务器可能要更大. 具体说明详见 href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html" target=_blank>FreeBSD HandBook "http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-kernel-limits.html" target=_blank>6.10.2 Network Limits





标示该内核





ident KERNEL1





编译内核





cd /usr/src

make buildkernel KERNCONF=KERNEL1

make installkernel KERNCONF=KERNEL1

(这两个命令可以合并为 make kernel KERNCONF=KERNEL1)





修改配置文件


/etc/rc.conf


删除该文件中有关ipfw的配置, 或者将

推荐阅读