7532689170
Goto Top

IP-Adressbereich mit IPTables sperren ( Ubuntu 22.04 )

Guten Morgen Gemeinde,

zum üblichen Grundrauschen eines Servers, der im Internet hängt bzw. beim Hoster steht, gehören ja immer wieder Versuche verschiedener IP-Adressen/Server sich u.a. in das SSH per Bruteforce reinzuklinken.

Nun habe ich mir aus den Auth.log-Dateien von meinem Linux-Server mal die IP-Adressen per Script rausgesucht und möchte ein paar Adressbereiche per IPTables sperren.

z.B. komplett 80.10.2.yyy (also von 80.10.2.0 bis 80.10.2.255)
Oder muss ich jede IP-Adresse einzeln sperren?

Google hat da leider nicht so für mich logische Antworten ausgespuckt.

Mir ist klar das es ein Kampf gegen Windmühlen ist aber ich will zumindest etwas ruhe reinbekommen.

Vielen Dank schonmal für eure Hilfe.

Content-Key: 7533026827

Url: https://administrator.de/contentid/7533026827

Printed on: May 2, 2024 at 22:05 o'clock

Member: bitnarrator
Solution bitnarrator Jun 15, 2023 updated at 05:55:27 (UTC)
Goto Top
Hallo,

3ter Eintrag auf Google:
https://www.google.com/search?client=firefox-b-d&q=iptables+ip+berei ...

https://www.kh2004.de/tipps/iptables-firewall-beispiele-um-ips-zu-sperre ...

iptables --append INPUT --src 80.10.2.0/24 --jump DROP

... Aber sowas macht man vollautomatisiert mittels fail2ban ;)

VG

bitnarrator
Mitglied: 6376382705
Solution 6376382705 Jun 15, 2023 updated at 06:04:16 (UTC)
Goto Top
Hi.

ähm, .. wieso händisch?

Also: das Grundrauschen bekommt man schon mal massiv reduziert wenn man den default SSH Port von 22 ändert (ich nehme häufig 15000+).

Wichtig: pass auf, dass Du dich nicht aussperrst!
Beispiel: per Default ist Port 22 in der FW freigegeben. Änderst Du nun den Port auf 1337, sollte das die Firewall VORHER(!) mitbekommen (sollte im Vorfeld freigegeben werden in der FW) sonst wars das mit deinem Zugang.

Dann: fail2ban installieren der automatisch dein Logdir prüft und nach deinen Vorgaben die IPs direkt in die ufw/iptables packt. (n Fehlversuche innerhalb x Minuten => ban für 3600 Minuten).

Fail2ban kannste dann auch noch dazu nötigen, dass es Dir bspw. eine Mailschickt mit den komplett Daten der IP (vermutliches Herkunftsland, dauer, wann, reputation .. etc.) die gesperrt wurde.

Gruß
Mitglied: 7532689170
7532689170 Jun 15, 2023 at 06:16:09 (UTC)
Goto Top
Wunderbar. Ich danke euch für die Hinweise. face-smile


Ich ging immer von aus das man komplette IP-Adressbereiche über
iptables --append INPUT --src 80.10.2.* --jump DROP
oder
iptables --append INPUT --src 80.10.2 --jump DROP

blockiert.
Aber das mit Fail2Ban klingt gesünder für mich
Mitglied: 6376382705
6376382705 Jun 15, 2023 updated at 06:21:27 (UTC)
Goto Top
Ausgezeichnet.

Aber das mit Fail2Ban klingt gesünder für mich

Auch hier: wenn Du Fail2ban aufsetzt, achte darauf, dass Du deine (eigenen) IPs whitelistest. Solltest Du (kenne ich aus eigener Erfahrung heraus) bspw. ein relativ kryptisches PW (bitte SSH nur via Zertifikat nutzen) hast und es mehrfach selbst falsch eingibst, wirst auch Du irgendwann gesperrt werden. War schon da, war doof. :D

Gruß und viel Erfolg.
Member: aqui
aqui Jun 15, 2023 updated at 16:48:44 (UTC)
Goto Top
Hier ein /etc/nftables.conf Beispiel wie du mit den moderneren nftables so einen Host, natürlich noch mit fail2ban zusätzlich noch on Top, absicherst. Moderne Debian basierte Distros ab Bullseye haben schon keine iptables mehr an Bord und kommen per Default nur noch mit nftables!

Dieses Beispiel ist ein vServer Jumphost der außer SSH nur noch Wireguard und IPsec passieren lässt was du natürlich weglassen kannst wenn du keinen VPN Zugang hast. Wenn du noch weitere Dienste freigeben willst oder musst, dann trägst du das unter "accept common local TCP services on public interface" ein. Ein ...dport { ssh, http, https } lässt z.B. noch Webtraffic zu.
#!/usr/sbin/nft -f

flush ruleset

define pub_iface = "eth0"  
define wg_port = 57820

table inet drop-bad-ct-states {
	chain prerouting {
		type filter hook prerouting priority -150; policy accept;
		# drop packets in "invalid" connection-tracking state 
		ct state invalid drop
		# drop tcp packets for new connections that aren't syn packets 
		tcp flags & (fin|syn|rst|ack) != syn ct state new counter drop
		# drop XMAS packets.
		tcp flags & (fin|syn|rst|psh|ack|urg) == fin|syn|rst|psh|ack|urg counter drop
		# drop NULL packets.
		tcp flags & (fin|syn|rst|psh|ack|urg) == 0x0 counter drop
		# drop new connections over rate limit
		ct state new limit rate over 1/second burst 10 packets drop
		}
}

table inet filter {
	chain input {
		type filter hook input priority 0; policy drop;
		# accept any localhost traffic
		iif lo accept

		# accept any wireguard traffic
		# iifname $wg_iface tcp dport http accept
		iifname "wg0" accept  

		# accept traffic originated from us
		ct state established,related accept

		# accepted ICMP types
		# ip protocol icmp icmp type {echo-request, echo-reply, time-exceeded, parameter-problem, destination-unreachable } accept
		ip protocol icmp icmp type {time-exceeded, parameter-problem, destination-unreachable } accept

		# accept common local TCP services on public interface
		iif $pub_iface tcp dport { ssh } ct state new accept

		# accepted UDP ports and ESP on public interface (VPN)
		iif $pub_iface udp dport { isakmp, ipsec-nat-t, $wg_port } accept 
		iif $pub_iface ip protocol esp accept 

		# allow IPsec VPN networks
		meta ipsec exists accept

		# accept neighbour discovery otherwise IPv6 connectivity breaks.
		ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept

		# log and count dropped traffic
		# log prefix "[nftables]Denied: " counter drop 
		# only count dropped traffic
		counter drop
	}
	chain forward {
		type filter hook forward priority 0;
	}
	chain output {
		type filter hook output priority 0;
	}
} 

Fail2ban legt in nftables automatisch einen Filter für die geblockten IPs der Angriffsversuche an muss aber auf nftables eingestellt sein was im Konfig File /etc/fail2ban/jail.local mit den folgenden Änderungen schnell erledigt ist:
[DEFAULT]
banaction =             nftables-multiport
banaction_allports =    nftables-allports
chain =                 input
[recidive]
banaction =             nftables-allports 
Mit nft list ruleset kannst du dir den Filterstatus ansehen und auch welche Angreifer IP Adressen durch fail2ban automatisch geblockt wurden.

Idealerweise arbeitest du statt mit Username/Passwort bei SSH mit einem Key auf deinem Host!
https://www.heise.de/select/ct/2022/21/2223709091059562015
Member: LordGurke
LordGurke Jun 15, 2023 at 08:30:57 (UTC)
Goto Top
iptables mit "--append" wird hier nichts bringen, damit liegt die Blockier-Regel hinter den Regeln für die Freigaben und wird damit nicht abgearbeitet.
Man müsste stattdessen "--insert 1" benutzen, um die Regel vorne einzufügen.
Member: maretz
maretz Jun 15, 2023 at 13:35:14 (UTC)
Goto Top
Nun - ich mache generell BEIDES. Wenn ich sehe das da mal wieder irgendwo aus den Logs div. (gerne russische) Bereiche auftauchen dann gibts nen extra IP-Tables Eintrag spendiert - dann braucht F2B da keine Arbeit für opfern... Da es oft selbst schon /16 oder sogar noch grössere sind fällt da auch schon gut was weg... Damit braucht F2B sich nur noch um Einzelschicksale zu kümmern ;).
Member: aqui
aqui Jun 15, 2023 at 16:52:01 (UTC)
Goto Top
Oder sie gleich länderbezogen blocken mit Geo IPs:
https://wiki.nftables.org/wiki-nftables/index.php/GeoIP_matching