Annonce

Réduire
Aucune annonce.

Script bash permettant de récenser et de tuer les services réseau inutiles (TCP)

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Script bash permettant de récenser et de tuer les services réseau inutiles (TCP)

    Salut et bonne année, je suis Rodrigue Daniel

    Voilà, c'est la deuxième fois que je poste ce problème (section Linux). Peut être avec mon script complet, il y'aura une autre solution.
    Bon mon but était de réaliser un script pouvant m'aider à stopper les services réseau inutiles. J'ai complètement fini mon script, mais j'ai rencontré un problème. Lorsque je tue un service réseau via son processus par son PID, il se redemarre automatiquement, et comme mon script a la possibilité de récenser tous les services réseau, alors je constate que rien n'a changé. J'ai même fait le test en direct, d'où j'ai fait ce constat...Bon voilà mon script complet.

    Code:
    #!/bin/bash
    #
    # ssri : Script permettant de stopper les services réseau inutilisés.
    # Rodrigue Daniel (email : [email protected])
    # Mon blog : rodriguedaniel.blogspot.com
    # 14/12/2015
    # Dépendances : netstat
    # Testé sur Ubuntu (14.04,15.04,15.10) et Kali Linux (1.09)
    
    
    set -u
    clear
    
    ###########################################################################################
    # Définitions des couleurs
    RED='\e[1;31m'
    BLUE='\e[1;34m'
    CYAN='\e[1;36m'
    GREEN='\e[1;32m'
    NC='\e[0m'
    
    #echo -ne $RED
    echo -e $BLUE'
    	  		      ____ ____  ____  ___
                                 / ___/ ___||  _ \|_ _|
                                 \___ \___ \| |_) || |
                                  ___) |__) |  _ < | |
                                 |____/____/|_| \_\___|
    
    '$NC
    echo -e $BLUE"\t\t Description : Stopper les Services Réseau Inutilisés"$NC
    echo -e $BLUE"\t\t Auteur      : Rodrigue Daniel (email : [email protected])"$NC
    
    # Vérification du mode root
    if [[ $EUID -ne 0 ]]; then
            echo -e $RED"\n\t Erreur : Ce programme doit être éxécuté en root.\n"$NC
            exit 1
    fi
    
    
    ###########################################################################################
    # Definitions des variables
    choix=""
    reponse="" 
    numPort="" # variable contenant le numero de port saisi par un utilisateur qui souhaite tuer le processus associé au service réseau en cours d'exécution 
    old_IFS="" # variable de sauvegarde du contenu de la variable d'environnement IFS
    resValide1="" ## résultat valide lorsqu'on a trouvé,
    resValide2="" ## + un service, son port
    resValide2="" ## + son numéro de PID
    resValide4="" ## +
    tabNumPort[0]="" # tableau constitué des numéros de port associé aux services réseau
    tabServices[0]="" # tableau constitué des noms de services réseau
    tabProcessusService[0]="" # Fonction constitué des processus associés aux services réseau 
    numTab=0 # variable contenant l'indice des informations (ports,services,processus) valides
    
    ###########################################################################################
    # Definitions des fonctions
    
    aideSsri () # Fonction permettant d'afficher le menu et qui fait office d'aide
    {
    
    	echo -e $CYAN"\n\t a : Afficher tous les services réseau."$NC
    	echo -e $CYAN"\t h : Afficher cet écran d'aide."$NC
    	echo -e $CYAN"\t i : Inviter à entrer le numero de port du service réseau à stopper."$NC
    	echo -e $CYAN"\t q : Quitter le script."$NC
    	echo -e $CYAN"\t t : Stopper tous les services réseau.\n"$NC
    
    }
    
    
    recenserPortsServicesProcessus () # fonction qui permet de recenser tous les services, leurs numeros de port et leur PID 
    {
    
    	numTab=0
    	old_IFS=$IFS
    	IFS=$'\n'
    	(netstat -pano | grep tcp | grep LISTEN) > /dev/null 2>&1
    	if [ $? -eq 0 ] ; then
    		(netstat -pano | grep tcp | grep LISTEN) 2> /dev/null > temporaire
    		for resValide1 in $(cat temporaire) ; do
    			if [ "${resValide1%% *}" != "tcp6" ] ; then # on élimine les lignes contenant tcp6 car en ipv4 ou en ipv6, les ports ne changent pas
    				resValide2="${resValide1#*:}" 
    				resValide3="${resValide1#*/}"
    				resValide4="${resValide1#*N}"
    				tabNumPort[$numTab]="${resValide2%% *}"
    				tabServices[$numTab]="${resValide3%% *}"
    				tabProcessusService[$numTab]="${resValide4%%/*}"
    				numTab=$(($numTab + 1))
    			fi
    		done
    		rm temporaire
    	else
    		echo -e $RED"\t Aucun service n'est démarré.\n"$NC 
    	fi 
    	IFS=$old_IFS
    }
    
    
    afficherTousServicesReseau ()  # Fonction permettant d'afficher tous les services réseau et leurs numeros de port
    {
    
    	recenserPortsServicesProcessus
    	numTab=0
    	echo -e "\n--------------------------------------------------
    		echo -e "\tSERVICES\t|\tPORTS"
    		echo "--------------------------------------------------
    		while [ $numTab -lt ${#tabNumPort[@]} ] ; do
    			echo -ne "\t"${tabServices[$numTab]}"\t\t|\t"
    			echo ${tabNumPort[$numTab]}
    			numTab=$(($numTab + 1))
    		done
    
    	echo -e "\n----------------------------------------------------\n"
    
    }
    
    
    stopperUnServiceReseau () # fonction permettant de stopper un service réseau 
    {
    	recenserPortsServicesProcessus
    	numTab=0
    	echo -ne "\n\t Entrez le numero de port du service à stopper : "
    	read numPort
    	while [ $numTab -lt ${#tabNumPort[@]} ] ; do
    		if [ "$numPort" = "${tabNumPort[$numTab]}" ] ; then
    			kill -9 ${tabProcessusService[$numTab]}
    			sleep 1
    			echo -e $GREEN"\t Opération effectuée avec succès.\n"$NC
    			break
    		elif [ $numTab = $((${#tabNumPort[@]} - 1)) ] ; then
    			echo -e $RED"\t Service non démarré ou Numéro de port inconnu.\n"$NC
    			break
    		fi
    		numTab=$(($numTab + 1))
    	done
    }
    
    
    StopperTousServicesReseau () # Fonction permettant de stopper tous les services réseau
    {
    	recenserPortsServicesProcessus
            numTab=0
    	reponse=""
    	while [ "$reponse" != "n" ] ; do
    		echo -ne "\n\t Etes-Vous sûr de vouloir continuer cette opération? (o/n) : "
    		read reponse
    		if [ "$reponse" = "o" ]; then
    			while [ $numTab -lt ${#tabNumPort[@]} ] ; do
    				kill -9 ${tabProcessusService[$numTab]}
    				numTab=$(($numTab + 1))
    			done
    			sleep 1
    			echo -e $GREEN"\t Opération effectuée avec succès.\n"$NC
    			break
    
    		fi
    	done
    }
    
    
    ###########################################################################################
    # Traitement
    
    aideSsri
    
    while true; do
    	echo -e $CYAN
            echo -n "[SSRI]> "
    	if ! read choix ; then
                    echo $RED"\n\t Saisie Invalide. Appuyer sur la touche h pour consulter l'aide !\n"$NC
            fi
            if [ -z "$choix" ] ; then
                    echo -e $RED"\n\t Saisie Vide. Appuyer sur la touche h pour consulter l'aide !\n"$NC
            fi
         	case $choix in
    
    		a ) afficherTousServicesReseau
    	    	    ;;
    		h ) aideSsri
                        ;;
    		i ) stopperUnServiceReseau
                        ;;
    		q ) break
                        ;;
    		t ) StopperTousServicesReseau
                        ;;
    		* ) echo -e $RED"\n\t Option inconnue. Appuyer sur la touche h pour consulter l'aide !\n"$NC
                        ;;
    	esac
    done
    
    echo -e $BLUE'
    
    		 ____
                    / __ \   _     _     _     _     _     _     _
                   / / _  |_| |_ _| |_ _| |_ _| |_ _| |_ _| |_ _| |_
                  | | (_| |_   _|_   _|_   _|_   _|_   _|_   _|_   _|
                   \ \__ _| |_|   |_|   |_|   |_|   |_|   |_|   |_|
                    \____/
    
    '$NC
    
    exit 0
    Merci
    Dernière modification par rodrigue daniel, 02 janvier 2016, 08h51.
    Passionné par la Sécurité Informatique.
    Le véritable ennemi de la connaissance n'est pas l'ignorance mais l'illusion de la connaissance.
    La quête de la connaissance passe d'abord par l'humilité et ensuite la détermination.

  • #2
    Le souci c'est que ton script est pas pour systemd c'est logique qu'il redémarre si tu le tue avec kill car il y a un demon qui surveille cela et qui relance automatiquement le service tué.

    C'est soit service <service> stop soit systemctl stop <service>

    Doc: https://fedoraproject.org/wiki/SysVi...emd_Cheatsheet
    WITHOUT DEVIATION FROM THE NORM, PROGRESS IS NOT POSSIBLE
    -Frank Zappa

    Commentaire


    • #3
      Utilise aussi fuser plutôt que netstat

      Commentaire


      • #4
        Simple remarque stupide au passage :

        Dans la fonction où tu fais ton netstat, tu devrais éviter de le faire deux fois.
        Ca ne change pas grand chose mais c'est plus joli dirons nous.

        Commentaire


        • #5
          Pour cette ligne
          Code:
          if [ "${resValide1%% *}" != "tcp6" ] ; then # on élimine les lignes contenant tcp6 car en ipv4 ou en ipv6, les ports ne changent pas
          si tu rajoute un espace après tcp dans ton grep ça filtre directement

          exemple:

          Code:
          netstat -pano | grep "tcp " | awk '{print$7}'
          sera différent de

          Code:
          netstat -pano | grep "tcp" | awk '{print$7}'
          Tu peux également regarder du coté de ss

          Code:
          ss -tp4 | grep ESTAB
          Code:
          ss -tp4 | grep ESTAB | awk -F'"' '{print $2}'
          Code:
          ss -tp4 | grep ESTAB | awk -F',' '{print $2}'
          WITHOUT DEVIATION FROM THE NORM, PROGRESS IS NOT POSSIBLE
          -Frank Zappa

          Commentaire


          • #6
            Salut à tous,
            j'ai un peu amélioré mon script selon vos préconisations (Iddl3, Anonyme77).
            Mais depuis ce temps (7 jours), j'ai fait les recherches, j'ai constaté que certains services réseau (qui écoute sous un port) sous linux
            ne sont pas réconnu par la commande "service". et ceux là ne peuvent pas être tués par le PID de leur processus, d'autres peuvent être tués
            par leur PID; d'autres ne figurent pas dans le répertoire /etc/init.d/ (tout ce mélange me dérange un peu).
            Je fait une dernière recherche et test, et je produis un code d'ici lundi...
            Les gars, J'attend encore vos propositions...
            MERCI
            Passionné par la Sécurité Informatique.
            Le véritable ennemi de la connaissance n'est pas l'ignorance mais l'illusion de la connaissance.
            La quête de la connaissance passe d'abord par l'humilité et ensuite la détermination.

            Commentaire

            Chargement...
            X