用ipfilter实现透.明代理.
Apri.l 20, 2002 电子
charleysense@btamial.n.et..cn<性病>
发布人:Charle.y Sense<性病>
(本文可以自由转载,请注明作者和出处.)学习
------------------.-------------------------------------------------.-------------.服务器
本人(作者)属新手上路, 才学习了没几天, 刚刚配好了一台代理服务器, 对于高手来讲实在是小菜一碟, 本没有什么可以值得炫耀的. 应 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>DF http://upload.bbs.csuboy.com/Mon_1004/126_6942_4f4b5a14d6d2379.gif[/img].
| target=_blank>;HT.ML ] (本文中简称 HOWTO.)( 游戏 )
target=_blank>;Quick CableNet .Connections with Free.BSD - By, Leon 健康
系统构成
Gateway:
系统安装FreeBSD 4.5. PENTIUM-S 100, 8.0M内存, 4G硬盘. .安装双网卡.--------------彩票
Dlink DFE5000TX一块古老的网卡, 老得Windows 98都需要厂家的.驱动., Windows 2000厂家都不提供驱动了, 不过BSD/Li.nux还都支持这块网卡, FreeBSD中为dc0. 该网卡连接内部网络. .
Dlink. DFE530TX, FreeBSD中为vr0. 该网卡连.接 ADSL Modem.(广告)
网内客户机
本文中有时称为Clie.nt, 安装Win.dows XP--- 印刷
网络结构
Gateway dc0分配.地址192.168.0.1/24, 通过.HUB连接内网Windows XP客户机 建材
192.168..0.4/24, vr0连接ADSL Modem, 通过pppoe拨号上网.采用动态地址.. 乙肝
本文假定Gate.way 的 pppoe和DNS已.经正常工作, 有关这方面的介绍, 请参照其它文章..
Gateway设置
编译内核
cd. /usr/src/sys/i386/conf.
cp GENERIC KER.NEL1外贸
vi KERNEL1
修改该内核配.置文件, 增加如下配置学习
options IPFILTER .--- 印刷
# ipfilter s.upport .
options IPFILTER_L.OG 虚拟主机
# ipmon( log support http://upload.bbs.csuboy.com/Mon_1004/126_6942_31ffde71d54d97a.gif[/img] 电子
opti.ons . IPFILTER_DEFAULT_BLOCK 婚庆
# .bloc.k 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 gen.erated. 教育
options BR.IDGE 外汇
options . ICMP_BANDLIM 健康
# Rate limit bad repli.es 鲜花
#opt.ions TC.P_DROP_SYNFIN --------------彩票
# drop TCP. packets with SYN.+FIN 汽车
# 该参数可以提高系统的安全.性,但在作web ser.ver时不建议使用,详见LINT 域名
取消内核中所有与IPFIREWALL有关的配置. 外汇
# options IP.FIREWALL 学习
# firewall
# options IPFIREWALL_VE.RB.OSE 服务器
# enable logging to syslogd( http://upload.bbs.csuboy.com/Mon_1004/126_6942_31ffde71d54d97a.gif[/img]虚拟主机
# options IPF.IREWALL_FORWARD. [成人用品]
# enable .transparent. proxy support 女人
# option.s IPFIREWALL_VERBO.SE_LIMIT=100 .
# limit verbosit.y --- 印刷
#. options IP.FIREWALL_DEFAULT_TO_ACCEPT 域名
# allow everythi.n.g by default --------------彩票
# opti.ons DUMMYNET 女人
调整网络参数
options .NMBCLUSTERS=327.68教育
系统安装时该参数很小, 会影响网络的性能. 这个数值只是我简单的配置, 做服务器可能要更大. 具体说明详见 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 KERNE.L1电影
编译内核
cd /usr/src
make buildkernel KERNCON.F.=KERNEL1(广告)
make installker.nel KERNCONF=KE.RNEL1 汽车
(.这两个命令可以合并为 make kernel KER.NCONF=KERNEL1) 杀毒
修改配置文件
/etc/rc.conf
删除该.文件中有关ipfw的配置, 或者将 美容
firewa.ll_enable="NO"服务器
增加如下配置
gat.eway_enable="YES" --- 印刷
# enable .gateway --------------彩票
named_enabl.e=YES" .
# enable naming .service
ipfilter_enable.="YES" 服务器
# S.tateful firewall .
ipfil.ter_program="/.sbin/ipf" .
ip.filter_rules="/etc/ipf..conf" .
# 新增加的规则文件, 有人习惯文.件名 .r.ule 域名
ipfilter_flag="". --------------彩票
ipnat_e.nable="YES" 健康
# Net.work Address Tran.slation 鲜花
ipnat_.program="/sbin/ipnat." 服务器
ip.nat_rules="/etc/ipnat.conf." 电子
#. 新增加的规则.文件, 有人习惯文件名 .rule 电子
ipmon_enable="N.O" 健康
# F.ir.ewall logging, 我没有开放, 如果是重要的服务器, 应该开放. 电子
ip.mon_prog.ram="/sbin/ipmon" 电子
ipmon_f.lag="-Ds" .
/etc/ipf.conf
该.文件为防火墙配置文件, 本文主要介绍实现透明代理, 从网络的角度讲是.代理Client, 因此关闭了Internet方向的Server 投资
In的所有端口. 这个配置, 允许内网dc0的所有操作, 允许对外Inter.net的所有请求, 但.外网Internet只允许对内网请求.的回应, 其他包一律丢弃. 女人
# 默认规则, .关闭阻止所有的包, 关闭所有的通路, 再一步一步.打开允许的通道. 服务器
# 如果内核设置.了 IPFILTER_DEFAUL.T_BLOCK, 可以省略. 汽车
block in all
block out all
# 允许内网的信息.自由通过. 电脑
pass in quick on dc0 from 192..168.0.0/24 to .any 投资
pass out quick on dc0 from any. to 192.168.0.0/24.服务器
# 允许本.机的信息自由通过. [成人用品]
pass in q.uick on lo0 all 电脑
pas.s out quick on lo0 all学习
# 禁止外网的无效地址通过
block in quick.. on tun0 from 192.168.0.0/16 to any 建材
blo.ck in quick on tun0 from 10.0.0..0/8 to any .
block in. quick on tun0 from 172.16.0.0/12 .to any <性病>
block in quick on tun0. from 127.0.0.0/8 to .any --- 印刷
block in. .quick on tun0 from 0.0.0.0/8 to any 域名
block in quick on tun0 from 1.92.0.2.0/14 to .any 服务器
block in quick on tun0 fr.om 204.152.64.0/23 .to any [成人用品]
block in quick on tun0 from 2.24.0..0.0/3 to any外贸
# 对外网信息的处理, 允许内网包发送到外网, 并且.允许外网对这些.包的回应信息通过 投资
pass out quick on tun0 proto tcp from an.y to any f.lags S/SAFR keep state kee.p frags 教育
pass out quick on tun0 proto udp from any. to any .keep state keep frags .
pass out quick on tun0 proto icmp .from any t.o any keep state keep frags 电子
/etc/ipnat..conf 电子
该文件为NAT配置文件.
本文中pppoe通过DHCP方式获得地址, 因此.无法在规则中给.出外网的地址, 先用0代替. 外汇
# ftp proxy, 为 active 方式的FTP使用., 稍后再作介绍. 请注意, proxy的设置一定要在portmap之.前. 女人
#map tun.0 192.168.0.0/24 ->; .0/32 proxy port ftp ftp/tcp 外汇
# IKE proxy, 为.E.SP (Encapsulating Security Protocol) 使用 .
# map tun.0 192.168.0.0/24 ->; 0/32 proxy port 500 i.psec/udp投资
# RealAudio pr.oxy, 只可用于PNM模式, RealPlayer G2已.经使用RTSP. [成人用品]
#map tun0 192.168.0.0/24 ->; .0/32 proxy port 7070 rau.dio/tcp.
# 允许内部的UDP/TCP包..通过,并且允许外网回应包通过 外贸
# 到外网采用指定范围.的端口 女人
# ma.p tun0 192.168.0.0/24 ->; 0/32 po.rtmap tcp/udp 40000:60000 .
# 到外网由系统.自动分配端口 --------------彩票
map tun0 192.168.0.0/24 ->; 0./32 p.ortmap tcp/udp auto.
# 允许内部ICMP通过,并且允许回应.包通过 ( 游戏 )
map tun0 19.2.168.0..0/24 ->; 0/32服务器
# 允许.net2phone, 将呼入.的呼叫转到指定机器 美容
# rdr tun0 0/0 port 6801 ->; 192..168.0.4 p.ort 6801 udp 鲜花
# 允许squid
# rdr dc0 0/0 port 80. ->; 127.0.0.1 port 3128 tcp. 外贸
/etc./sysctl.conf虚拟主机
net.inet.ip.for.warding=1电脑
net.inet.ip..sourceroute=0 汽车
net.ip.accept_sourcero.u.te=0.
# To definding against sequence. number at.tacks 外汇
# based on rfc 1948. by randomize in.itial sequence number 汽车
net.inet.tcp.strict_rf..c1948=1 建材
# To veri.sy that an incoming pack.et arrives on an interface 虚拟主机
# that has an address matching the packets. desti.nation address .
net.ine.t..ip.check_interface=1 乙肝
# To Drop SYN packets destine to non-listening .tcp/upd port.. .
# This will create a blackhole and protect. against. stealth port scans .
net.inet..tcp.blackhole=2 .
net.inet.udp.bla.ckhole=1--- 印刷
# Incr.ease TCP Windows size for increas.e in network performance .
# Ref:
http://www.psc.edu/networking/perf_tune.html 投资
net.inet.tcp.re.cvspace=655.35 域名
net.in.et..tcp.sendspace=65535<性病>
DNS
修改文件 /etc/reso.lv.conf, 增加.一条.
names.erver DNS_SERVER_IP.
如果内网有DNS Server, 应指向该服务器. 如果gateway本身为DNS Server, 为127.0.0.1, 必须配置named.conf. 一般.最简单的配置就是指向.ISP的DNS. Server..
客户机设置
将客户机的Gateway 和 DNS Server都.设置为Gateway机器的地址 192.1.68.0.1.
系统测试
Gateway修改完配置后需要启动. 命令. shutdow.n -r now 杀毒
客户机Windo.ws .XP不需重启, Windows 98要重启..
启动步骤
连.接internet, 命令ppp -dedic.ated <XXXXX >; .
同步防火墙. 我们在设置规则的时候并不知道网络地址, 只.有连接成功后才知道确切.的地址, 命令ipf 电脑
-y可以使ipfilter更新.地址, 之后ipfilter就会使用tun0的具体地址. 每次重新连接pp.poe后, 都需要进行同步.[成人用品]
Gatewat测试
测试内网, p.ing 192..168.0.4看是否正常. .
测试internet. 运行i.fconfig -a. 健康
察看tun0.的地址及其对应的gateway/router的地址, 假如为a.b.c.d. .ping a.b.c.d看是否正常. 杀毒
测试DNS是否正.常, .运行nslookup yahoo.com.cn, 看是否正常. .
测试网络, 运行traceroute yahoo.com.cn, 看是否正.常. 我的机器没装X.window, 因此无法使用浏览器进行测试. .
其它有用的测试命令,
ipfstat -hio 显示规则被.“击中”的情.况.外贸
ipfstat -t 显.示防火墙的连接状态. <性病>
ipnat -l 显示NAT的状态.. 服务器
n.etstat -r 显示路由表.电脑
netstat -i
显示网.络的情.况, 如果有错误或有大量的冲突包, 应该设法解决..
vmstat. 显示系统内存的状态, 如果资源不足, 应增加.资源或减少一些服务. 汽车
客户机测试
ping .192.168.0.1看是否正常. .
tracert a.b.c.d.看是否正常. BSD/Linux用traceroute命令, 若不正常, .是防火墙或NAT的问题. 服务器
nslookup yahoo.com.cn.看.是否正常. 若不正常, 是DNS设置的问题. --------------彩票
ping .yahoo.com.cn看是否正常. .
浏.览器上网, 看是否正常.(注意,浏览器不应设置prox.y)电影
经过测试, 证明Wind.ows XP使用.如下工具工作正常. 杀毒
浏览器:. IE6, Net.scape 4.72, Netscape 6 --------------彩票
Email: Outlook Express, 含 hotmail 和 .pop3 邮件的收发..
MSN, 含数据和语音通话.
安全测试
请参照
target=_blank>;
http://www.cert.org/security-improvement/practices/p060.html(广告)
href="http://web.ranum.com/pubs/fwtest/">;
http://web.ranum.com/pubs/fwtest/域名
相关话题
RealPlayer的问题
系统完成后, 发现RealPlayer在防火墙后无法听音.乐, 总是不停地bufferi.ng, 直到timeout. .
这.是因.为默认方式下, RealPlayer8 使用了UDP Port 6970-7170接收数据, 该数据被我们的防火墙无情的挡住了, 电脑
由于N.AT的存在, 简单地允许这样的数据包.也无法保证Client工作正常. 建材
ipfilter 提供了一个proxy给.我们, .规则为上面已经列出来了, 但是有关资料显示该proxy只支持古老的 PNM RealAud.io方式, RealPlayer G2已经使用 RTSP 方式. 该proxy并不支持. .
好在RealPlayer.提供与防火墙兼容的模式, 可以设置为只使用TCP Port. --------------彩票
70.70, 7071, 554 三个端口连接Server, 与我们的防火墙正好吻合. 在防火墙工作正常后, Re.alPlayer 8 的设置方法是:健康
启动RealPlayer
选择菜单 .View ->; Perferences ->; Tr.ansport --------------彩票
选择Au.to-Configure, Re.alPlayer可以自动为你设置为TCP 杀毒
Only的方式. 也可以手工设置,. 去除UDP的方式, 只用TCP的方.式.服务器
其他版本的设置方法, 请参照 target=_blank>;
http://service.real.com/firewall/adminfw.html 美容
QQ的问题
网上有关QQ问题谈得很多, 我使用的是MSN., 美容
因才对QQ不是很了解, 只能做一下简单的分析. 理论上讲, 通过服务器转发或向.外发送一般是没有什么问题的, 问题一.般出现在无法正常收到对方以UDP方式发送的消息,. 投资
该.消息无法通过我们的防火墙. 电影
不过这种说法对防火墙来讲不公平, 增加一条规则允许该UDP的包通过非常简单. 问题实际是在NAT上, 我们使用了192.168.0.0/16这样的内部地址. 当Q.Q向服务器.注册时, 实际使.用的是Gateway的地址, 但是如果内部有多个人使用QQ, 健康
服务器也会把这些QQ号码连接到这个IP上, 其他.用户根据服务器提供的地址从外部发送UDP包到了.Gateway, [成人用品]
Gateway就不知道应该把消息转发给谁. 因此这并不是一个简单的允许数据包通过的问题. 与此相同的问题还有netmeeting. 解决的方法, 一是允许用户全部通过服.务器转发, 防火墙能.够很好地处理这样.的问题. 我相信MSN就是这么做的. 但这.需要QQ 外贸
service provider的合作, 而且对他们的服务器会.有更高的要.求. 另一.种方法是类似ftp client的解决方式, 在Gateway上增加proxy. 我没有QQ的资料, 不能妄下结论. 电子
FTP的问题
FTP协议
这..是一个由于FTP协议所造成的问题, 让我们先看一下FTP协议. 电脑
FTP一般需要使用.两个端口, 端口21只是一个命令端口, 真正传送数据的时候, 还需要另外一个数据端口. 问题就出.现在第二个数据端口上. .
打开这.个数据端口的时候有两种方式, 一种是passive(PASV command)方式, 由FTP Server端提供一个连接的..IP/Port, FTP 汽车
Client连接到这个IP/Port上进行数据传输. 另一种是active(PORT com.mand)方式, 由F.TP Client提供.IP/Port, 杀毒
再由FTP Serv.er回叫至Client提供的地址. 具体采用哪一种方式, 是由F.TP
Client决定的, Cl.ient通过PASV或PORT命令.通知Server采用什么方式. 正是这样的握手方式, 给Server端和Client端都造成了.麻烦. 这个问题的具体描述详见 教育
target=_blank>;
http://www.daemonnews.org/200109/ftpnat.html域名
FTP Server
Server端一般不希望使用passive方式, 这种方式要求防火墙动态地打开PASV的.端.口. 鲜花
而activ.e方式.对于Server的防火墙没有什么特殊的要求. 但是FTP 女人
Ser.ver是不能选择的, 除非.声明不支持passive方式. 一般的解决方法是, 在防火墙上固定地打开一些端口, 如 .15001-19999, 每次通信, FTP 婚庆
Serve.r软件可以从这.些端口中选择一个作为PASV的端口通知FTP Client. 如果你的FTP .
Server不支持指定passive端口范围, 你应该考虑更换.FTP Serv.er了. 这种方式防火墙需要增加规则电影
pass in quick on .tun0 proto tcp fro.m any to 0/32 port 15000>;< 20000 .
fl.ags S keep state kee.p frags 电子
FTP Client
根据上面的协议规则, 如果F.TP Client采用passive方式, 对于防火墙来讲没.有什么特殊的要求, 我们可以把问题留给FTP Server. 汽车
好消息是,一般的FTP Cli.ent软件都支持passive方式, 我使用的网络蚂蚁(n.etant), 网际快车(FlashGet)默认方式都.是passive, 汽车
WS_FTP是可以设置的, 这样防火墙就不需要特殊处理了.. Unix下.需要设置 健康
FTP_PASSIVE_MODE=yes; exp.ort FTP._PASSIVE_MODE.
坏消.息是, 浏览器的FTP使用的是active方式, 而且好像还不能更改. 不过现在直接使用浏览器FTP的.人已经是很少了 .
----.-- 我从来就不用浏览器下载. .
还有, 有一些FTP站点, 不支持passive方式. 我曾经访问过一些私.人的FTP站点, 就无法使用passive下载, 也许是他们在设计防火墙的时.候没有考虑.吧..
支持active模式可以通过在NAT上增加proxy解决的. Linux通过增加ip_conntrack_ftp解决, ipnat已.经完.成了这一功能, 我们只需要增加一条规则.就可以了. 女人
那就是我前面ipnat.conf中的第一条规则. 该proxy可以还提供反向FTP代理, 用于FTP Server. 可惜的是, 这样有可能造成安全隐患,详见 target=_blank>;
http://www.false.net/ipfilter/2001_11/0273.html. 美容
我曾经与其他一些ipfilter的使用者讨论过这个问题, 一般认为, 如.果gateway兼做对外的FTP Server, 需要对外提供FTP.服务的话, 最好还是不要开放这一p.roxy, 内部用户只允许使用passive方式. ( 游戏 )
如果仅仅是做一个对外.的代理服务器,. 即FTP只对内部机器开放, 开放这一proxy应该是安全的. 鲜花