由 訪客 » 週三 4月 27, 2005 5:40 pm
我也根據了 vbird , moto , 和 其他討論區說的方法來製出以下的script
EXTIF="ppp0"
INIF="eth0"
INNET="192.168.0.0/24" # This is for NAT's network
ALL="0.0.0.0/0"
# 1.0 測試您的核心版本與防火牆模組
kver=`uname -r | cut -c 1-3`
if [ "$kver" != "2.4" ] && [ "$kver" != "2.5" ]; then
echo "Your Linux Kernel Version may not be suported by this script!"
echo "This scripts will not be runing"
exit
fi
ipchains=`lsmod | grep ipchains`
if [ "$ipchains" != "" ]; then
echo "unload ipchains in your system"
rmmod ipchains 2> /dev/null
fi
# 2.0 載入適當的模組
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH EXTIF INIF INNET
modprobe ip_tables > /dev/null 2>&1
modprobe iptable_nat > /dev/null 2>&1
modprobe ip_nat_ftp > /dev/null 2>&1
modprobe ip_nat_irc > /dev/null 2>&1
modprobe ip_conntrack > /dev/null 2>&1
modprobe ip_conntrack_ftp > /dev/null 2>&1
modprobe ip_conntrack_irc > /dev/null 2>&1
# 3.0 先清除所有的防火牆規則
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -F -t nat
/sbin/iptables -X -t nat
/sbin/iptables -Z -t nat
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
# 4.0 先允許信任網域,這包含 lo 這個內部迴圈介面,
# 以及剛剛指定的內部介面網域!
# 當然,重點是可以啟動您的 Linux 成為 NAT 主機的啦!
/sbin/iptables -A INPUT -i lo -j ACCEPT
if [ "$INIF" != "" ]; then
/sbin/iptables -A INPUT -i $INIF -j ACCEPT
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE
fi
# 6.0 底下這個檔案若存在,則執行!請注意,
# 這個檔案與杜絕砍站的軟體有關喔!
if [ -f /usr/local/virus/httpd-err/iptables.http ]; then
sh /usr/local/virus/httpd-err/iptables.http
fi
# 7.0 允許 ICMP 封包與允許已建立的連線通過!
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
AICMP="0 3 3/4 4 11 12 14 16 18"
for tyicmp in $AICMP
do
/sbin/iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
done
#防止網絡掃描
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#允許內部網絡使用者瀏覽 Internet 網頁,ftp
/sbin/iptables -t filter -A FORWARD -p TCP -s $INNET -d $ALL --dport 80 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -p TCP -s $INNET -d $ALL --dport 443 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -p TCP -s $INNET -d $ALL --dport 21 -j ACCEPT
#利用狀態性機制去自動判斷相關的封包
/sbin/iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
但Private內的電腦仍無法上網,上網所用的是浮動的adsl連接eth0,
現在不知那裡出現了問題...
Private內其中一部電腦的設定:
IP:192.168.0.9
Netmask:255.255.255.0
Gateway:192.168.0.2
Server的eth0設定:
IP:192.168.0.2
Netmask:255.255.255.0