Vérification des ports d'écoute dans les systèmes Linux
Internet n'est plus un endroit sûr depuis longtemps, il vaut la peine de voir pour qui on laisse la porte ouverte et à quoi elle mène. Les ports sont un tel équivalent des portes dans les réseaux informatiques.
Quand on sait quelles applications on utilise, nous saurons alors quoi ajouter à nos propres règles de pare-feu iptables ou à notre liste blanche UDP:
Comment faire?
Sur la plupart des systèmes, la commande est suffisante:
1 2 | netstat -l |
Comment le lire?
Au début, cela ressemble à un plat de pâtes italien, mais il suffit de regarder de plus près que le résultat de cette commande est une mine de connaissances
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:40833 *:* LISTEN tcp 0 0 localhost:27017 *:* LISTEN tcp 0 0 localhost:mysql *:* LISTEN tcp 0 0 *:sunrpc *:* LISTEN tcp 0 0 *:46834 *:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 [::]:43937 [::]:* LISTEN tcp6 0 0 [::]:57793 [::]:* LISTEN tcp6 0 0 [::]:sunrpc [::]:* LISTEN udp 0 0 localhost:608 *:* udp 0 0 *:674 *:* udp 0 0 *:59774 *:* udp 0 0 *:bootpc *:* udp 0 0 *:sunrpc *:* udp 0 0 *:41251 *:* udp6 0 0 [::]:674 [::]:* udp6 0 0 [::]:43086 [::]:* udp6 0 0 [::]:40189 [::]:* udp6 0 0 [::]:sunrpc [::]:* Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 7424585 /tmp/mongodb-27017.sock unix 2 [ ACC ] STREAM LISTENING 24344048 /run/user/1000/systemd/private unix 2 [ ACC ] STREAM LISTENING 7467947 /run/user/1002/systemd/private unix 2 [ ACC ] STREAM LISTENING 7459911 /run/user/1001/systemd/private unix 2 [ ACC ] SEQPACKET LISTENING 7951 /run/udev/control unix 2 [ ACC ] STREAM LISTENING 7885 /run/systemd/journal/stdout unix 2 [ ACC ] STREAM LISTENING 7931 /run/lvm/lvmetad.socket unix 2 [ ACC ] STREAM LISTENING 7952 /run/lvm/lvmpolld.socket unix 2 [ ACC ] STREAM LISTENING 13305 /var/lib/lxd/unix.socket unix 2 [ ACC ] STREAM LISTENING 13303 /run/uuidd/request unix 2 [ ACC ] STREAM LISTENING 13304 /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 13306 /run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 13307 /run/snapd.socket unix 2 [ ACC ] STREAM LISTENING 13308 /run/snapd-snap.socket unix 2 [ ACC ] STREAM LISTENING 14766 @ISCSIADM_ABSTRACT_NAMESPACE unix 2 [ ACC ] STREAM LISTENING 24019 /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 42459 /var/run/mysqld/mysqld.sock unix 2 [ ACC ] STREAM LISTENING 45141 /run/rpcbind.sock |
Après ce résultat, nous pouvons conclure que ce système exécute MySQL et MongoDB.
Vous avez MySQL:
1 2 | tcp 0 0 localhost:mysql *:* LISTEN |
MySQL utilise le port par défaut 3306 et c'est une application assez connue depuis de nombreuses années, donc l'application nous dit immédiatement que c'est le port utilisé par MySQL au lieu du numéro de port
A tu MongoDB:
1 2 | tcp 0 0 localhost:27017 *:* LISTEN |
Mongo est moins connu et beaucoup plus jeune, c'est là que le port nous est affiché 27017
.
Nous pouvons également utiliser netstat -ln
, alors nous obtiendrons une liste de tous les ports sans détecter ce qui est quoi.
Les deux applications ont localhost:
devant le port pour qu'ils n'écoutent que localement, c'est-à-dire qu'ils ne sont pas accessibles de l'extérieur via le réseau. C'est une solution sûre car il vaut mieux ne pas donner accès à notre base de données à des étrangers, même si elle est protégée par mot de passe.
Par exemple, si nous autorisons l'accès de l'extérieur, il se peut qu'à l'avenir il y ait une faille qui vous permet de vous connecter sans mot de passe et nous oublierons la mise à jour et le problème est prêt.
Ici, nous pouvons voir un serveur SSH à l'écoute sur un port standard:
1 2 | tcp 0 0 *:ssh *:* LISTEN |
Il est exposé à l'extérieur, mais SSH est une application éprouvée et d'une manière ou d'une autre, nous devons également accéder au serveur, alors ne vous inquiétez pas trop tant que nous avons un mot de passe long et généré de manière aléatoire ou que nous nous connectons avec une paire de clés (publique et privée).
On a aussi une curiosité au fond:
1 2 | unix 2 [ ACC ] STREAM LISTENING 42459 /var/run/mysqld/mysqld.sock |
C'est un port, mais pas vraiment. C'est une prise (prise de courant) qui permet à l'application de se connecter non pas via une adresse réseau standard mais via un fichier. Certaines applications prennent en charge la connexion via des sockets UNIX, et en voici un exemple. Ces fichiers ne sont en aucun cas exposés au monde, ils sont une bonne solution pour connecter des services sur un serveur avec différents utilisateurs car vous pouvez modifier les droits des utilisateurs sur cette ressource comme n'importe quel autre fichier sur le disque.
Ça ne marche pas!
Si nous n'avons pas une telle commande dans le système comme netstat
, vous devez installer le paquet net-tools
.
Dans le cas de Debian et de ses dérivés, par ex.. Ubuntu exécute simplement ces commandes pour l'installer:
1 2 3 | apt-get update apt-get install net-tools |
Suffisant pour CentOS et autres dérivés RHEL:
1 2 | yum install net-tools |