Обновление инструкции от 11.12.2016г.
Продолжаем установку хостинг панели ISPConfig 3, напоминаю, что первая часть статьи находится по адресу: Настройка сети перед установкой ISPConfig 3 в Debian - ч.1.
В данной инструкции мы установим и произведем первичную настройку необходимого програмного обеспечения.
Если Вам не нужен какой-либо из данных сервисов, тогда Вы можете не призводить установку не нужного Вам програмного обеспечения. Например если Вы не будете настраивать DNS, то можете не устанвливать bind9, и во время установки ISPConfig 3 когда инсталятор спросит о настройке DNS просто отказываемся от установки, Это вполне возможно, если Вы производите установку на маленький выделенный виртуальный сервер в котором считается каждый метр оперативной памяти. Тогда и Почтовый сервер можно не устанавливать, а на сайтах производить отправку сообщений пользователям используя внешние почтовые ящики, например почтовый ящик от Google и подключение по SMTP протоколу, для примера как я настраивал сайт на Drupal 7 в инструкции: Настраиваем отправку почты с сайта Drupal 7 используя внешний SMTP сервер - для примера google почтовый ящик
Приступим.
Изменение оболочки консоли по умолчанию, так как /bin/sh является символичной ссылкой на /bin/dash, нам надо /bin/bash, а не /bin/dash. Изменяем настройку консоли выполнив команду:
dpkg-reconfigure dash
на вопрос системы:
Использовать dash в качестве системной оболочки по умолчанию (/bin/sh)?
Отвечаем Нет
Для UBUNTU 16.04 отключаем пакеты AppArmor для защиты выполнив команды, их можете установить заново после полной установки и настройки сервера, когда все установлено и протестировано. Выполняем команды для отключения и удаления:
service apparmor stop update-rc.d -f apparmor remove apt-get remove apparmor apparmor-utils
Устанавливаем NTP, Postfix, Dovecot, Saslauthd, MySQL, rkhunter, and binutils командой:
aptitude install ntp ntpdate postfix postfix-mysql postfix-doc mysql-client mysql-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve sudo
Для Debian 8 Jessie предпочтительней установить Базу данных Mariadb, основателями которой выступили первоначальные разработчики MySQL для обеспечения свободного статуса СУБД, в противовес политике лицензирования MySQL компанией Oracle. У Mariadb заявлена улучшенная производительность, больше расширений и новых возможностей по сравнению с MySQL. Для этого команда установки будет выглядеть так:
aptitude install ntp ntpdate postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve sudo
На вопросы системы отвечаем:
- Настройка Postfix: - Ok
- Общий тип настройки почты: - выбираем Интернет-сайт
- Система почтовое имя: - Вводим webserver.server.loc
- Новый пароль для MySQL пользователя "root": Вводим пароль root для MySQL
- Повторите ввод пароля для MySQL пользователя "root": Повторяем ввод пароля root для MySQL
Запрос на ввод пароля от установщика MariaDB:
Проведем минимальную настройку безопасности с помощью команды mysql_secure_installation, отключив не безопасные параметры ответив по примеру ниже:
При запуске необходимо ввести пароль пользователя root базы данных, который Вы ввели во время установки выше.
mysql_secure_installation Change the root password? [Y/n] n Remove anonymous users? [Y/n] y Disallow root login remotely? [Y/n] y Remove test database and access to it? [Y/n] y Reload privilege tables now? [Y/n] y
Если в mariadb пускает в консоль mysql без пароля, можно установить пароль root (лучше установить после установки панели ISPConfig) выполнив команды:
mysql -u root -p MariaDB [(none)]> use mysql; Database changed MariaDB [mysql]> update user set password=PASSWORD("passroot") where User='root'; MariaDB [mysql]> flush privileges; MariaDB [mysql]> update user set plugin='' where User='root'; MariaDB [mysql]> quit; Bye Перегружаем бд выполнив команду: systemctl restart mariadb или /etc/init.d/mariadb restart
Вернуть как было до изменения так:
mysql -u root -p Enter password: (вводим пароль passroot) MariaDB [(none)]> use mysql; Database changed MariaDB [mysql]> update user set plugin='unix_socket' where User='root'; MariaDB [mysql]> quit; Bye Перегружаем бд выполнив команду: systemctl restart mariadb или /etc/init.d/mariadb restart Проверяем вход root без пароля: mysql -u root MariaDB [(none)]> quit; Bye
Открываем TLS/SSL порты в Postfix внеся изменения в файл /etc/postfix/master.cf:
vi /etc/postfix/master.cf
было:
... #submission inet n - - - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING #smtps inet n - - - - smtpd # -o syslog_name=postfix/smtps # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING ...
стало:
... submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING smtps inet n - - - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING ...
Для Debian Jessie и Debian Stretch:
было:
#submission inet n - - - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING #smtps inet n - - - - smtpd # -o syslog_name=postfix/smtps # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
стало:
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING smtps inet n - - - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
Для Ubuntu 16
было:
#submission inet n - y - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions ... #smtps inet n - y - - smtpd # -o syslog_name=postfix/smtps # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions ...
стало:
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o smtpd_reject_unlisted_recipient=no ... smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o smtpd_reject_unlisted_recipient=no ...
После сохранения файла /etc/postfix/master.cf перезагружаем сервер Рostfix выполнив команду:
/etc/init.d/postfix restart
Настраиваем работу базы данных Mysql на всех интерфейсах, по умолчанию работает только на 127.0.0.1:
vi /etc/mysql/my.cnf
было:
... bind-address = 127.0.0.1 ...
стало:
... #bind-address = 127.0.0.1 ...
После сохранения изменений перезагружаем сервер Mysql командой:
/etc/init.d/mysql restart
Устанавливаем антиспам и антивирус для почтового сервера Amavisd-new, SpamAssassin и ClamAV командой:
aptitude install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl
Для фильтрации спам писем ISPConfig3 использует Amavisd, который загружает внутренние фильтры библиотеки SpamAssassin самостоятельно, потому мы можем остановить и отключить загрузку SpamAssassin, чтобы не занимать оперативную память лишним процессом выполнив команды:
/etc/init.d/spamassassin stop update-rc.d -f spamassassin remove
!!! Внимание !!! При продолжительной работе почтового сервера, сервер Amavisd собирает огромное количество спама и вирусов в карантинную папку /var/lib/amavis/virusmails/ которая разростается если её не чистить. Добавим в крон автоматический поиск и удаление спама и вирусов в карантине старше 30 дней.
Для этого выполним команду:
crontab -e
В открывшемся файле добавим запись:
10 1 * * * find /var/lib/amavis/virusmails -ctime +30 -and -type 'f' -exec rm {} \;
Таким образом в час ночи десять минут каждый день будет запускатся поиск файлов старше 30 дней и автоматически удалятся.
Устанавливаем Веб сервер с поддержкой php Apache2, PHP5, PHPMyAdmin, FCGI, suExec, Pear, FPM и mcrypt выполнив команду:
aptitude install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-curl php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby libapache2-mod-python libapache2-mod-perl2 dh-make-php php5-dev build-essential libmagic-dev php5-intl libapache2-mod-fastcgi php5-fpm
Для Ubuntu 16 идет php версии 7, потому команда:
aptitude install apache2 apache2-doc apache2-utils libapache2-mod-php php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap phpmyadmin php7.0-cli php7.0-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear php-auth php7.0-mcrypt mcrypt imagemagick libruby libapache2-mod-python php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl memcached php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php7.0-opcache php-apcu libapache2-mod-fastcgi php7.0-fpm
Если устанавливаем только Nginx + PHP-FPM в Debian Stretch:
aptitude install nginx apache2-utils php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap phpmyadmin php7.0-cli php7.0-cgi php-pear php-auth-sasl php7.0-mcrypt mcrypt imagemagick libruby php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl memcached php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php7.0-opcache php-apcu php7.0-fpm
На вопросы системы отвечаем:
- Веб-сервер для автоматической перенастройки: - apache2
- Настроить базу данных для phpmyadmin с помощью dbconfig-common? - Нет
Выполним активацию модулей веб сервера Apache2 - suexec, rewrite, ssl, actions, dav, dav_fs, and auth_digest выполнив команду:
a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest fastcgi alias fcgid fastcgi alias
После активации моделей веб сервера необходимо перезагрузить Apache2 веб сервер командой:
/etc/init.d/apache2 restart
Для Ubuntu 16 отключаем httpoxy глобально, чтоб не быть атаковаными через уязвимость этого модуля, выполняем команды:
echo '<IfModule mod_headers.c> RequestHeader unset Proxy early </IfModule> ' > /etc/apache2/conf-available/httpoxy.conf a2enconf httpoxy /etc/init.d/apache2 restart
To ensure that the server can not be attacked trough the HTTPOXY vulnerability, I will disable the HTTP_PROXY header in apache globally.
Вносим изменения в suphp конфигурационный файл /etc/apache2/mods-available/suphp.conf (для DEBIAN 8Jessie и Ubuntu 16 не актуально, делать не нужно)
vi /etc/apache2/mods-available/suphp.conf
было:
<IfModule mod_suphp.c> <FilesMatch "\.ph(p3?|tml)$"> SetHandler application/x-httpd-suphp </FilesMatch> suPHP_AddHandler application/x-httpd-suphp <Directory /> suPHP_Engine on </Directory> ...
стало:
<IfModule mod_suphp.c> # <FilesMatch "\.ph(p3?|tml)$"> # SetHandler application/x-httpd-suphp # </FilesMatch> AddType application/x-httpd-suphp .php .php3 .php4 .php5 .phtml suPHP_AddHandler application/x-httpd-suphp <Directory /> suPHP_Engine on </Directory> ...
Если Вы хотите использовать файлы языка Ruby с расширением .rb, необходимо закоментировать параметр в файле /etc/mime.types:
vi /etc/mime.types
было:
... application/x-ruby rb ...
стало:
... #application/x-ruby rb ...
Устанавливаем Install Let's Encrypt для установки бесплатных сертефикатов на сайты из панели ISPConfig, выполняем команду:
aptitude -y install letsencrypt
Устанавливаем FTP сервер PureFTPd и квоты Quota выполнив команду:
aptitude install pure-ftpd-common pure-ftpd-mysql quota quotatool
Нам необходимо внести изменения в конфигурационный файл ftp сервера PureFTPd /etc/default/pure-ftpd-common:
vi /etc/default/pure-ftpd-common
было:
... VIRTUALCHROOT=false ...
стало:
... VIRTUALCHROOT=true ...
Сохраняем измененный файл.
Теперь настраиваем работу FTP сервера для работы через защищенный протокол TLS и создаем ssl сертефикат:
echo 1 > /etc/pure-ftpd/conf/TLS
Создаем папку, где будет хранится наш сертификат выполнив команду:
mkdir -p /etc/ssl/private/
Генерируем сам сертификат выполнив команду:
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
Во время создания сертификатов отвечаем на вопросы:
Назначаем права для сертификата 600 выполнив команду:
chmod 600 /etc/ssl/private/pure-ftpd.pem
После внесения изменений и сохранив конфигурационный файл, создания ssl сертификата перезагружаем FTP сервер PureFTPd командой:
/etc/init.d/pure-ftpd-mysql restart
Вносим изменения в файл /etc/fstab для включения квот нашим пользователям, параметр ,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 который добавим для почты и веб сервера в корневой раздел.
У Вас UUID будет отличатся от моего, вносим изменения в корневой раздел / системы:
vi /etc/fstab
было:
UUID=5deecf34-1354-4a0f-b65c-90abb960433e / ext4 errors=remount-ro 0 1
стало:
UUID=5deecf34-1354-4a0f-b65c-90abb960433e / ext4 errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1
Сохраняем файл /etc/fstab.conf
Для включения квот на диске, нам необходимо перемонтировать корневой раздел выполнив команду:
mount -o remount /
И непосредственно включаем квоты на диске выпонив команды:
quotacheck -avugm quotaon -avug
Устанавливаем DNS сервер Bind который будет также удобно администрироватся через веб интерфейс панели ISPConfig выполнив команду и согласившись:
aptitude install bind9 dnsutils
Устанавливаем программы для анализа и статистики посещаемости веб сервера выполнив команды:
aptitude install vlogger webalizer awstats geoip-database
Отключаем для программы awstat автоматический запуск из cron в файле /etc/cron.d/awstats:
vi /etc/cron.d/awstats
было:
*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh # Generate static reports: 10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh
стало:
#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh # Generate static reports: #10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh
Установка программы Jailkit
Если Вы будете предоставлять для пользователей изолированный chroot ssh доступ к серверу, необходимо установить программу Jailkit. Jailkit должен быть установлен до установки ISPConfig, и сам Jailkit будем устанавливать из исходных кодов, потому устанавливаем необходимые для сборки программы выполнив команду:
aptitude install build-essential autoconf automake1.9 libtool flex bison debhelper
И приступаем у созданию директории, где будем скачивать, распаковывать и собирать программу Jailkit. Для установки программы Jailkit выполняем команды:
mkdir /usr/src/iserver/ && cd /usr/src/iserver/ wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz tar xvfz jailkit-2.19.tar.gz cd jailkit-2.19 ./debian/rules binary dpkg -i /usr/src/iserver/jailkit_2.19*.deb
Установка программы Fail2ban
Устанавливаем программу fail2ban, которая будет стоять на защите наших серверов, блокируя айпи с которых производится попытка взлома открытых в интернет сервисов, если такие есть. Если же Вам это не нужно, тогда можете пропустить установку и настройку fail2ban.
Выполним установку и настройку программы fail2ban выполнив команду:
aptitude install fail2ban
Создаем конфигурационный файлы для настройки программы fail2ban, выполнив команды (скопировать все и вставить в консоль через Putty):
echo ' [pureftpd] enabled = true port = ftp filter = pureftpd logpath = /var/log/syslog maxretry = 3 [dovecot-pop3imap] enabled = true filter = dovecot-pop3imap action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp] logpath = /var/log/mail.log maxretry = 5 ' > /etc/fail2ban/jail.local echo ' [Definition] failregex = .*pure-ftpd: \(.*@<HOST>\) \[WARNING\] Authentication failed for user.* ignoreregex = ' > /etc/fail2ban/filter.d/pureftpd.conf echo ' [Definition] failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=(?P<host>\S*),.* ignoreregex = ' > /etc/fail2ban/filter.d/dovecot-pop3imap.conf
Перезагружаем программу для защиты сервера fail2ban выполнив команду:
/etc/init.d/fail2ban restart
С Вами был Сергей Лазаренко.
На данном месте основная настройка необходимых программ для установки хостинг панели ISPConfig 3 завершена. Инструкция большая, потому отдохнем просмотрев видео ролик, где узнаем почему же футболисту Бэкхэму платят столько денег. Видно талант человека :)
apt-get -y install letsencrypt
Add new comment