dns-dhcp.sh 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. #!/bin/bash
  2. #Initialisation des variables
  3. SOURCE=`pwd`
  4. MAJ=n
  5. MENTEUR=n
  6. echo ' __ __ _____ ____ ____ _____ ______'
  7. echo ' \ \ / / /\ | __ \ / __ \| _ \ /\ / ____| ____|'
  8. echo ' \ V / / \ | |__) | | | | |_) | / \ | (___ | |__'
  9. echo ' > < / /\ \ | _ /| | | | _ < / /\ \ \___ \| __|'
  10. echo ' / . \ / ____ \| | \ \| |__| | |_) / ____ \ ____) | |____'
  11. echo ' /_/ \_\/_/ \_\_| \_\\____/|____/_/ \_\_____/|______|'
  12. echo ' _____ __ _'
  13. echo '/ ___| / _| |'
  14. echo '\ `--. ___ | |_| |___ ____ _ _ __ ___'
  15. echo ' `--. \/ _ \| _| __\ \ /\ / / _` | '__/ _ \'
  16. echo '/\__/ / (_) | | | |_ \ V V / (_| | | | __/'
  17. echo '\____/ \___/|_| \__| \_/\_/ \__,_|_| \___|'
  18. echo ""
  19. echo "Programme de déploiement de service DNS et DHCP (V1)"
  20. echo ""
  21. read -p "Ce script s'adresse aux utilisateurs expérimentés. Voulvez-vous continuer ? (O/N) : " CONFIRM
  22. CONFIRM=${CONFIRM^^}
  23. if [ $CONFIRM != 'O' ];
  24. then
  25. exit
  26. fi
  27. echo "#######################"
  28. echo "# Lancement du script #"
  29. echo "#######################"
  30. # Installation des mises à jours
  31. echo "########################################"
  32. echo "# Début de la procédure de mise à jour #"
  33. echo "########################################"
  34. apt-get update
  35. apt-get upgrade -y
  36. echo "-- Mise à jour terminé !"
  37. # Services à déployer
  38. echo "#######################"
  39. echo "# Services à déployer #"
  40. echo "#######################"
  41. read -p "Voulez-vous déployer le service DNS ? (O/N) : " DNS
  42. DNS=${DNS^^}
  43. read -p "Voulez-vous déployer le service DHCP ? (O/N) : " DHCP
  44. DHCP=${DHCP^^}
  45. # Sevices associés
  46. if [ $DNS == 'O' ] && [ $DHCP == 'O' ];
  47. then
  48. read -p "Voulez-vous installer la fonctionnalité de mise à jour automaitque entre le DHCP et le DNS ? (O/N) : " MAJ
  49. MAJ=${MAJ^^}
  50. fi
  51. read -p "Quel est l'interface réseau à utilisé ? : " INTERFACE
  52. # Récupération adresse IP, HOSTNAME et utilisateur
  53. IP=`ifconfig $INTERFACE | grep netmask | awk -F" " '{print $2}'`
  54. HOSTNAME=`hostname`
  55. DNS_SRV=$IP
  56. USER=`whoami`
  57. if [ $DNS == 'O' ];
  58. then
  59. # Installation DNS
  60. echo "######################################"
  61. echo "# Lancement de l'installation du DNS #"
  62. echo "######################################"
  63. apt-get install bind9 -y
  64. echo "-- Installation du DNS terminé !"
  65. # Questions DNS et définition des variables
  66. echo "########################"
  67. echo "# Configuration du DNS #"
  68. echo "########################"
  69. read -p "Entrer le TLD de votre réseau local : " TLD
  70. TLD=${TLD,,}
  71. read -p "Voulez-vous installer la fonctionnalité de DNS menteur ? (O/N) : " MENTEUR
  72. MENTEUR=${MENTEUR^^}
  73. SERIAL=`date +%Y%m%d`
  74. IP_REV=`echo $IP | awk -F"." '{print $3}'`.`echo $IP | awk -F"." '{print $2}'`.`echo $IP | awk -F"." '{print $1}'`.in-addr.arpa
  75. IP_FIN=`echo $IP | awk -F"." '{print $4}'`
  76. # Configuration DNS
  77. echo "####################################"
  78. echo "# Copie de la configuration du DNS #"
  79. echo "####################################"
  80. echo -e "RESOLVCONF=no\nOPTIONS=\"-4 -u bind\"" > /etc/default/bind9
  81. echo "-- Paramètres appliqués !"
  82. echo "" > /etc/bind/named.conf.local
  83. if [ $MAJ == 'O' ];
  84. then
  85. echo -e "include \"/etc/bind/ddns.key\";\n" >> /etc/bind/named.conf.local
  86. fi
  87. echo -e "zone \"$TLD\" {\n\ttype master;\n\tfile\"/var/cache/bind/db.$TLD\";" >> /etc/bind/named.conf.local
  88. if [ $MAJ == 'O' ];
  89. then
  90. echo -e "\tallow-update { key DDNS_UPDATE; };" >> /etc/bind/named.conf.local
  91. fi
  92. echo -e "};\n" >> /etc/bind/named.conf.local
  93. echo -e "zone \"$IP_REV\" {\n\ttype master;\n\tfile \"/var/cache/bind/db.$TLD.inv\";" >> /etc/bind/named.conf.local
  94. if [ $MAJ == 'O' ];
  95. then
  96. echo -e "\tallow-update { key DDNS_UPDATE; };" >> /etc/bind/named.conf.local
  97. echo "-- Fonctionnalité de mise à jour du DNS et et DHCP activé !"
  98. fi
  99. echo -e "};\n" >> /etc/bind/named.conf.local
  100. echo "-- Zones configurés !"
  101. touch /etc/bind/db.$TLD
  102. touch /etc/bind/db.$TLD.inv
  103. echo -e "\$ORIGIN .\n\$TTL 7200\n$TLD\t\t\tIN SOA $HOSTNAME.$TLD. $USER.$TLD. (\n\t\t\t\t$SERIAL\n\t\t\t\t7200\n\t\t\t\t3600\n\t\t\t\t604800\n\t\t\t\t7200\n\t\t\t\t)\n\t\t\tNS\t$HOSTNAME.$TLD.\n\$ORIGIN $TLD.\n$HOSTNAME\t\t\tA\t$IP" >> /etc/bind/db.$TLD
  104. echo -e "\$ORIGIN .\n\$TTL 7200\n$IP_REV\t\t\tIN SOA $HOSTNAME.$TLD. $USER.$TLD. (\n\t\t\t\t$SERIAL\n\t\t\t\t7200\n\t\t\t\t3600\n\t\t\t\t604800\n\t\t\t\t7200\n\t\t\t\t)\n\t\t\tNS\t$HOSTNAME.$TLD.\n\$ORIGIN $IP_REV.\n$IP_FIN\t\t\tPTR\t$HOSTNAME.$TLD." >> /etc/bind/db.$TLD.inv
  105. echo "-- Fichiers de zones créés !"
  106. ln -s /etc/bind/db.$TLD /var/cache/bind/new.db.$TLD
  107. ln -s /etc/bind/db.$TLD.inv /var/cache/bind/new.db.$TLD.inv
  108. echo "-- Liens symboliques créés !"
  109. cp /var/cache/bind/new.db.$TLD /var/cache/bind/db.$TLD
  110. cp /var/cache/bind/new.db.$TLD.inv /var/cache/bind/db.$TLD.inv
  111. echo "-- Fichiers de zones déployés !"
  112. if [ $MENTEUR == 'O' ];
  113. then
  114. echo "#################################"
  115. echo "# Fonctionnalité de DNS menteur #"
  116. echo "#################################"
  117. touch /etc/bind/db.menteur
  118. echo "-- Zonne DNS menteur créé !"
  119. echo -e "\n\nzone \"menteur\" {\n\ttype master;\n\tfile\"/var/cache/bind/db.menteur\";\n};" >> /etc/bind/named.conf.local
  120. echo "-- Zone configuré !"
  121. echo -e "\$TTL 7200\n@\t\t\tIN SOA $HOSTNAME.$TLD. $USER.$TLD. (\n\t\t\t\t$SERIAL\n\t\t\t\t7200\n\t\t\t\t3600\n\t\t\t\t604800\n\t\t\t\t7200\n\t\t\t\t)\n\t\t\tIN NS\t$HOSTNAME.$TLD.\n" >> /etc/bind/db.menteur
  122. echo "-- Fichier de zone créé !"
  123. ln -s /etc/bind/db.menteur /var/cache/bind/new.db.menteur
  124. echo "-- Lien symbolique créé !"
  125. cp /var/cache/bind/new.db.menteur /var/cache/bind/db.menteur
  126. echo "-- Fichier de zone dépoyé !"
  127. fi
  128. chown bind:bind /var/cache/bind/db.*
  129. echo "-- Droits des fichiers appliqués !"
  130. echo "" > /etc/bind/named.conf.options
  131. echo -e "options {\n\tdirectory \"/var/cache/bind\";\n\tdnssec-validation auto;\n\tauth-nxdomain no;\n\tlisten-on { any; };\n\tlisten-on-v6 { none; };\n\tallow-query { any; };\n" >> /etc/bind/named.conf.options
  132. echo "-- Options DNS appliqués !"
  133. if [ $MENTEUR == 'O' ];
  134. then
  135. echo -e "\tresponse-policy { zone \"menteur\"; };\n" >> /etc/bind/named.conf.options
  136. echo "-- Application de la fonctionnalité de DNS menteur !"
  137. fi
  138. echo -e "};" >> /etc/bind/named.conf.options
  139. echo "-- DNS déployé !"
  140. fi
  141. if [ $DHCP == 'O' ];
  142. then
  143. # Installation DHCP
  144. echo "#######################################"
  145. echo "# Lancement de l'installation du DHCP #"
  146. echo "#######################################"
  147. apt-get install isc-dhcp-server -y
  148. echo "-- Installation du DHCP terminé !"
  149. # Installation IPCALC
  150. apt-get install ipcalc -y
  151. echo "-- Installation de IPCALC terminé !"
  152. # Questions DHCP et définition des variables
  153. echo "#########################"
  154. echo "# Configuration du DHCP #"
  155. echo "#########################"
  156. echo "Plage IP DHCP : "
  157. read -p "Entrer la première IP : " RANGE_DEB
  158. read -p "Entrer la dernière IP : " RANGE_FIN
  159. read -p "Entrer l'adresse de la passerelle : " PASSERELLE
  160. if [ $DNS != 'O' ];
  161. then
  162. read -p "Entrer le suffixe DNS du réseau : " TLD
  163. TLD=${TLD,,}
  164. read -p "Entrer l'adresse IP du serveur DNS : " DNS_SRV
  165. fi
  166. MSR=`ifconfig $INTERFACE | grep netmask | awk -F" " '{print $4}'`
  167. NETWORK=`ipcalc $IP/$MSR | grep Network | awk -F" " '{print $2}' | awk -F"/" '{print $1}'`
  168. # Configuration DHCP
  169. echo "####################################"
  170. echo "# Copie de la configuration du DNS #"
  171. echo "####################################"
  172. echo -e "INTERFACESv4=\"$INTERFACE\"\nINTERFACESv6=\"\"" > /etc/default/isc-dhcp-server
  173. echo "-- Paramètres appliqués !"
  174. echo "" > /etc/dhcp/dhcpd.conf
  175. echo -e "option domain-name \"$TLD\";\noption domain-name-servers $DNS_SRV;\ndefault-lease-time 3600;\nmax-lease-time 7200;\n" >> /etc/dhcp/dhcpd.conf
  176. echo "-- TLD et DNS configurés !"
  177. if [ $MAJ == 'O' ];
  178. then
  179. echo -e "ddns-updates on;\nddns-update-style interim;\nignore client-updates;\nupdate-static-leases on;\n\ninclude \"/etc/dhcp/ddns.key\";\n\nzone $TLD. {\n\tprimary $IP;\n\tkey DDNS_UPDATE;\n}\n\nzone $IP_REV. {\n\tprimary $IP;\n\tkey DDNS_UPDATE;\n}\n" >> /etc/dhcp/dhcpd.conf
  180. fi
  181. echo -e "authoritative;\n\nsubnet $NETWORK netmask $MSR {\n\trange $RANGE_DEB $RANGE_FIN;\n\toption subnet-mask $MSR;\n\toption routers $PASSERELLE;" >> /etc/dhcp/dhcpd.conf
  182. echo "-- Plage IP appliqué !"
  183. if [ $MAJ == 'O' ];
  184. then
  185. echo -e "\tddns-domainname \"$TLD.\";\n\tddns-rev-domainname \"in-addr.arpa\";" >> /etc/dhcp/dhcpd.conf
  186. echo "-- Fonctionnalité de mise à jour du DNS et et DHCP activé !"
  187. fi
  188. echo -e "}" >> /etc/dhcp/dhcpd.conf
  189. echo "-- DHCP déployé !"
  190. fi
  191. # Génération de la clé DDNS_UPDATE
  192. if [ $MAJ == 'O' ];
  193. then
  194. echo "###########################################"
  195. echo "# Génération de la clé d'échange DNS/DHCP #"
  196. echo "###########################################"
  197. cd /tmp
  198. DDNS_KEY=`dnssec-keygen -a HMAC-MD5 -b 128 -r /dev/urandom -n USER DDNS_UPDATE`
  199. DDNS_KEY=`cat $DDNS_KEY.private | grep Key | awk -F" " '{print $2}'`
  200. echo "-- Clé généré !"
  201. touch /etc/bind/ddns.key
  202. echo "-- Fichier créé !"
  203. echo -e "key DDNS_UPDATE {\n\talgorithm HMAC-MD5.SIG-ALG.REG.INT;\n\tsecret \"$DDNS_KEY\";\n};" >> /etc/bind/ddns.key
  204. echo "-- Clé copié !"
  205. chown root:bind /etc/bind/ddns.key
  206. chmod 640 /etc/bind/ddns.key
  207. cp /etc/bind/ddns.key /etc/dhcp/ddns.key
  208. chown root:root /etc/dhcp/ddns.key
  209. chmod 640 /etc/dhcp/ddns.key
  210. echo "-- Droits appliqués !"
  211. echo "-- Clé déployé !"
  212. fi
  213. # Redémarrage des services
  214. echo "############################"
  215. echo "# Redémarrage des services #"
  216. echo "############################"
  217. if [ $DNS == 'O' ];
  218. then
  219. service bind9 restart
  220. echo "-- DNS redémarré !"
  221. fi
  222. if [ $DHCP == 'O' ];
  223. then
  224. service isc-dhcp-server restart
  225. echo "-- DHCP redémarré !"
  226. fi
  227. cd $SOURCE
  228. # Ajout de la vérification XAROBASE
  229. FILE=`cat /etc/XAROBASE`
  230. if [ -z $FILE ] || [ $FILE != 'INSTALLED' ];
  231. then
  232. # Ajout du motd
  233. echo "" > /etc/motd
  234. echo ' __ __ _____ ____ ____ _____ ______' >> /etc/motd
  235. echo ' \ \ / / /\ | __ \ / __ \| _ \ /\ / ____| ____|' >> /etc/motd
  236. echo ' \ V / / \ | |__) | | | | |_) | / \ | (___ | |__' >> /etc/motd
  237. echo ' > < / /\ \ | _ /| | | | _ < / /\ \ \___ \| __|' >> /etc/motd
  238. echo ' / . \ / ____ \| | \ \| |__| | |_) / ____ \ ____) | |____' >> /etc/motd
  239. echo ' /_/ \_\/_/ \_\_| \_\\____/|____/_/ \_\_____/|______|' >> /etc/motd
  240. echo ' _____ __ _' >> /etc/motd
  241. echo '/ ___| / _| |' >> /etc/motd
  242. echo '\ `--. ___ | |_| |___ ____ _ _ __ ___' >> /etc/motd
  243. echo ' `--. \/ _ \| _| __\ \ /\ / / _` | '__/ _ \' >> /etc/motd
  244. echo '/\__/ / (_) | | | |_ \ V V / (_| | | | __/' >> /etc/motd
  245. echo '\____/ \___/|_| \__| \_/\_/ \__,_|_| \___|' >> /etc/motd
  246. echo -e "\n\t\t\t\t\t\t${HOSTNAME^^}" >> /etc/motd
  247. echo '' >> /etc/motd
  248. fi
  249. if [ $DNS == 'O' ];
  250. then
  251. echo "-- Serice DNS" >> /etc/motd
  252. fi
  253. if [ $MENTEUR == 'O' ];
  254. then
  255. echo "-- Fonctionnalité DNS menteur activé" >> /etc/motd
  256. fi
  257. if [ $DHCP == 'O' ];
  258. then
  259. echo "-- Serice DHCP" >> /etc/motd
  260. fi
  261. if [ $MAJ == 'O' ];
  262. then
  263. echo "-- Fonctionnalité de mise à jour DNS et DHCP activé" >> /etc/motd
  264. fi
  265. echo "#########################"
  266. echo "# Fin de l'installation #"
  267. echo "#########################"
  268. echo "Vous disposé maintenant des services suivant : "
  269. if [ $DNS == 'O' ];
  270. then
  271. echo "-- Service DNS"
  272. fi
  273. if [ $MENTEUR == 'O' ];
  274. then
  275. echo "-- Fonctionnalité DNS menteur activé"
  276. fi
  277. if [ $DHCP == 'O' ];
  278. then
  279. echo "-- Serice DHCP"
  280. fi
  281. if [ $MAJ == 'O' ];
  282. then
  283. echo "-- Fonctionnalité de mise à jour DNS et DHCP activé"
  284. fi