Advertisement
Tlams

[Beta]Openvpn_install_script

Mar 1st, 2013
558
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 31.39 KB | None | 0 0
  1. #!/bin/bash
  2. # Auteur : Tlams
  3. # Date : 13/02/13
  4. # Script description : Permet de monter un serveur OPENVPN de façon guidé !
  5.  
  6. ############# Liste des fonctions:###############
  7. ## Menu: Permet d'afficher le menu de choix
  8. ## downloadopenvpn: Permet de télécharger OpenVPN
  9. ## config_openvpn: Configuration de OPENVPN
  10. ## conf_var: Permet de modifier les variables du fichier "var" afin d'avoir certaines configurations prè-enregistrés lors de la création d'un certificat.
  11. ## cree_files_server: Génère les fichiers de base du serveur (Certif,key,dh...)
  12. ## creer_client: Permet de créer un client OpenVPN (Génère Key et crt)
  13. ## revoke_user: Permet de bloquer un utilisateur
  14. ## creerfichieropenvpn: Permet de générer un fichier de configuration openvpn directement utilisable.
  15. ## installpureftp: Permet d'installer un serveur FTP pour récupérer les fichiers des clients facilement.
  16. ## ftp_creer_user: Creer un utilisateur pour le serveur FTP
  17. ## ftp_modif_pw: Permet de modifier le mot de passe d'un utilisateur FTP
  18. ## transfertfichier_client: Permet de transférer (copier) les fichiers clients d'openvpn sur le dossier de l'utilisateur FTP.
  19. ## choplip: Permet de récupérer automatiquement l'adresse IP publique du serveur
  20. ## validationIP: Permet de valider une adresse IP rentré par un utilisateur.
  21. ## connexiontest: Test permettant de déterminer si une connexion internet est présente, pour le téléchargement des paquets.
  22. ## config_firewall: Créer un fichier de configuration (firewall) qui applique les régles des bases du pare feu.
  23. ## reboot: Permet de redémarrer le serveur
  24. ## mailto: permet d'envoyer un email
  25. ## genere_fichier_var_ini: Permet de créer le fichier qui sauvegarde les configurations
  26. ## write_ini: Modifie les variables de config
  27. #################################################
  28.  
  29. # Voir ajout GZ L 487/665
  30. menu()
  31. {
  32.     echo "********************"
  33.     echo "********MENU********"
  34.     echo "********************"
  35.     echo "1/ Installation d'OpenVPN"
  36.     echo "2/ Modification-Correction de paramettres"
  37.     #echo "3/ Documentation"
  38.     echo "4/ Quitter"
  39.     read Choix
  40.      
  41.     case "$Choix" in
  42.         1 )
  43.         connexiontest
  44.         echo "***************************"
  45.         echo "**Installation de OPENVPN**"
  46.         echo "***************************"
  47.         echo -e "\033[33m
  48. Près-requis:
  49. - Une connexion internet " $internet "
  50. - Connaitre son ip publique (Taper: ipconfig)
  51. - Connaitre le nom de sa carte réseau connecté au routeur fournissant une connexion internet (Taper: ipconfig)
  52. - Connaitre le nom de son server (Taper: hostname)
  53.         \033[0m"
  54.        
  55.         if [ "$internet_result" = "FALSE" ]; then
  56.             echo "Aucune connexion internet n'a été trouvé !"
  57.             echo "Il faut corriger ce problème avant de pouvoir aller plus loin"
  58.             echo "Arret du script"
  59.             exit 0
  60.         fi
  61.        
  62.         st_install_g=""
  63.         while [ "$st_install_g" != "y" ] && [ "$st_install_g" != "Y" ] && [ "$st_install_g" != "N" ] && [ "$st_install_g" != "n" ]
  64.         do
  65.             echo -n -e "\033[1mVoulez-vous lancer l'installation maintenant? (Y/N): \033[0m"
  66.             read st_install_g
  67.         done
  68.  
  69.         if [ "$st_install_g" = "y" ] || [ "$st_install_g" = "Y" ]; then
  70.             source /etc/openvpn/conf.ini
  71.             re_install_g=""
  72.             Continuer=1
  73.            
  74.             dpkg -l "openvpn" > /dev/null 2>&1
  75.             INSTALLEDOPENVPN=$?
  76.             if [ $INSTALLEDOPENVPN == '0' ]; then
  77.                 while [ "$re_install_g" != "y" ] && [ "$re_install_g" != "Y" ] && [ "$re_install_g" != "N" ] && [ "$re_install_g" != "n" ]
  78.                     do
  79.                         echo -e "\033[33Il semblerait qu'une installation soit déjà présente, il n'est pas conseillé de re-installer par dessus ! \033[0m"
  80.                         echo -e -n  "\033[1mVoulez-vous lancer l'installation maintenant? (Y/N): \033[0m"
  81.                         read re_install_g
  82.                     done   
  83.                 if [ "$re_install_g" = "N" ] && [ "$re_install_g" = "n" ];  then       
  84.                     Continuer=0
  85.                 fi 
  86.             fi
  87.            
  88.             if [ "$Continuer" = 1 ]; then
  89.                 downloadopenvpn
  90.                 conf_var
  91.                 config_openvpn
  92.                 cree_files_server
  93.                 creer_client
  94.                 creerfichieropenvpn
  95.                 mailto
  96.                 installpureftp             
  97.                 if [ "$v_ftp_install" = 1 ]; then      
  98.                     ftp_creer_user
  99.                 fi 
  100.                 config_firewall
  101.                 /etc/init.d/openvpn restart
  102.                 echo "Installation du serveur OPENVPN terminé."   
  103.                 echo "Rappels:"
  104.                 echo "Emplacement des fichiers clients: //etc/openvpn/easy-rsa/2.0/keys/clients/"
  105.                 echo "Connexion sftp: sftp://root@"$v_sys_publicIP
  106.                 if [ "$v_ftp_install" = 1 ]; then      
  107.                     echo "Connexion ftp - User:"$v_ftp_user" / IP:" $MONIP
  108.                 fi 
  109.             else
  110.                 echo "Installation annulé ! Retour au menu"
  111.                 menu
  112.             fi     
  113.         elif [ "$st_install_g" = "n" ] || [ "$st_install_g" = "N" ]; then
  114.             echo "Installation annulé ! Retour au menu"
  115.             menu
  116.         fi
  117.         ;;
  118.  
  119.         2 )
  120.         dpkg -l "openvpn" > /dev/null 2>&1
  121.         INSTALLEDOPENVPN=$?
  122.         if [ $INSTALLEDOPENVPN != '0' ]; then
  123.             echo "Aucune installation d'openvpn détecté! Certaines fonctions ne seront pas correctement fonctionnelles"
  124.         fi
  125.        
  126.        
  127.         echo "  1/ Modifier le certificat"
  128.         echo "  2/ Ajouter un client."
  129.         echo "  3/ Supprimer un client."
  130.         echo "  4/ Modifier le mot de passe utilisateur FTP."
  131.         echo "  5/ Modifier la configuration du pare-feu."
  132.         echo "  6/ Modifier la configuration d'OPENVPN."
  133.         echo "  7/ Mettre à jour les fichiers clients sur le serveur FTP"
  134.         echo "  0/ Retour menu"
  135.         read modifcorrect
  136.         case "$modifcorrect" in
  137.             0 )
  138.                 menu
  139.             ;;
  140.             1 )
  141.             source /etc/openvpn/conf.ini
  142.             v_modif_certif=""
  143.             while [ "$v_modif_certif" != "y" ] && [ "$v_modif_certif" != "Y" ] && [ "$v_modif_certif" != "N" ] && [ "$v_modif_certif" != "n" ]
  144.             do
  145.                 echo "Si vous modifiez le certificat, TOUS vos clients actuels seront invalides ! Continuer?(Y/N) "
  146.                 read v_modif_certif
  147.             done
  148.             if [ "$v_modif_certif" = "y" ] || [ "$v_modif_certif" = "Y" ]; then
  149.                 conf_var
  150.                 cree_files_server
  151.             else
  152.                 echo "Opération annulé"
  153.             fi
  154.             menu
  155.             ;;
  156.             2 )
  157.             source /etc/openvpn/conf.ini
  158.             creer_client
  159.             creerfichieropenvpn
  160.             mailto
  161.             if [ "$v_ftp_install" = 1 ] ; then
  162.                 transfertfichier_client
  163.             fi
  164.             menu;;
  165.             3 ) revoke_user
  166.             menu;;
  167.             4 )
  168.             source /etc/openvpn/conf.ini
  169.             ftp_modif_pw
  170.             menu;;
  171.             5 )
  172.             source /etc/openvpn/conf.ini
  173.             config_firewall
  174.             menu;;
  175.             6 )
  176.             v_modif_openvpn=""
  177.             while [ "$v_modif_openvpn" != "y" ] && [ "$v_modif_openvpn" != "Y" ] && [ "$v_modif_openvpn" != "N" ] && [ "$v_modif_openvpn" != "n" ]
  178.             do
  179.                 echo "Si vous modifiez le certificat, TOUS vos clients actuels seront invalides ! Continuer?(Y/N) "
  180.                 read v_modif_openvpn
  181.             done
  182.             if [ "$v_modif_openvpn" = "y" ] || [ "$v_modif_openvpn" = "Y" ]; then
  183.                  config_openvpn
  184.             else
  185.                 echo "Opération annulé"
  186.             fi
  187.             menu;;
  188.             7 )
  189.             source /etc/openvpn/conf.ini
  190.             transfertfichier_client
  191.             menu;;
  192.             * ) echo "Réponse incorrecte! - Arrêt du script";;
  193.         esac   
  194.         ;;
  195.         3 ) echo "RTFM !";;
  196.         4 ) exit 0;;
  197.         * ) echo "Réponse incorrecte! - Arrêt du script";;
  198.     esac
  199. }
  200.  
  201. genere_fichier_var_ini()
  202. {
  203.  
  204.     if [ ! -d "/etc/openvpn" ]; then
  205.         mkdir /etc/openvpn
  206.         echo "Création du dossier openvpn"
  207.     fi
  208.  
  209.     fichier_var="/etc/openvpn/conf.ini"
  210.     if [ ! -e "$fichier_var" ]; then
  211.         echo 'v_openvpn_port=' >> $fichier_var
  212.         echo 'v_openvpn_reseau=' >> $fichier_var
  213.         echo 'clienttoclient=' >> $fichier_var
  214.         echo 'v_openvpn_masque=' >> $fichier_var
  215.         echo 'v_sys_publicIP=' >> $fichier_var
  216.         echo 'v_sys_localIP=' >> $fichier_var
  217.         echo 'v_ftp_user=' >> $fichier_var
  218.         echo 'v_openvpn_internet=' >> $fichier_var
  219.         echo 'v_sys_cartenom=' >> $fichier_var
  220.         echo 'v_ftp_install=' >> $fichier_var
  221.         echo 'install_g=' >> $fichier_var
  222.     fi
  223. }
  224.  
  225.  
  226. write_ini()
  227. {
  228.     clef=`echo $1 | sed 's/%/\\\%/g'`
  229.     valeur=`echo $2 | sed 's/%/\\\%/g'`
  230.     sed -r "s%(^[ $'\t']*$clef[ $'\t']*=[ $'\t']*).*\$%\1$valeur%" $3  -i
  231. }
  232.  
  233. downloadopenvpn() #Permet de télécharger OPENVPN
  234. {
  235.     write_ini "install_g" "1" "/etc/openvpn/conf.ini"
  236.     echo   "Mise à jours liste des paquets"
  237.     apt-get update
  238.     echo   "Téléchargement des fichiers openvpn..."
  239.     apt-get install openvpn
  240.     dpkg -l "openvpn" > /dev/null 2>&1
  241.     INSTALLEDOPENVPN=$?
  242.     if [ $INSTALLEDOPENVPN != '0' ]; then
  243.         echo "Arret de l'installation"
  244.         exit 0
  245.     fi
  246.    
  247.     echo   "Téléchargement des fichiers Mutt..."
  248.     apt-get install mutt
  249.    
  250.     dpkg -l "mutt" > /dev/null 2>&1
  251.     INSTALLEMUTT=$?
  252.     if [ $INSTALLEMUTT != '0' ]; then
  253.         echo "Arret de l'installation"
  254.         exit 0
  255.     fi
  256.    
  257.     cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
  258. }
  259.  
  260. config_openvpn() #Configuration du serveur openvpn
  261. {
  262.     v_openvpn_port=""
  263.     v_openvpn_reseau=""
  264.     clienttoclient=""
  265.     v_openvpn_masque=""
  266.     v_sys_publicIP=""
  267.     echo "Configuration du serveur OpenVPN"
  268.    
  269.     while [ -z "${v_openvpn_port}" ] || ! [ "$v_openvpn_port" -eq "$v_openvpn_port" ] 2>/dev/null
  270.     do
  271.         echo -e "\033[1mQuel port d'écoute utiliser? (Conseil: 1194) \033[0m"
  272.         echo -e "\033[33mVous pouvez aussi utiliser un port du type 443 afin d'optimiser les chances de disponibilité à partir de n'importe quel réseau. \033[0m"
  273.         read v_openvpn_port
  274.     done
  275.  
  276.     while [ -z "${v_openvpn_reseau}" ] || [ "$valideIP" != "TRUE" ]
  277.     do
  278.         echo -e "\033[1mQuel réseau pour vos clients? (Conseil: 10.8.0.0) \033[0m"
  279.         echo -e "\033[33mIl s'agit d'une adresse réseau ! Pas d'une Ip de poste !\033[0m"
  280.         read v_openvpn_reseau
  281.         validationIP $v_openvpn_reseau
  282.     done
  283.    
  284.    
  285.     while [ "$clienttoclient" != "y" ] && [ "$clienttoclient" != "Y" ] && [ "$clienttoclient" != "N" ] && [ "$clienttoclient" != "n" ]
  286.         do 
  287.         echo -e "\033[1mVoulez-vous que les clients puissent ce voir?(Y/N) \033[0m"
  288.         echo -e "\033[33mPermet aux clients de communiquer(comme dans un réseau local)\033[0m"
  289.         read clienttoclient
  290.     done
  291.  
  292.     while [ -z "${v_openvpn_masque}" ] || [ "$valideIP" != "TRUE" ]
  293.     do
  294.         echo -n -e "\033[1mMasque réseau? (Conseil: 255.255.255.0) \033[0m"
  295.         read v_openvpn_masque
  296.         validationIP $v_openvpn_masque
  297.     done
  298.    
  299.     while [ -z "${v_sys_publicIP}" ] || [ "$valideIP" != "TRUE" ]
  300.         do
  301.             echo -e "\033[1mQuelle est l'ip publique de votre serveur? \033[0m"
  302.             choplip
  303.             echo -e "\033[33mIl a été détecté <"$MONIP"> comme étant votre IP publique.\033[0m"
  304.             read v_sys_publicIP
  305.             validationIP $v_sys_publicIP
  306.         done
  307.    
  308.     echo -n -e "\033[1mVotre IP publique est elle directement attribué à votre carte réseau?(Y/N)\033[0m"
  309.     read sys_carte_ip
  310.     if [ "$sys_carte_ip" = "y" ] || [ "$sys_carte_ip" = "Y" ]; then
  311.         v_sys_localIP=$v_sys_publicIP
  312.     else
  313.         while [ -z "${v_sys_localIP}" ] || [ "$valideIP" != "TRUE" ]
  314.         do
  315.             echo -e "\033[1mQuelle est l'ip locale de votre serveur? \033[0m"
  316.             read v_sys_localIP
  317.             validationIP $v_sys_localIP
  318.         done
  319.     fi
  320.  
  321.     echo "Ecriture du fichier..."
  322.     Fichier_conf_rep="/etc/openvpn/"$HOST".conf"
  323.     if [ -e "$Fichier_conf_rep" ]; then
  324.         rm $Fichier_conf_rep
  325.     fi
  326.    
  327.     write_ini "v_openvpn_port" "$v_openvpn_port" "/etc/openvpn/conf.ini"
  328.     write_ini "v_openvpn_reseau" "$v_openvpn_reseau" "/etc/openvpn/conf.ini"
  329.     write_ini "v_openvpn_masque" "$v_openvpn_masque" "/etc/openvpn/conf.ini"
  330.     write_ini "v_sys_publicIP" "$v_sys_publicIP" "/etc/openvpn/conf.ini"
  331.     write_ini "v_sys_localIP" "$v_sys_localIP" "/etc/openvpn/conf.ini"
  332.    
  333.      echo 'mode server' >> $Fichier_conf_rep
  334.      echo 'local' $v_sys_localIP >> $Fichier_conf_rep
  335.      echo 'port' $v_openvpn_port >> $Fichier_conf_rep
  336.      echo 'proto udp' >> $Fichier_conf_rep
  337.      echo 'dev tun' >> $Fichier_conf_rep
  338.      echo 'ca ca.crt' >> $Fichier_conf_rep
  339.      echo 'cert '$HOST'.crt' >> $Fichier_conf_rep
  340.      echo 'key '$HOST'.key' >> $Fichier_conf_rep
  341.      echo 'dh dh1024.pem' >> $Fichier_conf_rep
  342.      echo 'server' $v_openvpn_reseau $v_openvpn_masque >> $Fichier_conf_rep
  343.      echo 'cipher BF-CBC' >> $Fichier_conf_rep
  344.      echo 'comp-lzo' >> $Fichier_conf_rep
  345.      echo 'persist-key' >> $Fichier_conf_rep
  346.      echo 'persist-tun' >> $Fichier_conf_rep
  347.      echo 'status openvpn-status.log' >> $Fichier_conf_rep
  348.      echo 'verb 3' >> $Fichier_conf_rep
  349.      echo 'tun-mtu 1500' >> $Fichier_conf_rep
  350.      echo 'tun-mtu-extra 32' >> $Fichier_conf_rep
  351.      echo 'mssfix 1450' >> $Fichier_conf_rep
  352.      echo 'push "redirect-gateway def1"' >> $Fichier_conf_rep
  353.      echo 'push "dhcp-option DNS 8.8.8.8"' >> $Fichier_conf_rep
  354.      echo 'push "dhcp-option DNS 208.67.220.220"' >> $Fichier_conf_rep
  355.      echo 'keepalive 10 120' >> $Fichier_conf_rep
  356.      echo 'crl-verify crl.pem' >> $Fichier_conf_rep #A VOIR    
  357.     if [ "$clienttoclient" = "y" ] || [ "$clienttoclient" = "Y" ]; then
  358.         echo 'client-to-client' >> $Fichier_conf_rep
  359.         write_ini "clienttoclient" "1" "/etc/openvpn/conf.ini"
  360.     else
  361.         write_ini "clienttoclient" "0" "/etc/openvpn/conf.ini"
  362.     fi 
  363. }
  364.  
  365. conf_var() #Permet de déf des variables de bases pour la création des certif. (Non utilisé pour le moment)
  366. {
  367.     v_certif_pays=""
  368.     v_certif_province=""
  369.     v_certif_ville=""
  370.     v_certif_org=""
  371.     v_certif_org=""
  372.     v_certif_email=""
  373.     while [ -z "${v_certif_pays}" ] || [ ${#v_certif_pays} != 2 ]
  374.     do
  375.         echo -n -e "\033[1mIndice de votre pays?(Exemple:FR - Limite de 2 caractère): \033[0m"
  376.         read v_certif_pays
  377.     done
  378.  
  379.     while [ -z "${v_certif_province}" ]
  380.     do
  381.         echo -n -e "\033[1mVotre province?:\033[0m "
  382.         read v_certif_province
  383.     done
  384.  
  385.     while [ -z "${v_certif_ville}" ]
  386.     do
  387.         echo -n -e "\033[1mVotre ville?:\033[0m "
  388.         read v_certif_ville
  389.     done
  390.    
  391.     while [ -z "${v_certif_org}" ]
  392.     do
  393.         echo -n -e "\033[1mVotre organisation?:\033[0m "
  394.         read v_certif_org
  395.     done
  396.    
  397.     while [ -z "${v_certif_email}" ] ||  [[ "$v_certif_email" != *"@"* ]]
  398.     do
  399.         echo -n -e "\033[1mVotre email?  \033[0m"
  400.         read v_certif_email
  401.     done
  402.    
  403.     write_ini 'export KEY_COUNTRY' '"'$v_certif_pays'"' '/etc/openvpn/easy-rsa/2.0/vars'
  404.     write_ini 'export KEY_PROVINCE' '"'$v_certif_province'"' '/etc/openvpn/easy-rsa/2.0/vars'
  405.     write_ini 'export KEY_CITY' '"'$v_certif_ville'"' '/etc/openvpn/easy-rsa/2.0/vars'
  406.     write_ini 'export KEY_ORG' '"'$v_certif_org'"' '/etc/openvpn/easy-rsa/2.0/vars'
  407.     write_ini 'export KEY_EMAIL' '"'$v_certif_email'"' '/etc/openvpn/easy-rsa/2.0/vars'
  408.     echo "Données enregistrés"
  409. }
  410.  
  411.  
  412.  
  413. cree_files_server() #Permet de creer les fichiers de base du serveur (ca, key..)
  414. {
  415. ecrase_file=""
  416.     echo "Création du certificat serveur..."
  417.     if [ -e "/etc/openvpn/ca.crt" ]; then
  418.         while [ "$ecrase_file" != "y" ] && [ "$ecrase_file" != "Y" ] && [ "$ecrase_file" != "N" ] && [ "$ecrase_file" != "n" ]
  419.         do
  420.             echo "Il semblerait qu'un certificat existe déjà, si vous continuez le procéssus, il sera écrasé par le nouveau."
  421.             echo "Tous les clients devront mettre à jour leurs fichiers"
  422.             echo -n -e "\033[1mVoulez-vous continuer (Y/N)? \033[0m"
  423.             read ecrase_file
  424.         done
  425.     fi 
  426.    
  427.     if [ "$ecrase_file" != "n" ] && [ "$ecrase_file" != "N" ]; then
  428.         if [ -e "/etc/openvpn/ca.crt" ]; then
  429.             rm /etc/openvpn/ca.crt
  430.         fi
  431.         if [ -e "/etc/openvpn/keys/ca.key" ]; then
  432.             rm /etc/openvpn/keys/ca.key
  433.         fi
  434.         if [ -e "/etc/openvpn/keys/dh1024.pem" ]; then
  435.             rm /etc/openvpn/keys/dh1024.pem
  436.         fi
  437.         if [ -e "/etc/openvpn/$v_system_name.key" ]; then
  438.             rm /etc/openvpn/$HOST.key
  439.         fi
  440.         if [ -e "/etc/openvpn/$v_system_name.crt" ]; then
  441.             rm /etc/openvpn/$HOST.crt
  442.         fi
  443.        
  444.         #Lignes pour le générer...
  445.         cd /etc/openvpn/easy-rsa/2.0
  446.         . /etc/openvpn/easy-rsa/2.0/vars
  447.         . /etc/openvpn/easy-rsa/2.0/clean-all
  448.         . /etc/openvpn/easy-rsa/2.0/build-ca
  449.         echo "Certificat serveur crée !"  
  450.         echo "Création de la clé serveur..."
  451.        
  452.         #Ligne de création
  453.         . /etc/openvpn/easy-rsa/2.0/build-key-server $HOST
  454.         echo "Clée serveur crée!"
  455.         echo "Création du fichier Diffie Hellman..."
  456.         #Ligne de création Diffie Hellman.
  457.         . /etc/openvpn/easy-rsa/2.0/build-dh
  458.        
  459.         echo "Mise en place des fichiers..."
  460.         #Déplacement des fichiers du serveur
  461.         cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/ca.crt
  462.         cp /etc/openvpn/easy-rsa/2.0/keys/ca.key /etc/openvpn/ca.key
  463.         cp /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/dh1024.pem
  464.         cp /etc/openvpn/easy-rsa/2.0/keys/$HOST.key /etc/openvpn/$HOST.key
  465.         cp /etc/openvpn/easy-rsa/2.0/keys/$HOST.crt /etc/openvpn/$HOST.crt
  466.         echo "Tous les fichiers sont en place."
  467.     else
  468.         echo "Création du certificat serveur annulé !"
  469.     fi
  470.    
  471.     #Importation d'un certificat bidon (Fichier ne peut pas être vide)
  472.     echo "Téléchargement d'un certificat bidon..."
  473.     cd /etc/openvpn/
  474.     wget http://pastebin.com/raw.php?i=fs5DYbeT
  475.     mv raw.php?i=fs5DYbeT crl.pem
  476. }
  477.  
  478.  
  479. creer_client() #Permet de creer un client openvpn
  480. {
  481. v_nom_clientP=""
  482.     while [ -z "${v_nom_clientP}" ]
  483.     do 
  484.         echo -n -e "\033[1mCréation du client... Quel nom voulez-vous lui donner? \033[0m"
  485.         read v_nom_clientP
  486.     done
  487.    
  488.     #permet de détecter si le nom est déjà utilisé ou pas
  489.     if [ -e "/etc/openvpn/easy-rsa/2.0/keys/clients/"$v_nom_clientP".crt" ]; then
  490.             echo "Ce client existe déjà !"
  491.     else
  492.         cd /etc/openvpn/easy-rsa/2.0
  493.         source ./vars
  494.         . /etc/openvpn/easy-rsa/2.0/build-key $v_nom_clientP
  495.         echo "Client $v_nom_clientP crée"
  496.  
  497.         if [ ! -d "/etc/openvpn/easy-rsa/2.0/keys/clients" ]; then
  498.         mkdir /etc/openvpn/easy-rsa/2.0/keys/clients
  499.         echo "Création du dossier clients"
  500.        
  501.         fi
  502.         #GZ les deux fichiers
  503.         cp /etc/openvpn/easy-rsa/2.0/keys/$v_nom_clientP.crt /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.crt
  504.         cp /etc/openvpn/easy-rsa/2.0/keys/$v_nom_clientP.key /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.key
  505.         echo "Les fichiers sont en attentes dans: /etc/openvpn/easy-rsa/2.0/keys/clients/"
  506.     fi
  507. }
  508.  
  509. revoke_user() #Permet de bloquer l'utilisation d'un certificat client
  510. {
  511. revokclient=""
  512. while [ -z "${revokclient}" ]
  513.     do
  514.         echo -n -e "\033[1mNom du client à supprimer:\033[0m "
  515.         read revokclient
  516.     done   
  517. cd /etc/openvpn/easy-rsa/2.0
  518. source ./vars #Charge les var
  519. ./revoke-full $revokclient
  520. cp keys/crl.pem /etc/openvpn/
  521. }
  522.  
  523.  
  524. creerfichieropenvpn() #Permet de générer un fichier de configuration openvpn directement utilisable.
  525. {
  526.     #Création du fichier ovpn client.
  527.     confuseropenvpn="/etc/openvpn/easy-rsa/2.0/keys/clients/"$v_nom_clientP".ovpn"
  528.    
  529.     #Config Ip + Port
  530.     echo "remote" $v_sys_publicIP $v_openvpn_port  >> $confuseropenvpn
  531.     echo "<ca>" >> $confuseropenvpn
  532.    
  533.     #Récupere les données du Certificat serveur et les mets dans le fichier de configuration ...
  534.     while read ca
  535.     do  
  536.        echo -e "$ca" >> $confuseropenvpn  
  537.     done < /etc/openvpn/ca.crt
  538.    
  539.     echo "</ca>" >> $confuseropenvpn
  540.     echo "<cert>" >> $confuseropenvpn
  541.    
  542.     #Récupere les données du Certificat client et les mets dans le fichier de configuration ...
  543.     while read cert  
  544.     do  
  545.        echo -e "$cert" >> $confuseropenvpn  
  546.     done < /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.crt
  547.    
  548.     echo "</cert>" >> $confuseropenvpn
  549.     echo "<key>" >> $confuseropenvpn   
  550.    
  551.     #Récupere les données de la Key client et les mets dans le fichier de configuration ...
  552.     while read key
  553.     do  
  554.        echo -e "$key" >> $confuseropenvpn  
  555.     done < /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.key
  556.    
  557.     echo "</key>" >> $confuseropenvpn
  558.    
  559.     #Configurations générales du client...
  560.     echo "client" >> $confuseropenvpn
  561.     echo "dev tun" >> $confuseropenvpn
  562.     echo "proto udp" >> $confuseropenvpn
  563.     echo "resolv-retry infinite" >> $confuseropenvpn
  564.     echo "nobind" >> $confuseropenvpn
  565.     echo "persist-key" >> $confuseropenvpn
  566.     echo "persist-tun" >> $confuseropenvpn
  567.     echo "mute-replay-warnings" >> $confuseropenvpn
  568.     echo "cipher BF-CBC" >> $confuseropenvpn
  569.     echo "comp-lzo" >> $confuseropenvpn
  570.     echo "verb 5" >> $confuseropenvpn
  571. }
  572.  
  573.  
  574.  
  575. installpureftp() #Installe le serveur FTP pour récuperer les fichiers clients
  576. {
  577. st_install_ftp=""
  578.     echo -e "\033[33m Afin de récuperer les fichiers clients vous pouvez installer un serveur FTP.\033[0m"
  579.     while [ "$st_install_ftp" != "y" ] && [ "$st_install_ftp" != "Y" ] && [ "$st_install_ftp" != "N" ] && [ "$st_install_ftp" != "n" ]
  580.     do 
  581.         echo -e "\033[1mVoulez-vous installer pure-ftp maitenant? (Y/N) \033[0m"
  582.         echo -e "\033[33m-Si vous possédez déjà un serveur FTP l'installation d'un second est très fortement déconseillé !  
  583. -Si votre serveur est disponible sur votre réseau local vous pouvez opter pour un partage de fichier.\033[0m"
  584.         read st_install_ftp
  585.     done
  586.  
  587.     if [ "$st_install_ftp" = "y" ] || [ "$st_install_ftp" = "Y" ]; then
  588.         echo "Installation du serveur ftp..."
  589.         apt-get install pure-ftpd-common
  590.        
  591.         dpkg -l "pure-ftpd-common" > /dev/null 2>&1
  592.         INSTALLEDftpd=$?
  593.         if [ $INSTALLEDftpd = '0' ]; then
  594.             echo "Création du groupe..."
  595.             groupadd ftpgroup
  596.             echo "Mise en place des droits..."
  597.             useradd -g ftpgroup -d /dev/null -s /usr/sbin/nologin ftpuser
  598.             echo 'yes' >> /etc/pure-ftpd/conf/NoAnonymous
  599.             echo 'yes' >> /etc/pure-ftpd/conf/ChrootEveryone
  600.             echo 'yes' >> /etc/pure-ftpd/conf/CreateHomeDir
  601.             echo 'yes' >> /etc/pure-ftpd/conf/AntiWarez
  602.             write_ini "v_ftp_install" "1" "/etc/openvpn/conf.ini"
  603.             v_ftp_install=1    
  604.         else
  605.             "Arret de l'installation de pureftp"
  606.         fi         
  607.     else
  608.         echo "Vous devrez les récuperer par vos propres moyens !"
  609.         write_ini "v_ftp_install" "0" "/etc/openvpn/conf.ini"
  610.     fi
  611. }
  612.  
  613. ftp_creer_user() #Creer l'utilisateur FTP.
  614. {
  615. v_ftp_user=""
  616. while [ -z "${v_ftp_user}" ]
  617.         do
  618.             echo -n -e "\033[1mQuel nom d'utilisateur pour votre compte ftp?\033[0m"
  619.             read v_ftp_user
  620.         done
  621.         echo "Création de l'utilisateur..."
  622.         mkdir /home/virtual_ftp_users
  623.         mkdir /home/virtual_ftp_users/$v_ftp_user
  624.         pure-pw useradd $v_ftp_user -u ftpuser -g ftpgroup -d /home/virtual_ftp_users/$v_ftp_user      
  625.         write_ini "v_ftp_user" "$v_ftp_user" "/etc/openvpn/conf.ini"       
  626.         pure-pw mkdb
  627.         echo "Application des modifications..."
  628.         ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure    
  629.         transfertfichier_client
  630.         /etc/init.d/pure-ftpd restart
  631. }
  632.  
  633. ftp_modif_pw() #Permet de modifier le mot de passe d'un compte FTP
  634. {
  635. v_ftp_user_modif=""
  636.         echo "Modification du mot de passe"
  637.         source /etc/openvpn/conf.ini
  638.         while [ "$userftpmodfpw" != "y" ] && [ "$userftpmodfpw" != "Y" ] && [ "$userftpmodfpw" != "N" ] && [ "$userftpmodfpw" != "n" ]
  639.         do 
  640.             echo -e "\033[1m"$v_ftp_user" est-il bien votre utilisateur FTP? (Y/N) \033[0m"
  641.             read userftpmodfpw
  642.         done
  643.        
  644.         if [ "$userftpmodfpw" = "y" ] || [ "$userftpmodfpw" = "Y" ]; then
  645.             pure-pw passwd $v_ftp_user -m
  646.             pure-pw mkdb
  647.  
  648.             # Password
  649.             echo "Application des modifications..."
  650.             ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure    
  651.             /etc/init.d/pure-ftpd restart      
  652.         else
  653.             while [ -z "${v_ftp_user_modif}" ]
  654.             do
  655.                 echo -n -e "\033[1mQuel nom d'utilisateur ?033[0m"
  656.                 read v_ftp_user_modif
  657.             done   
  658.             pure-pw passwd $v_ftp_user -m
  659.             pure-pw mkdb
  660.  
  661.             # Password
  662.             echo "Application des modifications..."
  663.             ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure    
  664.             /etc/init.d/pure-ftpd restart
  665.         fi
  666. }
  667.  
  668. transfertfichier_client() #Permet de transferer les fichiers clients (.ovpn,ca,key...) dans le dossier du serveur ftp
  669. {
  670.  
  671.     while [ -z "${v_ftp_user}" ]
  672.         do
  673.             echo -n -e "\033[1mQuel est le nom utilisateur de votre compte ftp?"$v_ftp_user"\033[0m"
  674.         read v_ftp_user
  675.     done
  676.    
  677.     #VOir pour l'ajout GZ
  678.     cp /etc/openvpn/ca.crt /home/virtual_ftp_users/$v_ftp_user/ca.crt
  679.     cp /etc/openvpn/easy-rsa/2.0/keys/clients/*.*  /home/virtual_ftp_users/$v_ftp_user/
  680.     echo "Les fichiers clients sont maintenant disponible sur votre FTP!"
  681.     echo "Une fois les fichiers récuperés, il faut les supprimer du serveur FTP(Sécurité)"
  682.     echo -e "\033[33mInformation de connexion: IP:"$v_sys_publicIP" // USER:"$v_ftp_user"\033[0m"
  683.     chmod 755 /home/virtual_ftp_users/$v_ftp_user/*.* #Utile car tous les fichiers n'ont pas les mêmes droits.
  684. }
  685.  
  686. config_firewall() #Configuration du firewall
  687. {
  688.     v_openvpn_internet=""
  689.     v_sys_iptables=""
  690.     v_sys_cartenom=""
  691.     while [ "$v_openvpn_internet" != "y" ] && [ "$v_openvpn_internet" != "Y" ] && [ "$v_openvpn_internet" != "N" ] && [ "$v_openvpn_internet" != "n" ]
  692.     do
  693.         echo -n -e "\033[1mVoulez-vous un accès internet à partir du réseau client VPN?(Y/N) \033[0m"
  694.         read v_openvpn_internet
  695.     done
  696.    
  697.     while [ "$v_sys_iptables" != "y" ] && [ "$v_sys_iptables" != "Y" ] && [ "$v_sys_iptables" != "N" ] && [ "$v_sys_iptables" != "n" ]
  698.     do
  699.         echo -e "\033[1mVoulez-vous que le script génère aussi les régles de base d'iptables?(Y/N) \033[0m"
  700.         echo -e "\033[33m Si vous en avez déjà paramétré un vous même, cette option peut créer des conflits ! \033[0m"
  701.         read v_sys_iptables
  702.     done
  703.    
  704.     while [ -z "${v_sys_cartenom}" ]
  705.     do
  706.         echo -e "\033[1mQuel est le nom de votre carte rélié à internet? \033[0m"
  707.         echo -e "\033[33mIl s'agit généralement de <eth0> mais dans le cas d'un serveur vitualisé par OPENVZ le nom peut être <venet0>\033[0m"
  708.         read v_sys_cartenom
  709.     done
  710.     Fichier_firewall="/etc/init.d/firewall"
  711.     echo "Création des régles IPTables"
  712.    
  713.     write_ini "v_sys_cartenom" "$v_sys_cartenom" "/etc/openvpn/conf.ini"
  714.    
  715.     if [ -e "$Fichier_firewall" ]; then
  716.         rm $Fichier_firewall
  717.     fi
  718.      echo '#!/bin/bash' >> $Fichier_firewall
  719.    
  720.     #régles de bases
  721.     if [ "$v_sys_iptables" = "y" ] || [ "$v_sys_iptables" = "Y" ]; then
  722.         modprobe ip_nat_ftp
  723.         modprobe ip_conntrack_ftp
  724.         #Suppr des régles existantes
  725.          echo 'iptables -F' >> $Fichier_firewall
  726.          echo 'iptables -X' >> $Fichier_firewall
  727.          
  728.           # Entrés bloqués par défaut
  729.          echo 'iptables -P INPUT DROP' >> $Fichier_firewall
  730.           # Sortie bloqués par défauts
  731.          echo 'iptables -P OUTPUT DROP' >> $Fichier_firewall
  732.          # Forward entre cartes autorisé
  733.          echo 'iptables -P FORWARD ACCEPT' >> $Fichier_firewall
  734.          
  735.          #Ne pas casser les connexions existantes
  736.          echo 'iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT' >> $Fichier_firewall
  737.          echo 'iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT' >> $Fichier_firewall
  738.          
  739.          #Le loopback      
  740.          echo 'iptables -t filter -A INPUT -i lo -j ACCEPT' >> $Fichier_firewall
  741.          echo 'iptables -t filter -A OUTPUT -o lo -j ACCEPT' >> $Fichier_firewall
  742.  
  743.          #Le ping
  744.          echo 'iptables -A INPUT -p icmp -j ACCEPT' >> $Fichier_firewall
  745.          echo 'iptables -A OUTPUT -p icmp -j ACCEPT' >> $Fichier_firewall
  746.          
  747.          #Le SSH
  748.          echo 'iptables -t filter -A INPUT -p tcp --dport  22 -j ACCEPT' >> $Fichier_firewall
  749.          echo 'iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT' >> $Fichier_firewall
  750.          
  751.          #le FTP
  752.          echo 'iptables -t filter -A INPUT -p tcp --dport  20 -j ACCEPT' >> $Fichier_firewall
  753.          echo 'iptables -t filter -A OUTPUT -p tcp --dport  20 -j ACCEPT' >> $Fichier_firewall
  754.          
  755.          echo 'iptables -t filter -A INPUT -p tcp --dport  21 -j ACCEPT' >> $Fichier_firewall
  756.          echo 'iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT' >> $Fichier_firewall
  757.          
  758.          #SMTP
  759.          echo 'iptables -t filter -A OUTPUT -p tcp --dport  25 -j ACCEPT' >> $Fichier_firewall
  760.          
  761.          #Port openVPN
  762.          echo 'iptables -t filter -A INPUT -p udp --dport '$v_openvpn_port' -j ACCEPT' >> $Fichier_firewall
  763.          echo 'iptables -t filter -A OUTPUT -p udp --dport '$v_openvpn_port' -j ACCEPT' >> $Fichier_firewall
  764.          
  765.          #DNS...
  766.          echo 'iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT' >> $Fichier_firewall
  767.          echo 'iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT' >> $Fichier_firewall
  768.          
  769.          #Internet 80
  770.          echo 'iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT' >> $Fichier_firewall
  771.          echo 'iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT' >> $Fichier_firewall
  772.          
  773.          #Internet 443
  774.          echo 'iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT' >> $Fichier_firewall
  775.          echo 'iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT' >> $Fichier_firewall
  776.          
  777.          #NTP
  778.          echo 'iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT' >> $Fichier_firewall
  779.     else
  780.          while [ -z "${def_regles}" ]
  781.          do
  782.             echo -e "\033[1mVoulez-vous mettre les régles iptables par défaut?(Y/N) \033[0m"
  783.             echo -e "\033[33mSi vous avez défini des régles personalisés, elles seront écrasées.\033[0m"
  784.             read def_regles
  785.          done
  786.          
  787.          if [ "$def_regles" = "y" ] || [ "$def_regles" = "Y" ]; then
  788.              echo "Régles par défauts..."
  789.              iptables -F
  790.              iptables -X
  791.              echo "INPUT - ACCEPT[OK]"
  792.              iptables -P INPUT ACCEPT
  793.              echo "OUTPUT - ACCEPT[OK]"
  794.              iptables -P OUTPUT ACCEPT
  795.              echo "FORWARD - ACCEPT[OK]"
  796.              iptables -P FORWARD ACCEPT
  797.             fi
  798.     fi
  799.    
  800.     #Pour l'accès internet au réseau du VPN
  801.     if [ "$v_openvpn_internet" = "y" ] || [ "$v_openvpn_internet" = "Y" ]; then
  802.          echo 'oclient="'$v_openvpn_reseau'/'$v_openvpn_masque'"' >> $Fichier_firewall
  803.          echo 'iptables -A FORWARD -s $oclient -j ACCEPT' >> $Fichier_firewall 
  804.          echo 'iptables -t nat -A POSTROUTING -o '$v_sys_cartenom' -j SNAT --to-source '$v_sys_localIP'' >> $Fichier_firewall    
  805.          echo "Activation d'ipforward"
  806.          write_ini "v_openvpn_internet" "1" "/etc/openvpn/conf.ini"
  807.          write_ini "net.ipv4.ip_forward" "1" "/etc/sysctl.conf"
  808.     elif [ "$v_openvpn_internet" = "n" ] || [ "$v_openvpn_internet" = "N" ]; then
  809.          echo "Désactivation de l'ipforward"
  810.          echo "Vos clients n'auront pas d'accès internet!"
  811.          write_ini "v_openvpn_internet" "0" "/etc/openvpn/conf.ini"
  812.          write_ini "net.ipv4.ip_forward" "0" "/etc/sysctl.conf"
  813.     fi
  814.  
  815.     echo "Le fichier firewall crée"
  816.     echo "chmod du fichiers..."
  817.     chmod +x $Fichier_firewall
  818.     $Fichier_firewall restart
  819.     update-rc.d firewall defaults
  820. }
  821.  
  822. choplip() #Récupere l'ip publique du serveur
  823. {
  824.     MONIP=`wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\< -f 1`
  825. }
  826.  
  827. validationIP() #Permet de vérifier que l'entrée utilisateur soit bien une IP...
  828. {
  829.     valideIP="FALSE"
  830.     if [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
  831.         valideIP="TRUE"
  832.     else
  833.         valideIP="FALSE"
  834.     fi
  835. }
  836.  
  837. connexiontest() #Permet de tester la connectivité internet du serveur avant le téléchargement des paquets
  838. {
  839. internet_result=""
  840. echo "Test de connectivité internet..."
  841. ping -c3 checkip.dyndns.com
  842. TEST=$?
  843.  
  844. if [ $TEST -ne 0 ]
  845.     then
  846.        internet="[Pas de connexion détecté]"
  847.        internet_result="FALSE"
  848.     else
  849.        internet="[Connexion détecté]"
  850. fi
  851. }
  852.  
  853. reboot() #Pour reboot le serveur complétement !
  854. {
  855.     while [ "$rebootemoi" != "y" ] && [ "$rebootemoi" != "Y" ] && [ "$rebootemoi" != "N" ] && [ "$rebootemoi" != "n" ]
  856.         do
  857.             echo -n -e "\033[1mVoulez-vous redémarrer maintenant? (Y/N): \033[0m"
  858.             read rebootemoi
  859.         done
  860.  
  861.         if [ "$rebootemoi" = "y" ] || [ "$rebootemoi" = "Y" ]; then
  862.             reboot
  863.         fi
  864. }
  865.  
  866. reboot_opvn() #Pour reboot openvpn
  867. {
  868.     while [ "$reboote_opvn" != "y" ] && [ "$reboote_opvn" != "Y" ] && [ "$reboote_opvn" != "N" ] && [ "$reboote_opvn" != "n" ]
  869.         do
  870.             echo -e "\033[1mCette opération demande un redémarrage d'open vpn... (Y/N): \033[0m"
  871.             echo -n -e "\033[1mVoulez-vous redémarrer maintenant? (Y/N): \033[0m"
  872.             read reboote_opvn
  873.         done
  874.  
  875.         #if [ "$reboote_opvn" = "y" ] || [ "$reboote_opvn" = "Y" ]; then
  876.         #   /etc/init.d/openvpn restart
  877.         #fi
  878. }
  879.  
  880. mailto() #Permet d'envoyer les fichiers par email
  881. {
  882.     while [ "$mail_to_user" != "y" ] && [ "$mail_to_user" != "Y" ] && [ "$mail_to_user" != "N" ] && [ "$mail_to_user" != "n" ]
  883.         do
  884.             echo -n -e "\033[1mVoulez-vous envoyer les fichiers de configuration par mail au client?(Y/N) \033[0m"
  885.             read mail_to_user
  886.     done
  887.  
  888.     if [ "$mail_to_user" = "y" ] || [ "$mail_to_user" = "Y" ]; then
  889.         echo -n -e "\033[1mQuelle est l'email de "$v_nom_clientP"?\033[0m"
  890.         read email_user
  891.         echo "Envoi du mail..."
  892.         echo "Merci de patienter, cela peut prendre un peu de temps!"
  893.         echo | mutt -s "Vos fichiers de configuration OPENVPN" -a /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.key /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.crt /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.ovpn /etc/openvpn/ca.crt -- $email_user
  894.         echo "Email envoyé."
  895.     fi
  896. }
  897.  
  898. HOST=`hostname`
  899. echo "Script d'installation simplifié d'openVPN"
  900. echo "Auteur: Tlams"
  901. echo "Date: 15/02/13"
  902. echo "Version: 1.0"
  903. echo "Langue: Français"
  904. genere_fichier_var_ini
  905. menu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement