PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iptables script HILFE



DaGrrr
02.09.02, 14:22
Hallo,

vor einiger Zeit haben mir einige bei einem Script hier geholfen.
Vielen Dank dafür ;)
Dieses Script funktioniert unter Suse 8.0 fehlerfrei.
Ich bin nun auf Debian 3.0 umgestiegen und habe da so meine Probleme dieses überhaupt zu starten.

Hier mal das script:
#!/bin/sh
# Firewallscript f�r surfer
# ----------------------------------------------------------
# PART I: Variablen
# modprobe ip_tables
set IPTABLES = /sbin/iptables

# ----------------------------------------------------------
# special ports

set p_high = 1024:65535 # unprivileged ports
set p_ssh = 1000:1023 # common ssh source ports

# ----------------------------------------------------------
# interfaces

set IF = eth0

# ----------------------------------------------------------
# ip hosts

set surfer = 192.168.0.1 # example
set ns = 192.168.0.1 # example
set mail = 213.165.64.20 # GMX

set FRIEND = 192.168.0.1/255.255.255.0 # example

# ----------------------------------------------------------
# PART II: Grundkonfiguration: absichern
# ----------------------------------------------------------
# dynamische Kernelparameter setzen

echo "0" > /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 "5" > /proc/sys/net/ipv4/icmp_destunreach_rate
# echo "5" > /proc/sys/net/ipv4/icmp_echoreply_rate
# echo "5" > /proc/sys/net/ipv4/icmp_paramprob_rate
# echo "10" > /proc/sys/net/ipv4/icmp_timeexceed_rate

echo "1" > /proc/sys/net/ipv4/conf/$IF/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/$IF/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$IF/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$IF/bootp_relay
echo "1" > /proc/sys/net/ipv4/conf/$IF/log_martians

# ----------------------------------------------------------
# Default Policy und flush

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

$IPTABLES -F # flush aller chains

# ----------------------------------------------------------
# spoof protection

$IPTABLES -A INPUT -s $surfer -i $IF -j DROP

# ----------------------------------------------------------
# lokale Prozesse

$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT

# ----------------------------------------------------------
# PART III: endg�ltige Filterregeln
# ----------------------------------------------------------

# ----------------------------------------------------------
# DROP & LOG Chain

$IPTABLES -N my_drop
$IPTABLES -A my_drop -p ICMP -j LOG --log-prefix "DROP-ICMP "
$IPTABLES -A my_drop -p UDP -j LOG --log-prefix "DROP-UDP "
$IPTABLES -A my_drop -p TCP -j LOG --log-prefix "DROP-TCP "
$IPTABLES -A my_drop -j DROP

# ----------------------------------------------------------
# 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
$IPTABLES -A INPUT -p ICMP --icmp-type echo-request -j my_drop

# source quench (4)

$IPTABLES -A OUTPUT -p ICMP --icmp-type source-quench -j ACCEPT
$IPTABLES -A INPUT -p ICMP --icmp-type source-quench -j my_drop

# 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

# ----------------------------------------------------------
# DNS

$IPTABLES -A OUTPUT -p UDP --sport $p_high -d $ns \
--dport domain -j ACCEPT
$IPTABLES -A INPUT -p UDP --dport $p_high -s $ns \
--sport domain -j ACCEPT

$IPTABLES -A OUTPUT -p TCP --sport $p_high -d $ns \
--dport domain -j ACCEPT
$IPTABLES -A INPUT -p TCP --dport $p_high -s $ns \
--sport domain ! --syn -j ACCEPT

$IPTABLES -A INPUT -p TCP --sport domain --syn -j my_drop
$IPTABLES -A INPUT -p UDP --sport domain -j my_drop

# ----------------------------------------------------------
# SMTP, POP3

$IPTABLES -A OUTPUT -p TCP --sport $p_high \
-d $mail --dport smtp -j ACCEPT
$IPTABLES -A INPUT -p TCP --dport $p_high -s $mail \
--sport smtp ! --syn -j ACCEPT

$IPTABLES -A OUTPUT -p TCP --sport $p_high \
-d $mail --dport pop3 -j ACCEPT
$IPTABLES -A INPUT -p TCP --sport $p_high \
-s $mail --dport pop3 ! --syn -j ACCEPT

# ----------------------------------------------------------
# HTTP

$IPTABLES -A OUTPUT -p TCP --sport $p_high \
--dport http -j ACCEPT
$IPTABLES -A INPUT -p TCP --dport $p_high \
--sport http ! --syn -j ACCEPT

$IPTABLES -A INPUT -p TCP --dport http --syn -j my_drop

# ----------------------------------------------------------
# HTTP via SSL

$IPTABLES -A OUTPUT -p TCP --sport $p_high \
--dport https -j ACCEPT
$IPTABLES -A INPUT -p TCP --dport $p_high \
--sport https ! --syn -j ACCEPT

$IPTABLES -A INPUT -p TCP --dport https --syn -j my_drop

# ----------------------------------------------------------
# ident: reject

$IPTABLES -A INPUT -p TCP --dport auth --syn -j REJECT

# ----------------------------------------------------------
# ftp, out, control connection

$IPTABLES -A OUTPUT -p TCP --sport $p_high \
--dport ftp -j ACCEPT
$IPTABLES -A INPUT -p TCP --dport $p_high \
--sport ftp ! --syn -j ACCEPT

# ftp, out, passive data connection

$IPTABLES -A OUTPUT -p TCP --sport $p_high \
--dport $p_high -j ACCEPT
$IPTABLES -A INPUT -p TCP --dport $p_high \
--sport $p_high ! --syn -j ACCEPT

$IPTABLES -A INPUT -p TCP --dport ftp --syn -j my_drop

# ----------------------------------------------------------
# Ausputzer: Rest sperren, loggen

$IPTABLES -A INPUT -j my_drop
$IPTABLES -A FORWARD -j my_drop
$IPTABLES -A OUTPUT -j REJECT


Wenn ich das Script starte erscheint folgende Fehlermeldung (siehe Anhang).

Die Regeln selber sollten in Ordnung sein, da diese ja bei Suse (meines erachtens) fehlerfrei laufen.
Ich habe folgendes unentwegt versucht:

set IF = eth0

set IF=eth0

set IF="eth0" usw
Dies habe ich mit den anderen set anweisungen ebenfalls getan.
Ebenfalls habe ich versucht #!/bin/sh #!/bin/tcsh #!/bin/csh usw
Nix brachte eine Lösung.

iptables ist installiert, ich finde es in /sbin/iptables, ebenfalls zeigt es der Befehl iptables -vL
Die Suchfunktion habe ich benutzt, allerdings nix zu meinem Problem gefunden.

Kann mir da evtl. einer helfen ? Langsam bin ich ratlos.



Grüße
DaGrrr

Newbie2001
02.09.02, 14:34
bei den ersten vier fehlerneldungen dürfte das problem der doppelslash sein, entferne diesen sicherheitshalber.
für die anderen fehlermeldungen scheint die falsche dekalration der variablen IPTABLES zustädnig zu sein. ich kenn mich mit der bash zwar nicht so 100%ig aus, hoffe aber, dass IPTABLES="/sbin/iptables" das problem lösen sollte. ich denke die fehlenden aführungszeichen sind in diesem falle das problem. probiers mal aus, mehr als schiefgehen kanns nich.

DaGrrr
02.09.02, 14:57
Hallo,

im script habe ich keine // (Doppelslash) ???
Dies kommt aus der Fehlermeldung.

DaGrrr

Harry
02.09.02, 18:06
Hallo,

die Fehlermeldungen schauen alle so aus, als ob Deine Shell nicht vernünftig mit dem SET-Kommando umgehen könnte und daher alle Umgebungsvariablen ($IF, $IPTABLES) leer sind.

Entferne einfach mal das SET (also anstelle von "SET IF = eth0" einfach nur "IF=eth0") in den Zeilen und versuch es dann erneut.

Harry

DaGrrr
02.09.02, 20:20
Hallo,

hat leider auch nix gebracht :(

Ich habe mal testweise ein script von Linuxguruz.org ausprobiert.
Daselbe, funktioniert nicht.

Kann es sein das mein iptables nicht richtig läuft ? Aber kann ich mir nicht vorstellen...
Beim Befehl iptables -vL kommt folgendes:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination


Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Ich denke das ist korrekt.

Wer hat denn Debian Woody und nutzt ein iptables script ?

Grüße
DaGrrr

Newbie2001
02.09.02, 22:27
ich habe debian woody schon auf mehreren iptables-paketfiltern eingesetzt, das ist auf keinen fall ein iptables prob sondern eines deiner shell. ich hätte auch auf ein problem mit der variablendeklaration getippt, aber das scheint es wohl nicht gewesen zu sein.

DaGrrr
02.09.02, 23:42
Hallo,

das Problem hat mir keine Ruhe gelassen und habe ein weiteres script getestet:

#!/bin/sh
#############################################
# Das externe Interface
# z.b. ippp0 fuer ISDN oder ppp0 fuer modem
#############################################
EXTIF="eth0"

##################################################
# IP des Lokalen Netzwerks
# z.b. 10.0.0.0/24 fuer ein 10.0.0.0 IP Netzwerk
##################################################
LANIP="192.168.0.4/24"



##################################
# Loeschen der iptables Rules. #
##################################
iptables -F -t filter
iptables -X -t filter
iptables -F -t nat
iptables -X -t nat


################ Masquerading #####################
# Nur diese Zeile ist noetig fuer Masquerading! #
################################################## #
# iptables -t nat -A POSTROUTING -o $EXTIF -s $LANIP -j MASQUERADE


###### Input DROP ######
# Protokollfiltering #
########################
#iptables -A INPUT -p icmp -d 0/0 -i $EXTIF -j DROP
iptables -A INPUT -p igmp -d 0/0 -i $EXTIF -j DROP
#iptables -A INPUT -p raw -d 0/0 -i $EXTIF -j DROP

###0 Echo Reply###
#iptables -A INPUT --proto icmp --icmp-type 0 -d 0/0 -i $EXTIF -j DROP
###3 Destination Unreachable###
#iptables -A INPUT --proto icmp --icmp-type 3 -d 0/0 -i $EXTIF -j DROP
###4 Source Quench###
#iptables -A INPUT --proto icmp --icmp-type 4 -d 0/0 -i $EXTIF -j DROP
###5 Redirect###
#iptables -A INPUT --proto icmp --icmp-type 5 -d 0/0 -i $EXTIF -j DROP
###8 Echo (Request)- Unterdrueckung von Antwortping###
iptables -A INPUT --proto icmp --icmp-type 8 -d 0/0 -i $EXTIF -j DROP
###11 Time Exceeded###
#iptables -A INPUT --proto icmp --icmp-type 11 -d 0/0 -i $EXTIF -j DROP
###12 Parameter Problem###
#iptables -A INPUT --proto icmp --icmp-type 12 -d 0/0 -i $EXTIF -j DROP
###13 Timestamp Request###
#iptables -A INPUT --proto icmp --icmp-type 13 -d 0/0 -i $EXTIF -j DROP
###14 Timestamp Reply###
#iptables -A INPUT --proto icmp --icmp-type 14 -d 0/0 -i $EXTIF -j DROP
###15 Information Request###
#iptables -A INPUT --proto icmp --icmp-type 15 -d 0/0 -i $EXTIF -j DROP
###16 Information Reply###
#iptables -A INPUT --proto icmp --icmp-type 16 -d 0/0 -i $EXTIF -j DROP
###17 Address Mask Request###
#iptables -A INPUT --proto icmp --icmp-type 17 -d 0/0 -i $EXTIF -j DROP
###18 Address Mask Reply###
#iptables -A INPUT --proto icmp --icmp-type 18 -d 0/0 -i $EXTIF -j DROP


##############################
# Portfiltering auf $EXTIF #
##############################
iptables -N lservice
##################
#well known Ports#
##################

###Port 21+20 FTP###
iptables -A lservice -p tcp -d 0/0 --dport 20:21 -i $EXTIF -j ACCEPT
###Port 22 SSH###
iptables -A lservice -p tcp -d 0/0 --dport 22 -i $EXTIF -j ACCEPT
###Port 23 Telnet###
#iptables -A lservice -p tcp -d 0/0 --dport 23 -i $EXTIF -j ACCEPT
###Port 25 SMTP###
#iptables -A lservice -p tcp -d 0/0 --dport 25 -i $EXTIF -j ACCEPT
###Port 37 TIME###
#iptables -A lservice -p tcp -d 0/0 --dport 37 -i $EXTIF -j ACCEPT
###Port 53 DNS###
#iptables -A lservice -p tcp -d 0/0 --dport 53 -i $EXTIF -j ACCEPT
###Port 79 FINGER###
#iptables -A lservice -p tcp -d 0/0 --dport 79 -i $EXTIF -j ACCEPT
###Port 80 HTTP###
iptables -A lservice -p tcp -d 0/0 --dport 80 -i $EXTIF -j ACCEPT
###Port 110 POP3###
#iptables -A lservice -p tcp -d 0/0 --dport 110 -i $EXTIF -j ACCEPT
###Port 113 AUTH(ident)###
iptables -A lservice -p tcp -d 0/0 --dport 113 -i $EXTIF -j ACCEPT
###Port 137-139 Netbios###
#iptables -A lservice -p tcp -d 0/0 --dport 137:139 -i $EXTIF -j ACCEPT
###Port 143 IMAP###
#iptables -A lservice -p tcp -d 0/0 --dport 143 -i $EXTIF -j ACCEPT

###die restlichen well known Ports dicht machen###
iptables -A lservice -p tcp -d 0/0 --dport 0:1023 -i $EXTIF -j DROP
iptables -A lservice -p udp -d 0/0 --dport 0:1023 -i $EXTIF -j DROP

iptables -A FORWARD -p tcp -d 0/0 --dport 0:1023 -i $EXTIF -j DROP
iptables -A FORWARD -p udp -d 0/0 --dport 0:1023 -i $EXTIF -j DROP

##################
#registered Ports#
##################

###Port 2049 NFS###
iptables -A lservice -p tcp -d 0/0 --dport 2049 -i $EXTIF -j DROP
###Port 3128 Squid###
iptables -A lservice -p tcp -d 0/0 --dport 3128 -i $EXTIF -j DROP
###Port 3306 MySQL###
iptables -A lservice -p tcp -d 0/0 --dport 3306 -i $EXTIF -j DROP
###Port 6000:6005 X11###
iptables -A lservice -p tcp -d 0/0 --dport 6000:6005 -i $EXTIF -j DROP
###Port 10000 Webmin###
iptables -A lservice -p tcp -d 0/0 --dport 10000 -i $EXTIF -j DROP

iptables -A lservice -p tcp -d 0/0 --dport 1024:65535 -i $EXTIF -j ACCEPT
iptables -A lservice -p udp -d 0/0 --dport 1024:65535 -i $EXTIF -j ACCEPT

#############################
# Schutz vor Attacken !!! #
#############################
# Ungueltige IP-Paeckchen, die zu keine Verbindung gehoeren droppen
iptables -A INPUT -m state --state INVALID -j DROP
# DoS Attacken verhindern
iptables -A INPUT -i $EXTIF -p tcp -m state --state NEW -m limit --limit 5/sec -j lservice
iptables -A INPUT -i $EXTIF -p tcp -m state --state NEW -j REJECT --reject-with icmp-port-unreachable


###### NAT #########
# Portforwarding #
####################
#iptables -t nat -A PREROUTING -p tcp --dport 666 -i $EXTIF -j DNAT --to 192.168.0.29:21
#iptables -t nat -A PREROUTING -p tcp --dport 79 -i $IF -j DNAT --to 209.10.41.242:79
#iptables -A FORWARD -i $EXTIF -p tcp -d 209.10.41.242 --dport 79 -j ACCEPT

############
#ICQ direct#
############
ICQ_PORTRANGE=2048:2059
ICQ_FORWARDTO=10.0.0.2
if [ "$ICQ_PORTRANGE" != "" ]; then
iptables -t nat -A PREROUTING -p tcp --dport $ICQ_PORTRANGE -j DNAT --to $ICQ_FORWARDTO
fi

Warum läuft dieses jetzt ?
Was meint ihr mit // (doppelslash, im ersten script am Anfang) wurde gesetzt. WO ?
Bei der Fehlermeldung die ich im obersten Posting beigelegt habe sieht man einen doppelslah aber wo ist der im script ???

Grüße
DaGrrr

tomes
03.09.02, 06:57
Das hat dir doch schon Harry geschrieben !
In deinem Script steht z.B.:
-----snip-----
set IF = eth0

....
echo "1" > /proc/sys/net/ipv4/conf/$IF/rp_filter

-----snap-----
Deine Fehlermeldung:
./fw: /proc/sys/net/ipv4/conf//rp_filter: No such file or directory

Zwischen deinen doppelten Backslash muesste laut Script ja wohl das Interface stehen --> $IF --> eth0

Erklaerung siehe Beitrag von Harry.

T;o)Mes

DaGrrr
03.09.02, 10:54
Hallo,

so war das gemeint :)

Ich dachte durch das $IF würde sich automatisch eth0 reinsetzen.
Na ich werde mir das nochmal genauer anschauen.

Danke

Grüße
DaGrrr