GNU/Linux >> Tutoriels Linux >  >> Linux

Toutes les façons de vérifier si un port est ouvert sous Linux

Votre serveur Linux est en cours d'exécution et vous souhaitez maintenant vérifier si un port spécifique est ouvert afin de pouvoir y accéder à distance. La vérification des ports ouverts est une tâche assez courante pour les administrateurs système, et il existe plusieurs façons de le faire sous Linux.

Dans cet article, vous apprendrez plusieurs façons de vérifier si un port est ouvert sous Linux afin que vous puissiez choisir ceux qui vous conviennent le mieux. Prêt? Continuez à lire !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir les éléments suivants.

  • Un ordinateur Linux. Ce guide utilise Ubuntu 20.04, mais toute distribution Linux récente devrait fonctionner.
  • Accès à une borne. Si vous utilisez un environnement de bureau graphique, recherchez un programme d'émulation de terminal dans le menu de votre application. Ou, si vous vous êtes connecté à un serveur distant via SSH,
  • Un compte utilisateur avec sudo privilèges. Pour plus de simplicité, ce didacticiel utilise l'utilisateur root.

Vérifier si un port est ouvert sous Linux à l'aide de netstat

La première méthode pour vérifier si un port est ouvert sous Linux consiste à exécuter le netstat commande. Cette commande affiche les connexions réseau, les tables de routage et de nombreuses statistiques d'interface réseau.

Le netstat la commande fait partie du net-tools package, et ce package peut ne pas être fourni par défaut avec votre distribution Linux. Sur Ubuntu, installez netstat en exécutant les commandes suivantes dans le terminal.

apt update -y && apt install net-tools -y

Supposons que vous ayez un serveur Web NGINX en cours d'exécution et que vous souhaitiez vérifier si le port 80 est ouvert. Vous pouvez le faire en exécutant la commande suivante. Remplacer 80 avec le numéro de port que vous souhaitez vérifier.

Le -tulpn les drapeaux instruisent netstat pour afficher tous les ports d'écoute. Le premier grep la commande trouve et filtre la ligne contenant le mot LISTEN dans le résultat. Le deuxième grep la commande filtre les résultats pour n'afficher que les éléments correspondant à :80 .

netstat -tulpn | grep LISTEN | grep :80

Pour en savoir plus sur les indicateurs netstat, exécutez la commande netstat –help.

Si le port est ouvert, vous verrez la sortie suivante. Comme vous pouvez le voir, la sortie montre que le port 80 est ouvert sur le système. tcp est le type de protocole, et :::80 indique qu'il s'agit d'un TCPv6 Port. 0.0.0.0:80 signifie que le port est ouvert pour toutes les adresses IPv4. 80 est le port HTTP par défaut servant à accéder au site Web.

Vérifier si un port est ouvert à l'aide de ss

Le ss La commande est un autre utilitaire de ligne de commande pour vérifier les ports ouverts. Cette commande affiche les statistiques de socket, que vous pouvez utiliser pour confirmer si un port est ouvert ou non. Le ss La commande affiche plus d'informations sur les ports ouverts que les autres outils.

Comme le netstat commande, le -t flag indique ss pour n'afficher que les sockets TCP, -u pour n'afficher que les sockets UDP, et -l pour afficher uniquement les prises d'écoute. Le -p flag indique le nom du processus ou le PID utilisant le port.

ss -tulpn | grep LISTEN | grep :80

Vous verrez la sortie suivante si le port est ouvert. Comme vous pouvez le voir, la sortie contient le nom du processus et le PID pour chaque port d'écoute. Dans ce cas, le port 80 est ouvert et le serveur Web NGINX l'utilise.

Vérifier si un port est ouvert à l'aide de lsof

Le lsof La commande est un autre outil pratique pour vérifier les ports ouverts. Le lsof le nom signifie lister les fichiers ouverts , qui affiche des informations sur les fichiers ouverts sur le système. Ces informations incluent les descripteurs de fichiers, les identifiants de processus, les identifiants d'utilisateur, etc.

Comment la liste des fichiers ouverts vous aide-t-elle à déterminer si un port est ouvert ? Vous avez probablement déjà entendu l'expression "tout dans Linux est un fichier", et cette expression signifie ce qu'elle dit.

Par exemple, supposons que vous souhaitiez vérifier si le port 22 est ouvert et que vos utilisateurs peuvent se connecter en SSH à votre serveur. Exécutez la commande ci-dessous pour répertorier les fichiers ouverts avec des connexions actives dans le port 22.

Le -i flag indique lsof pour afficher toutes les prises Internet ouvertes. Le -P L'indicateur affiche les numéros de port au lieu des noms de service. Et le -n supprime les recherches DNS et de nom de service, vous verrez donc les adresses IP au lieu des noms d'hôtes distants.

lsof -i -P -n | grep LISTEN | grep :22

Si le port est ouvert, vous verrez la sortie suivante. Comme vous pouvez le voir, la sortie contient des informations sur :

  • 1027 is the process id of the sshd service.
  • root is the user id that is using the port.
  • 3u and 4u are the file descriptors for IPv4 and IPv6, respectively.
  • 31035 and 31037 are the network ports for IPv4 and IPv6, respectively.
  • :22 indicates that port 22 is open for all IPv4 and IPv6 addresses.
  • (LISTEN) indique que le port écoute les connexions entrantes.
  • 0t0 is the status of the socket, which means that the socket is in the LISTEN state.

Vérifier si un port est ouvert à l'aide de nmap

Jusqu'à présent, vous avez vu comment vérifier si un port est ouvert sous Linux à l'aide de la ligne de commande. Mais que se passe-t-il si vous voulez vérifier si un port est ouvert sur une machine distante ? Dans ce cas, vous pouvez utiliser le nmap outil.

Mais avant d'exécuter nmap , sachez que cet outil peut ne pas faire partie des packages par défaut de votre distribution Linux. Dans ce cas, vous devez d'abord installer nmap en exécutant la commande ci-dessous.

apt install nmap -y

Maintenant, exécutez la commande suivante pour vérifier si un port est ouvert sur une machine distante. Cette commande teste si le port 22 est ouvert le 159.89.176.25 afin que votre utilisateur puisse se connecter en SSH à votre serveur. Remplacez l'adresse IP si nécessaire par la vôtre.

nmap -p 22 159.89.176.25

Comme vous pouvez le voir, la sortie contient des informations sur :

  • L'heure de début de l'analyse des ports (2022-06-30 16:58 UTC ).
  • L'adresse IP de la machine distante (159.89.176.25 ).
  • L'état du port (ouvert ).
  • Le service qui utilise le port (ssh ).
  • L'état de l'hôte (up ).

Le résultat confirme que les utilisateurs peuvent se connecter en SSH à l'ordinateur à l'aide de l'adresse IP et du port.

ssh [email protected] -p 22

La capture d'écran ci-dessous montre une connexion SSH réussie au serveur, prouvant que le port 22 est ouvert.

Tester si un port est ouvert à partir d'un script shell

L'automatisation est toujours une bonne idée. Vérifier les ports ouverts en exécutant un script shell est un excellent moyen de tester plusieurs ports. Vous pouvez utiliser n'importe quelle méthode précédente pour vérifier si un port est ouvert. Mais, pour cet exemple, vous allez écrire un script shell de base qui exécute le Netcat nc commande.

1. Créez un fichier nommé check_port .sh dans votre répertoire personnel à l'aide de votre éditeur de texte préféré. Cet exemple utilise nano.

nano check_port.sh

2. Copiez l'exemple de code ci-dessous dans votre éditeur. Remplacez 80 par le numéro de port que vous souhaitez vérifier.

Le si condition vérifie si le port 80 est ouvert à l'aide de la commande nc. 2>&1 et>/dev/null redirigent respectivement les messages d'erreur et de sortie vers /dev/null. Le /dev/null est un fichier spécial qui supprime tout ce qu'il reçoit.

Si le port est ouvert, le check_port.sh le script imprimera en ligne sur la console. Sinon, le script s'imprimera hors ligne.

if ( nc -zv localhost 80 2>&1 >/dev/null ); then
    echo 'Online'
else
    echo 'Offline'
fi

Le fichier de script devrait ressembler à la capture d'écran ci-dessous. Enregistrez le script et quittez l'éditeur.

3. Exécutez le script shell pour commencer à rechercher les ports ouverts que vous avez spécifiés dans le script.

bash check_port.sh

Vous verrez l'une des sorties suivantes selon que le port est ouvert ou non. Dans ce cas, le port est ouvert, ce que le message Online confirme.

Vous pouvez utiliser ce script shell pour vérifier si un port est ouvert à un intervalle ou une tâche planifiée. Les scripts sont particulièrement utiles lorsque vous devez vérifier plusieurs serveurs. Il vous suffit de copier ce check_port.sh script sur tous les serveurs que vous souhaitez vérifier et exécutez-le à l'aide d'outils CI/CD tels que Jenkins ou Ansible.

Tester si un port est ouvert à l'aide de PowerShell

PowerShell a une applet de commande intégrée pour tester les connexions réseau appelée Test-NetConnection - mais cette applet de commande n'est disponible que sur les systèmes Windows. Ne vous inquiétez pas; vous pouvez toujours utiliser PowerShell sous Linux pour vérifier les ports ouverts et les connexions à l'aide de la classe TcpClient.

Si votre ordinateur Linux ne dispose pas encore de PowerShell, installez-le en suivant les instructions de cette documentation Microsoft :Installer PowerShell sous Linux.

1. Lancez PowerShell en exécutant la commande ci-dessous.

pwsh

2. Ensuite, créez un fichier appelé Test-Port.ps1 à l'aide de votre éditeur de texte. Cet exemple utilise nano.

nano Test-Port.ps1

3. Ensuite, copiez le code ci-dessous dans votre éditeur. Enregistrez le fichier et quittez ensuite l'éditeur.

Remarque :Ce code est un extrait de l'outil de test de port de test PowerShell tout-en-un.

<#
	.SYNOPSIS
		This function tests for open TCP/UDP ports.
	.DESCRIPTION
		This function tests any TCP/UDP port to see if it's open or closed.
	.NOTES

	.PARAMETER Computername
		One or more remote, comma-separated computer names
	.PARAMETER Port
		One or more comma-separated port numbers you'd like to test.
	.PARAMETER TcpTimeout
		The number of milliseconds that the function will wait until declaring
		the TCP port closed. Default is 1000.
	.EXAMPLE
		PS> Test-Port -Computername 'LABDC','LABDC2' -Protocol TCP 80,443
		
		This example tests the TCP network ports 80 and 443 on both the LABDC
		and LABDC2 servers.
	#>
[CmdletBinding()]
[OutputType([System.Management.Automation.PSCustomObject])]
param (
    [Parameter(Mandatory)]
    [string[]]$ComputerName,
    [Parameter(Mandatory)]
    [int[]]$Port,
    [Parameter()]
    [int]$TcpTimeout = 1000
)
begin {
    $Protocol = 'TCP'
}
process {
    foreach ($Computer in $ComputerName) {
        foreach ($Portx in $Port) {            
            $Output = @{ 'Computername' = $Computer; 'Port' = $Portx; 'Protocol' = $Protocol; 'Result' = '' }
            Write-Verbose "$($MyInvocation.MyCommand.Name) - Beginning port test on '$Computer' on port '$Protocol:$Portx'"

            $TcpClient = New-Object System.Net.Sockets.TcpClient
            $Connect = $TcpClient.BeginConnect($Computer, $Portx, $null, $null)
            $Wait = $Connect.AsyncWaitHandle.WaitOne($TcpTimeout, $false)
            if (!$Wait -or !($TcpClient.Connected)) {
                $TcpClient.Close()
                Write-Verbose "$($MyInvocation.MyCommand.Name) - '$Computer' failed port test on port '$Protocol:$Portx'"
                $Output.Result = $false
            }
            else {
                $TcpClient.EndConnect($Connect)
                $TcpClient.Close()
                Write-Verbose "$($MyInvocation.MyCommand.Name) - '$Computer' passed port test on port '$Protocol:$Portx'"
                $Output.Result = $true
                $TcpClient.Close()
                $TcpClient.Dispose()
            }
            [pscustomobject]$Output
        }
    }
}

4. Après avoir enregistré le script Test-Port.ps1, exécutez la commande ci-dessous pour tester les ports 22, 80, 443 et 53.

Le paramètre -ComputerName accepte la liste des noms d'hôte, FQDN ou adresses IP de la ou des machines cibles.

Le paramètre -Port accepte un tableau d'un ou plusieurs numéros de port à tester.

./Test-Port.ps1 -ComputerName localhost -Port 22,80,443

Comme vous pouvez le voir ci-dessous, le résultat montre que les ports 22 et 80 sont ouverts (True), tandis que le port 443 ne l'est pas (False).

Pour exécuter le même script sur plusieurs terminaux et ports cibles, modifiez le code ci-dessous pour ajouter tous les ordinateurs cibles dans le paramètre ComputerName et les numéros de port dans le paramètre Port.

./Test-Port.ps1 `
    -ComputerName adamtheautomator.com,localhost,8.8.8.8 `
    -Port 22,80,443,53

Conclusion

Dans cet article, vous avez appris à vérifier si un port est ouvert ou non sous Linux. Vous avez également appris à vérifier si un port est ouvert à partir d'un script shell et de PowerShell. Désormais, vous pouvez utiliser l'une de ces méthodes pour vérifier si un port est ouvert sur votre machine ou sur une machine distante.

Ne vous arrêtez pas là, cependant. Consultez d'autres articles de dépannage pour continuer à perfectionner vos compétences d'administrateur système !


Linux
  1. 4 façons d'éditer des photos sur la ligne de commande Linux

  2. Vérifiez l'état du fichier sous Linux avec la commande stat

  3. Maîtrisez la commande Linux ls

  4. 5 façons d'utiliser la commande move sous Linux

  5. Vérifier l'utilisation du port sous Linux

Que sont les ports ? Comment vérifier les ports ouverts Linux ?

Outils Sysadmin :11 façons d'utiliser la commande ls sous Linux

Comment vérifier qu'un port est ouvert sur un système Linux distant

3 façons de vérifier la version du noyau Linux en ligne de commande

Comment vérifier tous les ports ouverts de votre système Linux

Comment vérifier les ports ouverts sous Linux ?