platinum 回复于:2005-03-03 12:10:03 |
[quote:2323c2173f] 想请教几个问题 如果我的内网是个MAIL服务器,它有个一发送25端口和接受110端口 那我发送25端口需要做端口映射吗?如果不需要,但我想要做这样的端口映射 命令是 iptables -t nat -A PREROUTING -d MAIL-IP -p tcp --dport 25 -j DNAT --to-d 公网IP:25 这个吗? [/quote:2323c2173f] 如果MAIL服务器在内网,而不对外提供POP3服务,可以只映射25端口 另外,同样端口的映射,可以不写内网IP的端口,比如 iptables -t nat -A PREROUTING -d 公网IP -p tcp --dport 25 -j DNAT --to LAN-MAIL 还有,你错了2个地方 1、你写反了,应该先WANIP,后LANIP 2、--to-d我不知道能不能用,全写应该是--to-destination,简写是--to LANIP [quote:2323c2173f] 请问iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 这个命令是什么意思,为什么要这个命令 [/quote:2323c2173f] 这个是允许ESTABLISHED状态和RELATED状态的数据包通过,而对NEW状态的数据包就DROP了 这样做的目的是为了禁止新连接的数据包,而不切断已连接的TCP/IP数据 [quote:2323c2173f] 最后一个NAT转换 既然有静态IP地址 用这个命令可以把? iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-s 192.168.0.0/24 [/quote:2323c2173f] MASQUERADE是SNAT的一个特例,允许自行选择出去IP,一般在双WAN的情况下用的比较多 我用MASQUERADE的目的是因为他写起来简单,单WAN也可以用 另外,你写的不对,SNAT后面应该跟一个WAN地址 [quote:2323c2173f] 我觉得 iptables -t nat -A PREROUTING -d 公网IP -p tcp --dport 80 -j DNAT --to 内网WEB服务器一IP:80 这个命令漏了参数,应该 iptables -t nat -A PREROUTING -d 公网IP -p tcp --dport 80 -j DNAT --to-d 内网WEB服务器一IP:80 [/quote:2323c2173f] 我的没错,我的是简写 |
海之蓝 回复于:2005-03-03 12:27:14 |
我的意思就是要对外提供POP3服务, 命令是怎么写呢? “MASQUERADE是SNAT的一个特例,允许自行选择出去IP,一般在双WAN的情况下用的比较多 我用MASQUERADE的目的是因为他写起来简单,单WAN也可以用 另外,你写的不对,SNAT后面应该跟一个WAN地址” SNAT后面应该跟的是LAN地址把,我看的是Iptables 指南 1.1.19介绍的 原文 Option--to-source Exampleiptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 Explanation指定源地址和端口,有以下几种方式: 1、单独的地址。 2、一段连续的地址,用连字符分隔,如194.236.50.155-194.236.50.160,这样可以实现负载平衡。每个流会被随机分配一个IP,但对于同一个流使用的是同一个IP。3、在指定-p tcp 或 -p udp的前提下,可以指定源端口的范围,如194.236.50.155:1024-32000,这样包的源端口就被限制在1024-32000了。注意,如果可能,iptables总是想避免任何的端口变更,换句话说,它总是尽力使用建立连接时所用的端口。但是如果两台机子使用相同的源端口,iptables 将会把他们的其中之一映射到另外的一个端口。如果没有指定端口范围, 所有的在512以内的源端口会被映射到512以内的另一个端口,512和1023之间的将会被映射到 1024内,其他的将会被映射到大于或对于1024的端口,也就是说是同范围映射。还要注意,这种映射和目的端口无关。因此,如果客户想和防火墙外的HTTP服务器联系,它是不会被映射到FTP control所用的端口的。 |
海之蓝 回复于:2005-03-03 12:37:04 |
再问: 如果我不加 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 会出现什么错误啊,对网络有什么影响? 您说:“这样做的目的是为了禁止新连接的数据包,而不切断已连接的TCP/IP数据 ” 如果已连接的数据已经结束,那么它有产生新数据连接,那就没有办法连接了啊 如FTP下载,要向你这样说就没有办法在产生的新的会话,也就是连接了。 当一个端口处在LISTEN状态,那么这个连接会产生吗? |
platinum 回复于:2005-03-03 13:09:56 |
[quote:f9d8841c78] Example iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 [/quote:f9d8841c78] 这是一个源地址映射的例子,194.236.50.155-194.236.50.160实际是你的一个公网IP地址池 [quote:f9d8841c78] 再问: 如果我不加 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 会出现什么错误啊,对网络有什么影响? [/quote:f9d8841c78] 那样的话,根据我那个脚本的逻辑,服务器就不能响应外网访问的WEB服务了 [quote:f9d8841c78] 您说:“这样做的目的是为了禁止新连接的数据包,而不切断已连接的TCP/IP数据 ” 如果已连接的数据已经结束,那么它有产生新数据连接,那就没有办法连接了啊 [/quote:f9d8841c78] 对,没错 [quote:f9d8841c78] 如FTP下载,要向你这样说就没有办法在产生的新的会话,也就是连接了。 [/quote:f9d8841c78] FTP比较特殊,除了TCP/21以外,还用了其他端口进行数据传输 这个你需要去看有关主动模式和被动模式FTP的资料了,内容很多,我就不细说了 Linux针对FTP的被动模式传输(过程中需要临时开端口来相应外部的连接)有个单独的模块ip_conntrack_ftp,他负责处理这种问题 |
海之蓝 回复于:2005-03-03 13:43:09 |
如果开启POP3服务,,命令是不是这样吗? iptables -t nat -A PREROUTING -d 公网IP:25 -p tcp --dport 25 -j DNAT --to LAN-MAIL 我对这个例子理解不清楚 Example iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 这个例子中没有写内网的IP地址段,SNAT是默认找到内网IP地址段,然后在转换源地址,不需要自己在命令中手动添加-s 192.168.0.0/24吗? 如你所说,iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 是允许服务器响应外网访问的WEB服务,但是如果WLAN-IP访问结束关掉 IE,然后又打开IE访问WEB,那你说怎么和这个WEB建立连接呢? 你回复同意“如果已连接的数据已经结束,那么它有产生新数据连接,那就没有办法连接了啊 ”这个说话,那就没有办法访问WEB服务。 我感觉有点糊涂,你能在说明白点 谢谢了 |
platinum 回复于:2005-03-03 14:09:41 |
[quote:cdd629466b] 如果开启POP3服务,,命令是不是这样吗? iptables -t nat -A PREROUTING -d 公网IP:25 -p tcp --dport 25 -j DNAT --to LAN-MAIL [/quote:cdd629466b] 不对 POP3的端口是110,而且你的-d参数后面只能有地址,不能有端口 应该写成 iptables -t nat -A PREROUTING -d 公网IP -p tcp --dport 110 -j DNAT --to LAN-MAIL [quote:cdd629466b] 我对这个例子理解不清楚 Example iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 这个例子中没有写内网的IP地址段,SNAT是默认找到内网IP地址段,然后在转换源地址,不需要自己在命令中手动添加-s 192.168.0.0/24吗? [/quote:cdd629466b] 这样的话,任何一个机器都可以用你的机器来做网关进行转发,那岂不是很危险? [quote:cdd629466b] 如你所说,iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 是允许服务器响应外网访问的WEB服务,但是如果WLAN-IP访问结束关掉 IE,然后又打开IE访问WEB,那你说怎么和这个WEB建立连接呢? [/quote:cdd629466b] 我先纠正一下,我上面的脚本有个小问题 iptables -A FORWARD -p tcp -d 内网WEB1 --dport 80 -j ACCEPT iptables -A FORWARD -p tcp -d 内网WEB2 --dport 80 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 应该是这3行,把“-s”换成“-d” 意思是说 外部的数据包通向内网IP的,ACCEPT 而内部WEB相应外部引起的DNAT的被动连接,去回应外部的数据包(ESTABLISHED状态)的,ACCEPT RELATED是由一个已授权端口的程序发起的新连接状态,这个是FTP要用到的,写上也没关系 [quote:cdd629466b] 你回复同意“如果已连接的数据已经结束,那么它有产生新数据连接,那就没有办法连接了啊 ”这个说话,那就没有办法访问WEB服务。 我感觉有点糊涂,你能在说明白点 [/quote:cdd629466b] 这个怎么解释呢,我不太会用中文翻译过来说,我给你摘抄一段英文原文吧 [quote:cdd629466b] --state state Where state is a comma separated list of the connection states to match. Possible states are INVALID meaning that the packet could not be identified for some reason which includes running out of memory and ICMP errors which don't correspond to any known connection, ESTABLISHED meaning that the packet is associ- ated with a connection which has seen packets in both direc- tions, NEW meaning that the packet has started a new connection, or otherwise associated with a connection which has not seen packets in both directions, and RELATED meaning that the packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer, or an ICMP error. [/quote:cdd629466b] 是不是好理解呢? [quote:cdd629466b] 谢谢了 [/quote:cdd629466b] 不客气 :mrgreen: |
zifengling 回复于:2005-03-03 15:23:58 |
platinum兄,您真是太伟大了!看了您给我发的回复以及这篇讨论理解的更透了! 您真有耐心,佩服什么时候到苏州我请您喝酒!!! |
platinum 回复于:2005-03-03 15:53:02 |
不客气 苏州是个好地方,有机会一定去玩玩! :mrgreen: |
海之蓝 回复于:2005-03-03 16:33:41 |
呵呵,platinum 你是我见到最有耐心的斑斑了,真的是很感动。 你说这样理解是不是可以的啊? 先端口映射建立ESTABLISH连接,然后端口映射没有转发功能, 所以加FORWARD来进行转发, linux是一次选择,然后后面的数据直接转发吗? “引用: 我对这个例子理解不清楚 Example iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 这个例子中没有写内网的IP地址段,SNAT是默认找到内网IP地址段,然后在转换源地址,不需要自己在命令中手动添加-s 192.168.0.0/24吗? 这样的话,任何一个机器都可以用你的机器来做网关进行转发,那岂不是很危险? ” 我的想法就是想让内部网的IP全都上上网,如果加这个网段应该不算危险把,你觉得呢? 我也在苏州呀,zifengling 你在苏州哪里啊? |
platinum 回复于:2005-03-03 16:47:18 |
[quote:0927eaf25c] 你说这样理解是不是可以的啊? 先端口映射建立ESTABLISH连接,然后端口映射没有转发功能, 所以加FORWARD来进行转发, linux是一次选择,然后后面的数据直接转发吗? [/quote:0927eaf25c] 应该说,做了端口转发,但是被FORWARD限制住了,所以要单独开通一条回路,其他来自内部WEB服务器的一切对外主动请求都被禁止,只允许被动访问WEB [quote:0927eaf25c] 我对这个例子理解不清楚 Example iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 这个例子中没有写内网的IP地址段,SNAT是默认找到内网IP地址段,然后在转换源地址,不需要自己在命令中手动添加-s 192.168.0.0/24吗? 这样的话,任何一个机器都可以用你的机器来做网关进行转发,那岂不是很危险? ” 我的想法就是想让内部网的IP全都上上网,如果加这个网段应该不算危险把,你觉得呢? [/quote:0927eaf25c] 对,我的意思就是加个网段 比如你的LAN是192.168.1.0/24,就写成 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE 因为来自WAN的数据包的IP不可能是192.168.1.0/24,所以就安全了 (之所以这样写,是因为nat表的POSTROUTING链不能像filter表的INPUT那样指定来源设备) |
zifengling 回复于:2005-03-03 16:51:38 |
海之蓝 我在苏州相城区陆慕 你呢! 有机会向你请教! |
海之蓝 回复于:2005-03-03 16:55:19 |
“外部的数据包通向内网IP的,ACCEPT 而内部WEB相应外部引起的DNAT的被动连接,去回应外部的数据包(ESTABLISHED状态)的,ACCEPT RELATED是由一个已授权端口的程序发起的新连接状态,这个是FTP要用到的,写上也没关系 ” 我想弄明白是 外网 to 内网 ESTABLISHED,还是内网 to 外网 ESTABLISHED。 不知道你能看懂我什么意思吗? 在次感谢了!! |
platinum 回复于:2005-03-03 17:00:42 |
外网 --> 内网,建立了连接,就是ESTABLISHED状态 如果内网访问外网,是SYN请求 如果内网响应外网的连接,也属于ESTABLISHED状态 具体你要去看TCP/IP协议了,里面详细讲了TCP协议是如何进行三次握手的,以及各个状态的含义 |
海之蓝 回复于:2005-03-03 17:08:22 |
呵呵,RORWARD终于懂了,在次谢谢老大的耐心指教。 “对,我的意思就是加个网段 比如你的LAN是192.168.1.0/24,就写成 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE 因为来自WAN的数据包的IP不可能是192.168.1.0/24,所以就安全了 (之所以这样写,是因为nat表的POSTROUTING链不能像filter表的INPUT那样指定来源设备)” 你的例子是用MASQUERADE 这个参数 我的意思是想想用SNAT这个参数,也就是在这个参数之前加-s 192.168.0.0/24吗? 从而使192.168.0.0/24这个内网的能正常上网 具体就是 Example iptables -t nat -A POSTROUTING -p tcp -o eth0 -s 192.168.0.0/24-j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 你说可以吗?还是我对你所说的话理解有问题? |
platinum 回复于:2005-03-03 17:12:11 |
可以 不过一般不--to-source IP1-IPn:PORTm-PORTn 一般都是--to-source 公网IP |
海之蓝 回复于:2005-03-03 20:15:15 |
如果内网换成MAIL服务器,则也需要 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 这个命令吗? zifengling,我现在住在娄葑那! 有机会多联系 我Q:5309278 |
platinum 回复于:2005-03-03 20:17:30 |
[quote:eb330512b8="海之蓝"]如果内网换成MAIL服务器,则也需要 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 这个命令吗? zifengling,我现在住在娄葑那! 有机会多联系 我Q:5309278[/quote:eb330512b8] 你认为和WEB有什么区别吗? |
海之蓝 回复于:2005-03-04 08:36:45 |
你的意思是说主要实现WEB的被动访问, 但是MAIL的发送端口25,是内网--->到外网的访问,这不是主动访问吗? 也就是没有办法通过FORWARD转发了啊呀,还是直接同过NAT转换出去,不经过FORWARD这个规则的筛选呢? iptables -A FORWARD -p tcp -d 内网WEB1 --dport 80 -j ACCEPT iptables -A FORWARD -p tcp -d 内网WEB2 --dport 80 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -s 内网WEB1 -j DROP iptables -A FORWARD -s 内网WEB1 -j DROP 我对上面5句的理解是: 来自外网对内网WEB1访问的80端口通过 来自外网对内网WEB2访问的80端口通过 对匹配“ESTABLISHED,RELATED ”允许连接 拒绝转发来自内网WEB1的所以有数据流 拒绝转发来自内网WEB2的所以有数据流 如果增加对MAIL的访问,需要哪里改动的呀? 增加 iptables -A FORWARD -p tcp -d 内网MAIL --dport 25 -j ACCEPT iptables -A FORWARD -p tcp -d 内网MAIL --dport 110 -j ACCEPT #PAT iptables -t nat -A PREROUTING -d 公网IP -p tcp --dport 110 -j DNAT --to LAN-MAIL 对于映射只要增加一个110端口映射可以吗,我个人理解MAIL对外网发送可以通过NAT转换就可以,不需要映射,你说对吗? |
platinum 回复于:2005-03-04 08:53:24 |
是这样的,MAIL服务器向外发信的时候,是需要做NAT出去的 别人发信进来,以及别人用OUTLOOK、FOXMAIL发信到你的邮件服务器的时候,是映射进来,二者都要有 所以我认为,策略应该变更为 来自外网对内网MAIL的25端口通过 来自外网对内网MAIL的110端口通过 来自内网到外网的,目的端口是UDP/53的数据包通过 来自内网到外网的,目的端口是TCP/25的数据包通过 对匹配“ESTABLISHED,RELATED ”允许连接 拒绝转发来自内网MAIL到外网的所有数据流 |
海之蓝 回复于:2005-03-04 10:15:25 |
斑斑,那你的意思就是MAIL服务器向外发信的时候,需要做NAT出去 而此NAT 就是 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE “来自内网到外网的,目的端口是UDP/53的数据包通过 来自内网到外网的,目的端口是TCP/25的数据包通过 ” UDP/53 是不是FOXMAIL的外发信的端口呢? 命令增加: iptables -A FORWARD -p udp -s 内网MAILIP --dport 53 -j ACCEPT iptables -A FORWARD -p tcp -s 内网MAIL --dport25 -j ACCEPT |
platinum 回复于:2005-03-04 11:08:37 |
对,然后再DROP,我是这样理解的 WEB测试过,MAIL没这样做过,你可以试验一下 另外,UDP/53不是发信端口,发信的时候是用一个随机分配的端口与远端的TCP/25端口连接 UDP/53是DNS的端口,用于解析出用户要投递的邮箱的MX记录中指定的邮件服务器IP |
海之蓝 回复于:2005-03-04 11:56:07 |
呵呵,谢谢斑斑,下午去测试一下! |
山中无老虎 回复于:2005-03-04 13:40:36 |
没了吗?我还没有看够,也没有学够。 |
luckyzhang 回复于:2005-03-04 14:27:54 |
这是好帖子,我还没学够。 希望楼住把最后试验的结果,继续往下公布 |
海之蓝 回复于:2005-03-05 10:06:55 |
谢谢2位的关心, 我已经在实际操作了。 理论和实际操作就是相差那么大。 才第一步就遇到问题。 正在解决中,实践好了,我会把最后的操作贴出来的。 你们看看这个问题是怎么回师呢?我自己感觉有点郁闷。 http://bbs.chinaunix.net/forum/viewtopic.php?show_type=&p=3350900#3350900 |
初学摄影 回复于:2005-03-05 10:08:01 |
[quote:501ba298ce="海之蓝"]谢谢2位的关心, 我已经在实际操作了。 理论和实际操作就是相差那么大。 才第一步就遇到问题。 正在解决中,实践好了,我会把最后的操作贴出来的。 你们看看这个问题是怎么回师呢?我自己感觉有点郁闷。 htt..........[/quote:501ba298ce] 其实问题应该在实际操作中发现,理论和实际还是有距离的…… |
海之蓝 回复于:2005-03-05 10:12:38 |
[quote:b069a3a8d0="初学摄影"] 其实问题应该在实际操作中发现,理论和实际还是有距离的……[/quote:b069a3a8d0] 是这样的,所以现在正在积极实践中。 |
hegz 回复于:2005-03-07 11:33:42 |
iptables -A FORWARD -d www.okbt.com -j DROP iptables -A FORWARD -d www.18girl.com -j DROP iptables -A FORWARD -d www.avvcd.com -j DROP iptables -A FORWARD -d www.kiss520.com -j DROP >>>> 为什么我匹配www.okbt.com这样的地址,如www.sina.com.cn会出错呢? |
platinum 回复于:2005-03-07 11:36:17 |
我需要你先回答我一个问题才知道 你的Linux能ping出www.sina.com.cn的IP地址吗? |
hegz 回复于:2005-03-09 16:26:29 |
[quote:02bdeb0494="platinum"]我需要你先回答我一个问题才知道 你的Linux能ping出www.sina.com.cn的IP地址吗?[/quote:02bdeb0494] 能啊。 |
platinum 回复于:2005-03-09 16:41:07 |
iptables -A FORWARD -d www.sina.com.cn -j DROP 这个也不行吗? 有什么提示信息? |
hegz 回复于:2005-03-10 15:11:16 |
提示信息: host/network 'www。21cn。com' not found 但ping www。21cn。com是通的。 dig www。21cn。com也可以查找到www。21cn。com的ip地址。 |
platinum 回复于:2005-03-10 15:22:23 |
你还是没有解析出来www.21cn.com啊 你能ping到www.21cn.com的地址吗? show一下你的/etc/resolv.conf |
hegz 回复于:2005-03-10 15:56:06 |
[root@adsl rc.d]# vi /etc/resolv.conf nameserver 202.96.128.86 nameserver 202.96.128.166 |
platinum 回复于:2005-03-10 16:07:32 |
你自己在这台机器上能ping通www.21cn.com吗? 如果不能,就是防火墙的问题 如果能,我就不清楚了,你直接在iptables里把域名换成ping出来的IP好了 |
hegz 回复于:2005-03-11 09:27:50 |
因为www。sina。com。cn、www。21cn。com等一批网站是多ip地址访问的,且全部是重定向到了squid缓冲服务器上。换成ip地址我已试验过,是行不通的。因此,把这些地址加在hosts主机表上,虽然运行iptables脚本不再会报错,但就是无法浏览网页。这些问题现在一直困扰着我,郁闷ing。。。 |
platinum 回复于:2005-03-11 09:37:03 |
这些用DNS轮训做的多主机的大型网络服务商的地址,你都要禁止吗? 如果你想 nslookup www.sina.com.cn 然后把A记录里面的地址都写在iptables里面,然后DROP掉 注意,你nslookup的这些地址,[color=red:7ec05e4502]可能[/color:7ec05e4502]只适用于你这个地区或你这个网络,因为他们的DNS用到了根据地区分配IP的技术,不同地区看到的IP是不一样的 |
hegz 回复于:2005-03-11 10:15:03 |
我只想开放有限的几个网站,如www。21cn。com、www。sina。com。cn等。 |
platinum 回复于:2005-03-11 10:16:31 |
那你不如用squid 用里面的acl dst_domain进行控制,把你让他们上的域名写里面 然后在iptables上做透明代理 同时取消他们的NAT 这样最安全 |
hegz 回复于:2005-03-11 10:25:48 |
我的网关服务器破得不得了,squid以前装过,但很快就瘫痪了,编译内核就不要想了,又没钱买一台好点的机器单作squid,因此,只能想着简单些解决了事,但看来不行。 |
platinum 回复于:2005-03-11 10:31:14 |
行是行,就是麻烦,你可以不用squid 你可以允许那些地址的TCP/80的出去,其他的TCP/80都DROP掉 那些地址,你用nslookup www.sina.com.cn这样的方法去获取 |
hegz 回复于:2005-03-11 10:37:58 |
21cn简单些,只有两个ip地址,sina特麻烦,ip地址比较多。听从斑竹的意见,先试试吧,看看结果如何,到时候再上报吧。 |
platinum 回复于:2005-03-11 10:41:05 |
对了,还有 www.sian.com.cn www.sina.com 这两个域名你都要看,地址还不一样呢 |
hegz 回复于:2005-03-11 11:41:43 |
www.sina.com 就不用离了。 www.sina.com.cn www.21cn.com 开放了几个ip地址段之后这两个网站就可以访问了。多谢斑竹的耐心指点。 唉--在这里,十分惊叹这些网站的ip地址资源之丰富。 |