ip6tables

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
aki
Beiträge: 83
Registriert: 02.02.2018 11:48:58

ip6tables

Beitrag von aki » 24.03.2021 11:50:56

Hallo zusammen,

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
Für IPv6 hätte ich das gleiche Prinzip lediglich vorgesehen. Nur der Eintrag

Code: Alles auswählen

-A OUTPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
würde entfernt und ersetzt durch

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
Jetzt zum Server. Da sieht die aktuelle Konfiguration für IPv4 wie folgt aus:

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
Mit dieser Konfiguration funktioniert unter IPv4 alles und IPv6 garnichts. Übernehme ich die Konfiguration vom Server auf dem Client geht alles auch unter IPv6. Was übersehe ich?

Viele Grüße

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: ip6tables

Beitrag von mat6937 » 26.03.2021 09:20:55

aki hat geschrieben: ↑ zum Beitrag ↑
24.03.2021 11:50:56
Für IPv6 hätte ich das gleiche Prinzip lediglich vorgesehen. Nur der Eintrag

Code: Alles auswählen

-A OUTPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
würde entfernt und ersetzt durch

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
Jetzt zum Server. ...
Was z. B. bei IPv4 mit dem arp-Protokoll gemacht wird, geht bei IPv6 mit bestimmten icmpv6-Typen (z. B. für RA, RS, NS, NA, ...). Evtl. noch viel mehr. Diese icmpv6-Typen wirst Du m. E., mit ip6tables für den Client nicht freigegeben haben.

aki
Beiträge: 83
Registriert: 02.02.2018 11:48:58

Re: ip6tables

Beitrag von aki » 26.03.2021 17:39:54

Hallo zusammen,

nach langem testen konnte ich folgende Ursachen ausmachen. icmpv6 und conntrack scheinen sich nicht zu mögen. Da kann es dann auch schon einmal sein das der Ping zwei Minuten weiter sauber läuft und dann geht nichts mehr. Sehr merkwürdig und wenig hilfreich wenn man auf der Fehlersuche ist. Zudem habe ich je meine Kette Logging mit der Regel was da landet wird ohne Rückmeldung verworfen. Da immer wieder vereinzelt (so 1 Paket alle 30 Pakete) geht dann der Ping nicht mehr und der Rest dann auch nicht mehr. Also habe ich vorerst die Regel auskommentiert bis mir klar ist weshalb das so ist.

Aktuelle Client IPV6 Konfiguration:

Code: Alles auswählen

#Generated by xtables-save v1.8.2 on FR Mär 26 16:10:10 2021
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:LOGGING - [0:0]

# Internen Datenverkehr zulassen
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

# Setzt Verbindungen fort, die bereits hergestellt wurden oder mit einer hergestellten verbunden sind.
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Verwirft nicht konforme Pakete, z. B. fehlerhafte Header usw.
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A OUTPUT -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

# Alles Loggen auch Output (Conficker Erfahrung 2000 Anfragen/Minute draußen ...)
-A INPUT -j LOGGING
-A OUTPUT -j LOGGING

# 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 der erforderlichen ICMP-Pakettypen für IPv6 gemäß RFC 4890.
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 1   -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 2   -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 3   -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 4   -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 130 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 131 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 132 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 133 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 134 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 135 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 136 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 137 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 141 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 142 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 143 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 148 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 149 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 151 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 152 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 153 -j ACCEPT

-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 1   -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 2   -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 3   -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 4   -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 130 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 131 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 132 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 133 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 134 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 135 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 136 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 137 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 141 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 142 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 143 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 148 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 149 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 151 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 152 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 153 -j ACCEPT

# Erlauben von IMCP-Echoanfragen (ping von definierten Hosts) und verwenden der ICMPFLOOD-Kette, um Ping-Flooding zu verhindern.
-A INPUT -p icmpv6 -m icmpv6 --icmpv6-type 128 -s fd00:: -j ICMPFLOOD

# Ping nach draußen. Hier auch nur vom Host selber da keine extra Schnitstelle definiert wurde und mit VMWare unschön ;-) werden könnte (Kali Linux und co.) 
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 128 -s fd00::2 -j ACCEPT

# Zulassen der benötigten TCP Ports ins WWW
-A OUTPUT -p tcp -m multiport --dports 80,443 --syn -m conntrack --ctstate NEW -j ACCEPT

# Sonstige benötigte TCP Ports
-A OUTPUT -p tcp -m multiport --dports 25,43,445,465,993,1119,3724,6556,9418,22220 --syn -m conntrack --ctstate NEW -j ACCEPT

# Sonstige benötigte UDP Ports
-A OUTPUT -p udp -m multiport --dports 43,53,67,68,123,1119,3724,5353,5938 -m conntrack --ctstate NEW -j ACCEPT

# Verhindern von DOS, indem Protokolldateien gefüllt werden.
-A INPUT -m limit --limit 1/second --limit-burst 100 -j LOG --log-prefix "iptables[DOS]: "

-A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: "
#-A LOGGING -j DROP
COMMIT
# Completed on FR Mär 26 16:20:18 2021

Und der Server:

Code: Alles auswählen

#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]

# Internen Datenverkehr zulassen
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o 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
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Verwirft nicht konforme Pakete, z. B. fehlerhafte Header usw.
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A OUTPUT -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

# Alles Loggen auch Output (Conficker Erfahrung 2000 Anfragen/Minute draußen ...)
-A INPUT -j LOGGING
-A OUTPUT -j LOGGING

# 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 der benötigten TCP Ports ins WWW
-A OUTPUT -p tcp -m multiport --dports 80,443 --syn -m conntrack --ctstate NEW -j ACCEPT

# Zugriff auf SSH von definierten Hosts und verwenden der SSHBRUTE-Kette, um Brute-Force-Angriffe zu verhindern.
-A INPUT -p tcp --dport 22220 --syn -s fd00::2 -m conntrack --ctstate NEW -j SSHBRUTE

# Zulassen der erforderlichen ICMP-Pakettypen für IPv6 gemäß RFC 4890.
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 1   -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 2   -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 3   -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 4   -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 130 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 131 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 132 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 133 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 134 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 135 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 136 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 137 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 141 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 142 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 143 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 148 -j ACCEPT
-A INPUT              -p icmpv6 -m icmpv6 --icmpv6-type 149 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 151 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 152 -j ACCEPT
-A INPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 153 -j ACCEPT

-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 1   -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 2   -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 3   -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 4   -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 130 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 131 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 132 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 133 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 134 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 135 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 136 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 137 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 141 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 142 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 143 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 148 -j ACCEPT
-A OUTPUT              -p icmpv6 -m icmpv6 --icmpv6-type 149 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 151 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 152 -j ACCEPT
-A OUTPUT -s fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type 153 -j ACCEPT

# Erlauben von IMCP-Echoanfragen (ping von definierten Hosts) und verwenden der ICMPFLOOD-Kette, um Ping-Flooding zu verhindern.
-A INPUT -p ipv6-icmp --icmpv6-type 128 -s fd00::2 -j ICMPFLOOD

# Ping nach draußen. Hier auch nur vom Host selber da keine extra Schnitstelle definiert wurde und mit VMWare unschön ;-) werden könnte (Kali Linux und co.) 
-A OUTPUT -p icmpv6 -m icmpv6 --icmpv6-type 128 -s fd00:: -j ACCEPT

# SAMBA Dateifreigabe
-A INPUT -p tcp --dport 445 --syn -s fd00::2 -m conntrack --ctstate NEW -j ACCEPT

# 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, indem Protokolldateien gefüllt werden.
-A INPUT -m limit --limit 1/second --limit-burst 100 -j LOG --log-prefix "iptables[DOS]: "

-A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: "
#-A LOGGING -j DROP

COMMIT
# Completed on FR Mär 26 16:20:18 2021

Da ich derzeit für icmpv6 wie oben schon erwähnt kein conntrack nutzen kann wurde das pingen mittels Host Angabe etwas genauer gefasst. Mit den beiden Konfigurationen läuft jetzt wieder alles 1a auch wenn ich noch nicht so ganz zufrieden damit bin (insbesondere deswegen

Code: Alles auswählen

#-A LOGGING -j DROP
. Im Log findet sich dieses dazu:

Code: Alles auswählen

Mar 26 11:05:55 aki kernel: [ 8370.129352] IPTables-Dropped: IN=eno1 OUT= MAC=34:17:eb:a0:16:98:50:e5:49:5d:45:50:86:dd SRC=fd00:0000:0000:0000:0000:0000:0000:0000 DST=fd00:0000:0000:00
00:0000:0000:0000:0002 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=460939 PROTO=ICMPv6 TYPE=128 CODE=0 ID=2357 SEQ=1
.

Wem etwas grundsätzliches auffällt an meiner Konfiguration oder sagt so ginge es bessser weil ... bitte gerne schreiben.

So erstmal genug ip6tables ...

Grüße

aki
Beiträge: 83
Registriert: 02.02.2018 11:48:58

Re: ip6tables gelöst

Beitrag von aki » 06.04.2021 02:11:54

Hallo zusammen,

der Vollständigkeit halber kann ich nun vermelden das Thema ist gelöst. Wirklich geholfen haben mir diese Seiten: https://blog.cloudflare.com/conntrack-t ... one-flows/ und https://www.frozentux.net/iptables-tuto ... x1555.html. Ich kann jedem der nicht tagtäglich mit der Materie zu tun hat die Seiten ans Herz legen. Conntrack ist noch immer nicht ohne :| .

Grüße

Antworten