script_centos_isp.sh 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. #!/bin/bash
  2. clear
  3. echo " _____ _ ____ _____ __ _ _____ "
  4. echo " / ____| | | / __ \ / ____| / _| | | / ____| "
  5. echo " | | ___ _ __ | |_| | | | (___ _ __ ___ _ __| |_ ___ ___| |_| (___ ___ _ ____ __"
  6. echo " | | / _ \ '_ \| __| | | |\___ \ | '_ \ / _ \ '__| _/ _ \/ __| __|\___ \ / _ \ '__\ \ / /"
  7. echo " | |___| __/ | | | |_| |__| |____) | | |_) | __/ | | || __/ (__| |_ ____) | __/ | \ V / "
  8. echo " \_____\___|_| |_|\__|\____/|_____/ | .__/ \___|_| |_| \___|\___|\__|_____/ \___|_| \_/ "
  9. echo " | | v0.2"
  10. echo " |_| for auto hosting simply & easily"
  11. echo ""
  12. echo "To view details: \"tail -f log_script.log\""
  13. echo ""
  14. echo -e "\033[31mThis script will modify your server's configuration.\033[0m"
  15. echo -e "\033[31mNO guarantees are implied\033[0m"
  16. echo -e "\033[31mDo you want to continue? (type yes in UPPERCASE)\033[0m"
  17. read areyousure
  18. if [ $areyousure != "YES" ]
  19. then exit 1
  20. else echo -e "\033[31mStarting script `basename $0`\033[0m"
  21. fi
  22. LOG=/root/log_script.log
  23. echo "NOZEROCONF=yes" >> /etc/sysconfig/network
  24. # Configuration of repository for CentOS
  25. configure_repo() {
  26. yum -y install wget >> $LOG 2>&1
  27. echo -e "[\033[33m*\033[0m] Installing & configuring epel, rpmforge repos..."
  28. rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error importing key /etc/pki/rpm-gpg/RPM-GPG-KEY.dag.txt"
  29. cd /tmp
  30. wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error downloading RPMForge rpm"
  31. yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm>> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error installing rpmforge rpm"
  32. rpm --import https://fedoraproject.org/static/0608B895.txt >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error importing epel key"
  33. wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error downloading epel repo rpm"
  34. rpm -ivh epel-release-7-2.noarch.rpm >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error installing epel repo rpm"
  35. yum install yum-priorities -y >> $LOG 2>&1 echo -e "[\033[31mX\033[0m] Error installing yum-priorites"
  36. awk 'NR== 2 { print "priority=10" } { print }' /etc/yum.repos.d/epel.repo > /tmp/epel.repo
  37. rm /etc/yum.repos.d/epel.repo -f
  38. mv /tmp/epel.repo /etc/yum.repos.d
  39. }
  40. update_system() {
  41. echo -e "[\033[33m*\033[0m] Updating full system (it can take some minutes...)"
  42. yum update -y >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error in yum update"
  43. }
  44. install_required_packages() {
  45. echo -e "[\033[33m*\033[0m] Installing required packages"
  46. yum install -y vim htop iftop iotop net-tools nmap screen git expect openssl >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error installing base packages"
  47. echo -e "[\033[33m*\033[0m] Installing Development Tools"
  48. yum groupinstall -y 'Development Tools' >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error installing Dev Tools metapackage"
  49. }
  50. install_ntpd() {
  51. echo -e "[\033[33m*\033[0m] Installing and configure NTPD"
  52. yum install -y ntp >> $LOG 2>&1
  53. chkconfig ntpd on >> $LOG 2>&1
  54. systemctl start ntpd >> $LOG 2>&1
  55. }
  56. disable_fw() {
  57. echo -e "[\033[33m*\033[0m] Disabling Firewall (for installation time)"
  58. service firewalld stop >> $LOG 2>&1
  59. chkconfig firewalld off >> $LOG 2>&1
  60. }
  61. disable_selinux() {
  62. echo -e "[\033[33m*\033[0m] Disabling SELinux"
  63. sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config >> $LOG 2>&1
  64. setenforce 0 >> $LOG 2>&1
  65. }
  66. install_mariadb() {
  67. echo -e "[\033[33m*\033[0m] Installing MariaDB SQL Server"
  68. yum install mariadb-server mariadb-client -y >> $LOG 2>&1
  69. chkconfig --levels 235 mariadb on >> $LOG 2>&1
  70. systemctl start mariadb >> $LOG 2>&1
  71. # echo "Type the MySQL root password you want to set: "
  72. # read -s mysqlrootpw
  73. # SECURE_MYSQL=$(expect -c "
  74. # set timeout 10
  75. # spawn mysql_secure_installation
  76. #
  77. # expect \"Enter current password for root (enter for none):\"
  78. # send \"\r\"
  79. #
  80. # expect \"Set root password?\"
  81. # send \"y\r\"
  82. #
  83. # expect \"New password:\"
  84. # send \"$mysqlrootpw\r\"
  85. #
  86. # expect \"Re-enter new password:\"
  87. # send \"$mysqlrootpw\r\"
  88. #
  89. # expect \"Remove anonymous users?\"
  90. # send \"y\r\"
  91. #
  92. # expect \"Disallow root login remotely?\"
  93. # send \"y\r\"
  94. #
  95. # expect \"Remove test database and access to it?\"
  96. # send \"y\r\"
  97. #
  98. # expect \"Reload privilege tables now?\"
  99. # send \"y\r\"
  100. #
  101. # expect eof
  102. # " >> $LOG)
  103. echo "$SECURE_MYSQL" >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error configuring MySQL"
  104. }
  105. install_dovecot() {
  106. echo -e "[\033[33m*\033[0m] Installing DOVECOT Server"
  107. yum install dovecot dovecot-mysql -y >> $LOG 2>&1
  108. systemctl enable dovecot >> $LOG 2>&1
  109. systemctl start dovecot >> $LOG 2>&1
  110. }
  111. install_postfix() {
  112. echo -e "[\033[33m*\033[0m] Installing Postfix Server"
  113. yum install postfix -y >> $LOG 2>&1
  114. systemctl start postfix >> $LOG 2>&1
  115. systemctl start postfix >> $LOG 2>&1
  116. echo -e "[\033[33m*\033[0m] Installing getmail"
  117. yum install getmail -y >> $LOG 2>&1
  118. }
  119. install_clamav() {
  120. echo -e "[\033[33m*\033[0m] Installing Antivirus/Antispam Layer (it can take some times downloading AV databases)"
  121. yum install -y amavisd-new spamassassin clamav clamd unzip bzip2 unrar perl-DBD-mysql --disablerepo=epel >> $LOG 2>&1
  122. sa-update >> $LOG 2>&1
  123. systemctl start clamd >> $LOG 2>&1
  124. /usr/bin/freshclam >> $LOG 2>&1
  125. }
  126. install_nginx() {
  127. echo -e "[\033[33m*\033[0m] Installing & Configuring NGINX Webserver"
  128. yum install nginx --enablerepo=epel -y >> $LOG 2>&1
  129. # awk 'NR== 21 { print "map $scheme $https {" ; print "default off;" ; print "https on;"; print "}"} { print }' /etc/nginx/nginx.conf > /tmp/nginx.conf
  130. # rm -f /etc/nginx/nginx.conf
  131. # mv /tmp/nginx.conf /etc/nginx
  132. systemctl disable httpd >> $LOG 2>&1
  133. systemctl enable nginx >> $LOG 2>&1
  134. systemctl start nginx >> $LOG 2>&1
  135. yum install php php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy -y >> $LOG 2>&1
  136. sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php.ini >> $LOG 2>&1
  137. systemctl start php-fpm on >> $LOG 2>&1
  138. systemctl start php-fpm >> $LOG 2>&1
  139. yum install -y fcgi-devel >> $LOG 2>&1
  140. echo -e " [\033[33m*\033[0m] Compil fcgiwrap (cause it don't exist in rpm for CentOS)"
  141. cd /usr/local/src/
  142. git clone git://github.com/gnosek/fcgiwrap.git >> $LOG 2>&1
  143. echo -e " [\033[32m*\033[0m] Gitting sources done"
  144. cd fcgiwrap
  145. autoreconf -i >> $LOG 2>&1
  146. ./configure >> $LOG 2>&1
  147. make >> $LOG 2>&1
  148. make install >> $LOG 2>&1
  149. echo -e " [\033[32m*\033[0m] fcgiwrap done"
  150. yum install spawn-fcgi -y >> $LOG 2>&1
  151. echo -e "[\033[33m*\033[0m] Setting /etc/sysconfig/spawn-fcgi configuration file"
  152. cat <<EOF > /etc/sysconfig/spawn-fcgi
  153. # You must set some working options before the "spawn-fcgi" service will work.
  154. # If SOCKET points to a file, then this file is cleaned up by the init script.
  155. #
  156. # See spawn-fcgi(1) for all possible options.
  157. #
  158. # Example :
  159. #SOCKET=/var/run/php-fcgi.sock
  160. #OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"
  161. FCGI_SOCKET=/var/run/fcgiwrap.socket
  162. FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
  163. FCGI_USER=apache
  164. FCGI_GROUP=apache
  165. FCGI_EXTRA_OPTIONS="-M 0770"
  166. OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
  167. EOF
  168. usermod -a -G apache nginx >> $LOG 2>&1
  169. systemctl enable spawn-fcgi >> $LOG 2>&1
  170. systemctl start spawn-fcgi >> $LOG 2>&1
  171. }
  172. install_pma() {
  173. echo -e "[\033[33m*\033[0m] Setting PHPmyAdmin"
  174. yum install phpmyadmin -y >> $LOG 2>&1
  175. sed -i -e "s/'cookie'/'http'/" /etc/phpMyAdmin/config.inc.php 2>&1
  176. # sed -i -e "s/'blowfish_secret'] = '1199196662700621640'/'blowfish_secret'] = '$(echo MONNOMBRE)'/" /etc/phpMyAdmin/config.inc.php 2>&1
  177. }
  178. install_mailman() {
  179. echo -e "[\033[33m*\033[0m] Setting Mailman"
  180. yum install mailman -y >> $LOG 2>&1
  181. /usr/lib/mailman/bin/newlist mailman
  182. cat <<EOF >> /etc/aliases
  183. mailman: "|/usr/lib/mailman/mail/mailman post mailman"
  184. mailman-admin: "|/usr/lib/mailman/mail/mailman admin mailman"
  185. mailman-bounces: "|/usr/lib/mailman/mail/mailman bounces mailman"
  186. mailman-confirm: "|/usr/lib/mailman/mail/mailman confirm mailman"
  187. mailman-join: "|/usr/lib/mailman/mail/mailman join mailman"
  188. mailman-leave: "|/usr/lib/mailman/mail/mailman leave mailman"
  189. mailman-owner: "|/usr/lib/mailman/mail/mailman owner mailman"
  190. mailman-request: "|/usr/lib/mailman/mail/mailman request mailman"
  191. mailman-subscribe: "|/usr/lib/mailman/mail/mailman subscribe mailman"
  192. mailman-unsubscribe: "|/usr/lib/mailman/mail/mailman unsubscribe mailman"
  193. EOF
  194. newaliases >> $LOG
  195. systemctl restart postfix >> $LOG 2>&1
  196. systemctl enable mailman >> $LOG 2>&1
  197. systemctl start mailman >> $LOG 2>&1
  198. cd /usr/lib/mailman/cgi-bin/
  199. ln -s ./ mailman
  200. }
  201. install_ftpd() {
  202. echo -e "[\033[33m*\033[0m] Setting PureFTPD"
  203. yum install pure-ftpd -y >> $LOG 2>&1
  204. systemctl start pure-ftpd >> $LOG 2>&1
  205. systemctl enable pure-ftpd >> $LOG 2>&1
  206. }
  207. install_bind() {
  208. echo -e "[\033[33m*\033[0m] Setting Bind"
  209. yum install bind bind-utils -y >> $LOG 2>&1
  210. cp /etc/named.conf /etc/named.conf_bak
  211. cat <<EOF > /etc/named.conf
  212. //
  213. // named.conf
  214. //
  215. // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
  216. // server as a caching only nameserver (as a localhost DNS resolver only).
  217. //
  218. // See /usr/share/doc/bind*/sample/ for example named configuration files.
  219. //
  220. options {
  221. listen-on port 53 { any; };
  222. listen-on-v6 port 53 { any; };
  223. directory "/var/named";
  224. dump-file "/var/named/data/cache_dump.db";
  225. statistics-file "/var/named/data/named_stats.txt";
  226. memstatistics-file "/var/named/data/named_mem_stats.txt";
  227. allow-query { any; };
  228. recursion yes;
  229. };
  230. logging {
  231. channel default_debug {
  232. file "data/named.run";
  233. severity dynamic;
  234. };
  235. };
  236. zone "." IN {
  237. type hint;
  238. file "named.ca";
  239. };
  240. include "/etc/named.conf.local";
  241. EOF
  242. touch /etc/named.conf.local
  243. systemctl start named >> $LOG 2>&1
  244. systemctl enable named >> $LOG 2>&1
  245. }
  246. install_awstat() {
  247. echo -e "[\033[33m*\033[0m] Setting statistics stuffs"
  248. yum install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder -y >> $LOG 2>&1
  249. }
  250. install_jailkit() {
  251. echo -e "[\033[33m*\033[0m] Setting Jailkit"
  252. #Jailkit
  253. cd /usr/local/src
  254. wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz >> $LOG 2>&1
  255. tar xvfz jailkit-2.17.tar.gz >> $LOG 2>&1
  256. cd jailkit-2.17
  257. ./configure >> $LOG 2>&1
  258. make >> $LOG 2>&1
  259. make install >> $LOG 2>&1
  260. }
  261. install_fail2ban() {
  262. echo -e "[\033[33m*\033[0m] Setting fail2ban & RootkitHunter"
  263. yum install fail2ban -y >> $LOG 2>&1
  264. systemctl start fail2ban >> $LOG 2>&1
  265. systemctl enable fail2ban >> $LOG 2>&1
  266. }
  267. install_rkhunter() {
  268. yum install rkhunter -y >> $LOG 2>&1
  269. }
  270. configure_zeroconf
  271. configure_repo
  272. update_system
  273. install_required_packages
  274. install_ntpd
  275. disable_fw
  276. disable_selinux
  277. install_mysql
  278. install_dovecot
  279. install_postfix
  280. install_clamav
  281. install_nginx
  282. install_pma
  283. install_mailman
  284. install_ftpd
  285. install_bind
  286. install_awstat
  287. install_jailkit
  288. install_fail2ban
  289. install_rkhunter
  290. echo -e "[\033[33m*\033[0m] Installing ISPConfig Stable version"
  291. #ISPConfig
  292. cd /tmp
  293. wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz >> $LOG 2>&1
  294. tar xfz ISPConfig-3-stable.tar.gz >> $LOG 2>&1
  295. cd ispconfig3_install/install/
  296. php install.php