Desktop Firewall – iptables

closeDieser Beitrag wurde vor mehr als drei Monaten veröffentlicht. Bedenke bitte, dass die hier angebotene Information nicht mehr aktuell und gültig sein könnte. Informiere dich daher bitte auch an anderer Stelle über dieses Thema. Sollten sich neue Informationen ergeben haben, so kannst du mich auch gerne auf diese über einen Kommentar hinweisen. Vielen Dank!

Anbei eine Beispiel-Firewall mit iptables für einen Desktop PC.

__________________________

#!/bin/bash

INTERFACE="eth1"
NET="192.168.30.0/24"
MEINE_IP="192.168.30.226"

PING="yes"
SSH="yes"

# loescht alte Regeln
iptables -F
iptables -X

# alles dicht
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

if [ $SSH = "yes" ] ; then
    # erlauben - ssh
    iptables -A INPUT -i ${INTERFACE} -p tcp --dport 22 --sport 1024:65535 -j ACCEPT
    iptables -A OUTPUT -o ${INTERFACE} -p tcp --sport 22 --dport 1024:65535 -j ACCEPT
    # erlauben - sftp/scp
    iptables -A INPUT -i ${INTERFACE} -p tcp --dport 115 --sport 1024:65535 -j ACCEPT
    iptables -A OUTPUT -o ${INTERFACE} -p tcp --sport 115 --dport 1024:65535 -j ACCEPT
else
    # sperre - ssh und melde SSH-Angriffe im syslog
    iptables -A INPUT -i ${INTERFACE} -p tcp --dport 22 -m limit --limit 6/min -j LOG --log-prefix "Hack-Alarm:"
    iptables -A INPUT -i ${INTERFACE} -p tcp --dport 22 -j DROP
fi

if [ $PING = "yes" ] ; then
    # erlauben - icmp (ping)
    iptables -A INPUT -i ${INTERFACE} -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A OUTPUT -o ${INTERFACE} -p icmp -d ${NET} -j ACCEPT
else
    # sperren - icmp (ping)
    iptables -A INPUT -i ${INTERFACE} -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
    iptables -A OUTPUT -o ${INTERFACE} -p icmp -d ${NET} -j ACCEPT
fi

# erlaube - Verbindungen nach aussen und deren Antwort
iptables -A OUTPUT -o ${INTERFACE} -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ${INTERFACE} -d ${MEINE_IP} -m state --state RELATED,ESTABLISHED -j ACCEPT
  • http://blog.simlau.net/ Simon

    Für eine Desktop-Firewall vielleicht gerade noch so praktikabel, allerdings ist es sehr unsinnig, dass du so jedes Paket einer bereits erlaubten Verbindung durch die Regeln jagst. Das mag jetzt bei diesen paar Rules noch nichts ausmachen, aber gut. Systemlast ist es trotzdem.

    Außerdem gibst du hier nirgends das Local Loop Device frei. Ich weiß nicht ob das unbedingt benötigt werden würde, das pack ich aber zur Sicherheit immer noch mit rein. Nicht das man später den lokalen MySQL Server nicht mehr erreicht. :)

    Du prüfst zudem nicht, ob die entsprechenden Kernel-Module bereits geladen sind, was u. U. zu Problemen führen kann.

    Ansonsten kann ich nur empfehlen mit trap zu arbeiten. Vorallem im Serverbetrieb ist es mir schon öfters mal passiert, dass ich irgendwo oben im Script nen Typo drin hatte, das Script ausgeführt hatte und der Server dann nicht mehr erreichbar war, weil er zu den ESTABLISHED Chains nie gekommen ist. ;)

    Wenn Interesse besteht kann ich dir gerne mal mein iptables Script zukommen lassen. Die habe ich derzeit auf 3 Root-Servern und 2 vServern zusammen mit fail2ban am laufen. *g*

    Gruß, Simon