it-swarm-eu.dev

Tipps für eine sichere iptables-Konfiguration zum Schutz vor Angriffen. (Client-Seite!)

Eigene Beispiele:

###############
# KERNEL PARAMETER CONFIGURATION

# PREVENT YOU SYSTEM FROM ANSWERING ICMP ECHO REQUESTS
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward

###############
# INPUT

# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j DROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j DROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW OUTGOING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j DROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP

Können wir weitere großartige Ideen für iptables sammeln, um Kunden vor Angriffen zu schützen? Zum Beispiel: die Regeln eines Ubuntu 11.04-Desktop-PCs "Schutz vor Angriffen".

Vielen Dank!

ps.: natürlich:

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

s. 2: sowohl auf IPv4 als auch auf IPv6!

s. 3: Ich brauche keine Regeln wie: Erlaube nur UDP und TCP auf Port 53 ausgehend, ich möchte nur Regeln "verteidigen", z. B.: Portscanning, Angriffe usw.

s.4: Der PC befindet sich hinter einem Router/NAT oder ist "direkt mit dem Internet" verbunden.

16
LanceBaynes

Mir ist klar, dass es unterschiedliche Meinungen gibt, aber eine wichtige Einstellung von Menschen, die sich wirklich mit Netzwerk und Sicherheit auskennen, ist, dass die meisten dieser iptables/sysctl-Regeln redundant sind, wenn nicht sogar schädlich für Sie und das Netzwerk. Einige werden Sie aggressiv dafür kritisieren, dass Sie ohne Grund gegen das Standardverhalten verstoßen. Einige Beispiele:

  • Das Standard-TCP/IP-Verhalten ist REJECT, damit der Peer einen Hinweis darauf erhält, was los ist. Vielleicht hat jemand gerade eine falsche URL eingegeben oder Ihr Administrator zählt die Hosts oder jemand möchte eine Verbindung zu Ihrem Spieleserver herstellen, hat aber den falschen Port eingegeben. Mit DROP erhalten sie nur dunkle und nervige Timeouts.

  • Es ist nicht erforderlich, ungültige oder fehlerhafte Pakete zu verwerfen. Alle diese Angriffe sind ein Jahrzehnt alt. Die Linux-Kernel-Entwickler sind viel aktueller als Sie, was die Art der Pakete betrifft und welche nicht. "Was ist mit zukünftigen Fehlern", könnten einige argumentieren. Woher wissen Sie, dass der zukünftige Fehler im TCP Handler) und nicht im iptables TCP Parser) liegen wird?

  • Die meisten Sysctl-Einstellungen sind Standardeinstellungen. Wenn dies nicht der Fall ist, gibt es normalerweise einen Grund. Warum sollte das Senden von Weiterleitungen deaktiviert werden? Ich finde es sehr nützlich, von einem Peer darüber informiert zu werden, dass mein Routing schlecht ist, auch wenn ich niemals automatisch reagieren würde ("accept_redirects", default = 0).

  • Mit Ihren log_martians und anderen Protokollierungsregeln hoffe ich, dass Sie auch ein Kontingent für/var/log haben, oder es wird großen Spaß machen, Ihre Festplatte aus der Ferne zu füllen und normalerweise Ihre Dienste/Apps zu beenden. Darüber hinaus sollten Sie ein Ratenlimit für die Protokollierung verwenden, da sonst möglicherweise jemand das Kontingent ausfüllt, um zu verhindern, dass Sie die SSH-Kennwort-Bruteforce-Versuche in auth.log oder anderen Elementen sehen. Lesen Sie diese Protokolle tatsächlich auf einem Desktop? Ich empfehle logcheck.

  • Sie scheinen ICMP zu blockieren. Abgesehen von dem erwähnten DHCP-Problem verhindert dies auch die PMTU-Erkennung. Ohne PMTUD treten merkwürdige Verhaltensweisen auf, wenn Sie das System an Orten mit DSL-Verbindung oder anderen Netzwerkeinstellungen verwenden. Einige Pakete werden einfach verworfen und niemand sagt Ihnen warum.

  • Das Filtern ausgehender Pakete ist etwas unklar. Vertraust du dir nicht? Sie sollten im Allgemeinen keine Programme ausführen, denen Sie nicht vertrauen können. Commodity-Betriebssysteme sind meist nicht in der Lage, diese Programme vom Abhören oder sogar Manipulieren der Daten anderer Programme zu isolieren (z. B. Cache-Timing-Angriffe).

  • Sie benötigen NEUE Pakete, um SYN zu haben. Dies wird unterbrochen, wenn eine TCP -Verbindung fortgesetzt wird, nachdem der jeweilige Status in iptables bereits abgelaufen ist. Ich bin mir nicht sicher, wie die Standardzeitüberschreitungen lauten, aber ein Netfilter-Typ hat davor gewarnt.

Wann sollte ein Desktop eine Firewall haben?

  • Wenn es in den Nachrichten einen bestimmten Angriff gibt, für den Ihr aktuelles Betriebssystem oder Ihre aktuellen Server anfällig sind, und eine der empfohlenen Schnellkorrekturen eine Firewall-Regel ist.

  • Sie müssen bestimmte Dienste ausführen, die keine sichere Konfiguration zulassen. Die meisten tun dies, und der Rest wird am besten durch sichere Alternativen ersetzt.

  • Sie haben komplexere Netzwerke mit mehreren VMs und/oder Schnittstellen auf Ihrem Desktop.

Das wichtigste Tool für Ihre Netzwerksicherheit ist das Systemupdate. Zweitens gibt es netstat und nmap, mit denen Sie ermitteln und bestätigen sollten, welche Dienste Sie ausführen. Deaktivieren Sie dann einfach die nicht benötigten oder beschränken Sie sie auf 127.0.0.1.

Bonus, wenn Sie so weit gelesen haben: Pakete sind entweder eingerichtet, verwandt oder neu, alles andere, was Sie fallen lassen. Sie lassen auch NEW fallen, es sei denn, nur SYN ist eingestellt. Da ESTABLISHED, RELATED Flags zu überprüfen scheint, werden alle --tcp-Flags-Regeln und auch die -f-Regel überflüssig. Gleiches gilt für OUTPUT, aber da für OUTPUT sowieso keine Pakete AKZEPTIERT werden, spielt dies wahrscheinlich keine Rolle.

22
pepe

Ich würde vorsichtig sein, wenn ich diesen Teil des gleichen Regelsatzes für Geräte in einem vertrauenswürdigen Netzwerk und solche in einer DMZ mache. Wenn Sie die dort definierten Regeln verwenden, antworten Sie nicht auf die Frage eines DHCP-Servers (ICMP-Echo), ob Ihre IP verwendet wird. Dies kann zu einer doppelten Adressensituation führen.

Ich würde zwei verschiedene Regelsätze erstellen, die auf jedes Szenario angewendet werden sollen. So etwas wie das, was oben aufgeführt ist, ist eine gute Basis für einen DMZ - Computer, schafft jedoch einige Herausforderungen in einem typischen LAN.

Außerdem würde ich definitiv empfehlen, die Protokollierung zu Marsmenschen, ausgehenden Verbindungsabbrüchen, eingehenden Verbindungsabbrüchen usw. hinzuzufügen. Dies kann für die Fehlerbehebung von entscheidender Bedeutung sein und kann für Ihr SIEM nützlichere Daten sein.

6
Ori

Für einen Client-PC, der über ppp direkt mit dem Internet verbunden ist, ist der folgende Regelsatz ein guter Anfang:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
ip6tables -A INPUT -j REJECT
  1. Es erlaubt alles auf der internen lokalen Schnittstelle.
  2. Es erlaubt jedes Paket, das eine Antwort auf ein von Ihnen gesendetes Paket ist. Dies umfasst Pakete innerhalb einer TCP -Verbindung, Antworten auf UDP-Pakete wie kleine DNS-Abfragen. Für das unverschlüsselte FTP-Protokoll im alten Stil umfasst dies die Datenverbindung, sofern ip_conntrack_ftp geladen ist
  3. Alle Versuche ablehnen, eine TCP-Verbindung von außen zu öffnen
  4. Alle anfänglichen (nicht beantworteten) udp-Pakete ablehnen.

Alternativ können Sie -j DROP in den letzten beiden Regeln verwenden. Eine Diskussion zu diesem Thema finden Sie unter IP-Pakete mit einem ICMP-Fehler ablehnen oder einfach verwerfen?

5

Um auf Ihre Frage näher einzugehen, habe ich Folgendes ausgeführt (und ich werde Ihre Beispiele mit Notizen verwenden, da meine so gut wie keine Kommentare enthalten, die seit dem Tod von IPCHAINS vor all den Jahren an net fliter weitergeleitet wurden.)

Dies könnte für ein internes System funktionieren, aber Sie werden häufig Zeit damit verbringen, Ihre iptables für neue Anwendungen zu konfigurieren, die nicht berücksichtigt werden. Ich habe auch meine SSH-Regel entfernt, aber das ist eine ziemlich normale Regel, die Sie sehen werden (und in vielen Konfigurationen die einzige, die Sie sehen, um Eingaben zuzulassen.)

###############
# VARIABLE DEFINITIONS
IPTABLES=/sbin/iptables

#Your DHCP Server for input of ICMP packets
DHCPSERVER=127.0.0.1
PUBIF=eth0

# KERNEL PARAMETER CONFIGURATION
#
# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#
# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#
# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
#
# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#
# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#
# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward
###############
$IPTABLES -F
###############
# LOGDROPPER
$IPTABLES -N LOGNDROP > /dev/null 2> /dev/null 
$IPTABLES -F LOGNDROP 
$IPTABLES -A LOGNDROP -j LOG --log-prefix "LOGNDROP: " 
$IPTABLES -A LOGNDROP -j DROP

###############
# LO allowance
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

###############
# Only bring what you need to survive
$IPTABLES -A INPUT -p icmp -s $DHCPSERVER -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p tcp --sport 68 --dport 67 -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p udp --sport 68 --dport 67 -j ACCEPT
###############
# INPUT
#
# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j LOGNDROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOGNDROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j LOGNDROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j LOGNDROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j LOGNDROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -j LOGNDROP
$IPTABLES -A FORWARD -j LOGNDROP

Wenn Ihr Netzwerk laut ist oder viele Dinge im Gange sind, wird Ihr Protokollvolumen schnell voll. Aber ich bin paranoid und mache auch die Leute kaputt, wenn sie Konfigurationen erstellen, die unnötig laut sind.

4
Ori