IPTables: Nur SSH-Zugriff zulassen, sonst nichts rein oder raus

11

Wie konfigurieren Sie IPTables so, dass nur SSH ein- und kein anderer Datenverkehr ein- oder ausgeht ?

Irgendwelche Sicherheitsvorkehrungen, die jemand empfehlen kann?

Ich habe einen Server, von dem ich glaube, dass er erfolgreich von GoDaddy migriert wurde, und ich glaube, dass er nicht mehr verwendet wird.

Aber ich möchte sichergehen, nur weil ... du es nie weißt. :) :)

Beachten Sie, dass dies ein virtueller dedizierter Server von GoDaddy ist ... Das bedeutet keine Sicherung und praktisch keine Unterstützung.

Disko
quelle

Antworten:

13

Sie müssen nur die Standardrichtlinie für die INPUT- und OUTPUT-Ketten auf DROP setzen.

Um SSH zuzulassen, benötigen Sie die folgenden Befehle:

$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Die letzten beiden Befehle ermöglichen Loopback-Verkehr, da dies von einigen Anwendungen benötigt wird, um ordnungsgemäß zu funktionieren. Sie können den SSH-Zugriff von einer bestimmten IP-Adresse mithilfe der -s source_ipOption einschränken .

Wenn Sie die Befehle in der oben gezeigten Reihenfolge ausführen, bleibt Ihre aktuelle SSH-Sitzung hängen. Dies liegt daran, dass iptables-Befehle sofort wirksam werden. Sie müssen sie in einem Shell-Skript ausführen, um zu vermeiden, dass Sie die Möglichkeit verlieren, eine Verbindung zu Ihrem Computer herzustellen, wenn Sie sie remote ausführen.

Khaled
quelle
4
--state RELATEDauf die letzte Regel ist unnötig; --state ESTABLISHEDreicht. Möglicherweise möchten Sie auch DNS-Verkehr zulassen und sollten wahrscheinlich alles auf der Loopback-Schnittstelle zulassen, oder alle möglichen Dinge verhalten sich sehr seltsam.
MadHatter
@ MadHatter: Ja, Sie haben Recht, vor allem in Bezug auf das Loopback-Zeug :)
Khaled
Danke, wäre es möglich, die gesamte Datei von Ihnen zu bekommen? dh etwas, das ich kopieren und direkt in / etc / sysconfig / iptables einfügen kann? Ich habe nicht genug Erfahrung damit, um meiner Intuition zu vertrauen, die richtigen Änderungen vorzunehmen.
Disco
2
ps. Die Verbindung wird nach dem ersten Befehl
zwangsweise
3
Sie sollten die Reihenfolge dieser Befehle wirklich ändern. Die Richtlinienzeilen sollten als letzte angezeigt werden. Jeder, der dies nur in eine SSH-Sitzung kopiert, wird HUPed und sofort geschlossen
AndreasT
4

Etwas wie das:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT  # or iptables -P INPUT DROP

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP
Mikel
quelle
1
Ich denke du meinst -i lonicht -s lo; Auch hier wird nur ESTABLISHEDin den staatlichen Regeln benötigt, und es sollte wahrscheinlich auch eine --sport 22geben. Warum sind alle so daran interessiert zu erlauben RELATED?
MadHatter
@MadHatter: Info RELATED: Es ist tatsächlich nützlich, um Dinge abzugleichen , die nicht TCP sind, wie Ping-Antworten und DNS-Antworten. Zumindest hatte ich das immer angenommen.
Steven Montag
2
Mein Glaube ist, dass es keinem von beiden entsprechen wird. Es würde zum Beispiel einer vom ICMP-Host administrativ verbotenen Antwort entsprechen, aber das ist ungefähr so ​​hilfreich wie es nur geht. und wenn es nicht qualifiziert ist, stimmt es mit jedem zugehörigen Verkehr überein, nicht nur mit dem Verkehr, der mit der vorherigen Zeile zusammenhängt.
MadHatter
@ MadHatter: Ich denke, ich muss ein paar Tests durchführen, um zu sehen, ob Sie Recht haben. Vielen Dank, dass Sie meine Annahme in Frage gestellt haben.
Steven Montag
Ja, der Status ESTABLISHED ist alles, was benötigt wird, um UDP-DNS-Antworten und ICMP-Echoantworten abzugleichen.
Steven Montag