Comment fermer les ports sous Linux?

38

J'ai une question dans la fermeture du port, je pense que j'ai des choses étranges.

Quand j'utilise execute

nmap --top-ports 10 192.168.1.1

cela montre que le port 23 / TCP est ouvert.

Mais quand j'exécute

nmap --top-ports 10 localhost

cela montre que le port 23 / tcp est fermé.

Lequel d'entre eux est vrai? Je veux fermer ce port sur tout mon système, comment puis-je le faire?

utilisateur74080
la source
10
ils sont tous les deux vrais. Les ports TCP ne sont pas associés aux hôtes. ils sont associés à des interfaces réseau. la différence est subtile mais importante. les interfaces sont souvent les mêmes que les hôtes, mais pas toujours. dans ce cas (comme indiqué dans les réponses) localhostaccède à l' lointerface (bouclage). l'adresse IP est accesing votre interface réelle, probablement eth0ou wlan0ou somesuch.
Strugee
3
La naïveté apparente de cette question a conduit à d’excellentes réponses. Merci pour la question!
dotancohen

Réponses:

47

Nmap est un excellent scanner de ports, mais vous voulez parfois quelque chose de plus autoritaire. Vous pouvez demander au noyau quels processus ont quels ports s'ouvrent en utilisant l' netstatutilitaire:

moi @ monhôte: ~ $ sudo netstat -tlnp
Connexions Internet actives (serveurs uniquement)
Adresse locale Proto Recv-Q Send-Q Adresse étrangère Adresse PID / nom du programme
tcp 0 0 127.0.0.1:53 0.0.0.0:* ÉCOUTER 1004 / dnsmasq    
tcp 0 0 0.0.0.0:22 0.0.0.0:* ÉCOUTE 380 / sshd        
tcp 0 0 127.0.0.1:631 0.0.0.0:* ÉCOUTE 822 / cupsd       
tcp6 0 0 ::: 22 ::: * LISTEN 380 / sshd        
tcp6 0 0 :: 1: 631 ::: * ECOUTER 822 / cupsd       

Les options que j'ai données sont:

  • -t TCP seulement
  • -l Ports d'écoute uniquement
  • -n Ne cherchez pas les noms de services et d'hôtes, mais affichez simplement des chiffres
  • -p Afficher les informations sur le processus (nécessite le privilège root)

Dans ce cas, nous pouvons voir qu'il sshdécoute sur n'importe quel 0.0.0.0port 22 d' interface ( ) et cupsdécoute sur le 127.0.0.1port 631 de loopback ( ). Votre sortie peut indiquer que telnetdl'adresse locale de est définie 192.168.1.1:23, ce qui signifie qu'elle ne répondra pas aux connexions de l'adaptateur de bouclage. (par exemple, vous ne pouvez pas telnet 127.0.0.1).

Il existe d'autres outils qui affichent des informations similaires (par exemple lsofou /proc), mais Netstat est le plus largement disponible. Cela fonctionne même sous Windows ( netstat -anb). BSD netstat est un peu différent: vous devrez utiliser sockstat (1) pour obtenir les informations sur le processus.

Une fois que vous avez l'ID de processus et le nom du programme, vous pouvez rechercher le processus et le supprimer si vous souhaitez fermer le port. Pour un contrôle plus précis, vous pouvez utiliser un pare-feu (iptables sous Linux) pour limiter l’accès à certaines adresses seulement. Vous devrez peut-être désactiver un démarrage de service. Si le PID est "-" sous Linux, il s’agit probablement d’un processus noyau (il s’agit par exemple de NFS), alors bonne chance pour savoir de quoi il s’agit.

Remarque: j'ai dit "faisant autorité" car vous n'êtes pas gêné par les conditions du réseau et les pare-feu. Si vous faites confiance à votre ordinateur, c'est génial. Toutefois, si vous pensez que vous avez été piraté, vous ne pourrez peut-être pas faire confiance aux outils de votre ordinateur. Remplacer les utilitaires standard (et parfois même les appels système) par des utilitaires masquant certains processus ou ports (ou rootkits) est une pratique courante chez les attaquants. Votre meilleur pari à ce stade est de faire une copie légale de votre disque et de la restaurer à partir d’une sauvegarde; utilisez ensuite la copie pour déterminer la façon dont ils sont entrés et fermez-la.

bonsaïivisme
la source
14

Un système Linux possède une interface dite de bouclage, destinée aux communications internes. Son nom d'hôte est localhostet son adresse IP est 127.0.0.1.

Lorsque vous exécutez nmapsur localhost, vous exécutez réellement le portscan sur la virtuelle interface de réalimentation. 192.168.1.1est l'adresse IP de votre interface physique (le plus probable eth0).

Vous avez donc exécuté nmapsur deux interfaces réseau différentes, c’est pourquoi il existe une différence entre les ports ouverts. Ils sont tous les deux vrais.

Si vous avez le port TCP 23 ouvert, il est probable qu'un telnetserveur soit en cours d'exécution (ce qui n'est pas une bonne chose en raison de son manque de cryptage) ou que vous avez une sorte de cheval de Troie sur votre ordinateur.

Psimon
la source
1
alors comment puis-je le fermer?
user74080
4
@ user74080 Vous pouvez ajouter une iptablesrègle comme le suggère une réponse à proximité, mais le service restera inutilisé, ce qui consomme des ressources. Donc, si vous telnetdcourez, fermez-le.
psimon
12

Pour "fermer" le port, vous pouvez utiliser iptables

sudo iptables -A INPUT -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j DROP
Ruisseau
la source
1
Dans cette réponse, "fermer le port" signifie "ignorer tout trafic qui lui est destiné". Le port est toujours ouvert, mais on ne peut plus l'atteindre. Notez également que, DROPcomme il est dit, il voit le paquet puis l’ignore. Normalement (sans iptables activé), le noyau renvoie un paquet inaccessible au port ICMP (qui peut être simulé avec la REJECTcible au lieu de DROP).
Lekensteyn
3
@Lekensteyn Le port ICMP inaccessible est pour UDP. Le paquet approprié pour répondre est un paquet TCP RST, qui peut également être généré à l'aide de la REJECTcible en écriture -j REJECT --reject-with tcp-reset.
Kasperd
Malgré son score inférieur, ceci est la toute première réponse pour réellement répondre à la question. Celui qui peut ajouter plus de partitions ici, veuillez le faire.
EnzoR
2

Si vous le faites nmap localhost, cela vous indique une situation différente: certains programmes sous Linux fonctionnent en tant que serveur bien qu'ils ne soient utilisés que localement. En effet, d'autres programmes les utilisent comme un serveur auquel ils se connectent. Donc, les deux réponses sont vraies, puisque vous demandez quelque chose de différent.

Le port 23 est utilisé pour telnet. Normalement plus utilisé. Essayez de nmap -sV 192.168.1.1savoir quel programme ouvre le port.

(192 ... est une adresse IP de réseau local, le résultat de nmap <your outside world IP>donnera également un résultat différent, en raison des paramètres de pare-feu possibles, etc.)

Pythonic
la source
1

Si vous avez un service en cours d’exécution et en écoute sur le port 23, il est sans doute plus propre d’ arrêter le processus écoutant le port 23 (probablement telnet) que de le maintenir en marche et de le fermer ou de bloquer le port 23 avec iptables.

En l'absence de processus d'écoute sur un port, même en l'absence de blocage du pare-feu, toute tentative de connexion à celui-ci doit aboutir à une "connexion refusée" immédiate ( ECONNREFUSEDà connect(2))

Une façon de trouver le processus (et son pid) qui écoute sur le port 23, s’il existe, est la suivante:

sudo lsof -i -P | grep ':23 '

Dans les -ilistes ci - dessus , les ports Internet ouverts (UDP et TCP), et -P empêche la traduction des ports en noms de services (via /etc/services).

Une fois que vous avez trouvé le processus en cours d’écoute sur le port 23, vous pouvez comprendre comment le processus a été lancé en consultant l’arborescence des processus (avec say, pstree). Si son parent est init(très probablement), vous pouvez rechercher récursivement le nom du processus sous /etc. par exemple:

sudo grep -r telnet /etc

Cela devrait vous conduire à la meilleure façon de le désactiver de courir à la 1ère place.

arielf
la source
Il n'est pas nécessaire d'utiliser grep (et s'il y en avait, pas besoin de guillemets). Vous pouvez utiliser sudo lsof -Pi :23.
Théophile
Les citations sont là pour une bonne raison. Pour vous assurer que seul le port telnet ( 23) correspond. Si vous n'incluez pas d'espace après le :23match :234, :2345etc.
arielf
Ah, je vois. Cela a du sens pour grep. Incidemment, il semble que la commande sans grep ( lsof -Pi :23) recherche une correspondance exacte.
Théophile