Advertisement
SlayerS76

Untitled

Dec 9th, 2020
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.60 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Cette fonction permet de poser des questions
  4. ecrire_question(){
  5. repok="nok"
  6. while [ $repok != 'ok' ]
  7. do
  8. read -p "$1" reponse
  9. if [ -n $2 ] && [ $2 = "ouinon" ];then # impose une reponse fermee
  10. if [ ! -z $reponse ] && ( [ $reponse = "o" ] || [ $reponse = "n" ] );then
  11. repok="ok"
  12. fi
  13. elif [ -n $2 ] && [ $2 = "mail" ];then # impose une reponse avec un mail
  14. if [ ! -z $reponse ] && [[ $reponse =~ ^[^\W][a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.[a-zA-Z]{2,14}$ ]];then
  15. repok="ok"
  16. fi
  17. elif [ -n $2 ] && [ $2 = "port" ];then # impose une reponse avec un numero de port
  18. #printf -v int '%d\n' "$reponse" 2>/dev/null
  19. if [ ! -z $reponse ] && [[ "$reponse" =~ ^[0-9]+$ ]] && [ $reponse -le 65535 ] && [ $reponse -ge 1 ];then
  20. repok="ok"
  21. fi
  22. elif [ -n $2 ] && [ $2 = "texte" ];then # accepte toutes les réponses non vides
  23. if [ ! -z $reponse ];then
  24. repok="ok"
  25. fi
  26. elif [ -n $2 ] && [ $2 = "chiffre" ];then # accepte toutes les réponses en chiffre
  27. #printf -v int '%d\n' "$reponse" 2>/dev/null
  28. if [ ! -z $reponse ] && [[ "$reponse" =~ ^[0-9]+$ ]];then
  29. repok="ok"
  30. fi
  31. else # accepte toutes les réponses meme vides
  32. repok="ok"
  33. fi
  34. if [ $repok = "ok" ];then # revoi de la reponse
  35. echo $reponse
  36. fi
  37. done
  38. }
  39.  
  40.  
  41. #mise en place des valeurs par defaut
  42. dolocate="y"
  43. debug="non"
  44. auto="non"
  45. help="no"
  46.  
  47. aptupdate="o"
  48. aptupgrade="o"
  49. installiptable="o"
  50. protectflood="o"
  51. protectscaniptable="o"
  52. protectscan="o"
  53. protectbruteforce="o"
  54. presentsshport=$( netstat -tpln | grep "ssh" | head -1 | cut -d':' -f2 | cut -d' ' -f1 )
  55. changeportssh="n"
  56. futursshport="22"
  57. maxretryloginssh="5"
  58. bantime="600"
  59. preotectrootkit="o"
  60. mailrkhuter="-"
  61. maillogwatchidemrkhunter="n"
  62. logwatch="o"
  63. maillogwatch="-"
  64.  
  65. resuminstall="\n\n------------------------------------------\n ------- Resume de l'installation -------\n------------------------------------------\n"
  66.  
  67. # verifif de la presence des attributs "all" ou "debug"
  68. for attribut in $*
  69. do
  70. #echo verification de l attribut $attribut
  71. if [ $attribut = "--all" ] || [[ $attribut =~ ^\-[^-]*a ]];then
  72. auto="yes"
  73. fi
  74. if [ $attribut = "--debug" ] || [[ $attribut =~ ^\-[^-]*d ]];then
  75. debug="yes"
  76. fi
  77. if [ $attribut = "--help" ] || [[ $attribut =~ ^\-[^-]*h ]];then
  78. help="yes"
  79. fi
  80. done
  81.  
  82. #activation du debug
  83. if [ -n $debug ] && [ $debug = "yes" ];then
  84. set -x
  85. fi
  86.  
  87. #aide du script
  88. if [ $help = "yes" ];then
  89. echo -e "\n\n --------------------------------------\n -------- Bienvenue dans l'aide -------\n --------------------------------------\n"
  90. echo -e "Ce script permet d'automatiser la securisation de votre serveur."
  91. echo -e "Vous pouvez utiliser les attributs suivant:\n"
  92. echo -e "-a ou --all permet de tout installer avec les valeurs par defaut"
  93. echo -e "-d ou --debug permet d'afficher le script au prorata de son execution"
  94. echo -e "-h ou --help affiche cette aide"
  95. echo -e "\nexemple: "$0" -h"
  96. echo -e "ou encore: "$0" -ad"
  97. echo -e "ou encore: "$0" --all --debug --help\n"
  98. else
  99.  
  100. # recup pref utilisateur
  101. if [ $auto != "yes" ];then
  102. aptupdate=`ecrire_question "Voulez-vous mettre a jour la liste des packages ? (o/n): " "ouinon"`
  103. aptupgrade=`ecrire_question "Voulez-vous mettre a jour les packages existants ? (o/n): " "ouinon"`
  104. installiptable=`ecrire_question "Voulez-vous installer le firewall IPtable ? (o/n): " "ouinon"`
  105. protectflood=`ecrire_question "Voulez-vous installer la protection contre le flood ou deni de service avec IPtable ? (o/n): " "ouinon"`
  106. protectscaniptable=`ecrire_question "Voulez-vous installer une protection contre les scan de port avec IPtable ? (o/n): " "ouinon"`
  107. protectscan=`ecrire_question "Voulez-vous installer une protection contre les scan de port avec Portsentry ? (o/n): " "ouinon"`
  108. protectbruteforce=`ecrire_question "Voulez-vous installer une protection contre le brute-force, dictionnaire, deni de service avec Fail2ban ? (o/n): " "ouinon"`
  109. changeportssh=`ecrire_question "Voulez-vous changer le numero de port SSH (actuellement sur le port TCP $presentsshport) ? (o/n): " "ouinon"`
  110. if [ $changeportssh = "o" ];then
  111. futursshport=`ecrire_question "Quel port TCP souhaitez-vous pour le service SSH ? (entre 1 et 65535): " "port"`
  112. else
  113. futursshport=$presentsshport
  114. fi
  115. maxretryloginssh=`ecrire_question "Combien voulez-vous autoriser de tentatives de connexion echouees ? (5 conseillees): " "chiffre"`
  116. bantime=`ecrire_question "Combien de temps voulez-vous banir l'attaquant (en seconde) ? (600 => 10min, 3600 => 1h, 86400 => 1j, ... ): " "chiffre"`
  117. fi
  118. if [ $auto != "yes" ];then
  119. preotectrootkit=`ecrire_question "Voulez-vous installer une protection contre les rootkits et backdoors avec Rkhunter ? (o/n): " "ouinon"`
  120. fi
  121. if [ $preotectrootkit = "o" ];then
  122. mailrkhuter=`ecrire_question "Indiquez le mail d'alerte de Rkhunter : " "mail"`
  123. fi
  124. if [ $auto != "yes" ];then
  125. logwatch=`ecrire_question "Voulez-vous installer le logiciel d'analyse de logs logwatch ? (o/n): " "ouinon"`
  126. fi
  127. if [ $logwatch = "o" ];then
  128. if [ $mailrkhuter != "-" ];then
  129. maillogwatchidemrkhunter=`ecrire_question "Voulez-vous utiliser le mail "$mailrkhuter" pour les alertes de Logwatch ? (o/n)" "ouinon"`
  130. fi
  131. if [ $maillogwatchidemrkhunter = "o" ];then
  132. maillogwatch=$mailrkhuter
  133. else
  134. maillogwatch=`ecrire_question "Indiquez le mail d'alerte de logwatch : " "mail"`
  135. fi
  136.  
  137. fi
  138. # Mettre a jour la liste des packages
  139. if [ $aptupdate = "o" ];then
  140. installok="no"
  141. apt-get -y update && installok="yes" && resuminstall=$resuminstall"La liste des packages est finalisee.\n"
  142. if [ $installok = "no" ];then
  143. resuminstall=$resuminstall"!!!La liste des packages n'a pas ete finalisee. (apt-get -y update)!!!\n"
  144. fi
  145. else
  146. resuminstall=$resuminstall"---La liste des packages n'est pas demandee.---\n"
  147. fi
  148. echo -e $resuminstall
  149.  
  150. # Mettre a jour les packages existants
  151. if [ $aptupgrade = "o" ];then
  152. installok="no"
  153. apt-get -y upgrade && installok="yes" && resuminstall=$resuminstall"La mise a jour des packages existants est finalisee.\n"
  154. if [ $installok = "no" ];then
  155. resuminstall=$resuminstall"!!!La mise a jour des packages existants n'a pas ete finalisee. (apt-get -y upgrade)!!!\n"
  156. fi
  157. else
  158. resuminstall=$resuminstall"---La mise a jour des packages existants n'est pas demandee.---\n"
  159. fi
  160. echo -e $resuminstall
  161.  
  162. # Installer le firewall IPtable
  163. if [ $installiptable = "o" ];then
  164. installok="no"
  165. apt-get install iptables -y && installok="yes" && resuminstall=$resuminstall"L'installation du firewall IPtable est finalisee.\n"
  166. if [ $installok = "no" ];then
  167. resuminstall=$resuminstall"!!!L'installation du firewall IPtable n'a pas ete finalisee. (apt-get install iptables -y)!!!\n"
  168. fi
  169. else
  170. resuminstall=$resuminstall"---L'installation du firewall IPtable n'est pas demandee.---\n"
  171. fi
  172. echo -e $resuminstall
  173.  
  174. # Installer la protection contre le flood ou deni de service avec IPtable
  175. if [ $protectflood = "o" ];then
  176. installok="no"
  177. iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT && iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT && iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT && installok="yes" && resuminstall=$resuminstall"L'installation de la protection contre le flood ou deni de service avec IPtable est finalisee.\n"
  178. if [ $installok = "no" ];then
  179. resuminstall=$resuminstall"!!!L'installation de la protection contre le flood ou deni de service avec IPtable n'a pas ete finalisee. (iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT && iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT && iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT )!!!\n"
  180. fi
  181. else
  182. resuminstall=$resuminstall"---L'installation de la protection contre le flood ou deni de service avec IPtable n'est pas demandee.---\n"
  183. fi
  184. echo -e $resuminstall
  185.  
  186. # Installer une protection contre les scan de port avec IPtable
  187. if [ $protectscaniptable = "o" ];then
  188. installok="no"
  189. iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT && installok="yes" && resuminstall=$resuminstall"L'installation d'une protection contre les scan de port avec IPtable est finalisee.\n"
  190. if [ $installok = "no" ];then
  191. resuminstall=$resuminstall"!!!L'installation d'une protection contre les scan de port avec IPtable n'a pas ete finalisee. (iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT)!!!\n"
  192. fi
  193. else
  194. resuminstall=$resuminstall"---L'installation d'une protection contre les scan de port avec IPtable n'est pas demandee.---\n"
  195. fi
  196. echo -e $resuminstall
  197.  
  198. # Installer une protection contre les scan de port avec Portsentry
  199. if [ $protectscan = "o" ];then
  200. installok="no"
  201. apt-get install portsentry -y
  202. if [ -f "/etc/portsentry/portsentry.conf" ];then
  203. fileconfportsentry="/etc/portsentry/portsentry.conf"
  204. elif [ -f "/usr/local/psionic/portsentry/portsentry.conf" ];then
  205. fileconfportsentry="/usr/local/psionic/portsentry/portsentry.conf"
  206. else
  207. if [ $dolocate = "y" ];then
  208. updatedb
  209. fi
  210. fileconfportsentry='locate -r \"portsentry.conf\$\"'
  211. fi
  212. for fichier in $fileconfportsentry
  213. do
  214. #Commentez les lignes KILL_HOSTS_DENY
  215. sed -i -e "s/KILL_HOSTS_DENY/\#KILL_HOSTS_DENY/g" "$fichier"
  216. #Décommentez la ligne KILL_ROUTE="/sbin/iptables -I INPUT-s $TARGET$ -j DROP"
  217. sed -i -e "s/\#KILL_ROUTE=\"\/sbin\/iptables -I INPUT-s \$TARGET$ -j DROP\"/KILL_ROUTE=\"\/sbin\/iptables -I INPUT-s \$TARGET\$ -j DROP\"/g" "$fichier"
  218. installok="yes"
  219. done
  220. if [ $installok="yes" ];then
  221. resuminstall=$resuminstall"L'installation d'une protection contre les scan de port avec Portsentry est finalisee.\n"
  222. fi
  223. if [ $installok = "no" ];then
  224. resuminstall=$resuminstall"!!!L'installation d'une protection contre les scan de port avec Portsentry n'a pas ete finalisee. ()!!!\n"
  225. fi
  226. else
  227. resuminstall=$resuminstall"---L'installation d'une protection contre les scan de port avec Portsentry n'est pas demandee.---\n"
  228. fi
  229. echo -e $resuminstall
  230.  
  231. # Installer une protection contre le brute-force, dictionnaire, deni de service avec Fail2ban
  232. if [ $protectbruteforce = "o" ];then
  233. installok="no"
  234. apt-get install fail2ban -y
  235. if [ -f "/etc/fail2ban/jail.conf" ];then
  236. fileconffail2ban="/etc/fail2ban/jail.conf"
  237. else
  238. if [ $dolocate = "y" ];then
  239. updatedb
  240. fi
  241. fileconffail2ban='locate -r \"jail.conf\$\"'
  242. fi
  243. for fichier in $fileconffail2ban
  244. do
  245.  
  246. #Remplacer le port dans le fichier jail.conf
  247. #sed -ine "/^\[section\]/,/^variable*/{s/^variable.*/replacement = value/}" myfile.conf
  248. sed -in "/^\[ssh\]/,/^port*/{s/^port.*/port = $futursshport/}" "$fichier"
  249.  
  250. #changement du port SSH pour open SSH
  251. sed -i -e "s/^#Port.*/Port = $futursshport/g" /etc/ssh/sshd_config
  252.  
  253. #nombre de tentatives
  254. sed -i -e "s/^maxretry.*/maxretry = $maxretryloginssh/g" /etc/fail2ban/jail.conf
  255.  
  256. #temps de bannissement
  257. sed -i -e "s/^bantime.*/bantime = $bantime/g" /etc/fail2ban/jail.conf
  258.  
  259. installok="yes"
  260. done
  261. if [ $installok="yes" ];then
  262. resuminstall=$resuminstall"L'installation d'une protection contre le brute-force, dictionnaire, deni de service avec Fail2ban est finalisee.\n"
  263. fi
  264. if [ $installok = "no" ];then
  265. resuminstall=$resuminstall"!!!L'installation d'une protection contre le brute-force, dictionnaire, deni de service avec Fail2ban n'a pas ete finalisee. ()!!!\n"
  266. fi
  267. else
  268. resuminstall=$resuminstall"---L'installation d'une protection contre le brute-force, dictionnaire, deni de service avec Fail2ban n'est pas demandee.---\n"
  269. fi
  270. echo -e $resuminstall
  271.  
  272.  
  273.  
  274. # Installer une protection contre les rootkits et backdoors avec Rkhunter
  275.  
  276. if [ $protectrootkit="o" ];then
  277. installok="no"
  278. mailRKHunter="mail@gmail.com"
  279. apt-get install rkhunter -y
  280.  
  281. read -p "Veuillez entrer un mail pour reçevoir des rapports :" reponse
  282. mailRKHunter=$reponse
  283. fileconfrkhunter="/etc/default/rkhunter"
  284. for fichier in $fileconfrkhunter
  285. do
  286.  
  287. sed -i "s|REPORT_EMAIL.*=.*""|REPORT_EMAIL="$mailRKHunter"|g" $fichier
  288. sed -i "s|CRON_DAILY_RUN.*=.*""|CRON_DAILY_RUN="yes"|g" $fichier
  289. installok="yes"
  290. done
  291.  
  292. if [ $installok="yes" ];then
  293. resuminstall=$resuminstall"L'installation d'une protection contre les rootkits et backdoors avec Rkhunter est finalisee.\n\n"
  294. else
  295. resuminstall=$resuminstall"!!!L'installation d'une protection contre les rootkits et backdoors avec Rkhunter n'a pas ete finalisee. ()!!!\n\n"
  296. fi
  297. else
  298. resuminstall=$resuminstall"---L'installation d'une protection contre les rootkits et backdoors avec Rkhunter n'est pas demandee.---\n\n"
  299. fi
  300.  
  301. echo -e $resuminstall
  302.  
  303.  
  304. # Installer le logiciel d'analyse de logs logwatch
  305. if [ $logwatch = "o" ];then
  306. installok="no"
  307. apt-get install -y logwatch \
  308. && read -p "Veuillez entrer un mail pour reçevoir des rapports d'analyse de logs:" reponse \
  309. && mailLogwatch="$reponse" \
  310. && sed -i "s|MailTo.*=.*root|MailTo="$mailLogwatch"|g" /usr/share/logwatch/default.conf/logwatch.conf \
  311. && installok="yes" \
  312. && resuminstall=$resuminstall"L'installation d'un outil d'analyse de logs Logwatch est finalisee.\n"
  313. if [ $installok = "no" ];then
  314. resuminstall=$resuminstall"!!!L'installation d'un outil d'analyse de logs Logwatch n'a pas ete finalisee. ()!!!\n"
  315. fi
  316. else
  317. resuminstall=$resuminstall"---L'installation d'un outil d'analyse de logs Logwatch n'est pas demandee.---\n"
  318. fi
  319.  
  320. echo -e $resuminstall
  321.  
  322. fi
  323.  
  324. # desactivation du debug
  325. if [ -n $debug ] && [ $debug = "yes" ];then
  326. set -
  327. fi
  328.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement