it-swarm.com.de

Wie kann sichergestellt werden, dass der SSH-Port nur für eine bestimmte IP-Adresse geöffnet ist?

Das ist mein /etc/sysconfig/iptables:

Es hat zwei offene Ports 80 Apache und 22 für SSH.

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-Host-prohibited
-A FORWARD -j REJECT --reject-with icmp-Host-prohibited
COMMIT

Für Port 22 (SSH) möchte ich sicherstellen, dass niemand außer einer bestimmten IP-Adresse eine Verbindung zu diesem Port herstellen kann.

beispiel IP:

1.2.3.4

Bitte ignorieren Sie alle Versehen/Bedenken, was passiert, wenn sich meine IP ändert und ich kein SSH mehr auf meinem Server ausführen kann.

42
user78337

wenn ich die Frage richtig erhalte und Sie möchten, dass Ihr Server nur über eine bestimmte IP-Adresse an Port 22 erreichbar ist, können Sie Iptables dafür aktualisieren:

iptables -A INPUT -p tcp -s YourIP --dport 22 -j ACCEPT

In diesem Fall öffnen Sie den SSH-Port nur für YourIP, wenn Sie DNS für Ihr internes Netzwerk öffnen müssen:

iptables -A INPUT -p udp -s YourIP --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s YourIP --dport 53 -j ACCEPT

Sobald Sie sie hinzugefügt und für diese IPs geöffnet haben, müssen Sie die Tür für die restlichen IPs schließen

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 --dport 53 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 53 -j DROP

(Stellen Sie sicher, dass die Regeln in Ihrem Regelsatz an der richtigen Position festgelegt sind. iptables -A INPUT fügt die Regeln am Ende von INPUT hinzu, wie es derzeit ist.)

oder wie joel sagte, können Sie stattdessen eine Regel hinzufügen:

iptables -A INPUT -p tcp ! -s <permittedIP> -j DROP

oder Sie können einfach die Standardrichtlinie für die Firewall mit festlegen

iptables -P INPUT DROP

Kurz gesagt, wie in dieser Frage zu SO dargestellt:

iptables -A INPUT -p tcp --dport 22 -s YourIP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
49
Nidal

Obwohl ich die Verwendung von SSH-Schlüsseln empfehle, werde ich Ihnen eine Erklärung geben.

Sie müssen keine IPtables für das verwenden, was Sie erreichen möchten. Es gibt mehrere Möglichkeiten. Dies ist der IPtables-Weg:

iptables -I INPUT -s [YOUR_HOME_IP] -p tcp -m tcp --dport [SSH_PORT] -j ACCEPT

[YOUR_HOME_IP] = Ihre Heim-IP (ziemlich einfach)

[SSH_PORT] = Der Port, an dem Sie SSH ausführen (standardmäßig 22)

iptables -I INPUT -p tcp -m tcp --dport [SSH_PORT] -j REJECT

Dadurch wird sichergestellt, dass sich niemand außer Ihrer IP bei SSH anmelden kann.

Es gibt noch einen anderen Weg, indem Sie dem sshd_config Etwas hinzufügen.

Fügen Sie Folgendes hinzu:

AllowUsers [email protected][YOUR_HOME_IP]
PermitRootLogin without-password

Auf diese Weise können Sie sich von Ihrer IP-Adresse als root Benutzer bei SSH anmelden, ohne nach einem Kennwort zu fragen.

Bitte denken Sie daran, dass ein Cronjob mit

iptables -X
iptables -F

möglicherweise ist es klug, damit Sie nicht mit SSH von Ihrem Server ausgeschlossen werden (der Cronjob setzt IPtables zurück, sodass Sie wieder Zugriff erhalten). Wenn Sie noch Zugriff haben, können Sie den Cronjob entfernen und Ihre IPtables erneut einrichten.

7
William Edwards

Andere Antworten verwenden in ihren Beispielen iptables -I, Was Sie häufig nicht verwenden sollten.

iptables führt die erste übereinstimmende Regel aus, daher ist die Reihenfolge der Regeln sehr wichtig. -I Ist der Befehl "Einfügen" und sollte mit einem Indexparameter verwendet werden, um anzugeben, wo in der Liste eine bestimmte Regel hingehört. -A Ist der Befehl "Anhängen", mit dem die Regel am Ende der Liste hinzugefügt wird.

In einigen Distributionen (möglicherweise allen), in denen -I Ohne Indexparameter verwendet wird, wird die Regel zu Index 1 hinzugefügt, sodass sie die erste überprüfte Regel ist. Wenn in diesem Szenario der letzte Befehl, den Sie ausführen, iptables -I INPUT -s tcp 0.0.0.0/0 -j DROP Ist, löscht iptables den gesamten Datenverkehr, unabhängig davon, ob Sie später in der Kette ACCEPT -Regeln haben oder nicht.

Hier ist ein Beispiel für das Einrichten einer Regel, die SSH nur von einer einzelnen IP aus zulässt:

Ohne Regeln beginnen:

#> iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Fügen Sie eine neue Regel "SSH ab 1.2.3.4 zulassen" hinzu:

#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT

Blockieren Sie SSH von allen anderen IPs:

#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

Jetzt sieht Ihre INPUT-Kette folgendermaßen aus:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Wenn Sie später eine zweite IP auf die Whitelist setzen müssen, können Sie sie mit dem Parameter -I Vor die Blacklist-Regel stellen.

#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  4.3.2.1              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Beachten Sie, dass mit -I INPUT 2 Die neue Regel als Regel Nummer 2 hinzugefügt und die DROP-Regel auf Nummer 3 erhöht wurde.

6
STW