PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitte um Verbesserungsvorschläge und allgemeine Kritik....



luckystrikerulz
07.04.06, 10:40
servus,
dies ist mein FW-Script bis jetzt!

leider bölkt er beim starten noch den fehler "Bad built-in chain name" raus und ich habe noch ne frage: was hat es mit der LOG_REJECT kette auf sich? (es funzt, aber ich habe die logik nur übernommen und versteh nich ganz wiso die ganzen pakete aus INPUT mit fehlerantwort zurückgegeben werden...)
-




#!/bin/bash
#
#blablabla



### BEGIN INIT INFO
# Provides: IP-Paketfilter123
# Required-Start: $network $local_fs
# Required-Stop: $local_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 4 6
# Short-Description: Firewall (FIN)
# Description: Firewall fuer FIN-Projekt
### END INIT INFO
#


#Variablen
DSL=dsl0
LAN=eth0
LOKALE_IP=192.168.1.1
LOKALES_NETZ=192.168.1.0/24


echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 3 > /proc/sys/net/ipv4/tcp_retries1
echo 15 > /proc/sys/net/ipv4/tcp_retries2
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null



case "$1" in
start)
echo "Die Firewall wird gestartet..."


##### #####
##### Laden der Module #####
##### #####

#iptables-Modul
modprobe ip_tables

#Module zur Verbindungsverfolgung
modprobe ip_conntrack
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp

#Tabellen loeschen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X


##### #####
##### DROP-KETTE #####
##### #####

iptables -N LOG_DROP

# e-donkey-Pakete und Pakete verschiedener Wuermer verwerfen,
# die anscheinend nicht auf tcp-reset reagieren
iptables -A LOG_DROP -p TCP --syn --dport 135:137 -m limit --limit 10/hour --limit-burst 2 -j LOG --log-prefix "DROP-TCP-SYN "
iptables -A LOG_DROP -p TCP --syn --dport 135:137 -m limit --limit 1/s -j REJECT --reject-with tcp-reset
iptables -A LOG_DROP -p TCP --syn --dport 135:137 -j DROP
iptables -A LOG_DROP -p TCP --syn --dport 445 -m limit --limit 10/hour --limit-burst 2 -j LOG --log-prefix "DROP-TCP-SYN "
iptables -A LOG_DROP -p TCP --syn --dport 445 -m limit --limit 1/s -j REJECT --reject-with tcp-reset
iptables -A LOG_DROP -p TCP --syn --dport 445 -j DROP
iptables -A LOG_DROP -p TCP --syn --dport 4662 -m limit --limit 10/hour --limit-burst 2 -j LOG --log-prefix "DROP-TCP-SYN "
iptables -A LOG_DROP -p TCP --syn --dport 4662 -m limit --limit 1/s -j REJECT --reject-with tcp-reset
iptables -A LOG_DROP -p TCP --syn --dport 4662 -j DROP
iptables -A LOG_DROP -p TCP --syn -j LOG --log-prefix "DROP-TCP-SYN "
iptables -A LOG_DROP -p TCP --syn -m limit --limit 5/s -j REJECT --reject-with tcp-reset
iptables -A LOG_DROP -p TCP --syn -j DROP
iptables -A LOG_DROP -p TCP -j LOG --log-prefix "DROP-TCP "
iptables -A LOG_DROP -p TCP -m limit --limit 5/s -j REJECT --reject-with tcp-reset
iptables -A LOG_DROP -p TCP -j DROP
iptables -A LOG_DROP -p UDP -j LOG --log-prefix "DROP-UDP "
iptables -A LOG_DROP -p UDP -m limit --limit 5/s -j REJECT --reject-with icmp-port-unreachable
iptables -A LOG_DROP -p UDP -j DROP
iptables -A LOG_DROP -p ICMP -j LOG --log-prefix "DROP-ICMP "
iptables -A LOG_DROP -p ICMP -j DROP
iptables -A LOG_DROP -j LOG --log-prefix "DROP-PROTO-ETC "
iptables -A LOG_DROP -m limit --limit 5/s -j REJECT --reject-with icmp-proto-unreachable
iptables -A LOG_DROP -j DROP


##### #####
##### REJECT-KETTE #####
##### #####

iptables -N LOG_REJECT
iptables -P LOG_REJECT DROP

iptables -A LOG_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
iptables -A LOG_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A LOG_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
iptables -A LOG_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A LOG_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
iptables -A LOG_REJECT -p icmp -j DROP
iptables -A LOG_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
iptables -A LOG_REJECT -j REJECT --reject-with icmp-proto-unreachable





##### #####
##### IPSEC-KETTE #####
##### #####

iptables -N ipsec_for
# forwarding von Paketen aus dem Tunnel und zurueck
iptables -A ipsec_for -i $DSL -o $LAN -m mark --mark 10 -j ACCEPT

# Oder mit dem Policy-Modul, was den Vorteil hat, dass man auch den
# Traffic in den Tunnel kontrollieren kann, d.h. Verbindungen vom
# Gateway zum Roadwarrior moeglich sind:
# iptables -A FORWARD -i $DSL -m policy --dir in --pol ipsec \
# --mode tunnel --proto esp -j ACCEPT
# iptables -A FORWARD -o $DSL -m policy --dir out --pol ipsec \
# --mode tunnel --proto esp -j ACCEPT

iptables -A ipsec_for -j LOG_DROP


# IPSec-Pakete markieren:
# (Kann auch entfallen, siehe bei ipsec-Abschnitt)
iptables -t mangle -A PREROUTING -p 50 -i $DSL -j MARK --set-mark 10

iptables -A FORWARD -i $DSL -m mark --mark 10 -j ipsec_for
# oder, falls im ipsec-Abschnitt mit -m policy gearbeitet wird:
# iptables -A FORWARD -i $DSL -j ipsec_for
# iptables -A FORWARD -o $DSL -j ipsec_for


##### #####
##### INPUT-KETTE #####
##### #####

iptables -P INPUT DROP

iptables -A INPUT -i lo -j ACCEPT
#LAN-Zugriff auf LAN
iptables -A INPUT -m state --state NEW -i $LAN -j ACCEPT
# Connection-Tracking aktivieren
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#Dienste die auf server laufen
iptables -A INPUT -i DSL -m state --state NEW -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -i DSL -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i DSL -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -j LOG_REJECT

#wenn Keine Flags gesetzt --> in Kette LOG_DROP verschieben
iptables -I INPUT 1 -p tcp --tcp-flags ALL NONE -j LOG_DROP

#wenn SYN und FIN gesetzt --> in Kette LOG_DROP verschieben
iptables -I INPUT 1 -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG_DROP
#wenn SYN und RST gleichzeitig gesetzt --> in Kette LOG_DROP verschieben
iptables -I INPUT 1 -p tcp --tcp-flags SYN,RST SYN,RST -j LOG_DROP

#wenn FIN und RST gleichzeitig gesetzt --> in Kette LOG_DROP verschieben
iptables -I INPUT 1 -p tcp --tcp-flags FIN,RST FIN,RST -j LOG_DROP

#wenn FIN ohne ACK --> in Kette LOG_DROP verschieben
iptables -I INPUT 1 -p tcp --tcp-flags ACK,FIN FIN -j LOG_DROP

#wenn PSH ohne ACK --> in Kette LOG_DROP verschieben
iptables -I INPUT 1 -p tcp --tcp-flags ACK,PSH PSH -j LOG_DROP
#wenn URG ohne ACK --> in Kette LOG_DROP verschieben
iptables -I INPUT 1 -p tcp --tcp-flags ACK,URG URG -j LOG_DROP


#Anfragen von aussen loggen
iptables -I INPUT 1 -p tcp --dport 21 -i DSL -m limit --limit 10/m -j LOG --log-prefix "FTP-VERBINDUNG"
iptables -I INPUT 1 -p tcp --dport 22 -i DSL -m limit --limit 10/m -j LOG --log-prefix "SSH - VERBINDUNG"
iptables -I INPUT 1 -p tcp --dport 80 -i DSL -m limit --limit 10/m -j LOG --log-prefix "HTTP-VERBINDUNG"




##### #####
##### OUTPUT-KETTE #####
##### #####

iptables -P OUTPUT DROP

#Loopback-Netzwerk-Kommunikation zulassen
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I OUTPUT 1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j LOG_REJECT
iptables -A OUTPUT -m state --state INVALID -j DROP



##### #####
##### FORWARD-KETTE #####
##### #####

iptables -P FORWARD DROP



##### #####
##### NAT zum LAN #####
##### #####

#Remote Desktop-Verbindung zu rechner 192.168.2.200 forwarden
#iptables -I FORWARD 1 -i ppp0 -o $LAN -p tcp --dport 3389 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#iptables -t nat -I PREROUTING 1 -i DSL -s 0/0 -p tcp --dport 3389 -j DNAT --to-destination 192.168.123.12
#iptables -t nat -I POSTROUTING 1 -o $LAN -s 0/0 -d 192.168.123.12 -p tcp --dport 3389 -j MASQUERADE





##### #####
##### Prioritaeten setzen #####
##### #####

#iptables -A FORWARD -m tos --tos 0x10 -j ACCEPT

#iptables -A FORWARD -m tos --tos Minimize-Delay -j ACCEPT



;;


stop)
echo "Die Firewall wird gestoppt..."

#Tabellen loeschen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
#Default-Policies setzen (jedes Paket wird akzeptiert)
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

echo "Achtung, die Policies stehen jetzt auf ACCECPT"



;;

status)
echo "Tabelle filter"
iptables -L -vn
echo "Tabelle nat"
iptables -t nat -L -vn
echo "Logs liegen in /var/log/firewall"



;;


*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1


;;



esac



[/quote]

geronet
07.04.06, 18:13
Um den Fehler zu finden, kannst du dein Script mit Hilfe von

bash -x <scriptname>
ausführen.

Grüsse, Stefan

luckystrikerulz
09.04.06, 15:01
Um den Fehler zu finden, kannst du dein Script mit Hilfe von

bash -x <scriptname>
ausführen.

Grüsse, Stefan

danke damit is der fehler weg :)

sonst noch jemand tipps für mich?

geronet
09.04.06, 19:07
Reject schickt ein Paket zurück an den Sender, damit dieser weiss dass der Port nicht offen ist, Drop verwirft einfach das Paket und der Sender wartet dann lange auf eine Antwort. Ist aber geschmackssache was man nimmt. Für interne LAN's ist Reject natürlich sinvoller.

Grüsse, Stefan