I.   Présentation

Possédant un serveur hébergé Online.net (mais peu importe) avec Proxmox dessus, je voulais faire ressortir le nombre de scan de ports dessus et afficher quelques statistiques.
Les statistiques porteront sur un « top » de ports les plus bloqués par le pare-feu de proxmox.
Tous les jours, mon script tourne pour lire le fichier delog du pare-feu et stocke dans un autre fichier les ports bloqués et le nombre de fois qu’il le sont.


II.   Ports bloqués

    

 

 


III.   IPs bloquées

 

 


IV.   Description des ports

 

Numéro de ports Protocole Description
21 TCP Utilisé par les serveurs FTP (proftpd)
22 TCP Utilisé par les serveurs SSH (sshd)
23 TCP Utilisé par les serveurs TELNET (telnetd)
80 TCP Utilisé par les serveurs WEB (nginx, apache,…)
1433 TCP Utilisé par les serveurs VPN (OpenVPN)
3306 TCP Utilisé par les serveurs SQL (MariaDB, Mysql, ..)
3389 TCP Utilisé par les serveurs RDP (Bureau à distance)
5060 UDP Utilisé par les serveurs de TOIP (protocole SIP asterisk)
8080 TCP Utilisé par les serveurs PROXY (squid, pve-proxy, …)
45000 UDP/TCP Utilisé par les serveurs TORRENT (rutrrent, transmission, …)

 


V.   Scripts

 

Comme demandé et qu’on est la pour partager 😛 , je montre ici les scripts qui me servent pour faire les statistiques. Ce sont des scripts fais très rapidement qui sont loin d’être optimaux et qui sont sans aucun doute à enrichir.

Voici le script pour lister les ports bloqués, avec une différenciation TCP / UDP:

Pour le télécharger:  Proxmox_list_port_block

 

Explication:  Ce qui nous intéresse dans le c’est cette ligne:

cat /var/log/pve-firewall.log | grep =UDP | cut -d= -f14 | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -n 30 >> $path

 

arguments Signification
grep =UDP recherche le texte « =UDP »
cut -d= -f14 Extrait le contenu, directement après le caractère « = » et seulement le 14ème champs
awk ‘{print$1}’ affiche le 1er champs
sort trie
uniq -c regroupe sans doublon et en affichant le nombre de doublon
sort -nr trie numérique (le nombre de doublon précédent) et tri ensuite dans l’ordre inverse (le plus grand en premier)
head -n 30 n’affiche seulement que les 30 premiers résultat
>>$path ajoute (mais n’efface pas) dans le fichier de log définie dans la variable $path

 

Et celui qui me sert à lister les IPs bloquées:

Pour le télécharger: proxmox_list_ip_block

Explication: Même principe que pour le script précédent

 

Ensuite il suffit de lancer la commande: crontab -e sur notre Proxmox et d’ajouter les lignes suivantes:

59 23 * * * /root/scripts_cron/list_ip_block.sh
59 23 * * * /root/scripts_cron/list_port_block.sh

PS: remplacer le chemin par celui où se trouve votre script.

Dans cette configuration le cron va déclencher à 23H59 tous les jours nos scripts.