LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 632|回复: 1

iptables的脚本问题

[复制链接]
发表于 2005-6-21 09:06:09 | 显示全部楼层 |阅读模式
我原来用的isa2004做代理,代理服务和访问控制都很好。
但是我想转到linux平台下,所以装了个centos4,用iptables做代理,并发布内部的web、sql和邮件服务
我是按照Iptables 指南 1_1_19修改的脚本文件

有如下两个问题:
1。代理服务很不稳定,qq经常掉线,客户机经常上不了网,重新执行一下iptables脚本就好了。
2。发布的web服务,在内网,用公网ip能访问到(<www.fengyouda.com.cn>),但是拨号上网,在公网中访问时,却提示找不到服务器。
3。如果$ipt -t nat -P PREROUTING ACCEPT或$ipt -t nat -P POSTROUTING ACCEPT设成了drop,客户机就不能代理上网了,应该加什么语句呢?如果不写$ipt -t nat -P PREROUTING语句,是不是默认就是拒绝呢?
4。iptables服务器本身不能上网。
5。这个脚本,应该没开启iptables的日志吧,不会出现日志填满空间的问题吧?

以下是我的脚本:
#!/bin/bash
echo "Starting Iptables Rules..."

inet_iface="eth1"
inet_ip="218.107.130.52"
inet_broadcast="218.107.130.54"
lan_iface="eth0"
lan_ip="192.168.35.1"
lan_ip_range="192.18.35.0/24"
lo_iface="lo"
lo_ip="127.0.0.1"

ipt="/sbin/iptables"

http_server="192.168.35.7"
http="80"
sql_server="192.168.35.201"
sql="1433"
ftp_server="192.168.35.7"
ftp="21"
mail_server="192.168.35.7"
pop3="110"
smtp="25"

/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ipt_state

echo "1" > /proc/sys/net/ipv4/ip_forward

$ipt -P INPUT DROP
$ipt -P FORWARD DROP
$ipt -P OUTPUT DROP
$ipt -t nat -P PREROUTING ACCEPT
$ipt -t nat -P POSTROUTING ACCEPT  这两条不能设为DROP,否则不能代理上网,应该在后面加什么语句,允许局域网的客户机访问外网呢?
$ipt -t nat -P OUTPUT DROP

for TABLE in filter nat mangle ; do
$ipt -t $TABLE -F
$ipt -t $TABLE -X
done

$ipt -N bad_tcp_packets
$ipt -N allowed
$ipt -N tcp_packets
$ipt -N udp_packets
$ipt -N icmp_packets

###
检查包头是否不正常或有其他问题
$ipt -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$ipt -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

###
如果包是从inet_iface进入的,且是tcp包,那它就要经过tcp_packets链的效验,如果这个连接是冲着被允许通过的端口来的,就对它进行下面的检查,以确定是否允许通过。
$ipt -A allowed -p TCP --syn -j ACCEPT
$ipt -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A allowed -p TCP -j DROP

###
只接受指定端口号的tcp包
$ipt -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed  开放ftp端口
$ipt -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
$ipt -A tcp_packets -p TCP -s 0/0 --dport 110 -j allowed
$ipt -A tcp_packets -p TCP -s 0/0 --dport 25 -j allowed
$ipt -A tcp_packets -p TCP -s 0/0 --dport 1433 -j allowed
#$ipt -A tcp_packets -p TCP -s 0/0 --dport 443 -j allowed

###
只接受指定端口号的udp包
$ipt -A udp_packets -p UDP -s 0/0 --destination-port 8000 -j ACCEPT  允许qq
$ipt -A udp_packets -p UDP -s 0/0 --destination-port 3001 -j ACCEPT
$ipt -A udp_packets -p UDP -s 0/0 --destination-port 4000 -j ACCEPT
#$ipt -A udp_packets -p UDP -s 0/0 --destination-port 1863 -j ACCEPT  允许msn

###
只接受icmp-type为8和11的icmp包
$ipt -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$ipt -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

###
先把所有的tcp包送到bad_tcp_packets,检查是否是不正常的,或我们不想要的。
$ipt -A INPUT -p tcp -j bad_tcp_packets
###
处理被信任的网络的数据传输,包括:连接内网的网卡的流量,所有来自和发往loopback的流量
$ipt -A INPUT -p ALL -i $lan_iface -s $lan_ip_range -j ACCEPT
$ipt -A INPUT -p ALL -i $lo_iface -s $lo_ip -j ACCEPT
$ipt -A INPUT -p ALL -i $lo_iface -s $lan_ip -j ACCEPT
$ipt -A INPUT -p ALL -i $lo_iface -s $inet_ip -j ACCEPT
###
处理来自internet的信息,允许所有处于状态ESTABLISHED,RELATED 且发往internet接口的包进入。
$ipt -A INPUT -p ALL -d $inet_ip -m state --state ESTABLISHED,RELATED -j ACCEPT
###
从internet接口进来的tcp包,发往tcp链
$ipt -A INPUT -p TCP -i $inet_iface -j tcp_packets
$ipt -A INPUT -p UDP -i $inet_iface -j udp_packets
$ipt -A INPUT -p ICMP -i $inet_iface -j icmp_packets

$ipt -A FORWARD -p tcp -j bad_tcp_packets
###
允许所有来自lan_iface的数据通过,也就是说,我们的lan可以自由访问internet。
$ipt -A FORWARD -i $lan_iface -j ACCEPT
####
允许ESTABLISHED,RELATED状态的包能通过防火墙,也就是,所有对我们的内网发出的连接的回应都可以返回局域网
$ipt -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#####
因为要允许防火墙机器上网,所以,允许所有从防火墙的ip出发的数据(好像没起作用,iptables服务器本身上不了网)
$ipt -A OUTPUT -p tcp -j bad_tcp_packets

$ipt -A OUTPUT -p ALL -s $lo_ip -j ACCEPT
$ipt -A OUTPUT -p ALL -s $lan_ip -j ACCEPT
$ipt -A OUTPUT -p ALL -s $inet_ip -j ACCEPT

$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 -t nat -A POSTROUTING -o $inet_iface -j SNAT --to $inet_ip_range  代理上网

####发布服务
$ipt -t nat -A PREROUTING --dst $inet_ip -p tcp --dport $http -j DNAT --to-destination $http_server
$ipt -t nat -A POSTROUTING -p tcp --dst $http_server --dport $http -j SNAT --to-source $lan_ip
$ipt -t nat -A OUTPUT --dst $inet_ip -p tcp --dport $http -j DNAT --to-destination $http_server

$ipt -t nat -A PREROUTING -m iprange --dst-range $inet_ip_range -p tcp --dport $sql -j DNAT --to-destination $sql_server
$ipt -t nat -A POSTROUTING -p tcp --dst $sql_server --dport $sql -j SNAT --to-source $lan_ip

$ipt -t nat -A PREROUTING --dst $inet_ip -p tcp --dport $ftp -j DNAT --to-destination $ftp_server
$ipt -t nat -A POSTROUTING -p tcp --dst $ftp_server --dport $ftp -j SNAT --to-source $lan_ip
$ipt -t nat -A OUTPUT --dst $inet_ip -p tcp --dport $ftp -j DNAT --to-destination $ftp_server

$ipt -t nat -A PREROUTING --dst $inet_ip -p tcp --dport $pop3 -j DNAT --to-destination $mail_server
$ipt -t nat -A POSTROUTING -p tcp --dst $mail_server --dport $pop3 -j SNAT --to-source $lan_ip
$ipt -t nat -A OUTPUT --dst $inet_ip -p tcp --dport $pop3 -j DNAT --to-destination $mail_server

$ipt -t nat -A PREROUTING --dst $inet_ip -p tcp --dport $smtp -j DNAT --to-destination $mail_server
$ipt -t nat -A POSTROUTING -p tcp --dst $mail_server --dport $smtp -j SNAT --to-source $lan_ip
$ipt -t nat -A OUTPUT --dst $inet_ip51 -p tcp --dport $smtp -j DNAT --to-destination $mail_server

echo "done"
 楼主| 发表于 2005-6-24 16:53:24 | 显示全部楼层
自己顶一下,大侠们帮忙看看吧
回复 支持 反对

使用道具 举报

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

本版积分规则

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