Firewall Script bei Pro-Linux

Post Reply
Message
Author
hiTcher

Firewall Script bei Pro-Linux

#1 Post by hiTcher »

Hi,
Ich haette ein paar Fragen zum Pro-Linux Script "Firewall unter Linux",
auf der Seite <a href="http://www.pl-berichte.de/work/firewall/index.html." target="_blank"><!--auto-->http://www.pl-berichte.de/work/firewall ... <!--auto-->

1.
Das Beispiel-Script benutzt als Default Policy 'deny everything by default'.
Wenn ich dies Richtig verstanden habe ist bei dieser Default Policy der Router erstmal dicht.
Wieso muessen jetzt anschliessend noch 'DENY-Regeln' erstellt werden (z.B. fuer Spoofing).

2.
Das oben genannte Script basiert auf einer statischen IP-Adresse.
Ich benutze als Router einen 486DX66 mit 64MB RAM und SuSE-Linux 7.1 Kernel 2.2.18.
Dieser Router erhaelt bei einer Verbindung zum Internet vom Provider eine Dynamische IP-Adresse.
Bei der Suche im Pro-Linux Forum habe ich zwei moegliche Loesungen gefunden,
die ich entweder nicht richtig verstanden habe oder etwas umstaendlich sind.

a) Die betroffenen Regeln umschreiben auf das Interface.

Wie sollen diese Regeln aussehen?
Die Variable "$ip_adr" ist die zu ersetzende Adresse

<font face="Courier New">'/sbin/ipchains -A input -i ippp0 -p tcp ! -y -s 195.20.202.6 25 -d $ip_adr 1024:65535 -j ACCEPT'</font><!--fixed-->

Waere das eine moegliche Umsetzung?

<font face="Courier New">'/sbin/ipchains -A input -i ippp0 -p tcp ! -y -s 195.20.202.6 25 --source-port 1024:65535 -j ACCEPT'</font><!--fixed-->

Sind diese beiden Regeln gleich sicher?
Es hat den Anschein als waere die 2.Regel etwas lockerer? Oder?

b) Die IP-Adresse aus dem Befehl '/sbin/ifconfig' rausfiltern.

Bei dieser Loesung muesste das Firewall-Script gestartet werden nachdem die Internetverbinung steht.
Das wuerde heissen bei jeder Neueinwahl das Script wiederum auszufuehren.
Das Script staendig erneut auszufuehren ist doch wohl nicht noetig und belastet meinen 486er zusaetzlich.
Ausserdem sollte das Script nach moeglichkeit schon beim starten des Rechners ausgefuert werden.
Gibt es da vielleicht noch eine effizientere Loesung?

Ich weiss das das eine Menge Fragen auf einmal sind, aber ich hoffe trotzdem das ihr mir helfen koennt.

gruss hiTcher

Zeoch

Re: Firewall Script bei Pro-Linux

#2 Post by Zeoch »

Hallo,
ich probier´s mal
1)die meisten firewalls sind so aufgebaut, das der lokale verkehr, als das loopback mit 127.0.0.1 bzw noch andere interne ips, durchgelassen werden. somit kann man vermeiden, das alle internen prozesse nicht behindert werden.
Beim spoofing versucht nun der hacker deiner fw vorzutäuschen, das der eine interne adresse hat und würde bei nicht gesetzten anti-spoofing rules wohl auch erfolg haben.

2) bei 2a würde ich zu der ersteren regel tendieren, da diese wesentlich sicherer ist.
man sollte generell versuchen die bereiche, auf die eine ACCEPT rule zutrifft, zu klein wie möglich zu halten.

zu 2b): das auslesen geht mit
ip_adr=`ifconfig ippp0 | grep inet | cut -d : -f 2 | cut -d \ -f 1` am schnellsten.
ne bessere lösung als es dauernd ausführen zu lassen ist ne standleitung zu kaufen ;)
leider such ich da uch noch nach einer besseren lösung. ich habe mir kleine shell scripts geschrieben, die alle 15 min nach schauen ob die internetverbindung noch an iss, wenn nett denn wählt er sich neu ein und startet die fw danach automatisch. das sollte selbst deinen 486 nicht überfordern.
die neu einwahl hab ich dann auf 5 uhr morgens gelegt, da kannst ihn ruhig bisserl quälen, da er um die zeit bestimmt nich so viel zu tun hat.

hoffe etwas geholfen zu haben, wenn nicht dann sag wo noch unklarheiten sind. ich guck ab und zu mal rein
MfG Zeoch

hiTcher

Re: Firewall Script bei Pro-Linux

#3 Post by hiTcher »

also erstmal danke ich dir fuer deine prompte antwort.
das mit dem spoofing hab ich soweit schon verstanden und das problem mit den lokalen prozessen hab ich gerade.
auf dem router laeuft sendmail und fetchmail und nix geht mehr, aber ich denke das bekomme ich noch auf die Reihe.

zum problem mit der dynamischen ip-adresse:
der router ist zum groessten teil ohne online-verbindung (tagsueber).
durch ein kleines script wird mehrmals eine kurze online-verbindung gestartet und die mails verschickt,
zusaetzlich wenn ich mit der win-kiste ins internet moechte wird ebenfalls die verbindung gestartet.
nach 2 minuten inaktivitaet legt er wieder auf.
ich moechte auch nicht staendig eine online-verbindung haben, da dies doch etwas ins geld geht.

ich werd mir jetzt ueberlegen muessen ob ich die das script beim hochfahren starte und die ip-adresse der isdn-karte weglasse, oder ob ich staendig das script durch 'ip-up' starten lasse.

ne andere moeglichkeit scheint es ja nicht zu geben.

gruss hiTcher

Descartes

Re: Firewall Script bei Pro-Linux

#4 Post by Descartes »

Zu deinem Problem mit der dynamischen IP Adresse:
Es reicht doch vollkommen, wenn du statt die dyn. vergeben IP Adresse besser das Device verwendest (das ist ja statisch und nicht dynamisch). Also entweder ppp0 (Modem), ippp0 (ISDN) oder eth0 (xDSL).
Das Firewallscript filtert den Verkehr von und zum "Internet-Device" (bei mir: ppp0). Die IP Adresse die dieses Device bei der Einwahl zugewiesen bekommt ist hierbei vollkommen bedeutungslos.

Ich habe das Firewall-Script noch ein bisschen angepasst. Das Script hängt in einem RunLevel drin und wird bereits beim Booten gestartet. Die Internetverbindung wird erst vieeeeel später bei Bedarf per SSH connect von Hand aufgebaut und abgebaut (hab' *keine* Flatrate und ungewollte Einwahlen können durchaus teuer werden)

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#! /bin/sh
#
# for SuSE 6.3
#
# /etc/rc.d/init.d/firewall
#
# and has symbolic links to it from
#
# /etc/rc.d/rc2.d/S51firewall
# /etc/rc.d/rc2.d/K51firewall
# /etc/rc.d/rc3.d/S51firewall
# /etc/rc.d/rc3.d/K51firewall
#

. /etc/rc.config

# test is START_FW is set to yes in SuSE's /etc/rc.config
test "$START_FW" = yes || exit 0

# Variables
DEV_LNET=eth0 # LAN Interface
IP_LNET=192.168.0.99 # my IP
DEV_INET=ppp0 # Internet Interface
LNET=192.168.0.0/24 # local net
GLOBAL=0.0.0.0/0
IPCHAINS=/sbin/ipchains

# The echo return value for success (defined in /etc/rc.config).
return=$rc_done
case "$1" in
start)
echo "Stand by while starting up the firewall..."

echo "Starting IP forwarding"
echo "1" > /proc/sys/net/ipv4/ip_forward

# IP Forward muss vorher aktiviert werden.
# Unter SuSE sollte der Befehl in der rc.config aktiviert werden.
# Bei Masquerading muss zusaetzlich noch IP_DYNIP in der
# /etc/rc.config aktiviert sein.

echo "Start RP filter for anti spoofing shield"
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

echo "Deleting all existing chains..."
$IPCHAINS -F

echo "Setting up default policy..."
$IPCHAINS -P input DENY
$IPCHAINS -P forward DENY
$IPCHAINS -P output DENY

#-------------------------------------------------------------------
# scheinbar macht FTP ansonsten Probleme wenn man wo was uploaden moechte
$IPCHAINS -A input --sport 20 -i $DEV_INET -p tcp -y -j ACCEPT
$IPCHAINS -A input ­i $DEV_INET -p tcp -y -j DENY --log

# Ping aus dem Internet ignorieren
# $IPCHAINS -A inet_in -p icmp --icmp-type echo-request -j DENY --log
$IPCHAINS -A input -i $DEV_INET -p icmp --icmp-type echo-request -j DENY --log
#-------------------------------------------------------------------

echo "Setting up loopback interface..."
$IPCHAINS -A input -i lo -j ACCEPT
$IPCHAINS -A output -i lo -j ACCEPT

echo "Setting up DHCP access..."
$IPCHAINS -A input -p udp -s $GLOBAL 67 -i $DEV_LNET -j ACCEPT
$IPCHAINS -A input -p udp -s $GLOBAL 68 -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -p udp -d $GLOBAL 67 -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -p udp -d $GLOBAL 68 -i $DEV_LNET -j ACCEPT

echo "Setting up intranet connections..."
$IPCHAINS -A input -i $DEV_LNET -s $LNET -j ACCEPT
$IPCHAINS -A output -i $DEV_LNET -d $LNET -j ACCEPT

echo "Setting up Win32 NETBIOS connections..."
#--tcp
$IPCHAINS -A input -s $LNET 137 -p tcp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A input -s $LNET 138 -p tcp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A input -s $LNET 139 -p tcp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -d $LNET 135 -p tcp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -d $LNET 137 -p tcp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -d $LNET 138 -p tcp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -d $LNET 139 -p tcp -i $DEV_LNET -j ACCEPT
#--udp
$IPCHAINS -A input -s $LNET 137 -p udp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A input -s $LNET 138 -p udp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -d $LNET 135 -p udp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -d $LNET 137 -p udp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A output -d $LNET 138 -p udp -i $DEV_LNET -j ACCEPT
# die Ports 135, 137..139 fuer das lokale Netz aufmachen, damit
# Windows Freigaben angezeigt werden...
# Name ID Protokol Bemerkung
# netbios-ns 137 tcp/udp NETBIOS Name Service
# netbios-dgm 138 tcp/udp NETBIOS Datagram Service
# netbios-ssn 139 tcp NETBIOS-Session

echo "Setting up internet SYN connections..."
$IPCHAINS -A input -s $LNET 1024: -p tcp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A forward -s $LNET 1024: -p tcp -i $DEV_INET -j MASQ
$IPCHAINS -A output -s $GLOBAL 1024: -p tcp -i $DEV_INET -j ACCEPT
$IPCHAINS -A input -s $LNET 1024: -p udp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A forward -s $LNET 1024: -p udp -i $DEV_INET -j MASQ
$IPCHAINS -A output -s $GLOBAL 1024: -p udp -i $DEV_INET -j ACCEPT

echo "Setting up internet ACK connections..."
$IPCHAINS -A input --sport 20 -d $GLOBAL 1024: -p tcp -i $DEV_INET -j ACCEPT
$IPCHAINS -A output --sport 20 -d $LNET 1024: -p tcp -i $DEV_LNET -j ACCEPT
$IPCHAINS -A input -d $GLOBAL 1024: -p tcp -i $DEV_INET -j ACCEPT ! -y
$IPCHAINS -A output -d $LNET 1024: -p tcp -i $DEV_LNET -j ACCEPT ! -y
$IPCHAINS -A input -d $GLOBAL 1024: -p udp -i $DEV_INET -j ACCEPT
$IPCHAINS -A output -d $LNET 1024: -p udp -i $DEV_LNET -j ACCEPT

echo "Setting up ICMP defined restrictions..."
$IPCHAINS -N icmp-acc
$IPCHAINS -A icmp-acc -p icmp --icmp-type echo-reply -j ACCEPT
$IPCHAINS -A icmp-acc -p icmp --icmp-type echo-request -j ACCEPT
$IPCHAINS -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPCHAINS -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
$IPCHAINS -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
$IPCHAINS -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT

echo "Setting up ICMP major restrictions..."
$IPCHAINS -A input -p icmp -j icmp-acc
$IPCHAINS -A forward -p icmp -j MASQ
$IPCHAINS -A output -p icmp -j icmp-acc

echo "Loading modules for masquerading..."
insmod ip_masq_ftp
insmod ip_masq_irc
insmod ip_masq_quake
insmod ip_masq_raudio
insmod ip_masq_vdolive
insmod ip_masq_cuseeme
# die Kernelmodule ip_masq_ftp und Co. scheinen im Kernel 2.4.x nicht mehr
# vorhanden zu sein ?

echo -n "Firewall active"

echo -e "$return"
;;
stop)
echo "Shutting down the Firewall (and disabling routing): "
echo 0 > /proc/sys/net/ipv4/ip_forward 2> /dev/null
$IPCHAINS -P input ACCEPT
$IPCHAINS -P output ACCEPT
$IPCHAINS -P forward ACCEPT
$IPCHAINS -F icmp-acc
$IPCHAINS -F input
$IPCHAINS -F output
$IPCHAINS -F forward || return=$rc_failed

echo "Removing firewall modules..."
rmmod ip_masq_cuseeme ip_masq_vdolive
rmmod ip_masq_raudio ip_masq_quake
rmmod ip_masq_irc ip_masq_ftp

echo -n "Fireall disabled..."
echo -e "$return"
;;
restart)
$0 start || return=$rc_failed
;;
reload)
$0 start || return=$rc_failed
;;
status)
echo "Checking the status of the Firewall: "
$IPCHAINS -L || return=$rc_failed
;;
*)
echo "Usage: $0 {start|stop|status|restart|reload}"
exit 1
;;
esac

# Inform the caller not only verbosely and set an exit status.
test "$return" = "$rc_done" || exit 1
exit 0
</font><hr></pre></blockquote>

hiTcher

Re: Firewall Script bei Pro-Linux

#5 Post by hiTcher »

@Descartes

ich dachte nur wenn ich die ip-adresse weglasse entsteht eine groesseres loch in den chains als wenn sie deklariert sind.
ich machs jetzt mal ohne dynamische ip-adresse.

gruss hiTcher

Zeoch

Re: Firewall Script bei Pro-Linux

#6 Post by Zeoch »

Für die anwendung zu hause ist es ansich kein prob alles nur aufs device zu binden, da wie schon erwähnt man so die möglichkeit hat beim booten schon eine fw zu generieren.
am unproblematischten sind die bindungen in der INPUT regel. bei der FORWARD regel sollte man denn doch schon mehr vorsicht wallten lassen. wenn man jetzt die fw für eine firma strickt, sollte man doch schon die ip adressen mit einbeziehen.
Aber vielleicht guckt den thread hier ja noch ein fw freak an und kann das ganze genauer erklären.
MFG
Zeoch

Post Reply