ich sehe den Wald vor lauter Bäumen nicht mehr. Ich habe mir einen Server (Debian 10) aufgesetzt. Mein Client ist auch ein Debian 10. Unter IPv4 geht SSH und co. ohne Probleme unter IPv6 nicht wirklich. IPv6 bin ich auf noch recht unbedarft. Da es aber die Zukunft ist möchte ich das gerne auch zum laufen bekommen. In diesem Speziellen Fall geht es bei IPv6 nur um die interne Kommunikation also ohne Zugang zum Internet. Das kommt später über eine CISCO ASA. Mein Prinzip beim Client ist nur Verbindungen die von mir aus gehen sind erlaubt der Rest wird verworfen. Daher sieht meine bisherige Konfiguration auf dem Client wie folgt aus:
Code: Alles auswählen
# Generated by xtables-save v1.8.2 on Sat Jan 16 15:29:18 2021
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Sat Jan 16 15:29:18 2021
# Generated by xtables-save v1.8.2 on Sat Jan 16 15:29:18 2021
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:LOGGING - [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j LOGGING
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 43 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 67 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 68 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 1119 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 3724 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 5353 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 5938 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 43 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 445 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 993 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 465 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 1119 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 3724 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 6556 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 9418 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22220 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: "
-A LOGGING -j DROP
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
# Completed on Sat Jan 16 15:29:18 2021
Code: Alles auswählen
-A OUTPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
Code: Alles auswählen
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 1 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 2 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 3 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 4 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 129 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 135 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 136 -m conntrack --ctstate NEW -j ACCEPT
Code: Alles auswählen
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# Internen Datenverkehr zulassen
-A INPUT -i lo -j ACCEPT
# Setzt Verbindungen fort, die bereits hergestellt wurden oder mit einem hergestellten verbunden sind
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Verwerft nicht konforme Pakete, z. B. fehlerhafte Header usw.
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Blockiert entfernte Pakete, die angeblich von einer Loopback-Adresse stammen.
-A INPUT -s 127.0.0.0/8 ! -i lo -j DROP
# Verwerft alle Pakete, die Broadcast-, Multicast- oder Anycast-Adressen senden sollen.
-A INPUT -m addrtype --dst-type BROADCAST -j DROP
-A INPUT -m addrtype --dst-type MULTICAST -j DROP
-A INPUT -m addrtype --dst-type ANYCAST -j DROP
-A INPUT -d 224.0.0.0/4 -j DROP
# Kette zur Verhinderung von SSH-Brute-Force-Angriffen.
# Ermöglicht 10 neue Verbindungen innerhalb von 5 Minuten von einem einzelnen Host, dann werden ankommende Verbindungen von diesem Host getrennt.
# Jenseits eines Bursts von 100 Verbindungen wird lediglich 1 Versuch pro Sekunde protokoliert, um das Füllen von Protokollen zu verhindern.
-N SSHBRUTE
-A SSHBRUTE -m recent --name SSH --set
-A SSHBRUTE -m recent --name SSH --update --seconds 300 --hitcount 10 -m limit --limit 1/second --limit-burst 100 -j LOG --log-prefix "iptables[SSH-brute]: "
-A SSHBRUTE -m recent --name SSH --update --seconds 300 --hitcount 10 -j DROP
-A SSHBRUTE -j ACCEPT
# Kette zur Verhinderung von Ping-Flooding - bis zu 6 Pings pro Sekunde von einem einzigen Quelle, wieder mit Protokollbegrenzung.
# Verhindert auch, dass ICMP REPLY ein Opfer überflutet, wenn es auf ICMP ECHO von einer gefälschten Quelle antwortet.
-N ICMPFLOOD
-A ICMPFLOOD -m recent --set --name ICMP --rsource
-A ICMPFLOOD -m recent --update --seconds 1 --hitcount 6 --name ICMP --rsource --rttl -m limit --limit 1/sec --limit-burst 1 -j LOG --log-prefix "iptables[ICMP-flood]: "
-A ICMPFLOOD -m recent --update --seconds 1 --hitcount 6 --name ICMP --rsource --rttl -j DROP
-A ICMPFLOOD -j ACCEPT
# Zulassen von HTTP und HTTPS
-A INPUT -p tcp -m multiport --dports 80,443 --syn -m conntrack --ctstate NEW -j ACCEPT
# Zulassen von FTP nur über IPv4
#-4 -A INPUT -p tcp --dport 21 --syn -m conntrack --ctstate NEW -j ACCEPT
# Weltweiter Zugriff auf SSH und verwenden der SSHBRUTE-Kette, um Brute-Force-Angriffe zu verhindern.
-A INPUT -p tcp --dport 22220 --syn -m conntrack --ctstate NEW -j SSHBRUTE
# Zulassen nützlicher IMCP-Paketarten für IPv4. Hinweis: RFC 792 besagt, dass alle Hosts auf ICMP-ECHO-Anfragen antworten MÜSSEN.
# Das Blockieren dieser kann die Diagnose selbst einfacher Fehler erheblich erschweren. Echte Sicherheit liegt im Sperren und Härten aller Dienste, nicht im Verstecken.
-A INPUT -p icmp --icmp-type 0 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p icmp --icmp-type 3 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p icmp --icmp-type 11 -m conntrack --ctstate NEW -j ACCEPT
# Erlauben von IMCP-Echoanfragen (ping) und verwenden der ICMPFLOOD-Kette, um Ping-Flooding zu verhindern.
-A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ICMPFLOOD
# Protokolliert keine Pakete, die an von SMB verwendete Ports gesendet werden (Samba / Windows-Freigabe).
-A INPUT -p udp -m multiport --dports 135,445 -j DROP
-A INPUT -p udp --dport 137:139 -j DROP
-A INPUT -p udp --sport 137 --dport 1024:65535 -j DROP
-A INPUT -p tcp -m multiport --dports 135,139,445 -j DROP
# Pakete, die an den vom UPnP-Protokoll verwendeten Port gehen, werden nicht protokolliert.
-A INPUT -p udp --dport 1900 -j DROP
# Protokolliert keine späten Antworten von Nameservern.
-A INPUT -p udp --sport 53 -j DROP
# Eine gute Praxis ist es, den AUTH-Verkehr explizit abzulehnen, damit er schnell ausfällt.
-A INPUT -p tcp --dport 113 --syn -m conntrack --ctstate NEW -j REJECT --reject-with tcp-reset
# Verhindern von DOS.
-A INPUT -m limit --limit 1/second --limit-burst 100 -j LOG --log-prefix "iptables[DOS]: "
COMMIT
Und für IPv6:
Code: Alles auswählen
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# Internen Datenverkehr zulassen
-A INPUT -i lo -j ACCEPT
# Setzt Verbindungen fort, die bereits hergestellt wurden oder mit einem hergestellten verbunden sind
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Verwerft nicht konforme Pakete, z. B. fehlerhafte Header usw.
-A INPUT -m conntrack --ctstate INVALID -j DROP
# Blockiert entfernte Pakete, die angeblich von einer Loopback-Adresse stammen.
-A INPUT -s ::1/128 ! -i lo -j DROP
# Kette zur Verhinderung von SSH-Brute-Force-Angriffen.
# Ermöglicht 10 neue Verbindungen innerhalb von 5 Minuten von einem einzelnen Host, dann werden ankommende Verbindungen von diesem Host getrennt.
# Jenseits eines Bursts von 100 Verbindungen wird lediglich 1 Versuch pro Sekunde protokoliert, um das Füllen von Protokollen zu verhindern.
-N SSHBRUTE
-A SSHBRUTE -m recent --name SSH --set
-A SSHBRUTE -m recent --name SSH --update --seconds 300 --hitcount 10 -m limit --limit 1/second --limit-burst 100 -j LOG --log-prefix "iptables[SSH-brute]: "
-A SSHBRUTE -m recent --name SSH --update --seconds 300 --hitcount 10 -j DROP
-A SSHBRUTE -j ACCEPT
# Kette zur Verhinderung von Ping-Flooding - bis zu 6 Pings pro Sekunde von einem einzigen Quelle, wieder mit Protokollbegrenzung.
# Verhindert auch, dass ICMP REPLY ein Opfer überflutet, wenn es auf ICMP ECHO von einer gefälschten Quelle antwortet.
-N ICMPFLOOD
-A ICMPFLOOD -m recent --set --name ICMP --rsource
-A ICMPFLOOD -m recent --update --seconds 1 --hitcount 6 --name ICMP --rsource --rttl -m limit --limit 1/sec --limit-burst 1 -j LOG --log-prefix "iptables[ICMP-flood]: "
-A ICMPFLOOD -m recent --update --seconds 1 --hitcount 6 --name ICMP --rsource --rttl -j DROP
-A ICMPFLOOD -j ACCEPT
# Zulassen von HTTP und HTTPS
-A INPUT -p tcp -m multiport --dports 80,443 --syn -m conntrack --ctstate NEW -j ACCEPT
# Weltweiter Zugriff auf SSH und verwenden der SSHBRUTE-Kette, um Brute-Force-Angriffe zu verhindern.
#-A INPUT -p tcp --dport 22220 --syn -m conntrack --ctstate NEW -j SSHBRUTE
-A OUTPUT -p tcp -m tcp --dport 22220 -m conntrack --ctstate NEW -j ACCEPT
# Zulassen der erforderlichen ICMP-Pakettypen für IPv6 gemäß RFC 4890.
-A INPUT -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 4 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 133 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 134 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 135 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 136 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 137 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 141 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 142 -j ACCEPT
-A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 130 -j ACCEPT
-A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 131 -j ACCEPT
-A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 132 -j ACCEPT
-A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 143 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 148 -j ACCEPT
-A INPUT -p ipv6-icmp --icmpv6-type 149 -j ACCEPT
-A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 151 -j ACCEPT
-A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 152 -j ACCEPT
-A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 153 -j ACCEPT
# Erlauben von IMCP-Echoanfragen (ping) und verwenden der ICMPFLOOD-Kette, um Ping-Flooding zu verhindern.
-A INPUT -p ipv6-icmp --icmpv6-type 128 -j ICMPFLOOD
# Protokolliert keine Pakete, die an von SMB verwendete Ports gesendet werden (Samba / Windows-Freigabe).
-A INPUT -p udp -m multiport --dports 135,445 -j DROP
-A INPUT -p udp --dport 137:139 -j DROP
-A INPUT -p udp --sport 137 --dport 1024:65535 -j DROP
-A INPUT -p tcp -m multiport --dports 135,139,445 -j DROP
# Pakete, die an den vom UPnP-Protokoll verwendeten Port gehen, werden nicht protokolliert.
-A INPUT -p udp --dport 1900 -j DROP
# Protokolliert keine späten Antworten von Nameservern.
-A INPUT -p udp --sport 53 -j DROP
# Eine gute Praxis ist es, den AUTH-Verkehr explizit abzulehnen, damit er schnell ausfällt.
-A INPUT -p tcp --dport 113 --syn -m conntrack --ctstate NEW -j REJECT --reject-with tcp-reset
# Verhindern von DOS.
-A INPUT -m limit --limit 1/second --limit-burst 100 -j LOG --log-prefix "iptables[DOS]: "
COMMIT
Viele Grüße