LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: ttyrone

用iptables发布内部服务的问题

[复制链接]
 楼主| 发表于 2005-5-20 11:50:10 | 显示全部楼层
Post by faint
打开FORWARD

iptables -A FORWARD -p tcp -d $你的内网服务ip --dport $你的内网服务端口  -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT



还是不行啊,我把下面的内容加到脚本里,还是不行
$IPT -A FORWARD -p tcp -d $www_server --dport $http -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $sql_server --dport $sql -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $ftp_server --dport $ftp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $email_server --dport $smtp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $email_server --dport $pop3 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


--state NEW的NEW是什么啊?
运行iptables -L的显示:
[root@as3 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     udp  --  dns-zhonggc.bj.cncnet.net  anywhere            udp spt:domain
ACCEPT     udp  --  dns-jinrj.bj.cncnet.net  anywhere            udp spt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:ftp
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:smtp
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:pop3
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:ms-sql-s

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             192.168.35.7        tcp dpt:http state NEW
ACCEPT     tcp  --  anywhere             192.168.35.201      tcp dpt:ms-sql-s state NEW
ACCEPT     tcp  --  anywhere             192.168.35.7        tcp dpt:ftp state NEW
ACCEPT     tcp  --  anywhere             192.168.35.7        tcp dpt:smtp state NEW
ACCEPT     tcp  --  anywhere             192.168.35.7        tcp dpt:pop3 state NEW
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@as3 ~]#


iptables -t nat -L没什么变化
[root@as3 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:ms-sql-s to:192.168.35.201:1433
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:http to:192.168.35.7:80
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:ftp to:192.168.35.7:21
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:smtp to:192.168.35.7:25
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:pop3 to:192.168.35.7:110

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  anywhere             anywhere            to:218.107.130.52

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@as3 ~]#
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 11:55:45 | 显示全部楼层
Post by faint
打开FORWARD

iptables -A FORWARD -p tcp -d $你的内网服务ip --dport $你的内网服务端口  -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT



还是不行啊,我把下面的内容加到脚本里,还是不行
$IPT -A FORWARD -p tcp -d $www_server --dport $http -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $sql_server --dport $sql -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $ftp_server --dport $ftp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $email_server --dport $smtp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $email_server --dport $pop3 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


--state NEW的NEW是什么啊?

运行iptables -L的显示:
[root@as3 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     udp  --  dns-zhonggc.bj.cncnet.net  anywhere            udp spt:domain
ACCEPT     udp  --  dns-jinrj.bj.cncnet.net  anywhere            udp spt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:ftp
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:smtp
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:pop3
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:ms-sql-s

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             192.168.35.7        tcp dpt:http state NEW
ACCEPT     tcp  --  anywhere             192.168.35.201      tcp dpt:ms-sql-s state NEW
ACCEPT     tcp  --  anywhere             192.168.35.7        tcp dpt:ftp state NEW
ACCEPT     tcp  --  anywhere             192.168.35.7        tcp dpt:smtp state NEW
ACCEPT     tcp  --  anywhere             192.168.35.7        tcp dpt:pop3 state NEW
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@as3 ~]#


iptables -t nat -L没什么变化
[root@as3 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:ms-sql-s to:192.168.35.201:1433
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:http to:192.168.35.7:80
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:ftp to:192.168.35.7:21
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:smtp to:192.168.35.7:25
DNAT       tcp  --  anywhere             218.107.130.52      tcp dpt:pop3 to:192.168.35.7:110

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  anywhere             anywhere            to:218.107.130.52

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@as3 ~]#
回复 支持 反对

使用道具 举报

发表于 2005-5-20 12:26:51 | 显示全部楼层
我是觉得你的规则有些问题。
试着把
$IPT -t nat -A PREROUTING -p tcp -d $inet_ip --dport $ftp -j DNAT --to-destination $ftp_serverftp
改成下面的试试:
$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $ftp -j DNAT --to-destination $ftp_serverftp
指定界面卡可能比指定ip好,其它的相类似。

-m state --state的你可以看看iptables相关的文档或相关的。
回复 支持 反对

使用道具 举报

发表于 2005-5-20 12:31:53 | 显示全部楼层
另外,
$IPT -A INPUT -p tcp --sport $http -j ACCEPT
$IPT -A INPUT -p tcp --sport $ftp -j ACCEPT
$IPT -A INPUT -p tcp --sport $smtp -j ACCEPT
$IPT -A INPUT -p tcp --sport $pop3 -j ACCEPT
$IPT -A INPUT -p tcp --sport $sql -j ACCEPT

我觉得是多余了点,因为你的linux网关本身(centos4)根本就没有开这些服务的,而是通过FORWARD到内网的啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 14:11:04 | 显示全部楼层
还是不行,以下是最新的脚本,faint兄帮忙看看,规则的顺序有问题吗?
#!/bin/bash
echo "Starting iptables rules..."
echo "1" >/proc/sys/net/ipv4/ip_forward
inet_iface=eth1
inet_ip=218.107.130.52
lan_iface=eth0
lan_ip=192.168.35.2
ip_range=192.168.35.0/24
IPT=/sbin/iptables

www_server=192.168.35.7
ftp_server=192.168.35.7
email_server=192.168.35.7
sql_server=192.168.35.201
http="80"
ftp="21"
ftp_data="20"
sql="1433"
smtp="25"
pop3="110"

/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
for TABLE in filter nat mangle; do
$IPT -t $TABLE -F
$IPT -t $TABLE -X
done

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
for DNS in $(grep ^n /etc/resolv.conf |awk '{print $2}'); do
$IPT -A INPUT -p udp -s $DNS --sport domain -j ACCEPT
done

#$IPT -A INPUT -p tcp --sport $http -j ACCEPT
#$IPT -A INPUT -p tcp --sport $ftp -j ACCEPT
#$IPT -A INPUT -p tcp --sport $smtp -j ACCEPT
#$IPT -A INPUT -p tcp --sport $pop3 -j ACCEPT
#$IPT -A INPUT -p tcp --sport $sql -j ACCEPT

$IPT -t nat -A POSTROUTING -o $inet_iface -j SNAT --to $inet_ip

$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $sql -j DNAT --to-destination $sql_serversql
$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $http -j DNAT --to-destination $www_serverhttp
$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $ftp -j DNAT --to-destination $ftp_serverftp

$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $smtp -j DNAT --to-destination $email_serversmtp
$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $pop3 -j DNAT --to-destination $email_serverpop3
$IPT -A FORWARD -p tcp -d $www_server --dport $http -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $sql_server --dport $sql -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $ftp_server --dport $ftp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $email_server --dport $smtp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $email_server --dport $pop3 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
回复 支持 反对

使用道具 举报

发表于 2005-5-20 15:30:44 | 显示全部楼层
老兄,好象是你只定义了进来的规则,没有定义出去的规则吧,比如:
$IPT -t nat -A PREROUTING -p tcp -d $inet_ip --dport $sql -j DNAT --to-destination $sql_serversql
那就应该有:
$IPT -t nat -A POSTROUTING -p tcp -s $sql_server --sport $sql -j SNAT --to-source $inet_ip

另外,如果你使用的是默认的端口,好象不需要在另外指定了吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 16:43:42 | 显示全部楼层
我也不是很明白,偶才刚开始学
我加了$IPT -t nat -A POSTROUTING -o $inet_iface -p tcp -m tcp --sport $sql -j SNAT --to-source $inet_ip
还是不行啊

新脚本:
#!/bin/bash
echo "Starting iptables rules..."
echo "1" >/proc/sys/net/ipv4/ip_forward
inet_iface=eth1
inet_ip=218.107.130.52
lan_iface=eth0
lan_ip=192.168.35.2
ip_range=192.168.35.0/24
IPT=/sbin/iptables

www_server=192.168.35.7
ftp_server=192.168.35.7
email_server=192.168.35.7
sql_server=192.168.35.201
http="80"
ftp="21"
ftp_data="20"
sql="1433"
smtp="25"
pop3="110"

/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
for TABLE in filter nat mangle; do
$IPT -t $TABLE -F
$IPT -t $TABLE -X
done

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
for DNS in $(grep ^n /etc/resolv.conf |awk '{print $2}'); do
$IPT -A INPUT -p udp -s $DNS --sport domain -j ACCEPT
done

$IPT -A INPUT -p tcp --sport $http -j ACCEPT
$IPT -A INPUT -p tcp --sport $ftp -j ACCEPT
$IPT -A INPUT -p tcp --sport $smtp -j ACCEPT
$IPT -A INPUT -p tcp --sport $pop3 -j ACCEPT
$IPT -A INPUT -p tcp --sport $sql -j ACCEPT

$IPT -t nat -A POSTROUTING -o $inet_iface -j SNAT --to $inet_ip

$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $sql -j DNAT --to-destination $sql_serversql
$IPT -t nat -A POSTROUTING -o $inet_iface -p tcp -m tcp --sport $sql -j SNAT --to-source $inet_ip

$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $http -j DNAT --to-destination $www_serverhttp
$IPT -t nat -A POSTROUTING -o $inet_iface -p tcp -m tcp --sport $http -j SNAT --to-source $inet_ip

$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $ftp -j DNAT --to-destination $ftp_serverftp
$IPT -t nat -A POSTROUTING -o $inet_iface -p tcp -m tcp --sport $ftp -j SNAT --to-source $inet_ip

$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $smtp -j DNAT --to-destination $email_serversmtp
$IPT -t nat -A POSTROUTING -o $inet_iface -p tcp -m tcp --sport $smtp -j SNAT --to-source $inet_ip

$IPT -t nat -A PREROUTING -i $inet_iface -p tcp -m tcp --dport $pop3 -j DNAT --to-destination $email_serverpop3
$IPT -t nat -A POSTROUTING -o $inet_iface -p tcp -m tcp --sport $pop3 -j SNAT --to-source $inet_ip

$IPT -A FORWARD -p tcp -d $www_server --dport $http -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $sql_server --dport $sql -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $ftp_server --dport $ftp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $email_server --dport $smtp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p tcp -d $email_server --dport $pop3 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 16:46:21 | 显示全部楼层
没想到发布服务那么困难啊,isa还是很容易搞定的
不过,就共享上网来说,linux确实要比win快了不少
回复 支持 反对

使用道具 举报

发表于 2005-5-20 17:16:15 | 显示全部楼层
首先,既然你的默认策略是 ACCEPT,那么后面的 INPUT FORWARD OUTPUT 可以暂时先全部去掉,这样也清晰一点。

然后,我不知道有 -m tcp 的匹配。而你上面的脚本的:
IPT -t nat -A POSTROUTING -o $inet_iface -p tcp -m tcp --sport $sql -j SNAT --to-source $inet_ip
只指定了 --sport $sql,却没有指定 -s $sql_server。后面的也是一样。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 17:33:45 | 显示全部楼层
多谢Chowroc,下班了,星期一再来试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表