vpn.sh 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. #!/bin/bash
  2. #Initialisation des variables
  3. SOURCE=`pwd`
  4. echo ' __ __ _____ ____ ____ _____ ______'
  5. echo ' \ \ / / /\ | __ \ / __ \| _ \ /\ / ____| ____|'
  6. echo ' \ V / / \ | |__) | | | | |_) | / \ | (___ | |__'
  7. echo ' > < / /\ \ | _ /| | | | _ < / /\ \ \___ \| __|'
  8. echo ' / . \ / ____ \| | \ \| |__| | |_) / ____ \ ____) | |____'
  9. echo ' /_/ \_\/_/ \_\_| \_\\____/|____/_/ \_\_____/|______|'
  10. echo ' _____ __ _'
  11. echo '/ ___| / _| |'
  12. echo '\ `--. ___ | |_| |___ ____ _ _ __ ___'
  13. echo ' `--. \/ _ \| _| __\ \ /\ / / _` | '__/ _ \'
  14. echo '/\__/ / (_) | | | |_ \ V V / (_| | | | __/'
  15. echo '\____/ \___/|_| \__| \_/\_/ \__,_|_| \___|'
  16. echo ""
  17. echo "Programme de déploiement de service OpenVPN (V1)"
  18. echo ""
  19. read -p "Ce script s'adresse aux utilisateurs expérimentés. Voulez-vous continuer ? (O/N) : " CONFIRM
  20. CONFIRM=${CONFIRM^^}
  21. if [ $CONFIRM != 'O' ];
  22. then
  23. exit
  24. fi
  25. echo "#######################"
  26. echo "# Lancement du script #"
  27. echo "#######################"
  28. # Installation des mises à jours
  29. echo "########################################"
  30. echo "# Début de la procédure de mise à jour #"
  31. echo "########################################"
  32. apt-get update
  33. apt-get upgrade -y
  34. echo "-- Mise à jour terminé !"
  35. # Services à déployer
  36. echo "#######################"
  37. echo "# Services à déployer #"
  38. echo "#######################"
  39. read -p "Voulez-vous déployer le service VPN ? (O/N) : " VPN
  40. VPN=${VPN^^}
  41. # Récupération interface
  42. read -p "Quel est l'interface réseau à utilisé ? : " INTERFACE
  43. INTERFACE=${INTERFACE,,}
  44. if [ $VPN == 'O' ];
  45. then
  46. # Installation VPN
  47. echo "######################################"
  48. echo "# Lancement de l'installation du VPN #"
  49. echo "######################################"
  50. apt-get install openssl -y
  51. echo "-- Installation de OpenSSL terminé !"
  52. apt-get install openvpn -y
  53. echo "-- Installation de OpenVPN terminé !"
  54. apt-get install easy-rsa -y
  55. echo "-- Installation de Easy-RSA terminé !"
  56. apt-get install ipcalc -y
  57. echo "-- Installation de IPCALC terminé !"
  58. apt-get install zip -y
  59. echo "-- Installation de ZIP terminé !"
  60. # Questions VPN et définition des variables
  61. echo "########################"
  62. echo "# Configuration du VPN #"
  63. echo "########################"
  64. read -p "Entre le code pays du certificat : " KEY_COUNTRY
  65. KEY_COUNTRY=${KEY_COUNTRY^^}
  66. read -p "Entrer le département du certificat : " KEY_PROVINCE
  67. read -p "Entrer la ville du certificat : " KEY_CITY
  68. read -p "Entrer le nom de l'organisation du certificat : " KEY_ORG
  69. read -p "Entrer l'unité d'organisation du certificat : " KEY_OU
  70. read -p "Entrer l'adresse email de contact du certificat : " KEY_EMAIL
  71. read -p "Entrer le nom du service VPN : " VPN_NAME
  72. VPN_NAME=${VPN_NAME,,}
  73. read -p "Entrer le port du service VPN : " VPN_PORT
  74. read -p "Entrer l'adresse réseau du réseau VPN : " VPN_NETWORK
  75. read -p "Entrer le masque de votre réseau VPN : " VPN_NETMASK
  76. read -p "Entrer le FQDN de votre serveur : " VPN_ADRESSE
  77. VPN_ADRESSE=${VPN_ADRESSE,,}
  78. read -p "Entrer le DNS que votre client utilisera : " VPN_DNS
  79. read -p "Entrer le TLD de votre réseau : " VPN_TLD
  80. VPN_TLD=${VPN_TLD,,}
  81. read -p "Entre le nom du certificat client du service VPN : " VPN_USER
  82. VPN_USER=${VPN_USER,,}
  83. read -p "Voulez-vous sécuriser le certificat client par un mot de passe ? (O/N) : " VPN_USER_PASS
  84. VPN_USER_PASS=${VPN_USER_PASS^^}
  85. VPN_NETWORK=`ipcalc $VPN_NETWORK $VPN_NETMASK | grep Network | awk -F" " '{print $2}' | awk -F"/" '{print $1}'`
  86. INTERFACES_CONFIG=`cat /etc/network/interfaces | grep "pre-up iptables-restore < /etc/openvpn/iptables.rules"`
  87. VPN_IPTABLES_CONFIG='pre-up iptables-restore < /etc/openvpn/iptables.rules'
  88. # Configuration DNS
  89. echo "###################################"
  90. echo "# Génération du certifiat serveur #"
  91. echo "###################################"
  92. mkdir /etc/openvpn/easy-rsa
  93. cp /usr/share/easy-rsa/* /etc/openvpn/easy-rsa
  94. echo "-- easy-rsa copié !"
  95. echo "" > /etc/openvpn/easy-rsa/vars
  96. echo -e "export EASY_RSA=\"\`pwd\`\"\nexport OPENSSL=\"openssl\"\nexport PKCS11TOOL=\"pkcs11-tool\"\nexport GREP=\"grep\"\nexport KEY_CONFIG=\`\$EASY_RSA/whichopensslcnf \$EASY_RSA\`\nexport KEY_DIR=\"\$EASY_RSA/keys\"\necho NOTE: If you run ./clean-all, I will be doing a rm -rf on \$KEY_DIR\nexport PKCS11_MODULE_PATH=\"dummy\"\nexport PKCS11_PIN=\"dummy\"\nexport KEY_SIZE=1024\nexport CA_EXPIRE=3650\nexport KEY_COUNTRY=\"$KEY_COUNTRY\"\nexport KEY_PROVINCE=\"$KEY_PROVINCE\"\nexport KEY_CITY=\"$KEY_CITY\"\nexport KEY_ORG=\"$KEY_ORG\"\nexport KEY_EMAIL=\"$KEY_EMAIL\"\nexport KEY_OU=\"$KEY_OU\"\nexport KEY_NAME=\"$VPN_NAME\"" >> /etc/openvpn/easy-rsa/vars
  97. cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
  98. echo "-- easy-rsa modifié !"
  99. cd /etc/openvpn/easy-rsa
  100. source vars
  101. ./clean-all
  102. ./build-dh
  103. ./pkitool --initca
  104. ./pkitool --server $VPN_NAME
  105. openvpn --genkey --secret keys/ta.key
  106. echo "-- Certificat généré !"
  107. cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn/easy-rsa/keys/$VPN_NAME.crt /etc/openvpn/easy-rsa/keys/$VPN_NAME.key /etc/openvpn/easy-rsa/keys/dh1024.pem /etc/openvpn/
  108. echo "-- Copie du certificat !"
  109. echo "####################################"
  110. echo "# Copie de la configuration du VPN #"
  111. echo "####################################"
  112. mkdir /etc/openvpn/jail
  113. mkdir /etc/openvpn/jail/tmp
  114. mkdir /etc/openvpn/clientconf
  115. touch /etc/openvpn/$VPN_NAME.conf
  116. echo -e "mode server\nproto tcp\nport $VPN_PORT\ndev tun\ntopology subnet\nca ca.crt\ncert $VPN_NAME.crt\nkey $VPN_NAME.key\ndh dh1024.pem\ntls-auth ta.key 1\nkey-direction 0\ncipher AES-256-CBC\nserver $VPN_NETWORK $VPN_NETMASK\npush \"redirect-gateway def1\"\npush \"dhcp-option DNS $VPN_DNS\"\npush \"dhcp-option DOMAIN $VPN_TLD\"\nkeepalive 10 120\nclient-to-client\nuser nobody\ngroup nogroup\nchroot /etc/openvpn/jail\npersist-key\npersist-tun\ncomp-lzo\nduplicate-cn\nverb 3\nmute 20\nstatus openvpn-status.log\nlog-append /var/log/openvpn.log" >> /etc/openvpn/$VPN_NAME.conf
  117. echo "-- Fichiers créés !"
  118. echo "################################"
  119. echo "# Activation du routage et NAT #"
  120. echo "################################"
  121. sed -i -e "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g" /etc/sysctl.conf
  122. echo "-- Routage activé !"
  123. iptables -I FORWARD -i tun0 -j ACCEPT
  124. iptables -I FORWARD -o tun0 -j ACCEPT
  125. iptables -I INPUT -i tun0 -j ACCEPT
  126. iptables -I OUTPUT -o tun0 -j ACCEPT
  127. iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE
  128. sh -c "iptables-save > /etc/openvpn/iptables.rules"
  129. if [ -z $INTERFACES_CONFIG ] || [ $INTERFACES_CONFIG != $VPN_IPTABLES_CONFIG ];
  130. then
  131. echo "pre-up iptables-restore < /etc/openvpn/iptables.rules" >> /etc/network/interfaces
  132. fi
  133. echo "-- Règles NAT activé !"
  134. echo "##################################"
  135. echo "# Génération du certifiat client #"
  136. echo "##################################"
  137. if [ $VPN_USER_PASS == 'O' ];
  138. then
  139. echo "Entrer le mot de passe du certificat client : "
  140. ./build-key-pass $VPN_USER
  141. else
  142. ./build-key $VPN_USER
  143. fi
  144. echo "-- Certificat créé !"
  145. mkdir /etc/openvpn/clientconf/$VPN_USER
  146. cp /etc/openvpn/ca.crt /etc/openvpn/ta.key /etc/openvpn/easy-rsa/keys/$VPN_USER.crt /etc/openvpn/easy-rsa/keys/$VPN_USER.key /etc/openvpn/clientconf/$VPN_USER/
  147. echo "-- Certificat copié !"
  148. touch /etc/openvpn/clientconf/$VPN_USER/client.conf
  149. echo -e "client\ndev tun\nproto tcp-client\nremote $VPN_ADRESSE $VPN_PORT\nresolv-retry infinite\ncipher AES-256-CBC\nca ca.crt\ncert $VPN_USER.crt\nkey $VPN_USER.key\ntls-auth ta.key 1\nkey-direction 1\nnobind\npersist-key\npersist-tun\ncomp-lzo\nverb 3\nauth-nocache" >> /etc/openvpn/clientconf/$VPN_USER/client.conf
  150. cp /etc/openvpn/clientconf/$VPN_USER/client.conf /etc/openvpn/clientconf/$VPN_USER/client.ovpn
  151. echo "-- Configuration généré !"
  152. zip /etc/openvpn/clientconf/$VPN_USER.zip /etc/openvpn/clientconf/$VPN_USER/*.*
  153. echo "-- Archive créé !"
  154. fi
  155. # Redémarrage des services
  156. echo "############################"
  157. echo "# Redémarrage des services #"
  158. echo "############################"
  159. if [ $VPN == 'O' ];
  160. then
  161. service openvpn restart
  162. echo "-- OpenVPN redémarré !"
  163. fi
  164. cd $SOURCE
  165. # Ajout de la vérification XAROBASE
  166. FILE=`cat /etc/XAROBASE`
  167. if [ -z $FILE ] || [ $FILE != 'INSTALLED' ];
  168. then
  169. # Ajout du motd
  170. touch /etc/XAROBASE
  171. echo "INSTALLED" > /etc/XAROBASE
  172. echo "" > /etc/motd
  173. echo ' __ __ _____ ____ ____ _____ ______' >> /etc/motd
  174. echo ' \ \ / / /\ | __ \ / __ \| _ \ /\ / ____| ____|' >> /etc/motd
  175. echo ' \ V / / \ | |__) | | | | |_) | / \ | (___ | |__' >> /etc/motd
  176. echo ' > < / /\ \ | _ /| | | | _ < / /\ \ \___ \| __|' >> /etc/motd
  177. echo ' / . \ / ____ \| | \ \| |__| | |_) / ____ \ ____) | |____' >> /etc/motd
  178. echo ' /_/ \_\/_/ \_\_| \_\\____/|____/_/ \_\_____/|______|' >> /etc/motd
  179. echo ' _____ __ _' >> /etc/motd
  180. echo '/ ___| / _| |' >> /etc/motd
  181. echo '\ `--. ___ | |_| |___ ____ _ _ __ ___' >> /etc/motd
  182. echo ' `--. \/ _ \| _| __\ \ /\ / / _` | '__/ _ \' >> /etc/motd
  183. echo '/\__/ / (_) | | | |_ \ V V / (_| | | | __/' >> /etc/motd
  184. echo '\____/ \___/|_| \__| \_/\_/ \__,_|_| \___|' >> /etc/motd
  185. echo -e "\n\t\t\t\t\t\t${HOSTNAME^^}" >> /etc/motd
  186. echo '' >> /etc/motd
  187. fi
  188. if [ $VPN == 'O' ];
  189. then
  190. echo "-- Service VPN" >> /etc/motd
  191. fi
  192. echo "#########################"
  193. echo "# Fin de l'installation #"
  194. echo "#########################"
  195. echo "Vous disposé maintenant des services suivant : "
  196. if [ $VPN == 'O' ];
  197. then
  198. echo "-- Service VPN"
  199. echo "Vous pouvez vous connecter au serveur avec un client grâce à l'archive présente dans /etc/openvpn/clientconf/$VPN_USER.zip"
  200. echo "Un redémarrage est nécessaire !"
  201. fi