script_centos_isp.sh 12 KB

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