12
請間各位學長,小弟設定的 Firewall 有可安全漏動,請指教
#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin
start() {
# ------------------------------------------ INFO ------------------------------------------
HOSTNAME=joe.no-ip.com
WAN_IF=ppp0
DMZ_IF=eth2
DMZ_IP="192.168.1.254"
DMZ_SRV="192.168.1.1"
INPUT_TCP="22,23,53,113"
FORWARD_TCP="20,21,25,53,80,110,113,143,443,3389"
UDP_PORT="53"
# ------------------------------------------ IP FORWARD ------------------------------------------
echo "1" > /proc/sys/net/ipv4/ip_forward
# ------------------------------------------ MODULES ------------------------------------------
modprobe ip_tables
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe ip_nat_ftp
modprobe ip_nat_irc
# ------------------------------------------ FLUSHING ------------------------------------------
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
# ------------------------------------------ POLICIES ------------------------------------------
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
# ------------------------------------------ SERVICES ------------------------------------------
iptables -A INPUT -i ! $WAN_IF -m multiport -p tcp --dports 20,21,80 -j ACCEPT
iptables -A INPUT -i $WAN_IF -m multiport -p tcp --dports $INPUT_TCP -j ACCEPT
iptables -A FORWARD -i $WAN_IF -o $DMZ_IF -m multiport -p tcp --dports $FORWARD_TCP -j ACCEPT
# ------------------------------------------ INPUT ------------------------------------------
iptables -A INPUT -i $WAN_IF -p tcp ! --syn -j ACCEPT
iptables -A INPUT -i $WAN_IF -p udp --sport $UDP_PORT -j ACCEPT
iptables -A INPUT -i $WAN_IF -p icmp --icmp-type ! 8 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ! $WAN_IF -j ACCEPT
# ------------------------------------------ FORWARD ------------------------------------------
iptables -A FORWARD -i $WAN_IF -p tcp ! --syn -j ACCEPT
iptables -A FORWARD -i $WAN_IF -p udp --sport $UDP_PORT -j ACCEPT
iptables -A FORWARD -i $WAN_IF -p icmp --icmp-type ! 8 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ! $WAN_IF -j ACCEPT
# ------------------------------------------ OUTPUT ------------------------------------------
iptables -A OUTPUT -j ACCEPT
# ------------------------------------------ NAT MASQ ------------------------------------------
iptables -t nat -A POSTROUTING -o $WAN_IF -j MASQUERADE
# ------------------------------------------ NAT PREROUTING ------------------------------------------
iptables -t nat -A PREROUTING -d $HOSTNAME -m multiport -p tcp --dports $FORWARD_TCP -j DNAT --to $DMZ_SRV
# ------------------------------------------ NAT POSTROUTING ------------------------------------------
iptables -t nat -A POSTROUTING -d $DMZ_SRV -m multiport -p tcp --dports $FORWARD_TCP -j SNAT --to $DMZ_IP
# ------------------------------------------ NAT OUTPUT ------------------------------------------
iptables -t nat -A OUTPUT -d $HOSTNAME -m multiport -p tcp --dports $FORWARD_TCP -j DNAT --to $DMZ_SRV
}
stop() {
# ------------------------------------------ INFO ------------------------------------------
HOSTNAME=
WAN_IF=
DMZ_IF=
DMZ_IP=
DMZ_SRV=
INPUT_TCP=
FORWARD_TCP=
UDP_PORT=
# ------------------------------------------ FLUSHING ------------------------------------------
iptables -F
iptables -X
iptables -Z
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
# ------------------------------------------ POLICIES ------------------------------------------
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
}
restart() {
stop
start
}
status() {
iptables -L -n | less
iptables -t nat -L -n | less
}
case "$1" in
start)
start
echo "Firewall is start ..........{ OK }"
;;
stop)
stop
echo "Firewall is stop ..........{ OK }"
;;
restart)
restart
echo "Firewall is restart ..........{ OK }"
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit $?