Chinaunix

标题: iptables可否设置仅访问特定端口的请求作NAT转换 [打印本页]

作者: xiao6    时间: 2007-07-18 15:42
标题: iptables可否设置仅访问特定端口的请求作NAT转换
我单位网络只用squid作代理上网,非透明,用户要设定代理服务器才能上网,有用户名密码验证。

现有一软件系统需要访问某公网服务器端口(比如a.b.c.d:12345),此软件没有代理服务器的相关设置。请问能否将访问a.b.c.d:12345端口的请求不经过squid直接nat出去,其他访问不变且不影响用户验证?如可以,如何写iptable规则?

自己写个,大家看对不对

#!/bin/sh
echo "1">/proc/sys/net/ipv4/ip_forward
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/iptables -F
/sbin/iptables -F -t nat

/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT

/sbin/iptables -t nat -A POSTROUTING -d a.b.c.d -p tcp -dport 12345 -o eth1 -j SNAT --to 1.2.3.4

[ 本帖最后由 xiao6 于 2007-7-18 16:58 编辑 ]
作者: platinum    时间: 2007-07-18 15:42
明白了
如果 squid 那台机器是网关机器的话
iptables -t nat -I POSTROUTING -d a.b.c.d -p tcp --dport 12345 -j MASQUERADE 就可以了
前提是打开内核转发 ip_forward
作者: platinum    时间: 2007-07-18 16:56
iptables -t nat -I PREROUTING -d a.b.c.d -p tcp --dport 12345 -j ACCEPT
作者: xiao6    时间: 2007-07-18 17:01
谢版主,完整的规则这样写行么?

#!/bin/sh
echo "1">/proc/sys/net/ipv4/ip_forward
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/iptables -F
/sbin/iptables -F -t nat

/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT

iptables -t nat -I PREROUTING -d a.b.c.d -p tcp --dport 12345 -j ACCEPT
作者: platinum    时间: 2007-07-18 17:06
那句只是为了实现“不经过squid直接nat出去,其他访问不变且不影响用户验证”,其他语句还照旧
不知道你上面贴出来的是不是最终的,如果是,那么我没有看到有关 squid 的部分
作者: xiao6    时间: 2007-07-18 17:19
原来没有用iptables,只安装运行了squid,用户要在IE等浏览器中设置代理才能上网(因为要验证用户,所有没有用透明代理)

这次就是专为解决a.b.c.d:12345这个问题才开启iptables,不知上面完整的规则是否可行?
作者: xiao6    时间: 2007-07-18 17:25
#!/bin/sh
echo "1">/proc/sys/net/ipv4/ip_forward
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/iptables -F
/sbin/iptables -F -t nat

/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT

iptables -t nat -I POSTROUTING -d a.b.c.d -p tcp --dport 12345 -j MASQUERADE

上面的脚本可以么?

我在交换机上设定了默认路由 0.0.0.0 0.0.0.0 指向squid那台服务器

为什么用-I 而不用-A ?

[ 本帖最后由 xiao6 于 2007-7-18 17:33 编辑 ]
作者: platinum    时间: 2007-07-18 17:35
我不知道你的网络拓扑结构,所以不知道上面的脚本是否满足你的需求
-I 的目的是放到第一个地方,避免由于上面有其他规则的干扰
作者: iamshiyu    时间: 2007-07-18 17:41
-I和-A对你这个脚本来讲应该是一样的……
反正也没有其他规则。
作者: xiao6    时间: 2007-07-18 17:48
我的网络情况是这样的,三层交换划分了若干vlan
172.16.1.1/24 squid服务器在此vlan
172.16.10.1/24 gw 172.16.10.254 部门A
172.16.20.1/24 gw 172.16.20.254 部门B
……
172.16.90.1/24 gw 172.16.90.254 部门I
squid服务器为eth0(内网) 172.16.1.1 ,eth1(公网) 1.2.3.4 ,用户浏览器要设置代理服务器为172.16.1.1才能上网

现在三层交换上设置默认路由 0.0.0.0 0.0.0.0 172.16.1.1
在squid服务器上配置如上规则,专为解决该软件系统访问a.b.c.d:12345的问题,不知这个脚本是否可行,这个脚本就是最终的脚本了。

我去试试吧,多谢版主

[ 本帖最后由 xiao6 于 2007-7-18 17:56 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2