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

Iptables Skript erstellen - Hilfe benötigt

xapient

Member
nachdem ich mit der SuSEfirewall2 nicht die gewünschten ergebnisse erzielte und da ich mich sowieso sehr dafür interessiere wie das alles funktioniert habe ich begonnen mich mit iptables zu beschäftigen.. nach ca. 3 stunden weiss ich nun gerade genug um zu wissen wie ich alles zu mach und einzelne ports wieder öffne..

leider sind einige regeln die ich in beispielscripts hier im forum finden konnte nicht (mehr) anwendbar.. es werden fehlermeldungen ausgegeben die auf die version von iptables verweisen.. nicht weiter schlimm..
__________________
ich habe mir also selbst ein skript zusammen gebaut .. so nach baukasten prinzip und dieses erfüllt seine minimalen zwecke schonmal ganz gut.. und ich verstehe (weitgehend) auch was es tut..
es ist auch noch etwas müll im script der aber vielleicht noch gebraucht werden kann...
was ich so gelesen habe bietet das was es tut jedoch nicht wirklich hohe sicherheit (ich bin ohnehin hinter einem router daher ist das egal .. is nur zu lernzwecken)

ich würde mich nun über anregungen und ein, zwei erklärungen freuen...
hier mal das skript:
Code:
#! /bin/bash

### BEGIN INIT INFO
# Provides: packet filter rules
# Required-Start: $network $syslog
# Required-Stop:  $network $syslog
# Default-Start:  3 5
# Default-Stop:   0 1 2 4 6
# Description:    Start Iptables-Firewall
### END INIT INFO

. /etc/rc.status

# First reset status of this service
rc_reset

######################Variablen setzen########################
IIF=br0				# Interface
TNET=192.168.0.0/24		# Trusted Net
ENET=0/0			# Enemy Net
prox_prot="tcp udp"		# benutzte Protokolle
highPorts=1024:65535
Port=""
uPort="137 138"			# udp ports die durch sollen
tPort="1100 80 445"		# tcp ports die durch sollen
##############################################################


######################Pruefen ob Module geladen sind
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_nat_ftp
modprobe ipt_state 

######Abfrage der Eingabe#######
case $1 in
start)
   echo "Starting Firewall..."
#############################


##########Alles zu
   iptables -P INPUT   DROP
   iptables -P FORWARD   DROP
   iptables -P OUTPUT   DROP


##########Alte Regeln löschen
   iptables -F		# Lösche alle Regeln aus der Filter Tabelle
   iptables -t nat -F 	# Lösche aller Regeln aus der NAT Tabelle 
   iptables -X		# Lösche alle selbstdefinierten Regeln 


###############################################
#-------------------Regeln--------------------#
###############################################


##################Loopback öffnen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


###############ICMP
# ping: 8 und 0, ausgehend
iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type echo-reply -j ACCEPT
# ping: 8 und 0, eingehend
iptables -A INPUT  -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply   -j ACCEPT
# source quench (4)
iptables -A OUTPUT -p ICMP --icmp-type source-quench -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type source-quench -j ACCEPT
# time exceeded (11)
iptables -A OUTPUT -p ICMP --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type time-exceeded -j ACCEPT
# parameter problem (12)
iptables -A OUTPUT -p ICMP --icmp-type parameter-problem -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type parameter-problem -j ACCEPT
# destination unreachable (3)
iptables -A OUTPUT -p ICMP --icmp-type fragmentation-needed -j ACCEPT
iptables -A OUTPUT -p ICMP --icmp-type port-unreachable -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type fragmentation-needed -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type destination-unreachable -j ACCEPT

################PING erlauben
iptables -A OUTPUT -p ICMP -j ACCEPT 


################# Internes Netz darf alles
# iptables -A INPUT  -s $TNET -j ACCEPT
# iptables -A OUTPUT -d $TNET -j ACCEPT



#############Definierte Ports oeffnen
        for p in $Port
        do
             for a in $prox_prot
          do
              if [ $a = "tcp" ]; then
                SYN='! --syn'
                      else
                 SYN=''
              fi
	iptables -A OUTPUT -p $a --sport $highPorts -d 0/0 --dport $p -o $IIF -j ACCEPT
	iptables -A INPUT  -p $a --sport $p -s 0/0 --dport $highPorts -i $IIF $SYN -j ACCEPT
         done
          done
#--------------------------------------------------------#
for p in $tPort
        do
 iptables -A INPUT -p tcp --dport $p -j ACCEPT
done
for p in $uPort
        do
 iptables -A INPUT -p udp --dport $p -j ACCEPT
done
#####################################

################portscans sperren#########################
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP		# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP	# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP	# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP	# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP	# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP	# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP	# URG ohne ACK
###########################################################

######## MTU Problem loesen
iptables  -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

######### Schutz vor IP-Spoofing ################
iptables -A INPUT -i ppp0  -s 10.0.0.0/8     -j DROP
iptables -A INPUT -i ppp0  -s 172.16.0.0/16  -j DROP
iptables -A INPUT -i ppp0  -s 192.168.0.0/24 -j DROP 


#################dynamische Regeln#######################
   iptables -N filter
   iptables -A filter -m state --state NEW -o $IIF -j ACCEPT
   iptables -A filter -m state --state ESTABLISHED,RELATED -j ACCEPT
   iptables -A filter -j LOG
   iptables -A filter -j DROP

   iptables -A INPUT -j filter
   iptables -A FORWARD -j filter
   iptables -A OUTPUT -j filter
##########################################################

################## Routing an
   echo 1 > /proc/sys/net/ipv4/ip_forward

########################

# Remember status and be verbose
rc_status -v 
;;

########################
stop)
   echo "Stopping Firewall"
   iptables -P INPUT   ACCEPT
   iptables -P FORWARD   ACCEPT
   iptables -P OUTPUT   ACCEPT
   iptables -F
   iptables -t nat -F
   iptables -X 

################ Routing aus
   echo 0 > /proc/sys/net/ipv4/ip_forward

# Remember status and be verbose
rc_status -v

;;
status)
echo "Die gesetzten Firewallregeln: "
iptables -L  -v
iptables -v  -t nat -L   POSTROUTING
iptables -v  -t nat -L   PREROUTING
;; 

*)
   echo "Usage: $0 [start|stop|status]"
exit 1 
;;
esac
rc_exit

meine frage zu den "dynamischen regeln" : die lassen alles raus was rauswill.. is ja nicht so optimal.. wie sollte das aussehen wenn man das präziser regeln wollte

und noch eine frage zu "definerte ports öffnen" der erste teil ober #----# ist zB. vollständig "geklaut" ;) .. der bringt mir aber auch nichts wenn ich dort den port 80 aufmach und zu meinem apache will.. daher hab ich die zeilen unter #----# eingetragen.. so wird der port weit aufgemacht.. was genau soll das mit den "high-ports" ??
viele leute deren skripte ich bis jetzt gelesen habe definieren sehr komplexe regeln.. so wie folgendes und mehr..

Code:
iptables -A INPUT  -p TCP -i ppp0 --sport 1024: --dport 443  --syn -m state --state NEW -j ACCEPT
(die leider bei mir nicht funktioniern.. "unknown statement state " oder so ähnlich und andere meldungen..) was ist wirklich notwendig und was ist einfach nur "verdammt sicher aber schon fast zuviel" (soferns zuviel gibt)

#bitte keine antworten wie "da kannst die firewall gleich ganz abschalten" oder "nimm lieber windows" (ohne weitere erläuterung) - wie ich es leider allzuoft in diesem forum vorfinde - wer helfen will dem sei gedankt....

vielen dank schonmal!
mfg xapient
 

spoensche

Moderator
Teammitglied
Die Highports sind ab suse 10 deprecated, sollten also nicht mehr verwendet werden.

wenn du nur bestimmte ports haben willst, über die du verbindungen ins inet aufbauen willst gibst du die einfach an.

bsp port 80:

iptables -A OUTPUT -p tcp --sport 80 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

das ganze kannst du dann mit state noch verfeinern.
 
OP
X

xapient

Member
spoensche schrieb:
Die Highports sind ab suse 10 deprecated, sollten also nicht mehr verwendet werden.
heisst das also dass ich das
Code:
iptables -A OUTPUT -p $a --sport $highPorts -d 0/0 --dport $p -o $IIF -j ACCEPT
(was seinen zweck für mich nicht offenbart) eh nicht machen sollte?


die zeile
Code:
iptables -A OUTPUT -p tcp --sport 22 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
mag vielleicht den port 22 öffnen, ermöglicht es mir jedoch nicht ssh zu vewenden um auf einen anderen pc zuzugreifen..
da dürfte anscheinend mehr von nöten sein..
 
Oben