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

Projekt: VPN + Firewall auf Suse Linux 9.3

Gh0st

Newbie
Derzeit mach ich gerade ein 3 wöchiges Praktikum und meine Aufgabe ist, folgendes zumachen:

"VPN + Firewall auf Suse Linux 9.3"

Sytem:
Pentium 600 MHz
128 MB RAM
Ati Rage 128 Pro



Leider hab ich bisher wenige Kenntnisse im Bereich mit Linux, Firewall und VPN, daher hab ich gedacht das ihr mir helfen könnt.

Hier einige Daten zum Projekt:

2 Netzwerkaretn
Netzwerkkarte 1 =eth0 => Internetverbindung
Netzwerkkarte 2 =eth1 => Netzwerkverbindung

User Anzahl: erstmal unbegremzt

Internetanbindung: DSL mit DHCP

Protolkoll: TCP/IP

Netzwerk System: Gateway + Firewall

Erlaubte Dienste:
-> WEB Server
-> FTP Server
-> Email Server
-> ICQ + AIM
-> MSN
-> DNS Server
-> DHCP Server
-> usw
eigentlich gibt es da erstmal keine beschränkungen soweit ich weiß. jedoch solten die oben genannten zumindest drin sein.

Nicht erlaubte Dienste für Benutzer:
-> erstmal keine
aber die sollte ich ja selbst leicht deaktiivieren können.



hab dazu folgende sachen gefunden, jedoch weiß ich nicht was ich davon wirklich nutzen kann:

http://www.m-janus.de/security/library/dateien/firewall_handbuch.pdf

Seite 65 bis 73
Seite 90 bis 92
...

http://www.linuxforen.de/forums/showthread.php?t=20031

oder kann ich einfach dafür dies nutzen:

http://www.linux-club.de/viewtopic.php?t=25743

oder

http://www.linux-club.de/viewtopic.php?t=32900

oder

http://www.linux-club.de/viewtopic.php?t=32470

ich wäre dankbar für schnelle Hilfe.
 

Martin Breidenbach

Ultimate Guru
Ich weiß nicht wie Deine Linux-Vorkenntnisse sind aber so als Praktikumsaufgabe erscheint mir das etwas happig.

Die Anpassung einer fertigen Linux-Firewall-Lösung fällt im Rahmen der Aufgabe wohl aus.

Also wirst Du Dich in IPTABLES einarbeiten müssen. Geh mal auf die Seite des IPTABLES/NETFILTER Projektes

http://www.netfilter.org

und lies Dir die HOWTOs durch.

Auf http://www.linuxguruz.com/iptables/...ch noch ?), OpenVPN ([url]http://openvpn.net/)
 
OP
G

Gh0st

Newbie
seit ca 7 werktagen läuft mein praktikum, wovon ich mich seit 5 werktagen in linux einarbeite, da ich vorher nie wirklich was mit linux zu tun hatte.
 
OP
G

Gh0st

Newbie
ich wär dankbar für alle tipps die mir zu meinem projekt helfen, also quasi alle einsteigerhilfen die man kriegen kann und vorallem nützlich sind.

gelesen hab ich:
das suse linux 9.3 administartorbuch, nur teils (nützliches wovon ich gedacht hab, das es wichtig sei)
- systemumbegung
- booten und kofigurieren
- bootloader
- linux kernel
- systemmerkmale
- dateisystem
- grundlagen der vernetzung
- administartion

zudem hab ich mir das noch durchgelsen:
- iptables
- ip6tables
- bsi sicherheitsgatewys + schutztmöglichkeiten
- tcp/ip protokoll
- usw.

derzeit lese ich noch das:
=> das firewall buch von wolfgang barth

gibts noch was was mir und meinem projekt helfen kann und was ich wirklich gebrauchen kann?
wichtig wär noch was ein befehl und parameter in einer firewall bewirkt, also mit erläuterung und auf deutsch wenn es geht. gibt es dazu eine gute internetseite???
 

Martin Breidenbach

Ultimate Guru
Gh0st schrieb:
wichtig wär noch was ein befehl und parameter in einer firewall bewirkt, also mit erläuterung und auf deutsch wenn es geht. gibt es dazu eine gute internetseite???

Was soll denn 'ein befehl und parameter in einer firewall' sein ?

Eine Linux-basierte Firewall besteht aus diversen Software-Paketen. Die Dokumentation der jeweiligen Befehle und ihrer Parameter gehört zu den jeweiligen Paketen.

Sowas in drei Wochen ohne Linux-Vorkenntnisse im Selbststudium aufzuziehen halte ich ehrlich gesagt für unmöglich. Dafür ist das Themengebiet einfach zu umfangreich.

Es gibt verkonfigurierte Linux-Firewall-Lösungen wie Shorewall, IP-Cop etc. Ich nehme an der Einsatz einer solchen Lösung entspricht nicht der Aufgabenstellung ?

Welche Testumgebung steht Dir denn zur Verfügung ? Im Idealfall brauchst Du 4 Rechner - internes Netz, Firewall, DMZ, öffentliches Netz (z.B. auch mit VPN Client zum Testen des VPN).
 
OP
G

Gh0st

Newbie
#!/bin/bash


# Firewall zusammengesetzt Version 0.1 beta
# ======================================
#Variablen
# ======================================

modprobe ip_tables
modprobe ip_conntrack

set iptables = /usr/sbin/iptables

# -----------------------------------------------------------------------------
# spezial ports

set p_high = 1024:65535 # unpriviled ports
set p_ssh = 1000:1023 # common ssh sorce ports
set p_socks = 1080 # socks server port

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

set EXT = ippp0
set INT = eth0

set if = ( $INT $EXT )

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

# Internet Interface
INET_IFACE="ppp0"
INET_ADDRESS="192.168.1.2"

# Local Interface Information
LOCAL_IFACE="eth1"
LOCAL_IP="192.168.1.1"
LOCAL_NET="192.168.1.0/24"
LOCAL_BCAST="192.168.1.255"

# Localhost Interface

LO_IFACE="lO"
LO_IP="127.0.0.1"

# -----------------------------------------------------------------------------

# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
iptables -A MY_DROP -j DROP

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

$iptables -A OUTPUT -o lo -j ACCEPT
$iptables -A INPUT -o lo -j ACCEPT


# -----------------------------------------------------------------------------

# MY_REJECT-Chain
iptables -N MY_REJECT

# MY_REJECT fuellen
iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable

# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP "
iptables -A MY_DROP -j DROP

# -----------------------------------------------------------------------------
# ausgehende pakete bei bereits aufgebauter verbindung

$IPTABLES -A OUTPUT \
-m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A FORWARD -i $INT -o $EXT \
-m state --state ESTABLISHED,RELATED -j ACCEPT

# -----------------------------------------------------------------------------
# rückkanal: eingehende pakete zu einer bestehenden verbindung

$IPTABLES -A INPUT -m -state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m -state --state NEW,INVALID -j MY_DROP

$IPTABLES -A Forward -i $EXT -o $INT \
-m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A FORWARD -i $EXT -o $INT \
-m state --state NEW,INVALID -j my_drop

# -----------------------------------------------------------------------------

# Alle verworfenen Pakete protokollieren
iptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID "
iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID "
iptables -A FORWARD -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "FORWARD INVALID "

# -----------------------------------------------------------------------------
# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# -----------------------------------------------------------------------------
# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j MY_DROP

# -----------------------------------------------------------------------------
# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

# -----------------------------------------------------------------------------
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

# -----------------------------------------------------------------------------
# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

# -----------------------------------------------------------------------------

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

# -----------------------------------------------------------------------------
# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

# -----------------------------------------------------------------------------
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

# -----------------------------------------------------------------------------
# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
# -----------------------------------------------------------------------------
# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
# -----------------------------------------------------------------------------
# URG ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j MY_DROP
# -----------------------------------------------------------------------------
# Loopback-Netzwerk-Kommunikation zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# -----------------------------------------------------------------------------
# Maximum Segment Size (MSS) für das Forwarding an PMTU anpassen
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# -----------------------------------------------------------------------------
# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ! eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# -----------------------------------------------------------------------------
# HTTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT

# HTTPS
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 443 -j ACCEPT

# -----------------------------------------------------------------------------
# SMTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 25 -j ACCEPT

# SMTPS
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 465 -j ACCEPT

# -----------------------------------------------------------------------------
# POP3
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 110 -j ACCEPT

# POP3S
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 995 -j ACCEPT

# -----------------------------------------------------------------------------
# DNS
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 53 -j ACCEPT

# -----------------------------------------------------------------------------
# SSH
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 22 -j ACCEPT

# -----------------------------------------------------------------------------
# IPSEC
iptables -A INPUT -i eth0 -p 50 -j ACCEPT
iptables -A INPUT -i eth0 -p 51 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 500 -j ACCEPT

# -----------------------------------------------------------------------------
# OPENVPN_V1
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 5000 -j ACCEPT

# OPENVPN_V2
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT

# -----------------------------------------------------------------------------
# ICMP Echo-Request (ping) zulassen und beantworten
iptables -A INPUT -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT

# -----------------------------------------------------------------------------
# LAN-Zugriff auf eth1
iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT

# -----------------------------------------------------------------------------
# Default-Policies mit REJECT
iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT
iptables -A FORWARD -j MY_REJECT

# -----------------------------------------------------------------------------
# Forwarding/Routing
echo "Aktiviere IP-Routing"
echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null

# -----------------------------------------------------------------------------
# Masquerading
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# -----------------------------------------------------------------------------
# SYN-Cookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null

# -----------------------------------------------------------------------------
# Stop Source-Routing
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route 2> /dev/null; done

# -----------------------------------------------------------------------------
# Stop Redirecting
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects 2> /dev/null; done

# -----------------------------------------------------------------------------
# Reverse-Path-Filter
# Auskommentiert, da IPSEC mit RP_Filter nicht funktioniert!
# for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done

# -----------------------------------------------------------------------------
# Log Martians
for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done

# -----------------------------------------------------------------------------
# BOOTP-Relaying ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done

# -----------------------------------------------------------------------------
# Proxy-ARP ausschalten
for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done

# -----------------------------------------------------------------------------
# Ungültige ICMP-Antworten ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null

# ICMP Echo-Broadcasts ignorieren
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null

# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

# -----------------------------------------------------------------------------
# Speicherallozierung und -timing für IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2

;;

stop)
echo "Stoppe IP-Paketfilter"
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
echo "Deaktiviere IP-Routing"
echo 0 > /proc/sys/net/ipv4/ip_forward

# -----------------------------------------------------------------------------
# Default-Policies setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;

status)
echo "Tabelle filter"
iptables -L -vn
echo "Tabelle nat"
iptables -t nat -L -vn
echo "Tabelle mangle"
iptables -t mangle -L -vn
;;

*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;

esac

hier mein zusammenbebautes script, ist das lauffähig bzw fehlt da etwas?
 

Martin Breidenbach

Ultimate Guru
Sorry aber das zieh ich mir jetzt nicht Zeile für Zeile rein.

Hast Du die Möglichkeit das selber auszutesten ? Z.B. mit Portscanner nach Lücken zu suchen ?
 

Martin Breidenbach

Ultimate Guru
Das ist schlecht. Beim Durchlesen des Skriptes übersieht man leicht etwas. Deswegen sollte man das testen.

Als ich mich ins Thema Firewall eingearbeitet habe hatte ich 4 Rechner zur Verfügung. Das waren alles 'alte Gurken' aber für den Zweck ausreichend.
 
OP
G

Gh0st

Newbie
hab mir jetzt ein linux rechner eingerichtet, leider läd linux nicht die firewall.
 
OP
G

Gh0st

Newbie
kann man eigentlich firewall.txt dateien als firewall in linux einbinden oder brauchen diese firewalls eine bestimmte endung bzw ein bestimmtes dateiformat?

mit welchen befehlen, binde ich firewalls dann unter linux ein, das sie schon beim booten mitstarten?

hab es chon damit vewrsucht:

chmod 755 /etc/init.d/firewall
ln -s ../../etc/init.d/firewall rcfirewall
chkconfig -a firewall
rcfirewall start

und auch damit:

chmod a+x rc.firewall
 

Martin Breidenbach

Ultimate Guru
Schau Dir mal an:

/etc/init.d/skeleton

Das ist eine Beispieldatei die den Aufbau eines Dienstskriptes beschreibt.

Wenn Du dann so ein Skript erstellt hast kannst Du es mit

insserv skriptname

installieren.

Danach läßt es sich z.B. auch im Yast Runleveleditor aktivieren/deaktivieren.
 
Oben