Linux 版 (精华区)
发信人: tcpip (偶的昵称改了), 信区: Linux
标 题: ipchains使用小结(透明代理网关)(转寄)
发信站: 哈工大紫丁香 (Mon Mar 6 12:49:19 2000), 转信
发信人: peny (在汪洋中无法停游的鱼), 信区: Linux
标 题: ipchains使用小结(透明代理网关)
发信站: BBS 水木清华站 (Mon Mar 6 06:23:35 2000)
这几天想为实验室做一个透明网关,以前也做过,
不过是在2.0.34的kernel上用ipfwadm做的,现在用RedHat6.0,
2.2.5的kernel,就把ipchains的东西看了一下,在bbs.smth.org
看了一下别人的讨论,又在www.chpcc.edu.cn上找了篇ipchains HowTo,
加上man和IP alias mini-HowTo,自己配了一下。
在配的过程中觉得大家的讨论非常有用,但就是不好找(对我这种懒人:)
今夜无法入睡,就把讨论整理一下好了,算是一个回报。
(标题里包含了ipchains,透明,网关,代理等字样,实是为了方便/ ?)
1、【 在 DBPZ (小石头※从头再来) 的大作中提到: 】
升级到RH 6.0, ipfw不能用了,请问怎样配置ipchains做透明网关?
**andrewleu (淡入淡出)答道:
ip chain 和ip masqua... 有一个一一对应的关系
比如:
Old command: ipfwadm -F -p deny
New command: ipchains -P forward DENY
Old command: ipfwadm -F -a m -S 192.168.0.0/24 -D 0.0.0.0/0
New command: ipchains -A forward -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0
ip chain 还能传送icmp包,不过觉得用不找就没研究过.
**czhu (国姓爷)说:
有ipfwadm-wrapper, 就是ipfwadm
**vertex (happy hacking)深沉的说:
ipchains have been totally rewriten .
ipfwadm is supported by linux kernel <= 2.0.x
ipchains is supoorted by linux kernel <=2.2.x
the next ip masq admin tools will be netfilter in 2.4.x
the 2.3.x series is now used netfilter written by the same author of ipchai
ns.but not the ipfwadm.
2、 【 在 Lamborghini (寻找欧宝中) 的大作中提到: 】
: 近日安装RH6,内河是重新编译过的2.2.5smp,装了两块Intel EtherExpress PRO100
+: ,一块做192.168.5.2是内部网的gateway,另一块是192.168.1.150,连接外部网络,
: 可是现在ping的情况却是这样的:
: 192.168.5.2 192.168.1.150 192.168.5.* 192.168.1.
*: 内部机器192.168.5.* OK OK OK failed
: 外部机器192.168.1.* failed OK failed failed
: 这个是不是也太严格了一点?我想要的是内部网的机器能够访问外部的,而外部的
不能: 访问内部就可以啦,有谁知道这是怎么会事吗?
: 我的ipchains 初始化文件如下:
: ipchains -F forward
: ipchains -P forward DENY
: ipchains -P input ACCEPT
: ipchains -P output ACCEPT
: ipchains -A forward -j MASQ -s 192.168.5.0/24 -d 192.168.1.0/24
: 哪位牛人能告诉我怎么回事啊?别说是kernel版本太低,或者是没有编译过啊,这
两: 个原因可以排除
**vertex (lancelord)答道:
以上的ipchains的配制没有问题.
我想你的问题好象是 网络的转发功能没有打开...
forward 打开了么..
echo 1 > /proc/sys/net/ipv4/ip_forward
or {
edit /etc/sysconfig/network
forward=true or yes..
then.
/etc/rd.c/init.d/network restart.
}
3、【 在 manChair (风儿) 的大作中提到: 】
: 做过的大虾小虾请出手吧
: 怎么把内部的ip变成可以直接连出去的呢
: 都需要增加哪些chains呀
: 不太明白, 文挡里面没有离子啊,
: 多谢了
**hsen (若弱)答道:
如下
#!/bin/sh
#10.1.255.254是网关地址
ipchains -F input
ipchains -F forward
ipchains -F output
ipchains -N acc-in
ipchains -N ext-in
ipchains -F acc-in
ipchains -F ext-in
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward MASQ
ipchains -A input -s 10.1.0.0/16 -j acc-i
ipchains -A input -d 10.1.0.0/16 -j ext-in
ipchains -A acc-in -d 10.1.255.254 -j RETURN
ipchains -A acc-in -s 10.1.255.254 -j RETURN
ipchains -A acc-in -s 202.xxx.xxx.xxx -j RETURN
ipchains -A acc-in -d 162.105.0.0/16 -j RETURN
ipchains -A acc-in -d 166.111.0.0/16 -j RETURN
ipchains -A acc-in -d 202.38.0.0/16 -j RETURN
ipchains -A acc-in -d 202.112.0.0/13 -j RETURN
ipchains -A acc-in -d 202.192.0.0/12 -j RETURN
ipchains -A acc-in -d 210.32.0.0/12 -j RETURN
ipchains -A acc-in -d 159.226.0.0/16 -j RETURN
ipchains -A acc-in -d 210.72.0.0/13 -j RETURN
ipchains -A acc-in -d 203.93.0.0/17 -j RETURN
ipchains -A acc-in -d 161.207.0.0/16 -j RETURN
ipchains -A acc-in -d 168.160.0.0/16 -j RETURN
ipchains -A acc-in -d 202.24.0.0/22 -j RETURN
ipchains -A acc-in -d 202.88.0.0/13 -j RETURN
ipchains -A acc-in -d 202.96.0.0/12 -j RETURN
ipchains -A acc-in -d 203.88.0.0/22 -j RETURN
ipchains -A acc-in -d 203.90.0.0/22 -j RETURN
ipchains -A acc-in -d 203.196.0.0/22 -j RETURN
ipchains -A acc-in -d 203.208.0.0/22 -j RETURN
ipchains -A acc-in -p tcp -d 0.0.0.0/0 4000 -j RETURN
ipchains -A acc-in -p udp -d 0.0.0.0/0 4000 -j RETURN
ipchains -A acc-in -s 10.1.2.122 -j RETURN
ipchains -A acc-in -s 10.1.2.191 -j RETURN
ipchains -A acc-in -s 10.1.3.12 -j RETURN
ipchains -A acc-in -s 10.1.3.55 -j RETURN
ipchains -A acc-in -s 10.1.2.112 -j RETURN
ipchains -A acc-in -s 10.1.1.9 -j RETURN
ipchains -A acc-in -j REJECT
4、单网卡可以用ipchains吗?
**jgsun (Gany)答道:
现学现卖的说:
1. 用ip alias把内部网的网关与eth0绑定,这样同一个网卡就同时对应了两个ip地址,
say 166.111.x.x and 192.168.1.1,这就完全等价于两个网卡对应两个地址,内部
网的packets送往192.168.1.1,经过系统对packets的重新包装后,再经166.111.x.x
送出,而internet送往内部网的packets先进166.111.x.x,由系统解包后,再竟
192.168.1.1送往内部网.
2. 在rc.local中加上
ipchains -F forward
ipchains -P forward DENY
ipchains -P input ACCEPT
ipchains -P ouput ACCEPT
ipchains -A forward -s 192.168.1.0/24 -j MASQ
注意,ip4_forward要打开
就齐活.
5、【 在 lank (大郑) 的大作中提到: 】
: 一用cuteftp 就报
: error opening data socket
: 原来用socks5代理出去就没事,
: 为啥?
**starw (孤星)答道:
modprobe ip_masq_ftp
或者试试打开cuteftp->options->firewall->pasv mode
**很多人说:
insmod ip_masq_ftp
6、 ipchains有logs的吗?
【 在 oasis2k (伤信) 的大作中提到: 】
: 我想知道有谁用过的的机器作网关,我想得到这些资料
: 在哪里可以找到ipchains的日志文件??//bow
**janus (beater)答道:
ipchains -l ...
/var/log/messeges
7、内部局域网的机器用的是WIN98和NT,需要有什么设置吗?
答:把IPCHAINS的那台机器地址设为网关, DNS地址照旧
8、CuteGuy关于代理服务器的心得:
Linux下比较成熟的代理服务器软件是Squid。
透明代理这个说法不是很确切,我想你应该指的是NAT技术,
有时候又叫做“透明网关”,说白了,就是在IP层将内部网络
发往外部网络的IP数据报源地址转换成有效的出口地址,将外
部返回的IP数据报转发给原请求方,内部主机虽然使用的是内部
地址,但是只需要将“透明网关”主机内部地址设置为本机网关,
不需要任何其它设置就可以直接上网了,如果NAT做得好的话,
就好象没有经过什么东西直接上的网一样。所以叫“透明”。
NAT的好处是与高层协议基本无关,而代理服务器就是与高层
协议有关的,分为FTP代理、HTTP代理、telnet代理.......
这样在增加新的应用的时候,如果使用NAT技术,就不需要考虑
是否能够通过代理出去。当然NAT的缺点是不能象代理那样通过
设置磁盘Cache来提高效率。
Windows下支持NAT技术的典型软件是Winroute,Linux则在内核
中包含ipchains/ipfw可以支持NAT。还有商业防火墙软件大都支持
NAT,某些路由器也支持。
NAT通常在IP地址不够,必须使用内部地址的时候使用。163的
10.x.x.x实际上就是内部地址,通过NAT出去的。
9、CuteGuy (这个春天有点冷)当年的问题:
: 一个机房因为IP地址不够,原来用NT Server+MS Proxy做代理,速度太慢,
: 现在准备用Linux做IP地址映射,内部IP为192.168.1.X,可以透明访问外部
: 大家觉的用什么软件做好呢?
: 另外,现在这台机器已经装了TLC 3.0.2 PR1,内核针对router优化编译过,
: 网卡分别是3C905和D-Link 530TX,主机为Dell PII 300,64MRAM,大概要带
: 五十台左右上网的机器,这样的配置合适么?感谢!:))
**yhuang (cat)的解答:
就用它吧,不用改系统了,具体参考<<ip伪装HOWTO>>, 我简要介绍一下:
1. 首先让你的两块网卡都跑起来,用/sbin/ifconfig确认一下,我的是这
样的:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:2689 errors:0 dropped:0 overruns:0
TX packets:2689 errors:0 dropped:0 overruns:0
eth0 Link encap:Ethernet HWaddr 48:4F:4D:F9:0E:5E
inet addr:202.115.65.140 Bcast:202.115.65.255 Mask:255.255.255.
0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:180600 errors:0 dropped:0 overruns:0
TX packets:13896 errors:0 dropped:0 overruns:0
Interrupt:4 Base address:0x300
eth1 Link encap:Ethernet HWaddr 00:80:C8:E1:DE:CF
inet addr:192.9.201.250 Bcast:192.9.201.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:29567 errors:0 dropped:0 overruns:0
TX packets:15848 errors:0 dropped:0 overruns:0
Interrupt:3 Base address:0x340
要有两个eth?才对.
3.然后打开内核的IP forward, 在/etc/sysconfig/network里面应有这样一句:
FORWARD_IPV4="yes"
4. 让Linux在启动时装入ip_masq模块并设置IP转发规则, 在/etc/rc.d/rc.local
里添加下面的几行:
/usr/sbin/ipfwadm -F -p deny
/usr/sbin/ipfwadm -F -a m -S 192.168.xxx.xxx/24 -D 0.0.0.0/0
/sbin/modprobe ip_masq_cuseeme
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_quake
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_vdolive
5. 注意:不要启动routed、gated等网关程序, 两根网线不要插反了。
****peny注:我老土,配了ip alias, 配好routed,配好ipchains,可是就是不能
出内部网,折腾了一个下午,最后看到yhuang (cat)的这篇,关键是
这第五条,不能启动routed。我自己想透明网关,自然而然的把它当
router来配了。
10、【 在 suzhe (I Love Linux) 的大作中提到: 】
: 用modem带20台机器同时上网,为了省电话费还要实现自动拨号
: 和挂断功能.
: 本来想用squid做个缓冲代理,可是一用squid,diald自动拨号就
: 不灵了,真气人!
: 另外服务器上的sendmail不知为什么不能转发邮件,哪位大虾知
: 道如何配置sendmail实现外发邮件的功能,请指教一下.另外是不是
: qmail要好用一些?
**emprise (富国强兵)的回答:
我是直接在/etc/mail/access中允许对大多数域名的转发,如
net RELAY
com RELAY
然后 make access.db, 再让sendmail重读配置文件就可以了
这样不用重新生成sendmail.cf, 比较省事的说.
11、xsz (勇哥~努力!~奋斗!)的高级应用
**xsz (勇哥~努力!~奋斗!)大声发问:请问有没有人这么用ipchains的?
用ipchains做了个route,连接两个子网:192.168.1.0,166.111.2.0,
现在在166.111.2.0里有台机器166.111.2.3跑的是NT Server,用来做
PDC,然后192.168.1.0内部的机器通过使用lmhosts文件注册该PDC并
跨网段登录到该PDC上,直到此为止一切都是正常的,即子网内的机器
可以看到PDC及192.168.1.0网段内的所有机器,但是却看不到166.111.2.4
这台同是域内的机器(该机器也在lmhosts内注册了),使用windows的
search computer能够找到该机器,使用\\166.111.2.4的方法也能访问
该机器上的资源,但是反之,从PDC或者是166.111.2.4上却不能看到
192.168.1.0内的机器,查找也找不到,问题描述得查不多了,我有以下
几个问题:
1. 能否使192.168.1.0内的机器不用查找而直接在network neighbour
里看到166.111.2.0里的机器?如果能,该如何配置192.168.1.0内
的windows 9x/nt客户机?
2. 能否使166.111.2.0里的机器直接从网邻中直接访问192.168.1.0
中的机器?如果能,该如何配置166.111.2.0内的机器或者该如何
设置ipchains?
其实说白了就是个跨网段的NT单域模型,中间用个linux box连接起来,
只不过我以前没做过类似的实验,有点找不着北,不知道这个反向访问
子网内的机器该如何操作,有经验的大侠给点提示. //bow
下面开始了乱哄哄的回应
**scaner (我是一头猪,默默去等待)犹豫了一下:
需要配个网桥了, 不然ipx包出不去
只要能让ipx包出去, 怎么都可以了,
我个人认为
**xsz (勇哥~努力!~奋斗!)不满的说:
我不用ipx,用的纯tcp/ip协议,连netbeui都不用,一贯如此,
还有什么地方要注意吗?
**starw (孤星)跳了出来,嬉皮笑脸:
1 samba带的wins服务开了没有?把linux作为内部机器的wins server
或者用外面的NT行不行,不清楚啦,你看看samba的东东吧
2 我想除了ipchains的配置外,外面的机器需要加上相应的路由
估计每台机器都要加吧,或者直接加在2.1(网关?),不过这个可能性
不太大吧,嘻嘻
我没干过这些啊,纯属虚构,如有雷同......
**ruster (氰化钾)思考了一下,断然说道:
大概可以这样做的,仅仅是个想法,没试过
从192.168.1.0到166.111.2.3的包不MASQ.这需要动166.111.2.0的路由
从192.168.1.0到外地的包仍然MASQ.
将网关做成一个wins中继器.
**xsz (勇哥~努力!~奋斗!)的要求还很高:
问题是我不可能动到166.111.2.0的路由,我只能想办法在192.168.1.0
的子网上下功夫,如果把192.168.1.1配成个wins server的话能行吗?
我试过在PDC(166.111.2.3)上设置wins可是没有任何效果:(
**ruster (氰化钾)高深莫测,不愧为剧毒:
可以的,问题是你必须想个办法让166.111.2.*访问到你的内部网.
将192.168.1.1设置成外部机器的缺省网关?
如果你用MASQ那么wins好像是不起作用的
大体上应该和净化区里面带DMZ的防火墙系统的方案差不多吧,
到166.111.2.*的包不MASQ,到外面的包MASQ,在内部和166.111.2.*之间加一个
wins proxy.我没试过,你可以试试看
**scaner (我是一头猪,默默去等待)不甘寂寞:
那我觉的用tcp的可能性不大牙,
如果没有特殊配置, tcp没法通过ipmasq
穿到内部来了, 而smb服务又不能随便换
端口. 个人观点
**xsz (勇哥~努力!~奋斗!)看了看scaner (我是一头猪,默默去等待),
一声冷笑:
呵呵,我说一个我做的实验吧:
在166.111.2.3上配置双IP(166.111.2.3/166.111.2.1,192.168.1.5/192.168.1.1),
配置双网关是为了寻址192.168.1.0网段时能够找到合适的路由,然后在166.111.2.3
上的lmhosts文件了加上注册地址192.168.1.0网段内的机器名的解析,这时候从
166.111.2.3上是能够访问到192.168.1.0内的机器的,只是这个时候同样在网邻里
是看不到的,只能直接用\\192.168.1.2(或\\机器名)的方式访问,但是这样消耗了
一个内部IP,而且必须配置双网关,在正常网络里双网关常导致寻径失败,经常
网络连接就会莫名其妙的断掉,所以只能说是个权宜之计:(
**ruster (氰化钾)再支一招:
这样吧.你把windows客户的网关指向166.111.2.3试试.
**xsz (勇哥~努力!~奋斗!)得寸进尺:
是指把外部的166.111.2.*的机器的网关改成166.111.2.3吗?
可这样的话岂不是所有的数据都从166.111.2.3走了?那我的
166.111.2.*的优势不就没有用上?
**ruster (氰化钾)吐血:
又要马儿跑,又要马儿不吃草,您这个....:(
**xsz (勇哥~努力!~奋斗!)忽然大叫一声,脸上一阵狂喜,
狂喜里又透着莫名其妙:
刚刚又测试了一把,结果居然通了,偶faint,天知道上回为什么不通,
不过结果并不理想(tracert的结果很慢),就当是个纯技术测试吧.
呵呵,搞了这么多天的互通,也算终于有个结果了,罢手了:)
**MrX (毛线球)这时凑了过来:
: In my case, the other Sub net can see the other sub net in the net neigh
bor,
: but when click, reported with 找不到网络路径。用IP访问则可以。//sigh.
**xsz (勇哥~努力!~奋斗!)一面盘算等会找哪个mm陪自己去吃饭,
一面漫不经心的支吾:
呵呵,这个我在内部网访问外部网时已经解决了:)
而且这应该是最容易解决的啊
关键是现在通过外部访问内部时还是有问题,
如果按前面一位朋友说的用:
ipchains -A forward -s 192.168.1.0/24 -d 166.111.2.0/24 -j ACCEPT
ipchains -A forward -s 192.168.1.0/24 -d ! 166.111.2.0/24 -j MASQ
ipchains -A forward -s 166.111.2.0/24 -d 192.168.1.0/24 -j ACCEPT
ipchains -A forward -s ! 166.111.2.0/24 -d 192.168.1.0/24 -j MASQ
的方法的话,内外互相访问没问题,可是内部却上不了
internet了,真是faint
现在正在研究这个chains怎么设置才行呢:(
呵呵,提示一点:
ipchains + lmhosts/wins
单向的话前面的例子多了,双向的话看我刚才的那个ipchains策略
(其实是前面一个大侠指点的,我照样画了一个:P)就可以了
我一直没有试wins,因为没装wins server:PP,等哪天有空拿samba
试试它的wins吧,记得内外网段内的机器都要写好对应的lmhosts
**MrX (毛线球)一脸的失望:
hehe. 我早已用了WINS了,就是觉得LMHOSTS输入烦才想是否有其他法门的。
双向我不会,也不想用。
看来还的用LMHOSTS。
多谢。
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.114.77.21]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:208.012毫秒