Iptables et ssh key private/public DSA

Salut !

J’ai configuré un échange de clef privée / public sur mon serveur et j’ai bloqué toutes les connexions via mot de passe dans le sshd.conf

Maintenant je souhaite rajouter une règles dans mes iptables pour bloquer tout le traffic et autoriser uniquement ce que j’aurais définit.

Voici mes règles :

[code]sd-test:/# iptables -vL --line-numbers
Chain INPUT (policy DROP 2 packets, 98 bytes)
num pkts bytes target prot opt in out source destination
1 5234 490K ACCEPT tcp – eth0 any anywhere anywhere tcp dpt:ssh
2 63 6255 ACCEPT tcp – eth0 any anywhere anywhere tcp dpt:http
3 5 520 ACCEPT icmp – any any anywhere anywhere

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 188 32908 ACCEPT tcp – any any anywhere anywhere tcp spt:ssh
[/code]

Quand je tente une connexion via mon poste client, voici la réponse :

Connection closed by xx.xx.238.171

Voici le résultat de la commande nmap :

[code]Host is up (0.034s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http

Nmap done: 1 IP address (1 host up) scanned in 6.37 seconds[/code]

La connexion SSH ne marche pas, mais si je fait :

iptables -P INPUT ACCEPT

Et je retente une connexion SSH via échange de clef ça marche.

J’ai cherché sur les forums je n’ai rien trouvé, quelqu’un peut m’aider ? :slightly_smiling:

Merci

:006

Le message “Connection closed” indique que la connexion TCP au serveur s’est établie mais a été terminée. Est-ce immédiat ou y a-t-il un délai avant ? Regarde les messages de sshd dans /var/log/auth.log lors d’une tentative de connexion qui échoue. sshd doit avoir besoin de faire une communication en dehors de la connexion SSH qui est bloquée par iptables (peut-être une requête DNS pour le reverse de l’adresse IP du client, mais il ne me semble pas que ce soit bloquant). Commence par ajouter les règles suivantes :

[code]# autoriser le trafic sur l’interface de loopback
iptables -A INPUT -i lo -j ACCEPT

autoriser les paquets des connexions établies

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT[/code]

Le connexion closed est afficher 5sec~ après l’essai.

Dans /var/log/auth.log

Dec 15 10:17:10 sd-45902 sshd[19259]: Received disconnect from xx.xx.7.195: 11: disconnected by user Dec 15 10:17:12 sd-45902 sshd[19525]: Accepted publickey for user from xx.xx.7.195 port 38109 ssh2 Dec 15 10:17:17 sd-45902 sshd[19527]: Received disconnect from xx.xx.7.195: 11: disconnected by user Dec 15 10:54:29 sd-45902 sshd[19634]: Accepted publickey for user from xx.xx.7.195 port 38624 ssh2 Dec 15 10:54:32 sd-45902 sshd[19636]: Received disconnect from xx.xx.7.195: 11: disconnected by user

J’ai donc rajouté les deux ports en questions, ça n’a pas fonctionné.

Par contre quand j’ai rajouté :

La connexion c’est établi, je vais me renseigner sur cette commande, je comprend mal le résultat finale.

C’est à dire que j’ai une connexion que j’ai gardé active en ssh, et je tentais la connexion via un autre terminal. Mais si je ferme ma connexion active, je pourrais toujours me connecter ?

En tout cas merci :slightly_smiling:

Evidemment, il s’agit du port source côté client qui est “éphémère” et change à chaque connexion. Les règles iptables ne peuvent pas se baser dessus. Et de toute façon je ne pense pas qu’iptables bloque la connexion SSH elle-même puisque les logs montrent que le début se passe bien, mais plutôt les paquets de réponse d’une autre communication effectuée par sshd.

La règle iptables accepte les paquets reçus qui correspondent à une connexion établie. Pour faire simple, cela concerne notamment les réponses aux requêtes émises par la machine. Sans cela, les réponses sont bloquées, ce qui est un peu bête.
[EDIT]
Si tu veux savoir ce qui était bloqué, tu peux insérer la règle suivante juste avant la règle ESTABLISHED :

lancer une connexion SSH et regarder à la fin des logs du noyau avec dmesg les paquets qui n’avaient pas été acceptés par les règles précédentes.
[/EDIT]

Désolé, je n’ai pas compris. Chaque connexion SSH est indépendante.