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