• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Bitte um Verbesserungsvorschläge und allgemeine Kritik....

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...)
-


Code:
#!/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]
 
Oben