Je suis actuellement entrain de configurer Iptables sur un serveur vps de chez Harmony Hosting et je remarque quelques points étranges sur ma configuration. Ce script doit me permettre de me connecter en SSH à distance, HTTP/HTTPS et FTP pour un futur serveur web. Le fichier est le suivant:
Au départ je voulais bloquer toutes les connexions entrantes et sortantes au début du script et garder les connexions déjà établies actives, mais comme je me connecte en SSH à distance, je déclare les autorisations en premier puis je bloque tout le reste à la fin. Mais j'ai remarqué que lorsque je bloque les connexions sortantes je perd ma connexion à distance et je ne comprend pas pourquoi.. De même, je n'arrive pas à effectuer d'apt-get update ou même un ping sur google par exemple alors que HTTP est activé en entrée et en sortie, de plus que les connexions sortantes sont toutes ouvertes pour le moment car sinon cela me plante tout.. Avez-vous des pistes pour m'éclairer?
Je ne sais pas ce que tu appelles serveur d'hébergeur ?
C'est le genre de script que j'utilise dans le process de sécurisation de mes machines, qu'elles soient dans un LAN que je contrôle ou non.
Toutes mes VM de mes différents LANs on un template de ce genre, que je modifie suivant les services que j'installe ensuite.
Après ce script la est vraiment le top du top, car c'est le script présent sur mon VPS qui héberge mes interfaces web. Donc il est chez OVH et accessible via son IP publique. Pour des machines en LAN, je n'utilise pas de variable $allowed_ip pour filtrer les IP.
j'ai aussi essayé de faire un DROP de la table filter en entrée, sortie et en redirection mais lorsque je le fait ma connexion SSH à distance se perd sachant que j'utilise aussi SSH, c'est étrange
Dans la variable allowed IP tu devrais mettre l adresse du routeur en public et non celui du réseau local a moins que le serveur soit dans le réseau local.
- Edité par gmormorromrom 7 septembre 2017 à 22:14:28
Les petites choses ont leur importance ; c'est toujours par elles qu'on se perd. Auteur: Fedor Dostoïevski
Je te conseille d'y aller pas à pas dans tes tests de configuration afin de localiser le problème. Ne test pas ton script entier mais uniquement un seul et unique service. Pour chaque service testé réalise une démarche semblable :
se documenter sur le service/protocole utilisé (numéro de port ? tcp ou udp ? dans quel direction va le flux ? le service est installé et bien configuré ? ...)
partir de zéro (réaliser un "clean" => options -F et -X et policies ACCEPT)
mettre en place les règles "génériques" (par exemple, ne pas casser les connexions établis => related, established), mais ne pas mettre de règles de DROP ou REJECT
rajouter les règles qui te semble utiles pour le service que tu test
mettre en place les policies DROP
Si c'est bon re-applique la même démarche pour un autre service (ssh, web, ftp, icmp/ping, ...), sinon essai de trouver le problème et n'hésite pas à poster la configuration.
Par exemple pour tester le ssh, déroule tes commandes une à une (pas dans un script) :
# clean
iptables -F
iptables -X
# garder les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# ssh
iptables -t filter -A INPUT -p tcp --dport 22222 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22222 -j ACCEPT
# une fois que tu as mis en place tes regles, applique les policies DROP :
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Si ça passes c'est que c'est (peut être) bon, sinon tu sais que le problème se trouve avant la policy DROP (peut être que tu auras besoins de mettre dans les règles générique les protocoles NTP et DNS ... ou pas (; )
Tu peux aussi t'aider des options -L ou -S pour voir ta configuration courante et les règles qui match. Je te laisse tester les commandes suivantes pour comprendre :
Aussi je te conseille d'utiliser les policies à la place des regles DROP car tu es sur qu'elles ne seront appliqués seulement et seulement si aucune règles ne match (remplace 'iptables -A INPUT -j DROP' par 'iptables -P INPUT DROP')
P.S. : fait les choses pas à pas, et lorsque tu es bloqué donne nous ta config (Un problème est plus facile à résoudre qu'un ensemble de problèmes (; )
GNU/Linux SysAdmin - un blog sur les lignes de commande GNU/Linux (mikael-flora.fr)