NAT+www的發佈

#!/bin/bash
#ll於2008年4月9日修改for www-linux。
###--------------------------------------------------------------------###
#以下是定義變量
###--------------------------------------------------------------------###
PATH=/sbin:/usr/sbin:/bin:/usr/bin

#定義外網接口,確定網卡,如果是撥號就用ppp0
EXT_IF=eth1
#定義內網接口
INT_IF=eth0
#定義內網地址範圍
LAN_IP_RANGE=“192.168.0.0/16”
#定義內外網固定ip
EXT_IP=“218.28.131.150”
INT_IP=“192.168.30.10”

#port1爲外網開放端口port2爲內網開放端口
TRUSTED_TCP_PORT1="22 53 "
TRUSTED_UDP_PORT1=“53”
TRUSTED_TCP_PORT2=“22 53 80”
TRUSTED_UDP_PORT2=“53 80”
ALLOWED_ICMP=“0 3 3/4 4 11 12 14 16 18”

###--------------------------------------------------------------------###
#確定iptables安裝情況
###--------------------------------------------------------------------###
which iptables &>/dev/null || {
echo
echo “$(basename $0): iptables程序沒有找到”
echo “請先安裝好這個程序.”
echo
exit 1
}
###--------------------------------------------------------------------###
#廢掉ipchains,這是針對redhat以前的版本,新版已經把iptables嵌到內核裏了
###--------------------------------------------------------------------###
lsmod | grep ipchains &>/dev/null && {
echo “正在廢掉ipchains服務…”
rmmod ipchains
}

###--------------------------------------------------------------------###
#裝載模塊modules
###--------------------------------------------------------------------###
echo “模塊正在載人…”
modprobe ip_tables &>/dev/null || {
echo -n "$(basename KaTeX parse error: Expected 'EOF', got '}' at position 40: …o "請檢查" exit 3 }̲ for file in /l…(basename $file)
modprobe KaTeX parse error: Expected '}', got 'EOF' at end of input: …_*.o do module=(basename $file)
modprobe ${module%.*} &>/dev/null
done
#添加ipp2p模塊
#insmod /root/ipp2p-0.7.4/ipt_ipp2p.o

#----ipforwarding-------
echo “打開foward功能”
echo “1” > /proc/sys/net/ipv4/ip_forward

#傳統的防syn flood的方法
echo “1” > /proc/sys/net/ipv4/tcp_syncookies
echo “2048” > /proc/sys/net/ipv4/tcp_max_syn_backlog

###---------------------------------------------------###
#清除先前的設定
###---------------------------------------------------###
echo “正在清除先前的設定…”
#清除預定表filter中,所有規則鏈中的規則
iptables -F
#清除預定表filter中,使用者自定鏈中的規則
iptables -X
#清除預定表mangle中,所有規則鏈中的規則
iptables -F -t mangle
#清除預定表mangle中,使用者自定鏈中的規則
iptables -X -t mangle
#清除nat表中的規則
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat

###---------------------------------------------------###
#設定預設規則
###---------------------------------------------------###
#預設規則要麼爲全部丟棄,要麼爲全部接受
#本列爲全部丟棄,然後逐步開放,這是安全係數很高的設法
#若目標爲DROP,則policy設爲ACCEPT;若目標爲ACCEPT,則policy設爲DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#TCP的設定

------------- 端口開啓 :sercies1爲外網,services2爲內網

echo “開啓所要的端口services1…”
iptables -N services1
for PORT in $TRUSTED_TCP_PORT1; do
iptables -A services1 -p tcp --dport $PORT -j ACCEPT
done
for PORT in $TRUSTED_UDP_PORT1; do
iptables -A services1 -p udp --dport $PORT -j ACCEPT
done
#iptables -A services1 -p TCP --syn -j ACCEPT
iptables -A services1 -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

echo “開啓所要的端口services2…”
iptables -N services2
for PORT in $TRUSTED_TCP_PORT2; do
iptables -A services2 -p tcp --dport $PORT -j ACCEPT
done
for PORT in $TRUSTED_UDP_PORT2; do
iptables -A services2 -p udp --dport $PORT -j ACCEPT
done
#iptables -A services2 -p TCP --syn -j ACCEPT
iptables -A services2 -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

#我們丟棄壞的TCP包

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j LOG --log-prefix “New not syn:”
iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

#外網只有一個公用ip的情況
iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
echo “局域網共享的已實現,請試用局域網機器”

#這一步實現局域網內部機對外部網開放

port forwarding

for PORT in $FWD_TCP_PORT; do
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $SERVER_IP -p tcp --dport $PORT -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport $PORT -j DNAT --to-destination $SERVER_IP
iptables -t nat -A POSTROUTING -s $LAN -d $SERVER_IP -p tcp --dport $PORT -j SNAT --to-source $INT_IP
done

for PORT in $FWD_UDP_PORT; do
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $SERVER_IP -p udp --dport $PORT -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -d $EXT_IP -p udp --dport $PORT -j DNAT --to-destination $SERVER_IP
iptables -t nat -A POSTROUTING -s $LAN -d $SERVER_IP -p udp --dport $PORT -j SNAT --to-source $INT_IP
done

#凡對$EXT_IP:80連線者,則轉址到192.168.30.10:80
iptables -t nat -A PREROUTING -d 218.28.131.150 -p tcp --dport 80 -j DNAT --to-destination 192.168.30.10:80
iptables -A FORWARD -p tcp -d 192.168.30.10 --dport 80 -j ACCEPT
iptables -t nat -I POSTROUTING -s 192.168.0.0/255.255.0.0 -p tcp -d 192.168.30.10 --dport 80 -j SNAT --to 192.168.30.10

#192.168.30.12裝有提供ssh服務
#iptables -t nat -A PREROUTING -d 218.28.131.150 -p tcp --dport 22 -j DNAT --to-destination 192.168.30.12:22
#iptables -A FORWARD -p tcp -d 192.168.30.12 --dport 22 -j ACCEPT
#允許內網機使用外網的IP訪問內網機,把內網機的IP轉換成網關IP
#iptables -t nat -I POSTROUTING -s 192.168.0.0/255.255.0.0 -p tcp -d 192.168.30.12 --dport 22 -j SNAT --to 192.168.12.2

#允許要轉向的包
iptables -A FORWARD -i $INT_IF -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
#對於不管來自哪裏的ip碎片都進行控制,允許每秒通過100個碎片

iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
#icmp包通過的控制,防止icmp黑客攻擊對不管來自哪裏的icmp包都進行限制,允許每秒通過一個包,該限制觸發的條件是10個包

#這一條是針對oicq等使用udp服務而接收所有的udp包
iptables -A FORWARD -p udp -d $LAN_IP_RANGE -i $EXT_IF -j ACCEPT

#防止外網用內網ip欺騙
iptables -t nat -A PREROUTING -i $EXT_IF -s 192.168.0.0/16 -j DROP
iptables -t nat -A PREROUTING -i $EXT_IF -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i $EXT_IF -s 172.16.0.0/12 -j DROP

#------------以下是關於網關本身的安全設置------------
#允許ping網關但限制
iptables -A INPUT -p icmp -m limit --limit 6/m --limit-burst 5 -j ACCEPT

#開放services端口
iptables -A INPUT -i $EXT_IF -p tcp -j services1
iptables -A OUTPUT -o $EXT_IF -p tcp -j services1
iptables -A INPUT -i $INT_IF -p tcp -j services2
iptables -A OUTPUT -o $INT_IF -p tcp -j services2

#開放主機的ssh對外聯繫,使外部能以ssh訪問服務器
iptables -A OUTPUT -o $EXT_IF -p tcp -s $EXT_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 22 -d $EXT_IP --dport 1024:65535 -j ACCEPT

#防止輕量型DDOS
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT

#把DOS IP給封掉
#iptables -I INPUT -s 211.1.0.0/16 -j DROP
#網絡測試用
#iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
#iptables -A OUTPUT -p icmp -j ACCEPT

KaTeX parse error: Expected 'EOF', got '&' at position 28: …tus | grep pid &̲>/dev/null && {…(ifconfig | grep $INT_IF -A 1 | awk /inet/ {print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲ | sed -e s/add…INT_IP" ]; then
echo
echo “$(basename $0): INTIFIP"echo"INT_IF沒有IP存在" echo "請檢查INT_IF是否正確配置了”
echo
exit 3
fi
}
exit 0

EOS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章