mit iptables Anmeldungen für root aussperren

Alles rund um sicherheitsrelevante Fragen und Probleme.
Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: mit iptables Anmeldungen für root aussperren

Beitrag von bluestar » 01.03.2022 14:07:47

mat6937 hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 10:32:45
Wie muss man das verstehen?
Ich passe einfach die Freigabe des Ports meines Nutzungsumfeldes an, beispielsweise halte ich mich einfach nicht in China auf und dementsprechend ist es schlicht nicht nötig den SSH-Server von China aus erreichbar zu haben.
mat6937 hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 10:32:45
Benutzt Du dann ein VPN (oder gleichwertig) für den weltweiten Zugriff auf deinen ssh-Server?
Ganz genau

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: mit iptables Anmeldungen für root aussperren

Beitrag von Tintom » 01.03.2022 14:12:44

MSfree hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 13:46:15
Tintom hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 13:06:51
Wenn man dem ssh-clienten einen Sourceport zuweist
Wie soll das gehen?

Du kannst zwar serverseitig den Listen-Port zuweisen (Default = 22), aber clientseiteg kann der Answer-Port meines Wissens nicht festgenagelt werden. Da wird bei jeder neuen SSH-Verbindung eine neue Portnummer verwendet.
Etwa so:
ssh -o 'ProxyCommand nc -p 32122 %h %p' tintom@localhost
Der Server meldet dann:
<...>
Mar 01 13:25:43 localhost sshd[24021]: Accepted publickey for tintom from ::1 port 32122 ssh2: (...)
<...>

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

Re: mit iptables Anmeldungen für root aussperren

Beitrag von mat6937 » 01.03.2022 14:15:29

MSfree hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 13:46:15
Wie soll das gehen?
Ich habe weiter oben, mit der iptables-Regel doch gezeigt wie das geht. Und glaube mir, bevor ich so etwas hier schreibe, habe ich das doch in meinen Konstellationen, erfolgreich getestet.
MSfree hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 13:46:15
Du kannst zwar serverseitig den Listen-Port zuweisen (Default = 22), aber clientseiteg kann der Answer-Port meines Wissens nicht festgenagelt werden. Da wird bei jeder neuen SSH-Verbindung eine neue Portnummer verwendet.
Nein. Ein answer-Port gibt es nur auf dem Server (RELATED-/ESTABLISHED-Verbindungen) und nicht auf dem Client, denn der Client ist derjenige, der mit seinem source-Port die Verbindung anstoßt/initiiert (NEW-Verbindung). Und schon deshalb kann sich auf Clientseite der Port, für den antwortenden Server nicht ändern, ... weil wenn das der Fall wäre, zu welchem Client-Port soll dann die Antwort vom Server gehen? Du kannst es ja selber testen.
Zuletzt geändert von mat6937 am 01.03.2022 14:21:20, insgesamt 1-mal geändert.

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

Re: mit iptables Anmeldungen für root aussperren

Beitrag von mat6937 » 01.03.2022 14:20:24

bluestar hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 14:07:47
Ich passe einfach die Freigabe des Ports meines Nutzungsumfeldes an, beispielsweise halte ich mich einfach nicht in China auf und dementsprechend ist es schlicht nicht nötig den SSH-Server von China aus erreichbar zu haben.
Hmm, ... da verstehe ich nicht, was Du damit sagen willst.
bluestar hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 14:07:47
Ganz genau
OK, das ist jetzt aber eine andere Konstellation (als die des TE), die ich nur aus Gründen der Redundanz auch benutze. D. h. aber nicht, dass eine richtig konfigurierte/optimierte ssh-Verbindung über das Internet, nicht genau so sicher, komfortable und Ressourcen schonend ist, wie eine ssh-Verbindung innerhalb eines VPN. Aber OK, jeder wie er mag.

Benutzeravatar
MSfree
Beiträge: 10741
Registriert: 25.09.2007 19:59:30

Re: mit iptables Anmeldungen für root aussperren

Beitrag von MSfree » 01.03.2022 14:21:48

mat6937 hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 14:15:29
Ich habe weiter oben, mit der iptables-Regel doch gezeigt wie das geht.
Das, was du gezeigt hast, geht nicht, bzw. nur zufällig mal.
Nein. Ein answer-Port gibt es nur auf dem Server (RELATED-/ESTABLISHED-Verbindungen) und nicht auf dem Client
Es mag ja sein, das ich nicht die korrekte Fachterminologie benutze, aber der Answerport existiert schon, wenn das erste Netzwerkpaket vom Client zum Server geschickt wird. Und genau dieser Port ist nicht konstant. Jegliche iptables-Regel ist hier also komplett sinnlos.

OK, Tintoms Versuch mit netcat könnte klappen.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: mit iptables Anmeldungen für root aussperren

Beitrag von uname » 01.03.2022 14:26:24

Der Client-Port (>1023) wird vom Client vorgegeben. Einfach mal nach AF_INET-Sockets suchen.

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

Re: mit iptables Anmeldungen für root aussperren

Beitrag von mat6937 » 01.03.2022 14:26:53

MSfree hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 14:21:48
Und genau dieser Port ist nicht konstant. Jegliche iptables-Regel ist hier also komplett sinnlos.
Der Port den der ssh-Client wählt ist nicht konstant, aber der Port der durch die source-NAT-Regel festgelegt wird ist konstannt (wenn der Router kein Port-NAT macht), und nur dieser konstante Port (aus der source-NAT-Regel) wird dem Server mitgeteilt. Zu diesem Port geht dann auch die Antwort vom Server. Du kannst es testen.

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

Re: mit iptables Anmeldungen für root aussperren

Beitrag von mat6937 » 01.03.2022 14:29:09

uname hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 14:26:24
Der Client-Port (>1023) wird vom Client vorgegeben.
Das ist richtig und keiner hat das Gegenteil behauptet. Aber schau mal, was die source-NAT-Regel macht bzw. was sie bewirkt.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: mit iptables Anmeldungen für root aussperren

Beitrag von bluestar » 01.03.2022 15:47:49

mat6937 hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 14:20:24
Hmm, ... da verstehe ich nicht, was Du damit sagen willst.
Ganz einfach: Der SSH Port ist einfach nicht weltweit erreichbar, sondern nur aus Ländern/IP-Bereichen, wo ich mich aufhalte.

Für mich ist ein SSH Server schlicht kein öffentlicher Dienst und daher auch nicht uneingeschränkt öffentlich erreichbar.

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

Re: mit iptables Anmeldungen für root aussperren

Beitrag von mat6937 » 01.03.2022 15:55:00

bluestar hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 15:47:49
Der SSH Port ist einfach nicht weltweit erreichbar, sondern nur aus Ländern/IP-Bereichen, wo ich mich aufhalte.
OK und mit welchem Verfahren/Tool/Konfiguration hast Du diese Einschränkung gemacht?
bluestar hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 15:47:49
Für mich ist ein SSH Server schlicht kein öffentlicher Dienst und daher auch nicht uneingeschränkt öffentlich erreichbar.
Naja, das ist er bei mir auch nicht (d. h. kein öffentlicher Dienst). Aber es ist ja ein Unterschied, ob jeder Zugriff auf den lauschenden Port meines sshd hat oder ob _nur ich_ (weltweit) von _jedem (auch fremden) existenten/vorhandenen_ Internetanschluss auf meinen sshd zugreifen kann/will.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: mit iptables Anmeldungen für root aussperren

Beitrag von bluestar » 01.03.2022 16:08:06

mat6937 hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 15:55:00
OK und mit welchem Verfahren/Tool/Konfiguration hast Du diese Einschränkung gemacht?
Ich verwende Shorewall als iptables-Frontend und die Liste https://www.iana.org/assignments/ipv4-a ... pace.xhtml um den Port zu blockieren.
mat6937 hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 15:55:00
Aber es ist ja ein Unterschied, ob jeder Zugriff auf den lauschenden Port meines sshd hat oder ob _nur ich_ (weltweit) von _jedem (auch fremden) existenten/vorhandenen_ Internetanschluss auf meinen sshd zugreifen kann/will.
Für mich ist diese "weltweiter Zugriff auf den SSH-Port" eine theoretische Option, da ich nunmal eben nicht täglich weltweit unterwegs bin.

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: mit iptables Anmeldungen für root aussperren

Beitrag von Tintom » 01.03.2022 17:25:46

Halten wir mal zusammenfassend fest:
wenn @dirk11
  • mittels GeoIP-Filter die Adressbereiche herausfiltert, von denen er keine Verbindung zu seinem sshd zulassen will und/oder
  • mittels --sport den Verbindungsaufbau von einem spezifischen Port eines Clienten aus zulässt
kann er sich das Sperren/Blockieren von Anmeldungen (Ausgangsfrage) sparen.

Eine Lösung mit Debianfail2ban hat er wohl schon verworfen(?).

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: mit iptables Anmeldungen für root aussperren

Beitrag von wanne » 01.03.2022 17:48:37

Also um es zu verdeutlichen/zusammen zu fassen:
Ja man könnte einen ssh clienten Bauen, der den "anderen" Port fest wählt. Oder es an einen vorhandenen SSH per Proxy/firewall dran bauen. Es sollte aber auch klar sein, dass dann nur noch eine SSH-Verbindung aufgemacht werden kann. Deswegen macht das keiner.

Ansonsten:
1. Du kannst nicht nach User filtern, weil SSH ein verschlüsseltes Protokoll ist und entsprechend nur den SSH-Server mit seinem Schlüssel entschlüsseln kann. Mit einer DPI Firewall könntest du den Clients gefälschte Schlüssel unterschieben. ssh würde davor mit dieser Warnung waren.

Code: Alles auswählen

The authenticity of host 'example.com (42.42.24.24)' can't be established.
ECDSA key fingerprint is SHA256:ASDF123YGHH0976434DFFFF.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Die willst du selbstverständlich nicht ignorieren, weil dann auch jeder andere Server mitlesen könnte. (Das ist ein bisschen anders wenn du keine Passwörter sondern Keys nutzt. Da hat SSH alternative Sicherheitsmethoden und du kannst das ignorieren, wenn du deine öffentlichen Schlüssel geheim hältst.)
2. Es gibt keine offiziellen Länderlisten. Nur Sammlungen von Werbenetzwerken und whois Daten. (Z.B in form von Debiangeoip-database.) Ich hatte mal einen Provider der Privatsphäre ernst genommen hat und die Standorte seiner Nutzer nicht verkauft hat und wurde dann konsequent als russisch eingestuft. Insbesondere nervig bei Google-Diensten... Das dürfte allerdings die absolute Ausnahme sein. Was es gibt sind Zuweisungen nach Kontinent. – Leider sind die noch öfter falsch, weil viele gerade viele Europäer und Asiaten Afrikanern und seltener Amerikanern IPs abkaufen, weil es abseits von Afrika keine neuen IPv4s mehr gibt und viele Amerikaner auf nem riesen Haufen sitzen, den sie nicht nutzen. So liegen die IPv4-Adressen von amazon.de z.B. in Afrika und debianforum.de in Nordamerika.
3. Eigentlich gibt es keinen Grund für das Blocken, wenn man eh keine Passwörter zulässt bzw. stark genug hat, dass die durch ausprobieren nicht erratbar sind. Wenn einen die logs stören, schaltet man die ab. Die Ressourcen, die die meisten dynamischen lösungen brauchen sind größer als das, was sie sparen.
Ich verwende Shorewall als iptables-Frontend und die Liste https://www.iana.org/assignments/ipv4-a ... pace.xhtml um den Port zu blockieren.
? Das ist die Liste ALLER öffentlichen IP Adressen nach RIR. Du kannst damit weder Ports blockieren noch sinnvoll filtern, weil ja alle keine Einschränkung sind.
rot: Moderator wanne spricht, default: User wanne spricht.

DeletedUserReAsG

Re: mit iptables Anmeldungen für root aussperren

Beitrag von DeletedUserReAsG » 01.03.2022 19:05:05

Tintom hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 17:25:46
Halten wir mal zusammenfassend fest:
wenn @dirk11

mittels GeoIP-Filter die Adressbereiche herausfiltert, von denen er keine Verbindung zu seinem sshd zulassen will und/oder
mittels --sport den Verbindungsaufbau von einem spezifischen Port eines Clienten aus zulässt

kann er sich das Sperren/Blockieren von Anmeldungen (Ausgangsfrage) sparen.

Eine Lösung mit fail2ban hat er wohl schon verworfen(?).
Er kann auch einfach den Port für ssh in den fünfstelligen Bereich legen, und wird fortan keine Verbindungsversuche mehr darauf haben. Entgegen seiner eigenen Darstellung scheint das ja nicht gemacht worden zu sein.

dirk11
Beiträge: 2818
Registriert: 02.07.2013 11:47:01

Re: mit iptables Anmeldungen für root aussperren

Beitrag von dirk11 » 01.03.2022 21:48:27

uname hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 14:02:28
Also ich verstehe die ganze Diskussion nicht.
Ich kann aufklären (stand aber auch schon im thread):
Ich bin davon ausgegangen, daß das Zugriffe von außen auf diese Ports sind (was ich in Gänze nicht verstanden habe, weil das ja eigentlich unmöglich ist, sich aber dadurch aufgeklärt hat, daß es der von innen vergebene "Antwort-Kanal" ist - auf die Idee bin ich einfach nicht gekommen, obwohl mir das Funktionsprinzip natürlich von diversen anderen Protokollen bekannt ist).
Soll denn überhaupt SSH-Zugriff aus dem Internet möglich sein?
Sonst hätte ich wohl kaum ein port-forwarding im Router eingerichtet.
Kannst du den Server-Port nicht ändern?
Gibt es schon, aber ich hatte schon Situationen, wo das nicht ging, sprich ich auf umgelegte Ports ausgehend aus dem Netz, in welchem ich mich befand, nicht kam.
Fail2Ban ist doch nur eine Krücke und bekämpft nur die Symptome und nicht die Ursachen.
Ja. Das will ich ja auch gar nicht. Irgendwas ist wohl an meiner iptables-Zeile mit dem hitcount noch verbesserungsfähig.

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

Re: mit iptables Anmeldungen für root aussperren

Beitrag von mat6937 » 02.03.2022 08:34:33

dirk11 hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 21:48:27
..., sich aber dadurch aufgeklärt hat, daß es der von innen vergebene "Antwort-Kanal" ist - auf die Idee bin ich einfach nicht gekommen, obwohl mir das Funktionsprinzip natürlich von diversen anderen Protokollen bekannt ist).
Nein, es ist nicht der von innen vergeben "Antwort-Kanal". Es steht doch in deinem Log:

Code: Alles auswählen

Feb 28 12:18:02 server sshd[26417]: Failed keyboard-interactive/pam for invalid user root from 112.85.42.124 port 29495 ssh2
was es ist. "from 112.85.42.124 port 29495", "from" meint hier "von". Es geht nicht um eine Antwort, sondern um einen Zugriff von/mit der source-IP-Adresse 112.85.42.124 und dem source-Port 29495.

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

Re: mit iptables Anmeldungen für root aussperren

Beitrag von mat6937 » 02.03.2022 08:52:47

wanne hat geschrieben: ↑ zum Beitrag ↑
01.03.2022 17:48:37
Also um es zu verdeutlichen/zusammen zu fassen:
Ja man könnte einen ssh clienten Bauen, der den "anderen" Port fest wählt. .... Es sollte aber auch klar sein, dass dann nur noch eine SSH-Verbindung aufgemacht werden kann. Deswegen macht das keiner.
BTW: Man kann auch so mehrere ssh-Verbindungen aufmachen, denn man kann den sshd ja auch auf mehreren Ports lauschen lassen. Z. B. hier auf 2 Ports und so, auch 2 ssh-Verbindungen von einem ssh-Client:

Code: Alles auswählen

sshd       7909            root    3u  IPv4 1035552      0t0  TCP 192.168.174.24:59554 (LISTEN)
sshd       7909            root    4u  IPv4 1035553      0t0  TCP 192.168.178.13:59554 (LISTEN)
sshd       7909            root    5u  IPv4 1035554      0t0  TCP 192.168.178.13:61944 (LISTEN)
sshd       7988            root    3u  IPv4 1035848      0t0  TCP 192.168.178.13:59554-><IP-Client>:42942 (ESTABLISHED)
sshd       7990           xxxxx    3u  IPv4 1035848      0t0  TCP 192.168.178.13:59554-><IP-Client>:42942 (ESTABLISHED)
sshd       8013            root    3u  IPv4 1035907      0t0  TCP 192.168.178.13:61944-><IP-Client>:38570 (ESTABLISHED)
sshd       8015          xxxxx   3u  IPv4 1035907      0t0  TCP 192.168.178.13:61944-><IP-Client>:38570 (ESTABLISHED)

dirk11
Beiträge: 2818
Registriert: 02.07.2013 11:47:01

Re: mit iptables Anmeldungen für root aussperren

Beitrag von dirk11 » 02.03.2022 10:30:12

@mat6937:
Man muss jetzt hier wohl kaum um des Kaisers Schnurrhaare diskutieren, das wird mir zu blöd. Wir wissen beide, was gemeint ist (und mein sshd lauscht in mehreren Instanzen auf mehreren Ports).

Es wäre zielführender, wenn sich mal jemand meiner iptables-Zeilen annehmen würde, statt diese überflüssige Diskussion um Ports weiter anzuheizen.

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

Re: mit iptables Anmeldungen für root aussperren

Beitrag von mat6937 » 02.03.2022 11:01:12

dirk11 hat geschrieben: ↑ zum Beitrag ↑
02.03.2022 10:30:12
..., statt diese überflüssige Diskussion um Ports weiter anzuheizen.
Das ist keine überflüssige Diskussion. Wenn in so einem Fall, nicht alles bis ins kleinste Detail geklärt ist, redet man nur aneinander vorbei (... wie man in diesem/deinem Thread auch sehen kann).

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: mit iptables Anmeldungen für root aussperren

Beitrag von Tintom » 02.03.2022 13:35:13

dirk11 hat geschrieben: ↑ zum Beitrag ↑
02.03.2022 10:30:12
Es wäre zielführender, wenn sich mal jemand meiner iptables-Zeilen annehmen würde, statt diese überflüssige Diskussion um Ports weiter anzuheizen.
Könntest du dazu das vollständige Skript posten?

dirk11
Beiträge: 2818
Registriert: 02.07.2013 11:47:01

Re: mit iptables Anmeldungen für root aussperren

Beitrag von dirk11 » 02.03.2022 15:46:44

Tintom hat geschrieben: ↑ zum Beitrag ↑
02.03.2022 13:35:13
dirk11 hat geschrieben: ↑ zum Beitrag ↑
02.03.2022 10:30:12
Es wäre zielführender, wenn sich mal jemand meiner iptables-Zeilen annehmen würde, statt diese überflüssige Diskussion um Ports weiter anzuheizen.
Könntest du dazu das vollständige Skript posten?
Was meinst Du mit "vollständig" das hier?

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: mit iptables Anmeldungen für root aussperren

Beitrag von Tintom » 02.03.2022 16:28:29

Ich meine die Codezeilen vor und nach deinem geposteten Auszug.

dirk11
Beiträge: 2818
Registriert: 02.07.2013 11:47:01

Re: mit iptables Anmeldungen für root aussperren

Beitrag von dirk11 » 02.03.2022 20:16:25

Mhmm. Kann ich jetzt liefern, jetzt bin ich zu Hause.

Code: Alles auswählen

LOCAL="192.168.1.0/24"
IPTABLES="/sbin/iptables"

## echo 1 > /proc/sys/net/ipv4/ip_forward

Stop()
{
    Flush ACCEPT
}

Close()
{
    Flush DROP
}

Flush()
{
    $IPTABLES -F
    $IPTABLES -t nat -F
    $IPTABLES -t mangle -F<----># ignore if you get an error here
    $IPTABLES -X<------><------># deletes every non-builtin chain in the table
    $IPTABLES -A INPUT -i lo -j ACCEPT<><------># accepts packets from localhost
    $IPTABLES -A INPUT -i eth0 -j ACCEPT<------># accepts packets from outside
    $IPTABLES -P INPUT DROP
    $IPTABLES -P FORWARD DROP
}

Start()
{
    $IPTABLES -F
    $IPTABLES -t nat -F

    $IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    $IPTABLES -A INPUT -p icmp --icmp-type echo-request -j DROP
    $IPTABLES -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    $IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # Schutz vor "ping of death"
    $IPTABLES -A FORWARD -p icmp --icmp-type echo-request -j DROP<-----><------><------> # ?
    $IPTABLES -A INPUT   -p icmp -j ACCEPT
    $IPTABLES -A OUTPUT  -p icmp -j ACCEPT
    $IPTABLES -A FORWARD -p icmp -j ACCEPT


### Regeln fuer INPUT:
    $IPTABLES -A INPUT -i lo -j ACCEPT

    $IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Stealth Scan: "
    $IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

    $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
    $IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
    $IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
    $IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
    $IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
    $IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

    $IPTABLES -N SYN_FLOOD
    $IPTABLES -A INPUT -p tcp --syn -j SYN_FLOOD
    $IPTABLES -A SYN_FLOOD -m limit --limit 10/s --limit-burst 40 -j RETURN
    $IPTABLES -A SYN_FLOOD -j DROP

    $IPTABLES -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

##^ NEU Anti-Bruteforce fuer Ports 22 und 33:
    $IPTABLES -N SSH_WHITELIST
    $IPTABLES -A SSH_WHITELIST -s 192.168.1.0/24 -m recent --remove --name ssh -j ACCEPT
    $IPTABLES -N SSH_BADGUYS
    $IPTABLES -A SSH_BADGUYS -m recent --name ssh_badguys --set
    $IPTABLES -A SSH_BADGUYS -j LOG --log-prefix "SSH scanner detected: "
    $IPTABLES -A SSH_BADGUYS -j REJECT --reject-with icmp-admin-prohibited
    $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_WHITELIST
    $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ssh_badguys --update --seconds 120 -j REJECT --reject-with icmp-admin-prohibited
    $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh
    $IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 4 --name ssh -j SSH_BADGUYS

    $IPTABLES -N SSH_WHITELIST2
    $IPTABLES -A SSH_WHITELIST2 -s 192.168.1.0/24 -m recent --remove --name ssh2 -j ACCEPT
    $IPTABLES -N SSH_BADGUYS2
    $IPTABLES -A SSH_BADGUYS2 -m recent --name ssh_badguys2 --set
    $IPTABLES -A SSH_BADGUYS2 -j LOG --log-prefix "SSH scanner detected: "
    $IPTABLES -A SSH_BADGUYS2 -j REJECT --reject-with icmp-admin-prohibited
    $IPTABLES -A INPUT -p tcp --dport 33 -m state --state NEW -j SSH_WHITELIST2
    $IPTABLES -A INPUT -p tcp --dport 33 -m state --state NEW -m recent --name ssh_badguys2 --update --seconds 120 -j REJECT --reject-with icmp-admin-prohibited
    $IPTABLES -A INPUT -p tcp --dport 33 -m state --state NEW -m recent --set --name ssh2
    $IPTABLES -A INPUT -p tcp --dport 33 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 4 --name ssh2 -j SSH_BADGUYS2
##^

##^ NEU Anti-Bruteforce fuer Ports 443 (https) und 995 (IMAP)
    $IPTABLES -N HTTPS_WHITELIST3
    $IPTABLES -A HTTPS_WHITELIST3 -s 192.168.1.0/24 -m recent --remove --name https -j ACCEPT
    $IPTABLES -N HTTPS_BADGUYS3
    $IPTABLES -A HTTPS_BADGUYS3 -m recent --name https_badguys3 --set
    $IPTABLES -A HTTPS_BADGUYS3 -j LOG --log-prefix "HTTPS scanner detected: "
    $IPTABLES -A HTTPS_BADGUYS3 -j REJECT --reject-with icmp-admin-prohibited
    $IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -j HTTPS_WHITELIST3
    $IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --name https_badguys3 --update --seconds 120 -j REJECT --reject-with icmp-admin-prohibited
    $IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --set --name https
    $IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 50 --name https -j HTTPS_BADGUYS3

    $IPTABLES -N IMAP_WHITELIST4
    $IPTABLES -A IMAP_WHITELIST4 -s 192.168.1.0/24 -m recent --remove --name imap -j ACCEPT
    $IPTABLES -N IMAP_BADGUYS4
    $IPTABLES -A IMAP_BADGUYS4 -m recent --name imap_badguys4 --set
    $IPTABLES -A IMAP_BADGUYS4 -j LOG --log-prefix "IMAP scanner detected: "
    $IPTABLES -A IMAP_BADGUYS4 -j REJECT --reject-with icmp-admin-prohibited
    $IPTABLES -A INPUT -p tcp --dport 995 -m state --state NEW -j IMAP_WHITELIST4
    $IPTABLES -A INPUT -p tcp --dport 995 -m state --state NEW -m recent --name imap_badguys4 --update --seconds 120 -j REJECT --reject-with icmp-admin-prohibited
    $IPTABLES -A INPUT -p tcp --dport 995 -m state --state NEW -m recent --set --name imap
    $IPTABLES -A INPUT -p tcp --dport 995 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 50 --name imap -j IMAP_BADGUYS4
##^

##  Diese Ports sind von ueberall erreichbar:
    $IPTABLES -A INPUT -p tcp --dport ssh -j ACCEPT
    $IPTABLES -A INPUT -p udp --dport ssh -j ACCEPT
    $IPTABLES -A INPUT -p tcp --dport 33 -j ACCEPT
    $IPTABLES -A INPUT -p udp --dport 33 -j ACCEPT
    $IPTABLES -A INPUT -p tcp --dport 25 -j ACCEPT
    ## Limit als Schutz gegen DoS:
    $IPTABLES -A INPUT -p tcp --dport http -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
    $IPTABLES -A INPUT -p udp --dport http -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
    $IPTABLES -A INPUT -p tcp --dport https -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
    $IPTABLES -A INPUT -p udp --dport https -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
    ##
    $IPTABLES -A INPUT -p tcp --dport imaps -j ACCEPT
    $IPTABLES -A INPUT -p udp --dport imaps -j ACCEPT

##  Drop strange gmx packets
    $IPTABLES -A INPUT -s 212.227.17.185 -p tcp --sport 995 -j DROP
    $IPTABLES -A INPUT -s 212.227.17.169 -p tcp --sport 995 -j DROP

##  only if all of the above rules not succeed, use:
    $IPTABLES -A INPUT -m limit --limit 5/minute -j LOG --log-prefix "Invalid INPUT: "
    $IPTABLES -P INPUT DROP
###

### Regeln fuer FORWARD:
    $IPTABLES -A FORWARD -p tcp --syn -m limit --limit 10/s -j ACCEPT

    $IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 10/s -j ACCEPT

    $IPTABLES -A FORWARD -p tcp --tcp-flags ALL NONE -m limit --limit 5/h -j ACCEPT
    $IPTABLES -A FORWARD -p tcp --tcp-flags ALL ALL -m limit --limit 5/h -j ACCEPT

    $IPTABLES -A FORWARD -i eth0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    $IPTABLES -A FORWARD -i tun+ -o eth0 -d 192.168.1.1 -p tcp --dport 53 -j ACCEPT
    $IPTABLES -A FORWARD -i tun+ -o eth0 -d 192.168.1.1 -p udp --dport 53 -j ACCEPT

    $IPTABLES -A FORWARD -i eth0 -o eth0 -j REJECT

##  only if all of the above rules not succeed, use:
    $IPTABLES -A FORWARD -m limit --limit 5/minute -j LOG --log-prefix "Invalid FORWARD: "
    $IPTABLES -P FORWARD DROP
###

    $IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE
}

Benutzeravatar
Tintom
Moderator
Beiträge: 3033
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: mit iptables Anmeldungen für root aussperren

Beitrag von Tintom » 02.03.2022 23:39:47

Also wenn dies das einzige Skript ist, dann ist die Sache relativ einfach: Das Skript startet gar nicht erst. Du definierst Funktionen aber was damit dann geschehen soll sagst du dem Skript nicht. Das musst du aber, sonst tut sich nix. Als nächstes gibst du den Funktionen Parameter mit (Flush ACCEPT/Flush DROP), diese werden jedoch von der Funktion nicht ausgewertet und laufen somit ins Leere. Auf die teils widersprüchlichen, teils überflüssigen und teils falschen Aufrufe von iptables gehe ich jetzt nicht weiter ein.

Ich würde dir empfehlen ein funktionierendes Skript irgendwo aus dem Netz zu ziehen. Beispiele (mit sehr guter Doku!) gibts z.B. hier. Wenn das dann läuft, kannst du mit dem Modul recent weiter deinem eigentlichen Ziel nachgehen. In dem Zusammenhang vielleicht noch der Hinweis: Mit Debiangit lässt sich so ein Skript schön verwalten, du kannst deine Änderungen nachvollziehen und bei Problemen relativ einfach auf den letzten funktionierenden Stand wechseln.

Vermutlich (dein Skript erweckt den Anschein) sitzt dein Server hinter einem Router und du hast lediglich Ports für ssh, mail und http an deinen Server durchgeschleift. In dem Fall wäre es wesentlich einfacher sich im Skript nur um diese drei Dienste zu kümmern, den Rest macht die Firewall im Router ja eh schon.

dirk11
Beiträge: 2818
Registriert: 02.07.2013 11:47:01

Re: mit iptables Anmeldungen für root aussperren

Beitrag von dirk11 » 03.03.2022 08:49:24

Du wolltest vom Script "alles" haben, das habe ich Dir gepostet. War ein Fehler. Es gibt selbstverständlich ein separates start/stop-script dazu (wie sonst soll sowas funktionieren!?) und das Ganze läuft auch seit Jahren, kann man ja z.B. mit iptables - L überprüfen. Geht hier nur um den Teil ab Start(). Es wäre zielführender, wenn Du die konkreten Fehler benennst/korrigierst, denn die sind ja nicht drin, weil ich so ein toller Hengst bin, sondern weil ich selbst sie ganz offensichtlich nicht erkenne.
Wenn da was "teils widersprüchlich, teils falsch" ist, dann benenne das doch bitte, damit wir alle lernen können!
Das Script habe ich vor über 15 Jahren mal mit jemandem, der sich darin selbst viel besser auskennt (und den man leider nicht mehr fragen kann), gemeinsam erstellt - damals in einer viel kleineren Form. Ich habe es im Laufe der Jahre immer mal wieder angepasst und verändert, ganz offensichtlich auch fehlerhaft, aber es hat immer getan, was ich wollte.

Und, so nebenbei bemerkt: wenn das Script "gar nicht erst laufen" würde, wie kommen denn dann Deiner Meinung nach Meldungen, die es nur anhand des Script gibt, in's Log?
Das Script selbst ist vergleichsweise alt (über ein Jahrzehnt), stimmt, es stammt noch aus einer Zeit, als der Rechner auch das PPPoE gemacht hat und alles bei ihm ankam.

Antworten