133 votes

Fermeture manuelle d'un port à partir de la ligne de commande

Je veux fermer un port ouvert qui est en mode d'écoute entre mon application client et serveur.

Existe-t-il une option manuelle de ligne de commande sous Linux pour fermer un port ?

NOTE : J'ai appris que "seule l'application qui possède le socket connecté doit le fermer, ce qui se produit lorsque l'application se termine".

Je ne comprends pas pourquoi cela n'est possible que par l'application qui l'ouvre ... Mais je suis quand même désireux de savoir s'il existe un autre moyen de le faire.

3voto

Ben Points 312
netstat -anp | grep 80

Il devrait vous dire, si vous utilisez apache, "httpd" (ceci est juste un exemple, utilisez le port que votre application utilise au lieu de 80)

pkill -9 httpd 

ou

killall -9 httpd

2voto

jackenheimer Points 21

Vous pourriez probablement trouver quel processus a ouvert la socket à laquelle le port est associé, et tuer ce processus.

Mais, vous devez réaliser qu'à moins que processus n'ait un gestionnaire qui désinitialise tout ce qu'il utilisait (fichiers ouverts, sockets fichiers ouverts, sockets, forks, trucs qui peuvent traîner s'ils ne sont pas fermés correctement à la fin) alors vous auriez créé ce frein aux performances du système. De plus, le socket restera ouverte jusqu'à ce que le noyau réalise que le processus a été tué. Cela ne prend généralement prend environ une minute.

Je suppose que la meilleure question serait : Quel port (appartenant à quel processus) voulez-vous arrêter ?

Si vous essayez de mettre fin à une porte dérobée ou à un ou un virus que vous avez trouvé, vous devez au moins savoir quelles données vont et viennent avant d'y mettre fin. (wireshark est très utile pour cela) (et le nom de l'exécutable du processus pour pouvoir le supprimer et l'empêcher de revenir au redémarrage) ou, si c'est quelque chose que vous avez installé (comme HTTPD ou FTPD ou autre), vous devriez déjà avoir accès au processus lui-même.

En général, il y a un programme de contrôle (HTTPD stop|start ou autre). Ou, si c'est une question de système, vous ne devriez probablement pas y toucher. Quoi qu'il en soit, j'ai pensé que puisque tout le monde vous donne le "comment faire", je devrais vous donner les avertissements.

2voto

Daniel Points 21

Si vous voulez que votre port soit libéré plus tôt, vous devez définir la valeur suivante :

echo 1 > /proc/sys/net/ipv4/tcp_fin_timeout

pour le régler de 60 secondes (par défaut) à 1 seconde

2voto

abautista Points 133

J'ai d'abord cherché les processus mongo et node, puis j'ai fait ce qui suit :

ps -A | grep node

10418 pts/23   00:00:05 node

10551 pts/23   00:00:00 node

ps -A | grep mongo

10490 pts/23   00:00:00 mongod

Une fois identifiés, il suffit de tuer les processus avec la commande kill.

kill -9 10418
kill -9 10490

Enfin, tapez meteor et ça devrait fonctionner à nouveau.

1voto

Arthur Points 11

Vous pourriez écrire un script qui modifie les iptables et les relance. Un script pour ajouter une règle droppant tous les paquets sur le port, un autre script pour supprimer ladite règle.

Les autres réponses vous ont montré comment tuer le processus lié au port - ce n'est peut-être pas ce que vous voulez. Si vous voulez que le serveur continue à fonctionner, mais qu'il empêche les connexions des clients, vous devez bloquer le port, et non arrêter le processus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X