Firewall für Homeserver

Hi,

könnte sich mal jemand meine iptables anschaun und mir sagen ob das so taugt für einen Homeserver? Der Rechner hängt direkt am Netz, da bin ich manchmal etwas paranoid und da meine iptables skills noch nicht so gut sind hol dich da lieber mal Drittmeinungen ein ;)

Code:
#!/bin/bash

###################################
# SETUP
###################################

modprobe ip_conntrack
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/ip_dynaddr

###################################
# CLEAR ALL AND SET DEFAULTS
###################################

# clear all
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F

# set policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

###################################
# ALLOW ALL TRAFFIC ON LOOPBACK
###################################

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

###################################
# EXCEPTIONS OF THE INPUT POLICY
###################################

# allow all traffic from the inside
iptables -A INPUT -i eth0 -j ACCEPT

# allow port 22 from the outside
iptables -A INPUT -i ppp0 -p tcp --dport 22 -j ACCEPT

# allow port 80 from the outside
iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT

# allow related
iptables -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# log all tcp traffic that will be dropped
iptables -A INPUT -i ppp0 -p tcp -j LOG

###################################
# EXCEPTIONS OF THE FORWARD POLICY
###################################

# allow all traffic to pass from the inside to the outside
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT

# and allow related traffic to be forwarded to the inside
iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# enable source nat
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

cu
serow
 
Ich bin nicht sonderlich gut, in Sachen iptables - aber "Blocke alles außer ..." ist schon mal nicht verkehrt :wink:
Ansonst kann ich dir aber prinzipiell mal http://nmap-online.com/ empfehlen, um den Server von außen abzutasten.
 
also wenn du SSH-Port nach außen hin offen hast (und auch noch auf Standard-Port 22), dann hast du gaaanz schnell 'ne ziemlich große auth.log ;)

Da solltest du 1.) den SSH-Server so absichern, dass nur ganz bestimmte Nutzer (und definitiv KEIN root) Zugriff bekommen können.
und 2.) könntest du fail2ban nutzen, um Scriptkiddies und Bots, welche permanent versuchen, sich (meist mit username=root) bei dir einzuloggen, für eine frei definierbare Dauer komplett zu blocken...

Du kannst natürlich SSH auch einfach auf einen anderen Port legen und hast automatisch 90% weniger Angriffe, aber diese Art der "Sicherung", Security through Obscurity, sollte definitiv niemals die einzige sein...

Es gibt auch Möglichkeiten, dass du den SSH-Port an sich sperrst und erst auf 'nem anderen Port "anklopfen" musst, auf dass die Firewall den SSH-Port freigibt... (Stichwort "port knocking")
 
Folgende procfs-Einstellungen würde ich noch empfehlen:

Code:
        # auf Broadcast-Pings nicht antworten
        echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
        # halt die Klappe bei komischen ICMP Nachrichten
        echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
        # Kicke den ganzen IP Spoofing Shit
        # (Source-Validierung anschalten)
        echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
        # Setze Default-TTL auf 61 (Default fuer Linux ist 64)
        echo 61 > /proc/sys/net/ipv4/ip_default_ttl
        # sende RST-Pakete wenn der Buffer voll ist
        echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow
        # warte max. 30 secs auf ein FIN/ACK
        echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
        # unterbreche Verbindungsaufbau nach 3 SYN-Paketen
        # Default ist 6
        echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
        # unterbreche Verbindungsaufbau nach 3 SYN/ACK-Paketen
        # Default ist 6
        echo 3 > /proc/sys/net/ipv4/tcp_synack_retries

Ausserdem würde ich das Logging nur aktivieren, wenn gerade ein Angriff zu analysieren ist, da dir sonst das übliche Hintergrundrauschen tausender Bots die Logs zuspammen wird.
 
Hi,

danke für die Tips. Schonmal gut zu hören, dass es nicht komplett verkehrt war ^^ Die /proc Settings verstehe ich zwar nicht, habe sie aber mal übernommen. Da fehlt mir wohl das Hintergrundwissen bzgl Attacken.

Ich hab meine Logs bisher mal analysiert und habe gemerkt, dass wohl 90% der gedroppten Packete aus China kam. Darauf hin hab ich mir ne Liste aller IP Blöcke aus China geholt und per

Code:
iptables -A INPUT -i ppp0 -s <BLOCK> -j DROP

gesperrt. Jetzt dauert ein "iptables -L" zwar > 20min aber wenigstens kommt da nix mehr an ^^ Muss nur schaun, dass ich das wieder rausnehme falls ich mal nach China komme :D

cu
serow
 
Bedenke, dass sehr viele Regeln allgemein den Traffic ausbremsen, da jedes Paket durch diese Regeln wandern muss. Man sollte daher die Regeln so gering wie möglich halten und besser IP-Ranges mit einer Regel aussperren, anstatt mit 255 oder mehr. ;)
 
Zurück
Oben