Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Warum funktioniert mein Firewall-script nicht???

Alles rund um das Internet, Internet-Anwendungen (E-Mail, Surfen, Cloud usw.) und das Einrichten von Netzwerken einschl. VPN unter Linux

Moderator: Moderatoren

Antworten
jk47
Newbie
Newbie
Beiträge: 15
Registriert: 1. Jan 2005, 16:53

Warum funktioniert mein Firewall-script nicht???

Beitrag von jk47 »

:?: Ich weiß nicht mehr weiter, ich hab unzählige Firewallhowtos durch und mich daran orientiert, was mach ich falsch?

Ich hab mich diesmal in erster Linie nach http://www.teamunix.de/howto/iptableshowto.php gerichtet.

Jan

Code: Alles auswählen

#! /bin/sh 

############-- INIT  --############### 
# flush 
echo "flushing tables" 
iptables -F 
iptables -F -t nat 

# policies 

echo "setup policies" 
iptables -P INPUT DROP 
iptables -P OUTPUT ACCEPT 
iptables -P FORWARD DROP 

echo "accepting ESTBLISHED, RELATED" 
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 

#+++++++++++++++++++++++++   INPUT   ++++++++++++++++++++++++++++++ 

#DSL 
#iptables -A INPUT -i PPP0 -j ACCEPT 
iptables -A INPUT -i lo -s 127.0.0.1/255.0.0.0 -j ACCEPT 
iptables -A FORWARD -i lo -s 127.0.0.1/255.0.0.0 -j ACCEPT 

echo "input" 
#################################################################### 
iptables -A INPUT -s 10.238.0.28 -i eth0 -j ACCEPT   #MARC 
#################################################################### 
iptables -A INPUT -s 10.238.103.100 -i eth0 -j ACCEPT   #PUHA 
iptables -A INPUT -s 10.238.105.125 -i eth0 -j ACCEPT 
#################################################################### 
iptables -A INPUT -s 10.238.105.102 -i eth0 -j ACCEPT   #JK47 
#################################################################### 
iptables -A INPUT -s 10.238.184.105 -i eth0 -j ACCEPT   #PRYO 
iptables -A INPUT -s 10.238.106.31 -i eth0 -j ACCEPT 
#################################################################### 
iptables -A INPUT -s 10.238.111.31 -j ACCEPT      #rauder 
iptables -A INPUT -s 0/0 -i ppp0 -j ACCEPT 
#################################################################### 
#iptables -A INPUT -j DROP 
#++++++++++++++++++++++++++++ OUTPUT  ++++++++++++++++++++++++++ 
echo "output" 
#################################################################### 
iptables -A OUTPUT -d 10.238.0.28 -j ACCEPT      #MArc 
#################################################################### 
iptables -A OUTPUT -d 10.238.103.100 -j ACCEPT      #PUHA 
iptables -A OUTPUT -d 10.238.105.125 -j ACCEPT 
#################################################################### 
iptables -A OUTPUT -d 10.238.105.102 -j ACCEPT      #JK47 
#################################################################### 
iptables -A OUTPUT -d 10.238.184.105 -j ACCEPT      #PRYO 
iptables -A OUTPUT -d 10.238.106.31 -j ACCEPT 
#################################################################### 
iptables -A OUTPUT -s 10.238.111.31 -j ACCEPT      #rauder 
iptables -A OUTPUT -d 10.238.111.31 -j ACCEPT 
#################################################################### 
#iptables -A OUTPUT -j DROP 


#++++++++++++++++++++++++++++++++++ forward ++++++++++++++++++++++++++ 

echo "forward" 
iptables -A FORWARD -s 10.238.0.28 -i eth0 -j ACCEPT   #MARC 
iptables -A FORWARD -s 10.238.103.100 -i eth0 -j ACCEPT   #PUHA 
iptables -A FORWARD -s 10.238.105.125 -i eth0 -j ACCEPT   #PUHA 
iptables -A FORWARD -s 10.238.105.102 -i eth0 -j ACCEPT   #JK47 
iptables -A FORWARD -s 10.238.106.31 -i eth0 -j ACCEPT   #PRYO 
iptables -A FORWARD -s 10.238.184.105 -i eth0 -j ACCEPT   #PRYO 

iptables -A FORWARD -d 10.238.0.28 -i eth0 -j ACCEPT   #MARC 
iptables -A FORWARD -d 10.238.103.100 -i eth0 -j ACCEPT   #PUHA 
iptables -A FORWARD -d 10.238.105.125 -i eth0 -j ACCEPT   #PUHA 
iptables -A FORWARD -d 10.238.105.102 -i eth0 -j ACCEPT   #JK47 
iptables -A FORWARD -d 10.238.106.31 -i eth0 -j ACCEPT   #PRYO 
iptables -A FORWARD -d 10.238.184.105 -i eth0 -j ACCEPT   #PRYO 

iptables -A FORWARD -s 10.238.111.31 -j ACCEPT 
iptables -A FORWARD -d 10.238.111.31 -j ACCEPT 
iptables -A FORWARD -s 10.238.111.31 -j ACCEPT 
iptables -A FORWARD -d 10.238.111.31 -j ACCEPT 

iptables -A FORWARD -s 0/0 -i ppp0 -j ACCEPT      # dat indernet 
#iptables -A FORWARD -j DROP 



########################################################### 
iptables -L -n 
#iptables -L OUTPUT 
#iptables -L FORWARD 
echo "firewall up..." 
#eof

Benutzeravatar
Martin Breidenbach
Ultimate Guru
Ultimate Guru
Beiträge: 5632
Registriert: 26. Mai 2004, 21:33
Wohnort: N 50.17599° E 8.73367°

Beitrag von Martin Breidenbach »

Schreib doch mal dazu was das Skript machen soll...
Nicht Böse sein ! Der Onkel macht doch nur Spaß !
jk47
Newbie
Newbie
Beiträge: 15
Registriert: 1. Jan 2005, 16:53

Beitrag von jk47 »

Naja, das versuch ich ja seit Tagen zu verdeutlichen:

10.238.0.28
10.238.103.100
10.238.105.125
10.238.105.102
10.238.106.31
10.238.184.105

Diese IPs dürfen ins Internet und auf den Router (10.238.111.31) zugreifen, alle anderen nicht. Ich dachte das obige script bewerkstelligt das, tut es aber nicht, es geht gar nichts, weder internet vom Router noch von einem host.

Kuckst du hier:
vgl: http://www.linux-club.de/viewtopic.php?t=23619
vgl: http://www.linux-club.de/viewtopic.php?t=23392

Danke für Deine Hilfe soweit

Jan
Benutzeravatar
Martin Breidenbach
Ultimate Guru
Ultimate Guru
Beiträge: 5632
Registriert: 26. Mai 2004, 21:33
Wohnort: N 50.17599° E 8.73367°

Beitrag von Martin Breidenbach »

Ach darauf bezieht sich das.

Ich seh da überhaupt keine Regeln für NAT bzw Masquerading.

Da IP-Adressen im Bereich 10.0.0.0 im Internet nicht geroutet werden kann das nicht funktionieren.
Nicht Böse sein ! Der Onkel macht doch nur Spaß !
jk47
Newbie
Newbie
Beiträge: 15
Registriert: 1. Jan 2005, 16:53

Beitrag von jk47 »

Ok, hier die überarbeitete Version...
Was ist jetzt falsch?

Code: Alles auswählen

#! /bin/sh

echo "1" > /proc/sys/net/ipv4/ip_forward

############-- INIT  --###############
# flush
echo "flushing tables"
iptables -F
iptables -F -t nat

# policies

echo "setup policies"
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

echo "accepting ESTBLISHED, RELATED"
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

my_lan_hosts 	= "10.238.0.28 10.238.103.100 10.238.105.125 10.238.105.102 10.238.184.105 10.238.106.31 10.238.111.31"
my_rauder	= "10.238.111.31"


#+++++++++++++++++++++++++   INPUT   ++++++++++++++++++++++++++++++

#DSL
iptables -A INPUT -i PPP0 -j ACCEPT
iptables -A INPUT -i lo -s 127.0.0.1/255.0.0.0 -j ACCEPT 
iptables -A FORWARD -i lo -s 127.0.0.1/255.0.0.0 -j ACCEPT 

echo "input"

for hosts in $my_lan_hosts
do
     /usr/sbin/iptables -A INPUT -s $hosts -i eth0 -j ACCEPT
done

iptables -A INPUT -i eth0 -j DROP



#++++++++++++++++++++++++++++ OUTPUT  ++++++++++++++++++++++++++
echo "output"

for hosts in $my_lan_hosts
do
     /usr/sbin/iptables -A OUTPUT -d $hosts -o eth0 -j ACCEPT
     /usr/sbin/iptables -A OUTPUT -d $hosts -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
done
/usr/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
/usr/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type 3/3 -j ACCEPT
/usr/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type 3/4 -j ACCEPT
/usr/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type 3/9 -j ACCEPT
/usr/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type 3/10 -j ACCEPT
/usr/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type 3/13 -j ACCEPT
/usr/sbin/iptables -A OUTPUT -p icmp -m icmp --icmp-type 3 -j DROP

iptables -A OUTPUT -i eth0 -j DROP


#++++++++++++++++++++++++++++++++++ forward ++++++++++++++++++++++++++

echo "forward"


for hosts in $my_lan_hosts
do
     /usr/sbin/iptables -A FORWARD -s $hosts -i eth0 -j ACCEPT
     /usr/sbin/iptables -A FORWARD -d $hosts -i eth0 -j ACCEPT
     ## forward_int
     /usr/sbin/iptables -A FORWARD -i eth0 -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 0 -j ACCEPT
     /usr/sbin/iptables -A FORWARD -i eth0 -s $hosts -i eth0 -o ppp0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
     /usr/sbin/iptables -A FORWARD -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
     /usr/sbin/iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
     ## forward_ext
     /usr/sbin/iptables -A FORWARD -i ppp0 -p icmp -m state --state RELATED -m icmp --icmp-type 3 -j ACCEPT
     /usr/sbin/iptables -A FOWRARD -i ppp0 -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 0 -j ACCEPT
     /usr/sbin/iptables -A FOWRARD -i ppp0 -o ppp0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
     /usr/sbin/iptables -A FOWRARD -i ppp0 -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
done
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#iptables -A FORWARD -s 10.238.111.31 -i eth0 -j ACCEPT
#iptables -A FORWARD -d 10.238.111.31 -i eth0 -j ACCEPT
#iptables -A FORWARD -s 10.238.111.31 -i ppp0 -j ACCEPT
#iptables -A FORWARD -d 10.238.111.31 -i ppp0 -j ACCEPT

iptables -A FORWARD -s 0/0 -i ppp0 -j ACCEPT		# dat indernet

iptables -A FORWARD -j DROP




# NAT #
#######
iptables -A PREROUTING -t nat -j ACCEPT
iptables -A POSTROUTING -t nat -j ACCEPT
iptables -A OUTPUT -t nat -j ACCEPT
iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE # was rausgeht wird maskiert

###########################################################
iptables -L -n
#iptables -L OUTPUT
#iptables -L FORWARD
echo "firewall up..."
#eof
Vielen Dank für Hilfe

Jan
gaw
Hacker
Hacker
Beiträge: 464
Registriert: 28. Sep 2004, 16:33

Beitrag von gaw »

Das wichtigste ist, es fehlen die Regeln für das dynamische Routing daher kann das Masquerading nicht funktionieren. Schau dir mal das Skript etwas tiefer auf der Seite an, daran kannst du dich orientieren:
http://www.linux-club.de/viewtopic.php?t=21303

Hier der passende Ausschnitt:

Code: Alles auswählen

$IPTABLES -t nat -A POSTROUTING -o $INTERFACE_EXT -j MASQUERADE

########### IP-Forwarding und DNAT einschalten
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

echo "Masquerading eingeschaltet" 
wobei $IPTABLES /usr/sbin/iptables enthält. Alle beiden Parameter müssen eingeschaltet sein. In meinem Skript ist das Loggen eingeschaltet. Mit "tail -f /var/log/messages" kannst du während die Firewall läuft beobachten welche Pakete abgelehnt werden. Das ist sehr hilfreich um Fehler zu finden.

Mein Skript arbeitet nach einer anderen Strategie, es lässt sich bis auf das Einschalten bestimmter Laufzeitparameter und dem Masquerading nicht unbedingt mit deinem mischen. Im Gegensatz zu deinem Aufbau erlaube ich nicht grundsätzlichen allen Paketen die zu erlaubten oder related Verbindungen gehören den Transfer sondern nur für dezidierte.
Das ist sicherer.

Wenn du dich entscheidest mit meinem Skript zu arbeiten kann ich dir bei Erweiterungen helfen. Dein Skript ist mir etwas zu konfus und es arbeitet nach einer anderen Strategie.

Du kannst es natürlich auch so machen, allerdings solltest du noch mindestens ein paar weitere Laufzeitparameter einschalten, die Broadcaststürme, IP-Spoofing etc. verhindern, wie gesagt schau dir einfach das Skript an.

mfG
gaw
jk47
Newbie
Newbie
Beiträge: 15
Registriert: 1. Jan 2005, 16:53

Beitrag von jk47 »

Danke GAW, es hat funktioniert, ich habe dein Skript benutzt.

Aber warum dauert es soooo lange, bis z.B. ebay.de geladen ist?

hier die veränderte Version deines Skripts:

Code: Alles auswählen



#!/bin/bash
############  Firewallskript für einen Linux Router
# copyright (c) gaw
# Autor: gaw
# Oktober 2004

#############  Firewallskript für einen Linux Router

############# Initialisierung der Variablen

############# Interfaces
INTERFACE_EXT="ppp0"
INTERFACE_INT="eth0"
INTERFACES="$INTERFACE_EXT $INTERFACE_INT"
WEB_SERVER_IP="192.168.1.200"
WEBMIN_PORT="10000"
ROUTER_IP="10.238.111.31"
WEB_SERVER_IP="10.238.111.31"
LOCAL_NET_IP="10.238.0.0/16"
LOCAL_NET=$LOCAL_NET_IP
MY_LOCAL="10.238.0.28 10.238.103.100 10.238.105.125 10.238.105.102 10.238.184.105 10.238.106.31 10.238.111.31"
HTTP_PORT="80"
PORTS_HIGH="1024:65535"
IPTABLES="iptables"



############# Grundkonfiguration 

# Vorläufiges Ausschalten des IP Forwarding. IP Forwarding 
echo "0" > /proc/sys/net/ipv4/ip_forward 

############# TCP-Syncookies, Abwehrmaßnahme gegen das SYN Flooding. 
echo "1" > /proc/sys/net/ipv4/tcp_syncookies 

############# Ignorieren von Echoauforderungen von icmp 
############# Abwehrmaßnahme gegen Broadcast-Stürme 
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 

############# Das Loggen ungültiger ICMP-Pakete wird ausgeschaltet, 
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 

############# Schleife für alle Schnittstellen in $INTERFACES 
for if in $INTERFACES; 
do

        ##### IP-Spoof Protection 
        echo "1" > /proc/sys/net/ipv4/conf/$if/rp_filter 

        ##### Keine Redirections 
        echo "0" > /proc/sys/net/ipv4/conf/$if/accept_redirects 

        ##### Kein Source-Routing 
        echo "0" > /proc/sys/net/ipv4/conf/$if/accept_source_route 

        ##### Kein Bootstrap Protokoll 
        echo "0" > /proc/sys/net/ipv4/conf/$if/bootp_relay 

        ##### Ungültige IP-Pakete werden geloggt. 
        echo "1" > /proc/sys/net/ipv4/conf/$if/log_martians 
done 
echo "Dynamische Kernelparameter gesetzt" 

############# Alle Pakete der Grundeinstellung werden verworfen

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



############# 
############# Alle eventuell noch vorhandenen Regeln werden gelöscht 
############# 


############# Lösche alle Regeln aus der Filter Tabelle 
$IPTABLES -F 

############# Lösche aller Regeln aus der NAT Tabelle 
$IPTABLES -t nat -F 

############# Lösche alle selbstdefinierte Regeln 
$IPTABLES -X

echo "Alles verboten und alle Regeln gelöscht" 

############# 
############# Selbstdefinierte Regelkette zum Loggen 

$IPTABLES -N TRASH 

# Pakete die nicht geloggt werden sollen 

$IPTABLES -A TRASH -p UDP --dport 123 -j DROP 
# IPP-Anfragen zur Druckereinstellungen müssen nicht geloggt werden
$IPTABLES -A TRASH -p UDP -s $ROUTER_IP --dport 631 -j DROP 
$IPTABLES -A TRASH -p TCP --dport 445 -j DROP 
$IPTABLES -A TRASH -p TCP --dport 135 -j DROP 

# Pakete die geloggt werden sollen 
$IPTABLES -A TRASH -p ICMP -j LOG --log-prefix "Abgelehnte-ICMP-Pakete " 
$IPTABLES -A TRASH -p UDP  -j LOG --log-prefix "Abgelehnte-UDP-Pakete  " 
$IPTABLES -A TRASH -p TCP  -j LOG --log-prefix "Abgelehnte-TCP-Pakete  " 
$IPTABLES -A TRASH -j DROP 

echo "Loggin eingeschaltet" 


############ Bis hier ist alles verboten. Nun werden bestimmte 
############ Pakete wieder akzeptiert 
############ 

################### Lokale Prozesse auf dem Rechner akzeptieren ################ 

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

echo "Lokale Prozesse erlaubt" 
############# SSH Verbindungen vom internen Netz erlauben 

$IPTABLES -A INPUT -i $INTERFACE_INT -s $LOCAL_NET -d $ROUTER_IP -p TCP --sport $PORTS_HIGH --dport ssh -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERFACE_INT -s $ROUTER_IP -d $LOCAL_NET -p TCP --dport $PORTS_HIGH --sport ssh -m state --state ESTABLISHED,RELATED -j ACCEPT

echo "ssh vom LAN auf den Router erlaubt" 

############# Webmin Verbindungen vom internen Netz erlauben 

$IPTABLES -A INPUT -i $INTERFACE_INT -s $LOCAL_NET -d $ROUTER_IP -p TCP --sport $PORTS_HIGH --dport $WEBMIN_PORT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERFACE_INT -s $ROUTER_IP -d $LOCAL_NET -p TCP --dport $PORTS_HIGH --sport $WEBMIN_PORT -m state --state ESTABLISHED,RELATED -j ACCEPT 

echo "Webmin vom LAN auf den Router erlaubt" 


######################### Masquarading einschalten ############################# 


$IPTABLES -t nat -A POSTROUTING -o $INTERFACE_EXT -j MASQUERADE 

##################### IP-Forwarding und DNAT einschalten ###################### 

echo "1" > /proc/sys/net/ipv4/ip_forward 
echo "1" > /proc/sys/net/ipv4/ip_dynaddr 

echo "Masquerading eingeschaltet"

############# Verbindungen aller Art erlauben

for hosts in $MY_LOCAL
do
	$IPTABLES -A FORWARD -i $INTERFACE_INT -s $hosts -o $INTERFACE_EXT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
	$IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT -m state --state ESTABLISHED,RELATED -j ACCEPT
done

echo "Alles eingeschaltet"

############# Bestimmte ICMP Anfragen werden gestattet.

#
# Vom Netz ins Internet zur Diagnose nützlich
# $IPTABLES -A FORWARD -p ICMP --icmp-type
# echo-request -j ACCEPT
# $IPTABLES -A FORWARD -p ICMP --icmp-type
# echo-reply -j ACCEPT

# ROUTER_IP
$IPTABLES -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT
$IPTABLES -A OUTPUT -p ICMP --icmp-type echo-reply -j ACCEPT
$IPTABLES -A OUTPUT -p ICMP --icmp-type redirect -j ACCEPT
$IPTABLES -A INPUT -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 redirect -j ACCEPT
echo "ICMP Anfragen des Firewallrouters werden gestattet"


############# Rest wird gesperrt und geloggt
$IPTABLES -A INPUT   -j TRASH
$IPTABLES -A FORWARD -j TRASH
$IPTABLES -A OUTPUT  -j TRASH
echo "Firewall eingeschaltet"
gaw
Hacker
Hacker
Beiträge: 464
Registriert: 28. Sep 2004, 16:33

Beitrag von gaw »

Ich weiß nicht warum es solange dauert bis dein Rechner ebay findet, das hat mit der Firewall nichts zu tun sondern mit der Namensauflösung. Je nachdem ob ein eigener DNS-Server auf der Firewall oder ob die Nameserver des Provider genutzt werden ist der UDP-Port 53 für den ausgehenden Verkehr oder für das Forwarding zu öffnen. Bei dir sind die Tore allerdings weit offen.

Ich verstehe nicht ganz, wozu du eine Firewall benötigst wenn du alle Dienste freigibst....

Code: Alles auswählen

############# Verbindungen aller Art erlauben

for hosts in $MY_LOCAL
do
   $IPTABLES -A FORWARD -i $INTERFACE_INT -s $hosts -o $INTERFACE_EXT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
   $IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT -m state --state ESTABLISHED,RELATED -j ACCEPT
done 


Damit kann jeder Trojaner und jede Spyware hinter der Firewall von sich aus ungehindert Zugriff erlangen.


mfG
gaw
Antworten