由 allendu 在 01-09-2004 13:08 发表:
请各位看一下我的IPT策略有何问题???
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
IPT=/sbin/iptables
#----------------------------------
#对外的 IP
REALIP="..."
#----------------------------------
设定 filter 内的 chain 之 Policy
$IPT -t filter -P INPUT DROP
$IPT -t filter -P OUTPUT ACCEPT
$IPT -t filter -P FORWARD DROP
#-------------------------------------------
设定 filter 这个 table 的 chain 之 Policy
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
#----------------------------------------------
清除所有 chain 的 rule, 删除自行定义的 chain
$IPT -t nat -F
$IPT -t nat -X
#---------------------------------------------------------
定义处理 ICMP 封包的 chain: 'icmp_chain'
其中 type 0 代表 echo-reply (ping 对方时的响应),
type 8 为 echo-request (其它机器 ping 我们).
$IPT -t filter -F
$IPT -t filter -X
$IPT -t filter -N icmp_chain
$IPT -t filter -A icmp_chain -p icmp --icmp-type 0 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp --icmp-type 3 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp --icmp-type 5 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp --icmp-type 8 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp --icmp-type 11 -j ACCEPT
$IPT -t filter -A icmp_chain -p icmp -j DROP
#==================================================================
PREROUTING (table:nat)
1.即使是从内部 NAT 出去的联机, 它传送回来的封包的目的地址也绝对不会是内部IP!
2.而 NAT 出去的联机所传回的封包之目的地址在经过 PREROUTING 阶段后
才会被转换成内部 IP
$IPT -t nat -A PREROUTING -i eth0 -d 192.168.20.0/24 -j DROP
$IPT -t nat -A PREROUTING -i eth0 -d 127.0.0.0/8 -j DROP
3.从外界进来,但宣称是来自内部网络的封包,一律挡掉。
$IPT -t nat -A PREROUTING -i eth0 -s 192.168.20.0/24 -j DROP
$IPT -t nat -A PREROUTING -i eth0 -s 127.0.0.0/8 -j DROP
#===========================================================================
FORWARD (table:filter)
要能顺利让内部网络连到 internet, 也让数据能传回内部,
必须允许 FORWARD, 但仅限于
(1) 从内部网络主动连至 internet 的联机
(2) 上述联机所传递的数据(因此联机状态必须是ESTABLISHED 或 RELATED 的才行)
#---------------------------------------------------------------------------
$IPT -t filter -A FORWARD -s 192.168.20.0/24 -j ACCEPT
$IPT -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#========================================================================
POSTROUTING (table:nat)
要让内部网络能连到 internet, 必须把来自内部网络,
且要从 eth0 送出去的封包之来源地址改成真实 IP, 此即为 SNAT(Source NAT)
#------------------------------------------------------------------------
$IPT -t nat -A POSTROUTING -s 192.168.20.0/24 -o eth0 -j SNAT --to-source $REALIP
#========================================================================
INPUT (table:filter)
A.信任内部网络(192.168.20.0/24)及 lo 接口(127.0.0.0/8)
接受任何来自于这两个界面的封包.
#------------------------------------------------------------------------
$IPT -t filter -A INPUT -p all -s 192.168.20.0/24 -j ACCEPT
$IPT -t filter -A INPUT -p all -s 127.0.0.0/8 -j ACCE