web-dev-qa-db-fra.com

Comment s'assurer que le port SSH n'est ouvert qu'à une adresse IP spécifique?

C'est mon /etc/sysconfig/iptables:

Il a deux ports ouverts 80 Apache et 22 pour 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

Pour le port 22 (SSH), je veux m'assurer que personne ne peut se connecter à ce port, à l'exception d'une adresse IP spécifique.

exemple ip:

1.2.3.4

Veuillez ignorer tout oubli/préoccupation concernant la modification de mon adresse IP et je ne peux plus SSH sur mon serveur.

42
user78337

si je reçois la question correctement, vous voulez que votre serveur soit accessible uniquement à partir d'une adresse IP spécifique sur le port 22, vous pouvez mettre à jour Iptables pour cela:

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

Dans ce cas, vous n'ouvrez le port ssh qu'à YourIP, si vous devez ouvrir DNS pour votre réseau interne:

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

Une fois que vous les avez ajoutés et ouverts pour ces IP, vous devez fermer la porte pour le reste des IP

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

(Assurez-vous de définir les règles dans la bonne position dans votre jeu de règles. iptables -A INPUT ajoutera les règles à la fin du INPUT tel qu'il est actuellement.)

ou comme joel a dit que vous pouvez ajouter une règle à la place:

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

ou vous pouvez simplement définir la stratégie par défaut sur le pare-feu avec

iptables -P INPUT DROP

En bref, comme présenté dans cette question sur SO :

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

Bien que je recommande d'utiliser des clés SSH, je vais vous donner une explication.

Vous n'avez pas à utiliser IPtables pour ce que vous essayez de réaliser, il existe plusieurs façons. Voici la méthode IPtables:

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

[YOUR_HOME_IP] = L'adresse IP de votre domicile (assez simple)

[SSH_PORT] = Le port sur lequel vous exécutez SSH (par défaut 22)

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

Cela garantit que personne, sauf votre IP, ne peut se connecter à SSH.

Il y a une autre façon, qui consiste à ajouter quelque chose au sshd_config.

Ajoutez ce qui suit:

AllowUsers root@[YOUR_HOME_IP]
PermitRootLogin without-password

Cela vous permet de vous connecter à SSH en tant qu'utilisateur root à partir de votre IP sans demander de mot de passe.

Veuillez garder à l'esprit qu'un cronjob avec

iptables -X
iptables -F

peut être intelligent afin que vous ne soyez pas verrouillé hors de votre serveur avec SSH (le cronjob réinitialisera IPtables afin que vous y ayez à nouveau accès). Si vous y avez toujours accès, vous pouvez supprimer le cronjob et reconfigurer vos IPtables.

7
William Edwards

D'autres réponses utilisent iptables -I dans leurs exemples, ce qui n'est souvent pas ce que vous devez utiliser.

iptables exécutera la première règle qui correspond, donc l'ordre des règles est très important. -I est la commande "insert" et doit être utilisée avec un paramètre d'index pour spécifier à quel endroit de la liste appartient une règle donnée. -A est la commande "append", qui ajoutera la règle à la fin de la liste.

Dans certaines distrobutions (peut-être toutes) en utilisant -I sans paramètre d'index ajoutera la règle à l'index un, ce qui en fera la première règle vérifiée. Dans ce scénario, si la dernière commande que vous exécutez est iptables -I INPUT -s tcp 0.0.0.0/0 -j DROP puis iptables supprimera tout le trafic, que vous ayez ou non des règles ACCEPT plus tard dans la chaîne.

Voici un exemple de configuration d'une règle qui autorise uniquement SSH à partir d'une seule IP:

Commencer sans règles:

#> 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

Ajoutez une nouvelle règle "autoriser SSH à partir de 1.2.3.4":

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

Bloquer SSH de toutes les autres adresses IP:

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

Maintenant, votre chaîne INPUT ressemblera à:

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

Plus tard, si vous devez ajouter à la liste blanche une deuxième adresse IP, vous pouvez utiliser le -I paramètre pour le placer avant la règle de la liste noire.

#>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

Notez que l'utilisation de -I INPUT 2 a ajouté la nouvelle règle en tant que règle numéro 2 et a transféré la règle DROP au numéro 3.

6
STW