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.

1voto

Lark Points 1640

Un autre problème : parfois, le noyau possède lui-même des ports. Je sais que le routage NAT garde certains ports ouverts pour l'utilisation du NAT. Vous ne pouvez pas tuer un processus pour cela, c'est un noyau, et une reconfiguration et un redémarrage sont nécessaires.

1voto

Zhou Shuai-Ming Points 11

Vous pouvez utiliser la commande nommée killcx, qui ferme une connexion sans qu'aucun processus ne soit tué.

  • la syntaxe :
killcx [dest_ip:dest_port] {interface}

  dest_ip              : remote IP
  dest_port            : remote port
  interface (optional) : network interface (eth0, lo etc).
  • exemple :
killcx 120.121.122.123:1234
killcx 120.121.122.123:1234 eth0

1voto

Tommi Tuura Points 11

Je suis conscient que cette réponse ne répond pas à la question elle-même, à proprement parler, mais en lisant la question, cela pourrait être une information pertinente :

Le comportement par défaut de la liaison d'une socket à un port (et une adresse) est que lorsque la socket est fermée par la fin abrupte du processus, la socket restera dans TIME_WAIT pendant un certain temps. Cela signifie que vous ne pouvez pas immédiatement vous lier à nouveau à cette adresse/ce port. Si vous développez le système lui-même via l'interface socket BSD standard, vous pouvez (du moins dans une certaine mesure) contrôler ce comportement avec l'option de socket SO_REUSEADDR. Cela vous permettra de vous lier à nouveau à la même adresse/port si la socket est dans le statut TIME_WAIT. Cependant, il n'y a toujours qu'une seule socket par port !

Cependant, cette information ne devrait être utilisée que comme une aide au développement, car il y a une raison pour laquelle TIME_WAIT existe en premier lieu, déjà expliquée dans les autres réponses.

1voto

Lee Beck Points 11

Utilisez UFW sur votre machine et fermez-la. Ou quelque chose comme UFW.

sudo ufw deny PORT

Exécutez la commande suivante, en remplaçant le caractère générique PORT par le numéro du port à fermer :

  1. Sur Debian :

    sudo ufw deny PORT
  2. Sur CentOS :

    sudo firewall-cmd --zone=public --permanent --remove-port=PORT/tcp 
    sudo firewall-cmd --reload

0voto

RickyA Points 171

Si vous ne voulez pas de trafic sur la prise mais que vous voulez garder le processus en vie : tcpkill .

tcpkill -i eth0 host xxx.xxx.xxx.xxx and port yyyy

Lance un démon de reniflage qui intercepte et détruit tout le trafic sur ce port. Très pratique pour tester vos applications pour les fractionnements de réseau.

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