---
Hallo zusammen, anbei habe ich eine Frage.
Ich betreibe auf meiner Maschine einen TS3 Server, und einen IRC Chat. (Unrealircd)
Auf der maschine ist unter anderem Keyhelp in der Aktuellen Version installiert.
Schon seit ettlichen Monaten ist es schon so, das ich irgendwellche scriptkiddys habe, die sich auf den IRC aufschalten, und dann blödsinn anstellen.
Es sind grundsätzlich ausländische IP's die das tun.
Einfach her gehen, und "/Gline nickname grund" reicht nicht, da unter anderem im sekunden tackt die nicknames geändert werden.
Zudem sind sie im nu wieder offline, und kommen mit anderen ips wieder.
Dabei wird unter anderem auch mein TS3 Server in beschlag genommen.
Ich habe schon ettliches in bezug auf IP Sperren versucht, und ganze netze schon geblockt, aber das hilft nichts, weil dann einfach proxys aus anderen netzen kommen, zu derer ich dann wieder händisch prüfen muss, wie ist derer iprange u.s.w.
Das alles wird mir mit der zeit echt zu umständlich, und ich möchte eine erweiterung für die Firewall implementieren.
Jetzt kann man argumentieren, das ich den chatserver ja mittels Passwort versehen könnte, und wer das passwort nicht kennt, kommt nicht drauf.
Soweit richtig, aber ich habe mir ja in bezug auf die erweiterung ja etwas gedacht, zumal man es ja auch noch auf andere ports anwenden könnte.
Hauptsächlich wird der IRC als Plattform von mir und einigen freunden benutzt, um ein Schriftlich, also Textbasiertes Rollenspiel zu schreiben.
Ich stelle mir Folgendes vor:
(Folgende angaben sind nur beispiele)
IP: 123.123.123.123 hostname: irgend.ein.hostname.com
Der "Client" bzw. Anfragende Rechner, nimmt kontakt zu meinem server auf, indem er den IRC Port anspricht, z.b. 506667 bzw. 506697.
(Ja, ich weiss, die standard Ports lauten 6667 bzw. 6697, aber ich habe unter anderem andere ports nehmen müssen, und auch das zeigt keine wirkung, weil sich dann jemand tatsächlich die mühe macht, und nutzt einen portscanner, und dann geht die sache wieder von vorne los)
Als Beispiel, baut der anfragende client jene verbindung auf.
Die Firewall bräuchte eine änderung, damit folgendes Script zum einsatz kommen kann:
"check_dns.sh"
Mit Folgenden Inhalt:
Code: Select all
#!/bin/bash
host_ip="$1"
expected_hostname="$2"
# Perform nslookup
nslookup_output=$(nslookup "$host_ip")
echo "nslookup output: $nslookup_output"
nslookup_hostname=$(echo "$nslookup_output" | awk '/name =/ {gsub(/.*name = /,""); print}' | tr -d '\n')
echo "nslookup hostname: $nslookup_hostname"
nslookup_hostname=${nslookup_hostname::-1}
echo "trimmed nslookup hostname: $nslookup_hostname"
# Perform dig -x
dig_output=$(dig -x "$host_ip" +short)
echo "dig output: $dig_output"
dig_hostname=$(echo "$dig_output" | sed 's/\.$//')
echo "dig hostname: $dig_hostname"
# Compare hostnames
if [ "$nslookup_hostname" = "$expected_hostname" ] && [ "$dig_hostname" = "$expected_hostname" ]; then
echo "ALLOW"
else
echo "DENY"
fi
Nun komme ich zu meinem "Problem" denn bis hier hin, ist es "Theorie".
die Praxis, würde laut "Chatgpt" in etwa so aussehen:
Code: Select all
iptables -A INPUT -p tcp --dport 506667 -m state --state NEW -m string --string "dynamic.kabel-deutschland.de" --algo bm -m conntrack --ctstate NEW -m comment --comment "Allow access to SSH only for matching dynamic.kabel-deutschland.de hostnames" -j `./check_dns.sh %d %h | grep -q ALLOW && echo "ACCEPT" || echo "DROP"`
Und dann nochmal für andere ISP's, hier u.a. Telekom via:
"dyn.telekom.de"
Dann muss noch eine weitere, wichtige zeile aufgenommen werden:
Code: Select all
iptables -A INPUT -p tcp --dport 506667 -m state --state NEW -m conntrack --ctstate NEW \
-m comment --comment "Drop access to SSH for all other hostnames" \
-j DROP
Am oberen beispiel, haben wir die IP 123.123.123.123 und als hostname: irgend.ein.hostname.com das Script (dns_check.sh) prüft nun IP + Hostname.
Die IP muss hierbei zum hostname passen, und auch umgekehrt, zumal die IP Daten geprüft werden, ob sie zum Hostname gehören, und meiner vorgabe entsprechen, bzw. wenn alles gut ist, ein "ALLOW" kommt, wonach der jenige passieren darf.
Die Firewall stellt diese daten dem script zur verfügung, und wartet die entsprechende antwort ab, und reagiert dann entsprechend.
Max. ca. 2 sekunden.
Und nun komme ich zu dem teil, wo ich jetzt nicht weiter komme - wie gesagt, das ist bis hierhin erstmal "Theorie" im Händischen also "Manuell" in der Shell klappt das ja mit der prüfung.
Ich habe nur das problem, das ich die anweisung nicht in die Firewall interegieren kann, weil das Keyhelp system, oder viel mehr das Design für die einstellungen der Firewall regeln keine "erweitereten" regelungen zulassen.
Daher wollte ich wissen, wie kann ich dennoch an mein ziel kommen ?
Ich habe lange zeit gebraucht, mithilfe von chatgpr, dieses Script auf die beine zu stellen, und ich habe noch andere erweiterungen, die ich gene implementieren möchte, aber grundsätzlich müsste ich generell erstmal diese "Regel" implementieren, damit es gescheid funktionieren kann.
Über einen Hinweis, wie ich das einbinden kann, wäre ich sehr dankbar, ich hoffe das ich mit diesem Konstruckt längerfristig ruhe haben werde, da ich den zugang zum Server besser steuern kann, ohne mich selbst dabei auszusperren, aber
jene fern zu halten, die da nichts verloren haben.
Möglicherweise ist meine anfrage auch zu speziell, und es hat vieleicht gründe gehabt, warum das Firewall Design geändert wurde, denn ich meine mich Dunkel noch errinnern zu können, das das Alte Firewall system (Design) wesentlich mehr einstellungen zugelassen hat, als das jetzige Design.