Beitrag
von lx » 12.12.2002 20:13:47
function StartFirewall() {
# ***************************
# ***************************
# * *
# * 3. Starten der Firewall *
# * *
# ***************************
# ***************************
#*****************************************************************************
# ************
# * Policies *
# ************
# Vorbestehende Regeln loeschen
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
# Keine Einschraenkungen fuer das Loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Voreinstellung: Alle Pakete verwerfen
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
iptables -t nat --policy PREROUTING DROP
iptables -t nat --policy OUTPUT DROP
iptables -t nat --policy POSTROUTING DROP
iptables -t mangle --policy PREROUTING DROP
iptables -t mangle --policy OUTPUT DROP
#******************************************************************************
# Stealthscans und die Flags fuer den TCP-Verbindungszustand
# Alle Bits geloescht
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# SYN und FIN gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# FIN ist ohne zugehoeriges ACK gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
# PSH ist ohne zugehoeriges ACK gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
# URG ist ohne zugehoeriges ACK gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,UGR UGR -j DROP
# *****************************************************************************
# *********
# * INPUT *
# *********
# Ankommende Pakete ablehnen, die vorgeblich von der IP-Adresse unseres
# externen Interfaces kommen.
iptables -A INPUT -i $IFACE_EXT -s $IPADDR -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-A-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_A -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-B-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_B -j DROP
# Pakete abweisen, wenn Absender im privaten Klasse-C-Bereich ist
iptables -A INPUT -i $IFACE_EXT -s $CLASS_C -j DROP
# Pakete vom Loopback verwerfen
iptables -A INPUT -i $IFACE_LO -s $LOOPBACK -j DROP
# Fehlerhafte Broadcast-Pakete verwerfen und aufzeichnen
iptables -A INPUT -i $IFACE_EXT -s $BROADCAST_DEST -j LOG
iptables -A INPUT -i $IFACE_EXT -s $BROADCAST_DEST -j DROP
iptables -A INPUT -i $IFACE_EXT -d $BROADCAST_SRC -j LOG
iptables -A INPUT -i $IFACE_EXT -d $BROADCAST_SRC -j DROP
# Gerichtete Broadcasts sperren
# (Kartierung von Netzwerken, Denial-of-Service-Angriffe)
iptables -A INPUT -i $IFACE_EXT -d $SUBNET_BASE -j DROP
iptables -A INPUT -i $IFACE_EXT -d $SUBNET_BROADCAST -j DROP
# X-Window: Aufbau einer Verbindung zu einem fremden Server sperren
iptables -A INPUT -i $IFACE_EXT -p tcp --syn --destination-port $XWINDOW_PORTS -j DROP
# ************
# * INCOMING *
# ************
# Auf den SSH-Server kann zugegriffen werden
# ******************************************
if [ "$SSH_SERVER" = "1" ]; then
if [ "$CONNECTION_TRACKING" = "1" ]; then
iptables -A INPUT -i $IFACE_EXT -p tcp --sport $SSH_PORTS -d $IPADDR --dport 22 -m state --state NEW -j ACCEPT
fi
iptables -A INPUT -i $IFACE_EXT -p tcp --sport $SSH_PORTS -d $IPADDR --dport 22 -j ACCEPT
iptables -A OUTPUT -o $IFACE_EXT -p tcp ! --syn -s $IPADDR --sport 22 --dport $SSH_PORTS -j ACCEPT
# **************
# * FORWARDING *
# **************
# Adressumsetzung einer Anfrage zum internen Webserver
iptables -t nat -A PREROUTING -i $IFACE_EXT -p tcp --sport $UNPRIVPORTS -d $IPADDR --dport 80 -j DNAT --to-destination $WEB
SERVER
# ******************************************
# * Forwarding zum internen Webserver *
# ******************************************
iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -p tcp --sport $UNPRIVPORTS -d $WEBSERVER --dport 80 -m state --state NEW -
j ACCEPT
iptabels -A FORWARD -i $IFACE_INT -o $IFACE_EXT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptabels -A FORWARD -i $IFACE_EXT -o $IFACE_INT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ******************
# * Ausgangsregeln *
# ******************
# Ins lokale Netzwerk: Alles erlauben
iptables -A OUTPUT -s $IPADDR_INT -d $WEBSERVER -j ACCEPT
# Ans Loopback: Alles erlauben
iptables -A OUTPUT -o $IFACE_LO -j ACCEPT
# Ins Internet: Alles erlauben
iptables -A OUTPUT -o $IFACE_EXT -j ACCEPT
# *************
# * LOGGING *
# *************
# Alles was bis hier kommt, mitprotokollieren
iptables -A OUTPUT -j LOG --log-level 7 --log-prefix "Nicht raus: "
iptables -A FORWARD -j LOG --log-level 7 --log-prefix "Nicht durch: "
iptables -A INPUT -j LOG --log-level 7 --log-prefix "Nicht rein: "
}
function StopFirewall() {
# **********************************
# **********************************
# * *
# * 2. HERUNTERFAHREN DER FIREWALL *
# * *
# **********************************
# **********************************
# Ausschalten des Routing
echo "0" > /proc/sys/net/ipv4/ip_forward
# Default-Policies: Alles rein und raus, kein Forwarding mehr
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Loeschen aller Regeln
iptables -F
# Loeschen aller zusaezlichen Ketten
iptables -X
}
# **********************
# **********************
# * *
# * START-STOP-SKRIPT *
# * *
# **********************
# **********************
case "$1" in
start)
echo -n "Starting firewall: iptables"
StartFirewall
;;
stop)
echo "Stopping firewall: iptables"
StopFirewall
echo "."
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/fwneu1 {start|stop|restart|force-reload}"
exit 1
;;
esac
Das } vor der StopFirewall sektion wird angemeckert.