После того, как мы установили систему, настроили в ней сеть и доступ по ssh, установим бесплатную панель управления сервером ISPConfig, nginx и php-fpm, mysql, почту, файрвол, антивирус, и опробуем всё это в действии. Поехали:
Изменим оболочку по умолчанию
1 2 | root@server1:~# file /bin/sh /bin/sh: symbolic link to dash |
/bin/sh является символической ссылкой на /bin/dash , однако нам нужен /bin/bash , а не /bin/dash . Поэтому изменим оболочку по умолчанию:
1 2 | root@server1:~# dpkg-reconfigure dash Использовать dash в качестве системной оболочки по умолчанию (/bin/sh)? < Нет |
Синхронизируем системные часы с NTP (Network Time Protocol)
1 | root@server1:~# apt-get install ntp |
теперь за точность времени можно не волноваться.
Устанавливаем Postfix, Dovecot, MySQL, rkhunter и binutils
1 | root@server1:~# apt-get install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo |
Отвечаем на вопросы. Тип почтовой конфигурации — интернет сайт. Имя почты системы — server1.example.com
Защищаем mysql
1 2 3 4 5 6 7 | root@server1:~# mysql_secure_installation Change the root password? [Y/n] y 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 root@server1:~# |
Настраиваем Postfix конфиг следующим образом:
1 | root@server1:~# nano /etc/postfix/master.cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | [...] smtp inet n - y - - smtpd #smtp inet n - y - 1 postscreen #smtpd pass - - y - - smtpd #dnsblog unix - - y - 0 dnsblog #tlsproxy unix - - y - 0 tlsproxy submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes # -o smtpd_tls_auth_only=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 - 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 # -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 [...] |
Перезапуск Postfix:
1 | root@server1:~# service postfix restart |
Для того, чтобы MariaDB прослушивала все интерфейсы, а не только localhost, редактируем /etc/mysql/mariadb.conf.d/50-server.cnf и комментируем строку bind-address = 127.0.0.1
1 | root@server1:~# nano /etc/mysql/mariadb.conf.d/50-server.cnf |
1 2 3 4 5 | [...] # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. # bind-address = 127.0.0.1 [...] |
Устанавливаем метод аутентификации по паролю в MariaDB на native, чтобы позже мы могли использовать PHPMyAdmin для подключения от имени пользователя root
1 | root@server1:~# echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u root |
Задаем корневой пароль mysql в /etc/mysql/debian.cnf
1 | root@server1:~# nano /etc/mysql/debian.cnf |
1 2 3 4 5 6 7 8 9 10 11 12 | # Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = root password = 12345 socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = root password = 12345 socket = /var/run/mysqld/mysqld.sock basedir = /usr |
Для предотвращения ошибки Too many open files установим более высокие лимиты на открытие файлов MariaDB
1 | root@server1:~# nano /etc/security/limits.conf |
в конец файла добавляем:
1 2 3 | [...] mysql soft nofile 65535 mysql hard nofile 65535 |
Создаем каталог и файл:
1 2 | root@server1:~# mkdir -p /etc/systemd/system/mysql.service.d/ root@server1:~# nano /etc/systemd/system/mysql.service.d/limits.conf |
В файл пишем:
1 2 | [Service] LimitNOFILE=infinity |
Перезагружаем systemd и перезапускаем MariaDB
1 2 | root@server1:~# systemctl daemon-reload root@server1:~# systemctl restart mariadb |
Установим систему dbconfig-common
1 | root@server1:~# apt-get install dbconfig-common dbconfig-mysql |
В настоящее время существует проблема с системой Debian dbconfig-common, которая позже запрещает установку RoundCube, исправьте ее, выполнив следующую команду:
1 | root@server1:~# sed -i -r 's/_dbc_nodb="yes" dbc_mysql_exec/_dbc_nodb="yes"; dbc_mysql_exec/g' /usr/share/dbconfig-common/internal/mysql |
Теперь убедитесь, что сеть включена
1 2 | root@server1:~# netstat -tap | grep mysql tcp6 0 0 [::]:mysql [::]:* LISTEN 20663/mysqld |
Установите Amavisd-new, SpamAssassin и ClamAV
Чтобы установить amavisd-new, SpamAssassin и ClamAV, мы запускаем
1 | root@server1:~# apt-get install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract p7zip p7zip-full lrzip 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 libdbd-mysql-perl postgrey |
Настройка ISPConfig 3 использует amavisd, который загружает внутреннюю библиотеку фильтров SpamAssassin, поэтому мы можем остановить SpamAssassin для освобождения некоторой оперативной памяти:
1 2 | root@server1:~# systemctl stop spamassassin root@server1:~# systemctl disable spamassassin |
Установим Nginx, PHP (PHP-FPM) и Fcgiwrap
1 | root@server1:~# apt-get install nginx |
останавливаем Apache2 если он был у нас в системе
1 | root@server1:~# systemctl stop apache2 |
и стартуем nginx
1 | root@server1:~# systemctl start nginx |
(Если установлены и Apache2, и nginx, установщик ISPConfig 3 спросит вас, какой из них вы хотите использовать, — в этом случае ответьте на nginx . Если установлен только один из них, ISPConfig автоматически выполнит необходимую настройку.) Да, к сожалению тут нельзя использовать то и другое.
Мы можем заставить PHP 7.3 работать в nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager) — это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно загруженных сайтов), которые мы устанавливаем следующим образом:
1 | root@server1:~# apt-get install php7.3-fpm |
Чтобы получить поддержку MySQL в PHP, мы можем установить пакет php7.3-mysql . Рекомендуется установить некоторые другие модули PHP, так как они могут вам понадобиться для ваших приложений. Вы можете искать доступные модули PHP, таким образом:
1 | root@server1:~# apt-cache search php7 |
Выберите те, которые вам нужны, и установите их так:
1 | root@server1:~# apt-get install php7.3 php7.3-common php7.3-gd php7.3-mysql php7.3-imap php7.3-cli php7.3-cgi php-pear mcrypt imagemagick libruby php7.3-curl php7.3-intl php7.3-pspell php7.3-recode php7.3-sqlite3 php7.3-tidy php7.3-xmlrpc php7.3-xsl memcached php-memcache php-imagick php-gettext php7.3-zip php7.3-mbstring memcached php7.3-soap php7.3-fpm php7.3-opcache php-apcu |
Далее откройте /etc/php/7.3/fpm/php.ini
1 | nano /etc/php/7.3/fpm/php.ini |
и установите cgi.fix_pathinfo = 0 и ваш часовой пояс:
1 2 3 4 5 | [...] cgi.fix_pathinfo = 0 [...] date.timezone = "Europe/Moscow" [...] |
Все доступные часовые пояса можно найти в /usr/share/zoneinfo/ и подкаталогах
1 | root@server1:~# ls /usr/share/zoneinfo/* |
Теперь перезагрузите PHP-FPM:
1 | root@server1:~# systemctl restart php7.3-fpm |
Чтобы получить поддержку CGI в nginx, мы устанавливаем Fcgiwrap.
Fcgiwrap — это оболочка CGI, которая также должна работать со сложными сценариями CGI и может использоваться для сред общего хостинга, поскольку она позволяет каждому vhost использовать свой собственный каталог cgi-bin .
Установите пакет fcgiwrap :
1 | root@server1:~# apt-get install fcgiwrap |
После установки демон fcgiwrap уже должен быть запущен; это сокет /var/run/fcgiwrap.socket . Если он не запущен, вы можете использовать команду service fcgiwrap start для его запуска.
Теперь, когда вы создаете nginx vhost, ISPConfig позаботится о правильной конфигурации vhost
Установите phpMyAdmin
Начиная с Debian 10, PHPMyAdmin больше не доступен как пакет .deb. Поэтому мы установим его из источника.
Создайте папки для PHPMyadmin:
1 2 3 4 5 | root@server1:~# mkdir /usr/share/phpmyadmin root@server1:~# mkdir /etc/phpmyadmin root@server1:~# mkdir -p /var/lib/phpmyadmin/tmp root@server1:~# chown -R www-data:www-data /var/lib/phpmyadmin root@server1:~# touch /etc/phpmyadmin/htpasswd.setup |
Перейдите в каталог /tmp и загрузите исходные коды PHPMyAdmin:
1 2 | root@server1:~# cd /tmp root@server1:/tmp# wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz |
Распакуйте загруженный архивный файл, переместите файлы в папку /usr/share/phpmyadmin и приберите за собой в /tmp
1 2 3 | root@server1:/tmp# tar xfz phpMyAdmin-5.0.2-all-languages.tar.gz phpMyAdmin-5.0.2-all-languages/ root@server1:/tmp# mv phpMyAdmin-5.0.2-all-languages/* /usr/share/phpmyadmin/ root@server1:/tmp# rm -rf phpMyAdmin-5.0.2-all-languages* |
Создайте новый файл конфигурации для PHPMyaAdmin на основе предоставленного примера файла:
1 | root@server1:~# cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php |
Установите безопасный пароль (blowfish_secret), который должен быть длиной 32 символа:
1 | $cfg['blowfish_secret'] = 'fjeI76DsabWEjtKjdLiOOOOqwvFdla7d'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ |
Затем добавьте строку, чтобы установить каталог, который PHPMyAdmin будет использовать для хранения временных файлов:
1 | $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp'; |
На следующем шаге мы настроим хранилище конфигурации phpMyadmin (база данных).
Войдите в MariaDB как пользователь root:
1 | root@server1:~# mysql -u root |
В оболочке MariaDB создайте новую базу данных для PHPMyAdmin:
1 | MariaDB [(none)]> CREATE DATABASE phpmyadmin; |
Затем создайте нового пользователя:
1 | MariaDB [(none)]> CREATE USER 'pma'@'localhost' IDENTIFIED BY 'mypassword'; |
Замените слово mypassword на безопасный пароль по вашему выбору в командах выше и ниже, используйте один и тот же пароль оба раза. Затем предоставьте пользователю доступ к этой базе данных и перезагрузите разрешения для базы данных.
1 2 3 | MariaDB [(none)]> GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> QUIT; |
Наконец, загрузите таблицы SQL в базу данных:
1 | root@server1:~# mysql -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql |
Теперь нужно установить данные пользователя phpmyadmin в файле конфигурации. Снова откройте файл в редакторе и отредактируйте в следующий вид:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | [...] /* User used to manipulate with storage */ $cfg['Servers'][$i]['controlhost'] = 'localhost'; $cfg['Servers'][$i]['controlport'] = ''; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'mypassword'; /* Storage database and tables */ $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; [...] |
Замените mypassword на пароль, который вы выбрали для пользователя phpmyadmin.
Vhost приложений ISPConfig на порту 8081 для nginx поставляется с конфигурацией phpMyAdmin, поэтому вы можете использовать http://server1.example.com:8081/phpmyadmin или http://server1.example.com:8081/phpMyAdmin для доступа к phpMyAdmin
Если вы хотите использовать псевдоним / phpmyadmin или / phpMyAdmin, который вы можете использовать на своих веб-сайтах, это немного сложнее, чем для Apache, потому что nginx не имеет глобальных псевдонимов (то есть псевдонимов, которые могут быть определены для всех vhosts). Поэтому вы должны определить эти псевдонимы для каждого vhost, с которого вы хотите получить доступ к phpMyAdmin.
Чтобы сделать это, вставьте следующее в поле « Директивы nginx» на вкладке « Параметры » веб-сайта в ISPConfig позже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
Если вы используете HTTPS вместо HTTP для виртуального хоста, вы должны добавить строку fastcgi_param HTTPS on; к вашей конфигурации phpMyAdmin, вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; fastcgi_param HTTPS on; # <-- Добавить это fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
Если вы используете http и https для вашего vhost, вы можете использовать переменную $https . Снова перейдите в поле Директив nginx и вместо fastcgi_param включите HTTPS; Добавляете строку fastcgi_param HTTPS $https; и можете использовать phpMyAdmin для запросов http и https:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; fastcgi_param HTTPS $https; # <-- Добавить это fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
Установка Let’s Encrypt
ISPConfig 3.1 поддерживает бесплатный центр сертификации SSL. Давайте зашифруем. Функция Let’s Encrypt позволяет создавать бесплатные сертификаты SSL для вашего сайта из ISPConfig.
1 2 3 4 | root@server1:~# cd /usr/local/bin root@server1:/usr/local/bin# wget https://dl.eff.org/certbot-auto root@server1:/usr/local/bin# chmod a+x certbot-auto root@server1:/usr/local/bin# ./certbot-auto --install-only |
Установите почтальон
ISPConfig позволяет вам управлять (создавать / изменять / удалять) списки рассылки Mailman. Если вы хотите использовать эту функцию, установите Mailman следующим образом:
1 | root@server1:~# apt-get install mailman |
Выберите хотя бы один язык. Прежде чем мы сможем запустить Mailman, должен быть создан первый список рассылки под названием mailman
1 | root@server1:~# newlist mailman |
Введите адрес электронной почты человека, управляющего списком и пароль администратора для списка почтальонов. Чтобы завершить создание списка рассылки. Вы должны отредактировать свой файл /etc/aliases
1 | root@server1:~# nano /etc/aliases |
1 2 3 4 5 6 7 8 9 10 11 12 13 | [...] ## список рассылки mailman mailman: "|/var/lib/mailman/mail/mailman post mailman" mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman" mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman" mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman" mailman-join: "|/var/lib/mailman/mail/mailman join mailman" mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman" mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman" mailman-request: "|/var/lib/mailman/mail/mailman request mailman" mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman" mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman" [...] |
1 | root@server1:~# newaliases |
затем перезапустите Postfix и запустите демон Mailman:
1 2 | root@server1:~# systemctl restart postfix root@server1:~# systemctl restart mailman |
После установки ISPConfig 3 вы можете получить доступ к Mailman следующим образом:
Vhost приложений ISPConfig на порту 8081 для nginx поставляется с конфигурацией Mailman, поэтому вы можете использовать http://server1.example.com:8081/cgi-bin/mailman/admin/<listname> или http://server1.example.com:8081/cgi-bin/mailman/listinfo/<listname> для доступа к Mailman.
Если вы хотите использовать Mailman со своих веб-сайтов, это немного сложнее, чем для Apache, потому что nginx не имеет глобальных псевдонимов (то есть псевдонимов, которые могут быть определены для всех vhosts). Поэтому вы должны определить эти псевдонимы для каждого vhost, с которого вы хотите получить доступ к Mailman.
Для этого вставьте следующее в поле « Директивы nginx» на вкладке « Параметры » веб-сайта в ISPConfig:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | location /cgi-bin/mailman { root /usr/lib/; fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_intercept_errors on; fastcgi_pass unix:/var/run/fcgiwrap.socket; } location /images/mailman { alias /usr/share/images/mailman; } location /pipermail { alias /var/lib/mailman/archives/public; autoindex on; } |
Это определяет псевдоним /cgi-bin/mailman/ для вашего vhost, что означает, что вы можете получить доступ к интерфейсу администратора Mailman для списка по адресу http://<vhost>/cgi-bin/mailman/admin/<listname> и веб-страницу для пользователей списка рассылки можно найти по адресу http://<vhost>/cgi-bin/mailman/listinfo/<listname> .
В http://<vhost>/pipermail вы можете найти архивы списка рассылки.
Установите PureFTPd и квоту
PureFTPd и квота могут быть установлены с помощью следующей команды:
1 | root@server1:~# apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool |
Отредактируйте файл /etc/default/pure-ftpd-common
1 | root@server1:~# nano /etc/default/pure-ftpd-common |
и убедитесь, что режим запуска установлен в standalone режим и установите VIRTUALCHROOT=true
1 2 3 4 5 | [...] STANDALONE_OR_INETD=standalone [...] VIRTUALCHROOT=true [...] |
Теперь мы настраиваем PureFTPd для разрешения сеансов FTP и TLS. FTP очень небезопасный протокол, потому что все пароли и все данные передаются в виде открытого текста. Используя TLS, вся связь может быть зашифрована, что делает FTP намного более безопасным
Если вы хотите разрешить сеансы FTP и TLS, запустите
1 | root@server1:~# echo 1 > /etc/pure-ftpd/conf/TLS |
Чтобы использовать TLS, мы должны создать сертификат SSL. Я создаю его в /etc/ssl/private/ , поэтому сначала создаю этот каталог:
1 | root@server1:~# mkdir -p /etc/ssl/private/ |
После этого мы можем сгенерировать сертификат SSL следующим образом:
1 | root@server1:~# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem |
Нам предложат ответить на несколько вопросов:
1 2 3 4 5 6 7 | Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:Donetsk Locality Name (eg, city) []:Donetsk Organization Name (eg, company) [Internet Widgits Pty Ltd]:My private company Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:server1.example.com Email Address []:listadmin@example.com |
Измените разрешения SSL-сертификата и перезапустите PureFTPd:
1 2 | root@server1:~# chmod 600 /etc/ssl/private/pure-ftpd.pem root@server1:~# systemctl restart pure-ftpd-mysql |
Отредактируйте /etc/fstab . Мой выглядит следующим образом (я добавил ,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 в раздел с точкой монтирования / ):
1 | root@server1:~# nano /etc/fstab |
1 2 3 4 5 6 7 8 9 10 11 12 | # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation UUID=26fbb23e-db87-4a1c-8e17-d139896945bb / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1 # swap was on /dev/sda5 during installation UUID=585d5391-1595-4c9e-82de-5407d3367c78 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 |
Чтобы включить квоту, выполните следующие команды:
1 2 3 | root@server1:~# mount -o remount / root@server1:~# quotacheck -avugm root@server1:~# quotaon -avug |
Установите DNS-сервер BIND
BIND может быть установлен следующим образом:
1 | root@server1:~# apt-get install bind9 dnsutils |
Если ваш сервер является виртуальной машиной, то настоятельно рекомендуется установить демон-хэдж, чтобы получить более высокую энтропию для подписи DNSSEC. Вы можете установить hasged на не виртуальные серверы, это не должно повредить.
1 2 3 | root@server1:~# apt-get -y install haveged root@server1:~# systemctl enable haveged root@server1:~# systemctl start haveged |
Объяснение на эту тему можно найти здесь .
Установите Webalizer и AWStats
Webalizer и AWStats могут быть установлены следующим образом:
1 | root@server1:~# apt-get install webalizer awstats geoip-database libtimedate-perl libclass-dbi-mysql-perl |
Откройте /etc/cron.d/awstats
1 | root@server1:~# nano /etc/cron.d/awstats |
и закомментируйте всё в этом файле:
1 2 3 4 5 6 | # MAILTO=root # */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
Jailkit нужен только если вы хотите синхронизировать пользователей SSH. Он может быть установлен следующим образом ( важно: Jailkit должен быть установлен до ISPConfig — он не может быть установлен позже! ):
1 2 3 4 5 6 7 8 9 10 | root@server1:~# apt-get install build-essential autoconf automake libtool flex bison debhelper binutils root@server1:~# cd /tmp root@server1:/tmp# wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz root@server1:/tmp# tar xvfz jailkit-2.20.tar.gz root@server1:/tmp# cd jailkit-2.20 root@server1:/tmp/jailkit-2.20# echo 5 > debian/compat root@server1:/tmp/jailkit-2.20# ./debian/rules binary root@server1:/tmp/jailkit-2.20# cd .. root@server1:/tmp# dpkg -i jailkit_2.20-1_*.deb root@server1:/tmp# rm -rf jailkit-2.20* |
Установите Fail2ban и UFW Firewall
Это необязательно, но рекомендуется, потому что монитор ISPConfig пытается показать журнал:
1 | root@server1:~# apt-get install fail2ban |
Чтобы заставить fail2ban контролировать PureFTPd и Dovecot, создайте файл /etc/fail2ban/jail.local
1 | root@server1:~# nano /etc/fail2ban/jail.local |
с таким содержимым
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [pure-ftpd] enabled = true port = ftp filter = pure-ftpd logpath = /var/log/syslog maxretry = 3 [dovecot] enabled = true filter = dovecot logpath = /var/log/mail.log maxretry = 5 [postfix-sasl] enabled = true port = smtp filter = postfix[mode=auth] logpath = /var/log/mail.log maxretry = 3 |
Перезапустите fail2ban после этого:
1 | root@server1:~# systemctl restart fail2ban |
Чтобы установить брандмауэр UFW, выполните команду:
1 | root@server1:~# apt-get install ufw |
Установите RoundCube
Установите RoundCube с помощью этой команды:
1 | root@server1:~# apt-get install roundcube roundcube-core roundcube-mysql roundcube-plugins |
Установщик задаст следующие вопросы:
1 2 3 | Configure database for roundcube with dbconfig.common? <-- yes MySQL application password for roundcube: <-- press enter Password of the databases administrative user: <-- enter the MySQL root password here. |
Затем отредактируйте файл RoundCube /etc/roundcube/config.inc.php и настройте несколько параметров:
1 | root@server1:~# nano /etc/roundcube/config.inc.php |
Установите для default_host и smtp_server значение localhost.
1 2 | $config['default_host'] = 'localhost'; $config['smtp_server'] = 'localhost'; |
ISPConfig имеет некоторую конфигурацию в vhost для приложений nginx для squirrelmail, которая также работает для roundcube. Мы активируем его с помощью симлинка:
1 | root@server1:~# ln -s /usr/share/roundcube /usr/share/squirrelmail |
http://192.168.0.100:8081/webmail
http://server1.example.com:8081/webmail (после установки ISPConfig см. следующую главу)
Установите ISPConfig 3
Перед тем, как начать установку ISPConfig, убедитесь, что Apache остановлен (если он установлен — возможно, что некоторые из ваших установленных пакетов установили Apache как зависимость без вашего ведома). Если Apache2 уже установлен в системе, остановите его сейчас
1 | root@server1:~# systemctl stop apache2 |
и удалите ссылки запуска системы Apache:
1 | root@server1:~# update-rc.d -f apache2 remove |
Убедитесь, что nginx запущен:
1 | root@server1:~# systemctl start nginx |
(Если у вас установлены Apache и nginx, программа установки спросит вас, какой из них вы хотите использовать: Обнаружены Apache и nginx. Выберите сервер для ISPConfig: (apache, nginx) [apache]:
Введите nginx . Если установлены только Apache или nginx, программа установки автоматически обнаруживает это и не задает никаких вопросов.)
Чтобы установить ISPConfig 3.1 из последней выпущенной версии, сделайте это:
1 2 3 4 5 | root@server1:~# cd /tmp root@server1:/tmp# wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz root@server1:/tmp# tar xfz ISPConfig-3-stable.tar.gz root@server1:/tmp# cd ispconfig3_install/install/ root@server1:/tmp/ispconfig3_install/install# php -q install.php |
Это запустит установщик ISPConfig 3. Установщик настроит для вас все службы, такие как Postfix, Nginx, Dovecot и прочие. В процессе снова будет ряд вопросов, на которые надо ответить:
1 2 3 4 5 6 7 | Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:DPR Locality Name (eg, city) []:Donetsk Organization Name (eg, company) [Internet Widgits Pty Ltd]:My private company Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:server1.example.com Email Address []:listadmin@example.com |
Мы сможем выбрать порт и указать тип поключения к панели http или https
1 2 3 | ISPConfig Port [8080]: Admin password [de5c7095]: Do you want a secure (SSL) connection to the ISPConfig web interface (y,n) [y]: y |
Программа установки автоматически настраивает все базовые службы, поэтому ручная настройка не требуется.
После этого вы можете получить доступ к ISPConfig 3 по адресу http(s)://server1.example.com:8080/ или http(s)://192.168.1.100:8080/ (http или https зависит от того, что вы выбрали во время установки). Войдите в систему с именем пользователя admin и заданным ранее паролем de5c7095
Наконец, мы исправляем некоторые права на установку RoundCube.
1 2 3 4 5 6 7 8 | root@server1:~# chown root:ispapps /etc/roundcube/debian-db.php root@server1:~# chmod 640 /etc/roundcube/debian-db.php root@server1:~# chown root:ispapps /etc/roundcube/config.inc.php root@server1:~# chmod 640 /etc/roundcube/config.inc.php root@server1:~# chown -R ispapps:adm /var/log/roundcube root@server1:~# chmod -R 750 /var/log/roundcube root@server1:~# chown -R ispapps:ispapps /var/lib/roundcube/temp root@server1:~# chmod -R 750 /var/lib/roundcube/temp |
Система готова к использованию
ISPConfig 3 Руководство
По 5 баксов торгуют. Метод тыка и гугл никто не отменял.
После установки не помешает заняться безопасностью:
Почему 22 порт SSH нужно обязательно менять на не стандартный