Last active
December 14, 2015 13:08
-
-
Save ThomasGsp/5090774 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Auteur : Tlams | |
# Date : 13/02/13 | |
# Script description : Permet de monter un serveur OPENVPN de façon guidé ! | |
############# Liste des fonctions:############### | |
## Menu: Permet d'afficher le menu de choix | |
## downloadopenvpn: Permet de télécharger OpenVPN | |
## config_openvpn: Configuration de OPENVPN | |
## 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. | |
## cree_files_server: Génère les fichiers de base du serveur (Certif,key,dh...) | |
## creer_client: Permet de créer un client OpenVPN (Génère Key et crt) | |
## revoke_user: Permet de bloquer un utilisateur | |
## creerfichieropenvpn: Permet de générer un fichier de configuration openvpn directement utilisable. | |
## installpureftp: Permet d'installer un serveur FTP pour récupérer les fichiers des clients facilement. | |
## ftp_creer_user: Creer un utilisateur pour le serveur FTP | |
## ftp_modif_pw: Permet de modifier le mot de passe d'un utilisateur FTP | |
## transfertfichier_client: Permet de transférer (copier) les fichiers clients d'openvpn sur le dossier de l'utilisateur FTP. | |
## choplip: Permet de récupérer automatiquement l'adresse IP publique du serveur | |
## validationIP: Permet de valider une adresse IP rentré par un utilisateur. | |
## connexiontest: Test permettant de déterminer si une connexion internet est présente, pour le téléchargement des paquets. | |
## config_firewall: Créer un fichier de configuration (firewall) qui applique les régles des bases du pare feu. | |
## reboot: Permet de redémarrer le serveur | |
## mailto: permet d'envoyer un email | |
## genere_fichier_var_ini: Permet de créer le fichier qui sauvegarde les configurations | |
## write_ini: Modifie les variables de config | |
################################################# | |
# Voir ajout GZ L 487/665 | |
menu() | |
{ | |
echo "********************" | |
echo "********MENU********" | |
echo "********************" | |
echo "1/ Installation d'OpenVPN" | |
echo "2/ Modification-Correction de paramettres" | |
#echo "3/ Documentation" | |
echo "4/ Quitter" | |
read Choix | |
case "$Choix" in | |
1 ) | |
connexiontest | |
echo "***************************" | |
echo "**Installation de OPENVPN**" | |
echo "***************************" | |
echo -e "\033[33m | |
Près-requis: | |
- Une connexion internet " $internet " | |
- Connaitre son ip publique (Taper: ipconfig) | |
- Connaitre le nom de sa carte réseau connecté au routeur fournissant une connexion internet (Taper: ipconfig) | |
- Connaitre le nom de son server (Taper: hostname) | |
\033[0m" | |
if [ "$internet_result" = "FALSE" ]; then | |
echo "Aucune connexion internet n'a été trouvé !" | |
echo "Il faut corriger ce problème avant de pouvoir aller plus loin" | |
echo "Arret du script" | |
exit 0 | |
fi | |
st_install_g="" | |
while [ "$st_install_g" != "y" ] && [ "$st_install_g" != "Y" ] && [ "$st_install_g" != "N" ] && [ "$st_install_g" != "n" ] | |
do | |
echo -n -e "\033[1mVoulez-vous lancer l'installation maintenant? (Y/N): \033[0m" | |
read st_install_g | |
done | |
if [ "$st_install_g" = "y" ] || [ "$st_install_g" = "Y" ]; then | |
source /etc/openvpn/conf.ini | |
re_install_g="" | |
Continuer=1 | |
dpkg -l "openvpn" > /dev/null 2>&1 | |
INSTALLEDOPENVPN=$? | |
if [ $INSTALLEDOPENVPN == '0' ]; then | |
while [ "$re_install_g" != "y" ] && [ "$re_install_g" != "Y" ] && [ "$re_install_g" != "N" ] && [ "$re_install_g" != "n" ] | |
do | |
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" | |
echo -e -n "\033[1mVoulez-vous lancer l'installation maintenant? (Y/N): \033[0m" | |
read re_install_g | |
done | |
if [ "$re_install_g" = "N" ] && [ "$re_install_g" = "n" ]; then | |
Continuer=0 | |
fi | |
fi | |
if [ "$Continuer" = 1 ]; then | |
downloadopenvpn | |
conf_var | |
config_openvpn | |
cree_files_server | |
creer_client | |
creerfichieropenvpn | |
mailto | |
installpureftp | |
if [ "$v_ftp_install" = 1 ]; then | |
ftp_creer_user | |
fi | |
config_firewall | |
/etc/init.d/openvpn restart | |
echo "Installation du serveur OPENVPN terminé." | |
echo "Rappels:" | |
echo "Emplacement des fichiers clients: //etc/openvpn/easy-rsa/2.0/keys/clients/" | |
echo "Connexion sftp: sftp://root@"$v_sys_publicIP | |
if [ "$v_ftp_install" = 1 ]; then | |
echo "Connexion ftp - User:"$v_ftp_user" / IP:" $MONIP | |
fi | |
else | |
echo "Installation annulé ! Retour au menu" | |
menu | |
fi | |
elif [ "$st_install_g" = "n" ] || [ "$st_install_g" = "N" ]; then | |
echo "Installation annulé ! Retour au menu" | |
menu | |
fi | |
;; | |
2 ) | |
dpkg -l "openvpn" > /dev/null 2>&1 | |
INSTALLEDOPENVPN=$? | |
if [ $INSTALLEDOPENVPN != '0' ]; then | |
echo "Aucune installation d'openvpn détecté! Certaines fonctions ne seront pas correctement fonctionnelles" | |
fi | |
echo " 1/ Modifier le certificat" | |
echo " 2/ Ajouter un client." | |
echo " 3/ Supprimer un client." | |
echo " 4/ Modifier le mot de passe utilisateur FTP." | |
echo " 5/ Modifier la configuration du pare-feu." | |
echo " 6/ Modifier la configuration d'OPENVPN." | |
echo " 7/ Mettre à jour les fichiers clients sur le serveur FTP" | |
echo " 0/ Retour menu" | |
read modifcorrect | |
case "$modifcorrect" in | |
0 ) | |
menu | |
;; | |
1 ) | |
source /etc/openvpn/conf.ini | |
v_modif_certif="" | |
while [ "$v_modif_certif" != "y" ] && [ "$v_modif_certif" != "Y" ] && [ "$v_modif_certif" != "N" ] && [ "$v_modif_certif" != "n" ] | |
do | |
echo "Si vous modifiez le certificat, TOUS vos clients actuels seront invalides ! Continuer?(Y/N) " | |
read v_modif_certif | |
done | |
if [ "$v_modif_certif" = "y" ] || [ "$v_modif_certif" = "Y" ]; then | |
conf_var | |
cree_files_server | |
else | |
echo "Opération annulé" | |
fi | |
menu | |
;; | |
2 ) | |
source /etc/openvpn/conf.ini | |
creer_client | |
creerfichieropenvpn | |
mailto | |
if [ "$v_ftp_install" = 1 ] ; then | |
transfertfichier_client | |
fi | |
menu;; | |
3 ) revoke_user | |
menu;; | |
4 ) | |
source /etc/openvpn/conf.ini | |
ftp_modif_pw | |
menu;; | |
5 ) | |
source /etc/openvpn/conf.ini | |
config_firewall | |
menu;; | |
6 ) | |
v_modif_openvpn="" | |
while [ "$v_modif_openvpn" != "y" ] && [ "$v_modif_openvpn" != "Y" ] && [ "$v_modif_openvpn" != "N" ] && [ "$v_modif_openvpn" != "n" ] | |
do | |
echo "Si vous modifiez le certificat, TOUS vos clients actuels seront invalides ! Continuer?(Y/N) " | |
read v_modif_openvpn | |
done | |
if [ "$v_modif_openvpn" = "y" ] || [ "$v_modif_openvpn" = "Y" ]; then | |
config_openvpn | |
else | |
echo "Opération annulé" | |
fi | |
menu;; | |
7 ) | |
source /etc/openvpn/conf.ini | |
transfertfichier_client | |
menu;; | |
* ) echo "Réponse incorrecte! - Arrêt du script";; | |
esac | |
;; | |
3 ) echo "RTFM !";; | |
4 ) exit 0;; | |
* ) echo "Réponse incorrecte! - Arrêt du script";; | |
esac | |
} | |
genere_fichier_var_ini() | |
{ | |
if [ ! -d "/etc/openvpn" ]; then | |
mkdir /etc/openvpn | |
echo "Création du dossier openvpn" | |
fi | |
fichier_var="/etc/openvpn/conf.ini" | |
if [ ! -e "$fichier_var" ]; then | |
echo 'v_openvpn_port=' >> $fichier_var | |
echo 'v_openvpn_reseau=' >> $fichier_var | |
echo 'clienttoclient=' >> $fichier_var | |
echo 'v_openvpn_masque=' >> $fichier_var | |
echo 'v_sys_publicIP=' >> $fichier_var | |
echo 'v_sys_localIP=' >> $fichier_var | |
echo 'v_ftp_user=' >> $fichier_var | |
echo 'v_openvpn_internet=' >> $fichier_var | |
echo 'v_sys_cartenom=' >> $fichier_var | |
echo 'v_ftp_install=' >> $fichier_var | |
echo 'install_g=' >> $fichier_var | |
fi | |
} | |
write_ini() | |
{ | |
clef=`echo $1 | sed 's/%/\\\%/g'` | |
valeur=`echo $2 | sed 's/%/\\\%/g'` | |
sed -r "s%(^[ $'\t']*$clef[ $'\t']*=[ $'\t']*).*\$%\1$valeur%" $3 -i | |
} | |
downloadopenvpn() #Permet de télécharger OPENVPN | |
{ | |
write_ini "install_g" "1" "/etc/openvpn/conf.ini" | |
echo "Mise à jours liste des paquets" | |
apt-get update | |
echo "Téléchargement des fichiers openvpn..." | |
apt-get install openvpn | |
dpkg -l "openvpn" > /dev/null 2>&1 | |
INSTALLEDOPENVPN=$? | |
if [ $INSTALLEDOPENVPN != '0' ]; then | |
echo "Arret de l'installation" | |
exit 0 | |
fi | |
echo "Téléchargement des fichiers Mutt..." | |
apt-get install mutt | |
dpkg -l "mutt" > /dev/null 2>&1 | |
INSTALLEMUTT=$? | |
if [ $INSTALLEMUTT != '0' ]; then | |
echo "Arret de l'installation" | |
exit 0 | |
fi | |
cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn | |
} | |
config_openvpn() #Configuration du serveur openvpn | |
{ | |
v_openvpn_port="" | |
v_openvpn_reseau="" | |
clienttoclient="" | |
v_openvpn_masque="" | |
v_sys_publicIP="" | |
echo "Configuration du serveur OpenVPN" | |
while [ -z "${v_openvpn_port}" ] || ! [ "$v_openvpn_port" -eq "$v_openvpn_port" ] 2>/dev/null | |
do | |
echo -e "\033[1mQuel port d'écoute utiliser? (Conseil: 1194) \033[0m" | |
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" | |
read v_openvpn_port | |
done | |
while [ -z "${v_openvpn_reseau}" ] || [ "$valideIP" != "TRUE" ] | |
do | |
echo -e "\033[1mQuel réseau pour vos clients? (Conseil: 10.8.0.0) \033[0m" | |
echo -e "\033[33mIl s'agit d'une adresse réseau ! Pas d'une Ip de poste !\033[0m" | |
read v_openvpn_reseau | |
validationIP $v_openvpn_reseau | |
done | |
while [ "$clienttoclient" != "y" ] && [ "$clienttoclient" != "Y" ] && [ "$clienttoclient" != "N" ] && [ "$clienttoclient" != "n" ] | |
do | |
echo -e "\033[1mVoulez-vous que les clients puissent ce voir?(Y/N) \033[0m" | |
echo -e "\033[33mPermet aux clients de communiquer(comme dans un réseau local)\033[0m" | |
read clienttoclient | |
done | |
while [ -z "${v_openvpn_masque}" ] || [ "$valideIP" != "TRUE" ] | |
do | |
echo -n -e "\033[1mMasque réseau? (Conseil: 255.255.255.0) \033[0m" | |
read v_openvpn_masque | |
validationIP $v_openvpn_masque | |
done | |
while [ -z "${v_sys_publicIP}" ] || [ "$valideIP" != "TRUE" ] | |
do | |
echo -e "\033[1mQuelle est l'ip publique de votre serveur? \033[0m" | |
choplip | |
echo -e "\033[33mIl a été détecté <"$MONIP"> comme étant votre IP publique.\033[0m" | |
read v_sys_publicIP | |
validationIP $v_sys_publicIP | |
done | |
echo -n -e "\033[1mVotre IP publique est elle directement attribué à votre carte réseau?(Y/N)\033[0m" | |
read sys_carte_ip | |
if [ "$sys_carte_ip" = "y" ] || [ "$sys_carte_ip" = "Y" ]; then | |
v_sys_localIP=$v_sys_publicIP | |
else | |
while [ -z "${v_sys_localIP}" ] || [ "$valideIP" != "TRUE" ] | |
do | |
echo -e "\033[1mQuelle est l'ip locale de votre serveur? \033[0m" | |
read v_sys_localIP | |
validationIP $v_sys_localIP | |
done | |
fi | |
echo "Ecriture du fichier..." | |
Fichier_conf_rep="/etc/openvpn/"$HOST".conf" | |
if [ -e "$Fichier_conf_rep" ]; then | |
rm $Fichier_conf_rep | |
fi | |
write_ini "v_openvpn_port" "$v_openvpn_port" "/etc/openvpn/conf.ini" | |
write_ini "v_openvpn_reseau" "$v_openvpn_reseau" "/etc/openvpn/conf.ini" | |
write_ini "v_openvpn_masque" "$v_openvpn_masque" "/etc/openvpn/conf.ini" | |
write_ini "v_sys_publicIP" "$v_sys_publicIP" "/etc/openvpn/conf.ini" | |
write_ini "v_sys_localIP" "$v_sys_localIP" "/etc/openvpn/conf.ini" | |
echo 'mode server' >> $Fichier_conf_rep | |
echo 'local' $v_sys_localIP >> $Fichier_conf_rep | |
echo 'port' $v_openvpn_port >> $Fichier_conf_rep | |
echo 'proto udp' >> $Fichier_conf_rep | |
echo 'dev tun' >> $Fichier_conf_rep | |
echo 'ca ca.crt' >> $Fichier_conf_rep | |
echo 'cert '$HOST'.crt' >> $Fichier_conf_rep | |
echo 'key '$HOST'.key' >> $Fichier_conf_rep | |
echo 'dh dh1024.pem' >> $Fichier_conf_rep | |
echo 'server' $v_openvpn_reseau $v_openvpn_masque >> $Fichier_conf_rep | |
echo 'cipher BF-CBC' >> $Fichier_conf_rep | |
echo 'comp-lzo' >> $Fichier_conf_rep | |
echo 'persist-key' >> $Fichier_conf_rep | |
echo 'persist-tun' >> $Fichier_conf_rep | |
echo 'status openvpn-status.log' >> $Fichier_conf_rep | |
echo 'verb 3' >> $Fichier_conf_rep | |
echo 'tun-mtu 1500' >> $Fichier_conf_rep | |
echo 'tun-mtu-extra 32' >> $Fichier_conf_rep | |
echo 'mssfix 1450' >> $Fichier_conf_rep | |
echo 'push "redirect-gateway def1"' >> $Fichier_conf_rep | |
echo 'push "dhcp-option DNS 8.8.8.8"' >> $Fichier_conf_rep | |
echo 'push "dhcp-option DNS 208.67.220.220"' >> $Fichier_conf_rep | |
echo 'keepalive 10 120' >> $Fichier_conf_rep | |
echo 'crl-verify crl.pem' >> $Fichier_conf_rep #A VOIR | |
if [ "$clienttoclient" = "y" ] || [ "$clienttoclient" = "Y" ]; then | |
echo 'client-to-client' >> $Fichier_conf_rep | |
write_ini "clienttoclient" "1" "/etc/openvpn/conf.ini" | |
else | |
write_ini "clienttoclient" "0" "/etc/openvpn/conf.ini" | |
fi | |
} | |
conf_var() #Permet de déf des variables de bases pour la création des certif. (Non utilisé pour le moment) | |
{ | |
v_certif_pays="" | |
v_certif_province="" | |
v_certif_ville="" | |
v_certif_org="" | |
v_certif_org="" | |
v_certif_email="" | |
while [ -z "${v_certif_pays}" ] || [ ${#v_certif_pays} != 2 ] | |
do | |
echo -n -e "\033[1mIndice de votre pays?(Exemple:FR - Limite de 2 caractère): \033[0m" | |
read v_certif_pays | |
done | |
while [ -z "${v_certif_province}" ] | |
do | |
echo -n -e "\033[1mVotre province?:\033[0m " | |
read v_certif_province | |
done | |
while [ -z "${v_certif_ville}" ] | |
do | |
echo -n -e "\033[1mVotre ville?:\033[0m " | |
read v_certif_ville | |
done | |
while [ -z "${v_certif_org}" ] | |
do | |
echo -n -e "\033[1mVotre organisation?:\033[0m " | |
read v_certif_org | |
done | |
while [ -z "${v_certif_email}" ] || [[ "$v_certif_email" != *"@"* ]] | |
do | |
echo -n -e "\033[1mVotre email? \033[0m" | |
read v_certif_email | |
done | |
write_ini 'export KEY_COUNTRY' '"'$v_certif_pays'"' '/etc/openvpn/easy-rsa/2.0/vars' | |
write_ini 'export KEY_PROVINCE' '"'$v_certif_province'"' '/etc/openvpn/easy-rsa/2.0/vars' | |
write_ini 'export KEY_CITY' '"'$v_certif_ville'"' '/etc/openvpn/easy-rsa/2.0/vars' | |
write_ini 'export KEY_ORG' '"'$v_certif_org'"' '/etc/openvpn/easy-rsa/2.0/vars' | |
write_ini 'export KEY_EMAIL' '"'$v_certif_email'"' '/etc/openvpn/easy-rsa/2.0/vars' | |
echo "Données enregistrés" | |
} | |
cree_files_server() #Permet de creer les fichiers de base du serveur (ca, key..) | |
{ | |
ecrase_file="" | |
echo "Création du certificat serveur..." | |
if [ -e "/etc/openvpn/ca.crt" ]; then | |
while [ "$ecrase_file" != "y" ] && [ "$ecrase_file" != "Y" ] && [ "$ecrase_file" != "N" ] && [ "$ecrase_file" != "n" ] | |
do | |
echo "Il semblerait qu'un certificat existe déjà, si vous continuez le procéssus, il sera écrasé par le nouveau." | |
echo "Tous les clients devront mettre à jour leurs fichiers" | |
echo -n -e "\033[1mVoulez-vous continuer (Y/N)? \033[0m" | |
read ecrase_file | |
done | |
fi | |
if [ "$ecrase_file" != "n" ] && [ "$ecrase_file" != "N" ]; then | |
if [ -e "/etc/openvpn/ca.crt" ]; then | |
rm /etc/openvpn/ca.crt | |
fi | |
if [ -e "/etc/openvpn/keys/ca.key" ]; then | |
rm /etc/openvpn/keys/ca.key | |
fi | |
if [ -e "/etc/openvpn/keys/dh1024.pem" ]; then | |
rm /etc/openvpn/keys/dh1024.pem | |
fi | |
if [ -e "/etc/openvpn/$v_system_name.key" ]; then | |
rm /etc/openvpn/$HOST.key | |
fi | |
if [ -e "/etc/openvpn/$v_system_name.crt" ]; then | |
rm /etc/openvpn/$HOST.crt | |
fi | |
#Lignes pour le générer... | |
cd /etc/openvpn/easy-rsa/2.0 | |
. /etc/openvpn/easy-rsa/2.0/vars | |
. /etc/openvpn/easy-rsa/2.0/clean-all | |
. /etc/openvpn/easy-rsa/2.0/build-ca | |
echo "Certificat serveur crée !" | |
echo "Création de la clé serveur..." | |
#Ligne de création | |
. /etc/openvpn/easy-rsa/2.0/build-key-server $HOST | |
echo "Clée serveur crée!" | |
echo "Création du fichier Diffie Hellman..." | |
#Ligne de création Diffie Hellman. | |
. /etc/openvpn/easy-rsa/2.0/build-dh | |
echo "Mise en place des fichiers..." | |
#Déplacement des fichiers du serveur | |
cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/ca.crt | |
cp /etc/openvpn/easy-rsa/2.0/keys/ca.key /etc/openvpn/ca.key | |
cp /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/dh1024.pem | |
cp /etc/openvpn/easy-rsa/2.0/keys/$HOST.key /etc/openvpn/$HOST.key | |
cp /etc/openvpn/easy-rsa/2.0/keys/$HOST.crt /etc/openvpn/$HOST.crt | |
echo "Tous les fichiers sont en place." | |
else | |
echo "Création du certificat serveur annulé !" | |
fi | |
#Importation d'un certificat bidon (Fichier ne peut pas être vide) | |
echo "Téléchargement d'un certificat bidon..." | |
cd /etc/openvpn/ | |
wget http://pastebin.com/raw.php?i=fs5DYbeT | |
mv raw.php?i=fs5DYbeT crl.pem | |
} | |
creer_client() #Permet de creer un client openvpn | |
{ | |
v_nom_clientP="" | |
while [ -z "${v_nom_clientP}" ] | |
do | |
echo -n -e "\033[1mCréation du client... Quel nom voulez-vous lui donner? \033[0m" | |
read v_nom_clientP | |
done | |
#permet de détecter si le nom est déjà utilisé ou pas | |
if [ -e "/etc/openvpn/easy-rsa/2.0/keys/clients/"$v_nom_clientP".crt" ]; then | |
echo "Ce client existe déjà !" | |
else | |
cd /etc/openvpn/easy-rsa/2.0 | |
source ./vars | |
. /etc/openvpn/easy-rsa/2.0/build-key $v_nom_clientP | |
echo "Client $v_nom_clientP crée" | |
if [ ! -d "/etc/openvpn/easy-rsa/2.0/keys/clients" ]; then | |
mkdir /etc/openvpn/easy-rsa/2.0/keys/clients | |
echo "Création du dossier clients" | |
fi | |
#GZ les deux fichiers | |
cp /etc/openvpn/easy-rsa/2.0/keys/$v_nom_clientP.crt /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.crt | |
cp /etc/openvpn/easy-rsa/2.0/keys/$v_nom_clientP.key /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.key | |
echo "Les fichiers sont en attentes dans: /etc/openvpn/easy-rsa/2.0/keys/clients/" | |
fi | |
} | |
revoke_user() #Permet de bloquer l'utilisation d'un certificat client | |
{ | |
revokclient="" | |
while [ -z "${revokclient}" ] | |
do | |
echo -n -e "\033[1mNom du client à supprimer:\033[0m " | |
read revokclient | |
done | |
cd /etc/openvpn/easy-rsa/2.0 | |
source ./vars #Charge les var | |
./revoke-full $revokclient | |
cp keys/crl.pem /etc/openvpn/ | |
} | |
creerfichieropenvpn() #Permet de générer un fichier de configuration openvpn directement utilisable. | |
{ | |
#Création du fichier ovpn client. | |
confuseropenvpn="/etc/openvpn/easy-rsa/2.0/keys/clients/"$v_nom_clientP".ovpn" | |
#Config Ip + Port | |
echo "remote" $v_sys_publicIP $v_openvpn_port >> $confuseropenvpn | |
echo "<ca>" >> $confuseropenvpn | |
#Récupere les données du Certificat serveur et les mets dans le fichier de configuration ... | |
while read ca | |
do | |
echo -e "$ca" >> $confuseropenvpn | |
done < /etc/openvpn/ca.crt | |
echo "</ca>" >> $confuseropenvpn | |
echo "<cert>" >> $confuseropenvpn | |
#Récupere les données du Certificat client et les mets dans le fichier de configuration ... | |
while read cert | |
do | |
echo -e "$cert" >> $confuseropenvpn | |
done < /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.crt | |
echo "</cert>" >> $confuseropenvpn | |
echo "<key>" >> $confuseropenvpn | |
#Récupere les données de la Key client et les mets dans le fichier de configuration ... | |
while read key | |
do | |
echo -e "$key" >> $confuseropenvpn | |
done < /etc/openvpn/easy-rsa/2.0/keys/clients/$v_nom_clientP.key | |
echo "</key>" >> $confuseropenvpn | |
#Configurations générales du client... | |
echo "client" >> $confuseropenvpn | |
echo "dev tun" >> $confuseropenvpn | |
echo "proto udp" >> $confuseropenvpn | |
echo "resolv-retry infinite" >> $confuseropenvpn | |
echo "nobind" >> $confuseropenvpn | |
echo "persist-key" >> $confuseropenvpn | |
echo "persist-tun" >> $confuseropenvpn | |
echo "mute-replay-warnings" >> $confuseropenvpn | |
echo "cipher BF-CBC" >> $confuseropenvpn | |
echo "comp-lzo" >> $confuseropenvpn | |
echo "verb 5" >> $confuseropenvpn | |
} | |
installpureftp() #Installe le serveur FTP pour récuperer les fichiers clients | |
{ | |
st_install_ftp="" | |
echo -e "\033[33m Afin de récuperer les fichiers clients vous pouvez installer un serveur FTP.\033[0m" | |
while [ "$st_install_ftp" != "y" ] && [ "$st_install_ftp" != "Y" ] && [ "$st_install_ftp" != "N" ] && [ "$st_install_ftp" != "n" ] | |
do | |
echo -e "\033[1mVoulez-vous installer pure-ftp maitenant? (Y/N) \033[0m" | |
echo -e "\033[33m-Si vous possédez déjà un serveur FTP l'installation d'un second est très fortement déconseillé ! | |
-Si votre serveur est disponible sur votre réseau local vous pouvez opter pour un partage de fichier.\033[0m" | |
read st_install_ftp | |
done | |
if [ "$st_install_ftp" = "y" ] || [ "$st_install_ftp" = "Y" ]; then | |
echo "Installation du serveur ftp..." | |
apt-get install pure-ftpd-common | |
dpkg -l "pure-ftpd-common" > /dev/null 2>&1 | |
INSTALLEDftpd=$? | |
if [ $INSTALLEDftpd = '0' ]; then | |
echo "Création du groupe..." | |
groupadd ftpgroup | |
echo "Mise en place des droits..." | |
useradd -g ftpgroup -d /dev/null -s /usr/sbin/nologin ftpuser | |
echo 'yes' >> /etc/pure-ftpd/conf/NoAnonymous | |
echo 'yes' >> /etc/pure-ftpd/conf/ChrootEveryone | |
echo 'yes' >> /etc/pure-ftpd/conf/CreateHomeDir | |
echo 'yes' >> /etc/pure-ftpd/conf/AntiWarez | |
write_ini "v_ftp_install" "1" "/etc/openvpn/conf.ini" | |
v_ftp_install=1 | |
else | |
"Arret de l'installation de pureftp" | |
fi | |
else | |
echo "Vous devrez les récuperer par vos propres moyens !" | |
write_ini "v_ftp_install" "0" "/etc/openvpn/conf.ini" | |
fi | |
} | |
ftp_creer_user() #Creer l'utilisateur FTP. | |
{ | |
v_ftp_user="" | |
while [ -z "${v_ftp_user}" ] | |
do | |
echo -n -e "\033[1mQuel nom d'utilisateur pour votre compte ftp?\033[0m" | |
read v_ftp_user | |
done | |
echo "Création de l'utilisateur..." | |
mkdir /home/virtual_ftp_users | |
mkdir /home/virtual_ftp_users/$v_ftp_user | |
pure-pw useradd $v_ftp_user -u ftpuser -g ftpgroup -d /home/virtual_ftp_users/$v_ftp_user | |
write_ini "v_ftp_user" "$v_ftp_user" "/etc/openvpn/conf.ini" | |
pure-pw mkdb | |
echo "Application des modifications..." | |
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure | |
transfertfichier_client | |
/etc/init.d/pure-ftpd restart | |
} | |
ftp_modif_pw() #Permet de modifier le mot de passe d'un compte FTP | |
{ | |
v_ftp_user_modif="" | |
echo "Modification du mot de passe" | |
source /etc/openvpn/conf.ini | |
while [ "$userftpmodfpw" != "y" ] && [ "$userftpmodfpw" != "Y" ] && [ "$userftpmodfpw" != "N" ] && [ "$userftpmodfpw" != "n" ] | |
do | |
echo -e "\033[1m"$v_ftp_user" est-il bien votre utilisateur FTP? (Y/N) \033[0m" | |
read userftpmodfpw | |
done | |
if [ "$userftpmodfpw" = "y" ] || [ "$userftpmodfpw" = "Y" ]; then | |
pure-pw passwd $v_ftp_user -m | |
pure-pw mkdb | |
# Password | |
echo "Application des modifications..." | |
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure | |
/etc/init.d/pure-ftpd restart | |
else | |
while [ -z "${v_ftp_user_modif}" ] | |
do | |
echo -n -e "\033[1mQuel nom d'utilisateur ?033[0m" | |
read v_ftp_user_modif | |
done | |
pure-pw passwd $v_ftp_user -m | |
pure-pw mkdb | |
# Password | |
echo "Application des modifications..." | |
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure | |
/etc/init.d/pure-ftpd restart | |
fi | |
} | |
transfertfichier_client() #Permet de transferer les fichiers clients (.ovpn,ca,key...) dans le dossier du serveur ftp | |
{ | |
while [ -z "${v_ftp_user}" ] | |
do | |
echo -n -e "\033[1mQuel est le nom utilisateur de votre compte ftp?"$v_ftp_user"\033[0m" | |
read v_ftp_user | |
done | |
#VOir pour l'ajout GZ | |
cp /etc/openvpn/ca.crt /home/virtual_ftp_users/$v_ftp_user/ca.crt | |
cp /etc/openvpn/easy-rsa/2.0/keys/clients/*.* /home/virtual_ftp_users/$v_ftp_user/ | |
echo "Les fichiers clients sont maintenant disponible sur votre FTP!" | |
echo "Une fois les fichiers récuperés, il faut les supprimer du serveur FTP(Sécurité)" | |
echo -e "\033[33mInformation de connexion: IP:"$v_sys_publicIP" // USER:"$v_ftp_user"\033[0m" | |
chmod 755 /home/virtual_ftp_users/$v_ftp_user/*.* #Utile car tous les fichiers n'ont pas les mêmes droits. | |
} | |
config_firewall() #Configuration du firewall | |
{ | |
v_openvpn_internet="" | |
v_sys_iptables="" | |
v_sys_cartenom="" | |
while [ "$v_openvpn_internet" != "y" ] && [ "$v_openvpn_internet" != "Y" ] && [ "$v_openvpn_internet" != "N" ] && [ "$v_openvpn_internet" != "n" ] | |
do | |
echo -n -e "\033[1mVoulez-vous un accès internet à partir du réseau client VPN?(Y/N) \033[0m" | |
read v_openvpn_internet | |
done | |
while [ "$v_sys_iptables" != "y" ] && [ "$v_sys_iptables" != "Y" ] && [ "$v_sys_iptables" != "N" ] && [ "$v_sys_iptables" != "n" ] | |
do | |
echo -e "\033[1mVoulez-vous que le script génère aussi les régles de base d'iptables?(Y/N) \033[0m" | |
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" | |
read v_sys_iptables | |
done | |
while [ -z "${v_sys_cartenom}" ] | |
do | |
echo -e "\033[1mQuel est le nom de votre carte rélié à internet? \033[0m" | |
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" | |
read v_sys_cartenom | |
done | |
Fichier_firewall="/etc/init.d/firewall" | |
echo "Création des régles IPTables" | |
write_ini "v_sys_cartenom" "$v_sys_cartenom" "/etc/openvpn/conf.ini" | |
if [ -e "$Fichier_firewall" ]; then | |
rm $Fichier_firewall | |
fi | |
echo '#!/bin/bash' >> $Fichier_firewall | |
#régles de bases | |
if [ "$v_sys_iptables" = "y" ] || [ "$v_sys_iptables" = "Y" ]; then | |
modprobe ip_nat_ftp | |
modprobe ip_conntrack_ftp | |
#Suppr des régles existantes | |
echo 'iptables -F' >> $Fichier_firewall | |
echo 'iptables -X' >> $Fichier_firewall | |
# Entrés bloqués par défaut | |
echo 'iptables -P INPUT DROP' >> $Fichier_firewall | |
# Sortie bloqués par défauts | |
echo 'iptables -P OUTPUT DROP' >> $Fichier_firewall | |
# Forward entre cartes autorisé | |
echo 'iptables -P FORWARD ACCEPT' >> $Fichier_firewall | |
#Ne pas casser les connexions existantes | |
echo 'iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT' >> $Fichier_firewall | |
#Le loopback | |
echo 'iptables -t filter -A INPUT -i lo -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A OUTPUT -o lo -j ACCEPT' >> $Fichier_firewall | |
#Le ping | |
echo 'iptables -A INPUT -p icmp -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -A OUTPUT -p icmp -j ACCEPT' >> $Fichier_firewall | |
#Le SSH | |
echo 'iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT' >> $Fichier_firewall | |
#le FTP | |
echo 'iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A OUTPUT -p tcp --dport 20 -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT' >> $Fichier_firewall | |
#SMTP | |
echo 'iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT' >> $Fichier_firewall | |
#Port openVPN | |
echo 'iptables -t filter -A INPUT -p udp --dport '$v_openvpn_port' -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A OUTPUT -p udp --dport '$v_openvpn_port' -j ACCEPT' >> $Fichier_firewall | |
#DNS... | |
echo 'iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT' >> $Fichier_firewall | |
#Internet 80 | |
echo 'iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT' >> $Fichier_firewall | |
#Internet 443 | |
echo 'iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT' >> $Fichier_firewall | |
#NTP | |
echo 'iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT' >> $Fichier_firewall | |
else | |
while [ -z "${def_regles}" ] | |
do | |
echo -e "\033[1mVoulez-vous mettre les régles iptables par défaut?(Y/N) \033[0m" | |
echo -e "\033[33mSi vous avez défini des régles personalisés, elles seront écrasées.\033[0m" | |
read def_regles | |
done | |
if [ "$def_regles" = "y" ] || [ "$def_regles" = "Y" ]; then | |
echo "Régles par défauts..." | |
iptables -F | |
iptables -X | |
echo "INPUT - ACCEPT[OK]" | |
iptables -P INPUT ACCEPT | |
echo "OUTPUT - ACCEPT[OK]" | |
iptables -P OUTPUT ACCEPT | |
echo "FORWARD - ACCEPT[OK]" | |
iptables -P FORWARD ACCEPT | |
fi | |
fi | |
#Pour l'accès internet au réseau du VPN | |
if [ "$v_openvpn_internet" = "y" ] || [ "$v_openvpn_internet" = "Y" ]; then | |
echo 'oclient="'$v_openvpn_reseau'/'$v_openvpn_masque'"' >> $Fichier_firewall | |
echo 'iptables -A FORWARD -s $oclient -j ACCEPT' >> $Fichier_firewall | |
echo 'iptables -t nat -A POSTROUTING -o '$v_sys_cartenom' -j SNAT --to-source '$v_sys_localIP'' >> $Fichier_firewall | |
echo "Activation d'ipforward" | |
write_ini "v_openvpn_internet" "1" "/etc/openvpn/conf.ini" | |
write_ini "net.ipv4.ip_forward" "1" "/etc/sysctl.conf" | |
elif [ "$v_openvpn_internet" = "n" ] || [ "$v_openvpn_internet" = "N" ]; then | |
echo "Désactivation de l'ipforward" | |
echo "Vos clients n'auront pas d'accès internet!" | |
write_ini "v_openvpn_internet" "0" "/etc/openvpn/conf.ini" | |
write_ini "net.ipv4.ip_forward" "0" "/etc/sysctl.conf" | |
fi | |
echo "Le fichier firewall crée" | |
echo "chmod du fichiers..." | |
chmod +x $Fichier_firewall | |
$Fichier_firewall restart | |
update-rc.d firewall defaults | |
} | |
choplip() #Récupere l'ip publique du serveur | |
{ | |
MONIP=`wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\< -f 1` | |
} | |
validationIP() #Permet de vérifier que l'entrée utilisateur soit bien une IP... | |
{ | |
valideIP="FALSE" | |
if [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then | |
valideIP="TRUE" | |
else | |
valideIP="FALSE" | |
fi | |
} | |
connexiontest() #Permet de tester la connectivité internet du serveur avant le téléchargement des paquets | |
{ | |
internet_result="" | |
echo "Test de connectivité internet..." | |
ping -c3 checkip.dyndns.com | |
TEST=$? | |
if [ $TEST -ne 0 ] | |
then | |
internet="[Pas de connexion détecté]" | |
internet_result="FALSE" | |
else | |
internet="[Connexion détecté]" | |
fi | |
} | |
reboot() #Pour reboot le serveur complétement ! | |
{ | |
while [ "$rebootemoi" != "y" ] && [ "$rebootemoi" != "Y" ] && [ "$rebootemoi" != "N" ] && [ "$rebootemoi" != "n" ] | |
do | |
echo -n -e "\033[1mVoulez-vous redémarrer maintenant? (Y/N): \033[0m" | |
read rebootemoi | |
done | |
if [ "$rebootemoi" = "y" ] || [ "$rebootemoi" = "Y" ]; then | |
reboot | |
fi | |
} | |
reboot_opvn() #Pour reboot openvpn | |
{ | |
while [ "$reboote_opvn" != "y" ] && [ "$reboote_opvn" != "Y" ] && [ "$reboote_opvn" != "N" ] && [ "$reboote_opvn" != "n" ] | |
do | |
echo -e "\033[1mCette opération demande un redémarrage d'open vpn... (Y/N): \033[0m" | |
echo -n -e "\033[1mVoulez-vous redémarrer maintenant? (Y/N): \033[0m" | |
read reboote_opvn | |
done | |
#if [ "$reboote_opvn" = "y" ] || [ "$reboote_opvn" = "Y" ]; then | |
# /etc/init.d/openvpn restart | |
#fi | |
} | |
mailto() #Permet d'envoyer les fichiers par email | |
{ | |
while [ "$mail_to_user" != "y" ] && [ "$mail_to_user" != "Y" ] && [ "$mail_to_user" != "N" ] && [ "$mail_to_user" != "n" ] | |
do | |
echo -n -e "\033[1mVoulez-vous envoyer les fichiers de configuration par mail au client?(Y/N) \033[0m" | |
read mail_to_user | |
done | |
if [ "$mail_to_user" = "y" ] || [ "$mail_to_user" = "Y" ]; then | |
echo -n -e "\033[1mQuelle est l'email de "$v_nom_clientP"?\033[0m" | |
read email_user | |
echo "Envoi du mail..." | |
echo "Merci de patienter, cela peut prendre un peu de temps!" | |
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 | |
echo "Email envoyé." | |
fi | |
} | |
HOST=`hostname` | |
echo "Script d'installation simplifié d'openVPN" | |
echo "Auteur: Tlams" | |
echo "Date: 15/02/13" | |
echo "Version: 1.0" | |
echo "Langue: Français" | |
genere_fichier_var_ini | |
menu |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment