script_centos_isp.sh 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  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 /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. }
  44. update_system() {
  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. }
  48. install_required_packages() {
  49. echo -e "[\033[33m*\033[0m] Installing required packages"
  50. yum install -y vim htop iftop nmap screen git expect >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error installing base packages"
  51. echo -e "[\033[33m*\033[0m] Installing Development Tools"
  52. yum groupinstall -y 'Development Tools' >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error installing Dev Tools metapackage"
  53. }
  54. install_ntpd() {
  55. echo -e "[\033[33m*\033[0m] Installing and configure NTPD"
  56. yum install -y ntp >> $LOG 2>&1
  57. chkconfig ntpd on >> $LOG 2>&1
  58. }
  59. disable_fw() {
  60. echo -e "[\033[33m*\033[0m] Disabling Firewall (for installation time)"
  61. service iptables save >> $LOG 2>&1
  62. service iptables stop >> $LOG 2>&1
  63. chkconfig iptables off >> $LOG 2>&1
  64. }
  65. disable_selinux() {
  66. echo -e "[\033[33m*\033[0m] Disabling SELinux"
  67. sed -i -e 's/SELINUX=enforcing/SELINUX=disabled' /etc/selinux/config >> $LOG 2>&1
  68. setenforce 0 >> $LOG 2>&1
  69. }
  70. install_mariadb() {
  71. echo -e "[\033[33m*\033[0m] Installing MariaDB SQL Server"
  72. yum install MariaDB-server MariaDB-client -y >> $LOG 2>&1
  73. chkconfig --levels 235 mysqld on >> $LOG 2>&1
  74. /etc/init.d/mysqld start >> $LOG 2>&1
  75. echo "Type the MySQL root password you want to set: "
  76. read -s mysqlrootpw
  77. SECURE_MYSQL=$(expect -c "
  78. set timeout 10
  79. spawn mysql_secure_installation
  80. expect \"Enter current password for root (enter for none):\"
  81. send \"\r\"
  82. expect \"Set root password?\"
  83. send \"y\r\"
  84. expect \"New password:\"
  85. send \"$mysqlrootpw\r\"
  86. expect \"Re-enter new password:\"
  87. send \"$mysqlrootpw\r\"
  88. expect \"Remove anonymous users?\"
  89. send \"y\r\"
  90. expect \"Disallow root login remotely?\"
  91. send \"y\r\"
  92. expect \"Remove test database and access to it?\"
  93. send \"y\r\"
  94. expect \"Reload privilege tables now?\"
  95. send \"y\r\"
  96. expect eof
  97. " >> $LOG)
  98. echo "$SECURE_MYSQL" >> $LOG 2>&1 || echo -e "[\033[31mX\033[0m] Error configuring MySQL"
  99. }
  100. install_dovecot() {
  101. echo -e "[\033[33m*\033[0m] Installing DOVECOT Server"
  102. yum install dovecot dovecot-mysql -y >> $LOG 2>&1
  103. chkconfig --levels 235 dovecot on >> $LOG 2>&1
  104. /etc/init.d/dovecot start >> $LOG 2>&1
  105. }
  106. install_postfix() {
  107. echo -e "[\033[33m*\033[0m] Installing Postfix Server"
  108. yum install postfix -y >> $LOG 2>&1
  109. chkconfig --levels 235 postfix on >> $LOG 2>&1
  110. /etc/init.d/postfix restart >> $LOG 2>&1
  111. }
  112. install_getmail() {
  113. echo -e "[\033[33m*\033[0m] Installing getmail"
  114. yum install getmail -y >> $LOG 2>&1
  115. }
  116. install_clamav() {
  117. echo -e "[\033[33m*\033[0m] Installing Antivirus/Antispam Layer (it can take some times downloading AV databases)"
  118. yum install -y amavisd-new spamassassin clamav clamd unzip bzip2 unrar perl-DBD-mysql --disablerepo=epel >> $LOG 2>&1
  119. sa-update >> $LOG 2>&1
  120. chkconfig --levels 235 amavisd on >> $LOG 2>&1
  121. /usr/bin/freshclam >> $LOG 2>&1
  122. /etc/init.d/amavisd start >> $LOG 2>&1
  123. }
  124. install_nginx() {
  125. echo -e "[\033[33m*\033[0m] Installing & Configuring NGINX Webserver"
  126. yum install nginx --enablerepo=epel -y >> $LOG 2>&1
  127. awk 'NR== 21 { print "map $scheme $https {" ; print "default off;" ; print "https on;"; print "}"} { print }' /etc/nginx/nginx.conf > /tmp/nginx.conf
  128. rm -f /etc/nginx/nginx.conf
  129. mv /tmp/nginx.conf /etc/nginx
  130. chkconfig --del httpd >> $LOG 2>&1
  131. /etc/init.d/httpd stop >> $LOG 2>&1
  132. chkconfig --levels 235 nginx on >> $LOG 2>&1
  133. /etc/init.d/nginx start >> $LOG 2>&1
  134. 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
  135. sed -i -e 's/; cgi.fix_pathinfo=0/cgi.fix_pathinfo=0/' /etc/php.ini >> $LOG 2>&1
  136. chkconfig --levels 235 php-fpm on >> $LOG 2>&1
  137. /etc/init.d/php-fpm start >> $LOG 2>&1
  138. yum install -y fcgi-devel >> $LOG 2>&1
  139. echo -e " [\033[33m*\033[0m] Compil fcgiwrap (cause it don't exist in rpm for CentOS)"
  140. cd /usr/local/src/
  141. git clone git://github.com/gnosek/fcgiwrap.git >> $LOG 2>&1
  142. echo -e " [\033[32m*\033[0m] Gitting sources done"
  143. cd fcgiwrap
  144. autoreconf -i >> $LOG 2>&1
  145. ./configure >> $LOG 2>&1
  146. make >> $LOG 2>&1
  147. make install >> $LOG 2>&1
  148. echo -e " [\033[32m*\033[0m] fcgiwrap done"
  149. yum install spawn-fcgi -y >> $LOG 2>&1
  150. echo -e "[\033[33m*\033[0m] Setting /etc/sysconfig/spawn-fcgi configuration file"
  151. cat <<EOF > /etc/sysconfig/spawn-fcgi
  152. # You must set some working options before the "spawn-fcgi" service will work.
  153. # If SOCKET points to a file, then this file is cleaned up by the init script.
  154. #
  155. # See spawn-fcgi(1) for all possible options.
  156. #
  157. # Example :
  158. #SOCKET=/var/run/php-fcgi.sock
  159. #OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"
  160. FCGI_SOCKET=/var/run/fcgiwrap.socket
  161. FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
  162. FCGI_USER=apache
  163. FCGI_GROUP=apache
  164. FCGI_EXTRA_OPTIONS="-M 0770"
  165. OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
  166. EOF
  167. usermod -a -G apache nginx >> $LOG 2>&1
  168. chkconfig --levels 235 spawn-fcgi on >> $LOG 2>&1
  169. /etc/init.d/spawn-fcgi start >> $LOG 2>&1
  170. }
  171. install_pma() {
  172. echo -e "[\033[33m*\033[0m] Setting PHPmyAdmin"
  173. yum install phpmyadmin -y >> $LOG 2>&1
  174. sed -i -e "s/$cfg['Servers'][$i]['auth_type'] = 'cookie';/$cfg['Servers'][$i]['auth_type'] = 'http';/" /usr/share/phpmyadmin/config.inc.php 2>&1
  175. }
  176. install_mailman() {
  177. echo -e "[\033[33m*\033[0m] Setting Mailman"
  178. yum install mailman -y >> $LOG 2>&1
  179. /usr/lib/mailman/bin/newlist mailman
  180. cat <<EOF >> /etc/aliases
  181. mailman: "|/usr/lib/mailman/mail/mailman post mailman"
  182. mailman-admin: "|/usr/lib/mailman/mail/mailman admin mailman"
  183. mailman-bounces: "|/usr/lib/mailman/mail/mailman bounces mailman"
  184. mailman-confirm: "|/usr/lib/mailman/mail/mailman confirm mailman"
  185. mailman-join: "|/usr/lib/mailman/mail/mailman join mailman"
  186. mailman-leave: "|/usr/lib/mailman/mail/mailman leave mailman"
  187. mailman-owner: "|/usr/lib/mailman/mail/mailman owner mailman"
  188. mailman-request: "|/usr/lib/mailman/mail/mailman request mailman"
  189. mailman-subscribe: "|/usr/lib/mailman/mail/mailman subscribe mailman"
  190. mailman-unsubscribe: "|/usr/lib/mailman/mail/mailman unsubscribe mailman"
  191. EOF
  192. newaliases >> $LOG
  193. /etc/init.d/postfix restart >> $LOG 2>&1
  194. chkconfig --levels 235 mailman on >> $LOG 2>&1
  195. /etc/init.d/mailman start >> $LOG 2>&1
  196. cd /usr/lib/mailman/cgi-bin/
  197. ln -s ./ mailman
  198. }
  199. install_ftpd() {
  200. echo -e "[\033[33m*\033[0m] Setting PureFTPD"
  201. yum install pure-ftpd -y >> $LOG 2>&1
  202. chkconfig --levels 235 pure-ftpd on >> $LOG 2>&1
  203. /etc/init.d/pure-ftpd start >> $LOG 2>&1
  204. yum install openssl >> $LOG 2>&1
  205. }
  206. install_bind() {
  207. echo -e "[\033[33m*\033[0m] Setting Bind"
  208. yum install bind bind-utils -y >> $LOG 2>&1
  209. cp /etc/named.conf /etc/named.conf_bak
  210. cat <<EOF > /etc/named.conf
  211. //
  212. // named.conf
  213. //
  214. // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
  215. // server as a caching only nameserver (as a localhost DNS resolver only).
  216. //
  217. // See /usr/share/doc/bind*/sample/ for example named configuration files.
  218. //
  219. options {
  220. listen-on port 53 { any; };
  221. listen-on-v6 port 53 { any; };
  222. directory "/var/named";
  223. dump-file "/var/named/data/cache_dump.db";
  224. statistics-file "/var/named/data/named_stats.txt";
  225. memstatistics-file "/var/named/data/named_mem_stats.txt";
  226. allow-query { any; };
  227. recursion yes;
  228. };
  229. logging {
  230. channel default_debug {
  231. file "data/named.run";
  232. severity dynamic;
  233. };
  234. };
  235. zone "." IN {
  236. type hint;
  237. file "named.ca";
  238. };
  239. include "/etc/named.conf.local";
  240. EOF
  241. touch /etc/named.conf.local
  242. chkconfig --levels 235 named on >> $LOG 2>&1
  243. /etc/init.d/named start >> $LOG 2>&1
  244. }
  245. install_awstat() {
  246. echo -e "[\033[33m*\033[0m] Setting statistics stuffs"
  247. yum install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder -y >> $LOG 2>&1
  248. }
  249. install_jailkit() {
  250. echo -e "[\033[33m*\033[0m] Setting Jailkit"
  251. #Jailkit
  252. cd /tmp
  253. wget http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz >> $LOG 2>&1
  254. tar xvfz jailkit-2.16.tar.gz >> $LOG 2>&1
  255. cd jailkit-2.16
  256. ./configure >> $LOG 2>&1
  257. make >> $LOG 2>&1
  258. make install >> $LOG 2>&1
  259. cd ..
  260. rm -rf jailkit-2.16* >> $LOG 2>&1
  261. }
  262. install_fail2ban() {
  263. echo -e "[\033[33m*\033[0m] Setting fail2ban & RootkitHunter"
  264. yum install fail2ban -y >> $LOG 2>&1
  265. chkconfig --levels 235 fail2ban on >> $LOG 2>&1
  266. /etc/init.d/fail2ban start >> $LOG 2>&1
  267. }
  268. install_rkhunter() {
  269. yum install rkhunter -y >> $LOG 2>&1
  270. }
  271. configure_zeroconf
  272. configure_repo
  273. update_system
  274. install_required_packages
  275. install_ntpd
  276. disable_fw
  277. disable_selinux
  278. install_mysql
  279. install_dovecot
  280. install_postfix
  281. install_getmail
  282. install_clamav
  283. install_nginx
  284. install_pma
  285. install_mailman
  286. install_ftpd
  287. install_bind
  288. install_awstat
  289. install_jailkit
  290. install_fail2ban
  291. install_rkhunter
  292. echo -e "[\033[33m*\033[0m] Installing ISPConfig Stable version"
  293. #ISPConfig
  294. cd /tmp
  295. wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz >> $LOG 2>&1
  296. tar xfz ISPConfig-3-stable.tar.gz >> $LOG 2>&1
  297. cd ispconfig3_install/install/
  298. php install.php