Собственный хостинг: Установка Apache2, PHP5, PhpMyAdmin2, FCGI, Suexec, Pear и Mcrypt, Amavisd-new, SpamAssassin и Clamav (5часть)

Немного займемся защитой от вирусов и спама.

apt-get 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>

Конечно все это первоначальные настройки в последующем мы будем наворачивать систему от многих вещей попросту отказываться в угоду защиты сервера и его стабильной работы. Но обо всем по порядку, пока делаем так.

Поскольку оно нам не понадобится, будет только занимать

/etc/init.d/spamassassin stop update-rc.d -f spamassassin remove

Установка Apache2, PHP5, PhpMyAdmin, FCGI, Suexec, Pear и Mcrypt

apt-get 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-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby

По ходу инсталляции отвечаем на вопросы:

Web server to reconfigure automatically: - apache2
Configure database for phpmyadmin with dbconfig-common? -No 

Затем запустите следующую команду для Apache модулей Suexec:

a2enmod suexec rewrite ssl actions include
a2enmod dav_fs dav auth_digest

И перезапускаем apache:

/etc/init.d/apache2 restart

Устанавливаем FTP сервер PureFTP и квоты

apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool
cat /etc/default/pure-ftpd-common |grep STANDALONE_OR_INETD

Должны увидеть:

STANDALONE_OR_INETD=standalone

Если нет, то правим файл и меняем на standalone

vim /etc/inetd.conf

Проверяем все должно быть закомментировано.

Если делали изменения в данных файлах, то рестартуем демона, если нет пропускаем.

/etc/init.d/openbsd-inetd restart

Настройка PureFTPD закончена, но все пароли по умолчанию во время сессии передаются в открытом виде, скрыв их, мы намного повысим безопасность нашего соединения. С помощью TLS вся сессия будет зашифрована.

echo 1 > /etc/pure-ftpd/conf/TLS

Создаем сертификат SSL для 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

Последовательно отвечаем на вопросы:

  • Country Name (2 letter code) [AU]: RU
  • State or Province Name (full name) [Some-State]:Russia
  • Locality Name (eg, city) []: Moscow
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:Название моей компании
  • Organizational Unit Name (eg, section) []:web
  • Common Name (eg, YOUR name) []:mydomain.ru
  • Email Address []:viktor@7877796.ru

Оно же в русской интерпретации:

  • Название страны (2 буквенный код) [AU]: — Введите название страны (например, «RU»
  • Государство или название провинции (полное название) [Некоторые государства-]: — Введите государства или название провинции
  • Местность имя (например, города) []: — введите Ваш город
  • Название организации (например, компании) [Интернет Widgits Pty Ltd]: — Введите название организации (например, название Вашей компании)
  • Подразделение Название (например, раздел) []: — Введите организационное название группы (например, «ИТ-отдел»
  • Общее имя (например, ваше имя) []: — Введите полное доменное имя системы (например, «moydomain.ru»
  • Электронный адрес: []: — Введите адрес электронной почты

Изменение разрешения сертификата SSL:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Перезапускаем

/etc/init.d/pure-ftpd-mysql restart

Подключаем квоты, для этого нам понадобится изменить /etc/fstab будьте предельно аккуратны в данном месте, одна ошибка может привести к неприятным последствиям. На раздел с точкой монтирования / нам нужно установить квоту.

cp /etc/fstab /etc/fstab_old_ok vim /etc/fstab

У нас должно получиться вот так, если вы делаете строго по мануалу, то в точности так.

# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/md1 / ext3 usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1
/dev/md0 /boot ext2 defaults 0 2
/dev/sda2 none swap sw 0 0
/dev/sdb2 none swap sw 0 0
/dev/sdc1 /mnt/disk1 ext4 defaults 0 0

А вот от errors=remount-ro пришлось отказаться при появлении первой же ошибки у вас остановится сервер;(чего явно нельзя допустить. В моем случае это приводило к 2 вещам.

Никто не мог оставить ни одного заказа на сайтах, а это гигантские деньги, если учесть количество этих сайтов. Включаем еще и почту.

При рестарте демоны просто не могли начать писать лог и по этому попросту не начинали работу. А это вообще печально. Так что потеря даже целостности RAID массива и части данных в таком контексте не идет вразрез с остановкой сервера в принципе;(

И даже если вы отделались легким испугом, вам в любом случае нужно будет отмонтировать диск, прогнать его чекдиском и только после этого заново запустить сервер. Стоимость простоя в таком случае еще и добавляет факт остановки сайтов вообще и отдача 500 ошибки на всех сайтах, следовательно, уже через 10–30 секунд все ваши клиенты получат уведомления от яндекс метрики об остановке сервера, а вот этого вообще лучше не делать Ибо дальше уже начинают ломать не сервер, а наш мозг.

Включаем квоты, для этого перемонтируем раздел и запускаем квоты.

mount -o remount /

Если вы неправильно сделали, то увидите предупреждение:

mount: / not mounted already, or bad option
Запускаем квоты:

quotacheck -avugm

Ждем и расслабляемся, сканирование может занять внушительное время.

quotaon -avug

Установка bind9

Нужно сказать, что это самый устойчивый и легко устанавливаемый сервер, на моей памяти он падал всего 1 раз, и то не по своему желанию. Установка данного сервера должна быть произведена до установки панели управления ispconfig3 поскольку ispconfig3 просто не будет с ним работать до переустановки, она хоть и проходит штатно фактически как обновление панели, но лишний раз на рабочем сервере изменять глобальные настройки неправильно.

apt-get install bind9 dnsutils
Установка bind9
Установка bind9

Установка Vlogger, Webalizer, И Awstats

Немного статистики нам никогда не повредит. Статистика доступна по адресу http://mydomain.ru/stats

apt-get install vlogger webalizer awstats.

В дальнейшем, нам скорее всего придется отказаться от такой штуки, поскольку как ни прискорбно, но и их используют злоумышленники для получения вечных ссылок. поскольку все запросы сохраняются в html файлах этих систем, а файлы лежат в корне сайта, рисовать же Дисалоу в robots.txt в каждом сайте замучаешься. Так пока ставим, но если не придумаем эффективного способа закрыться от таких ссылок… В общем подумаем потом. Данная мысль пришла только вчера вечером и еще не успела оформиться.

vim /etc/cron.d/awstats

Комментируем в нем все строчки поскольку данную функцию заберет на себя ispconfig3

#*/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

Если мы планируем давать своим пользователям ssh доступ, то нам понадобится jailkit.

Поскольку он позволяет создавать полноценное chroot окружение для пользователей.

Конечно, мы можем давать и обычного ssh пользователя, но в таком случае он будет сильно стеснен ограничениями системы.

jailkit позволяет более гибко администрировать его права.

Обратите внимание что jailkit нам нужно установить до установки самого isoconfig3 — в противном случае, он просто будет игнорироваться.

И потребуется перезапуск ispconfig3

Как не странно все мануалы в интернете были по этому вопросы неправильны (в 90% из них еще и ошибки. Пришлось писать самому, дабы все оказалось достаточно просто.

Ставим нужные зависимости, предварительно проверив, не появились ли более свежие версии продукта.

apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper devscripts
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.15.tar.gz
tar xvfz jailkit-2.15.tar.gz
cd jailkit-2.15
./configure
make
make install
cd /tmp
rm -rf jailkit-2.*

Установка fail2ban

Как сказано в инструкции по установке ispconfig3 — это необязательный параметр, однако я бы поспорил — количество отраженных атак в день может измеряться сотнями, и это учитывая, что в основе своей они идут с тех же источников по тайм ауту, фактически ваш сервер всегда под атакой, естественно, чаще всего по мере убывания атакуются такие вещи как:

ssh: 100% каждый день. Далее — почта FTP Ddos, который вообще может вывести сервер из строя. В общем, называть инструмент хоть как то защищающий от таких вещей необязательным я бы не стал. В среднем, в логе отраженных атак оказывается от 600 строк.

apt-get install fail2ban

Чтобы fail2ban отображал монитор PureFTPd, SASL, и Courier, создайте файл /etc/fail2ban/jail.local:

Далее будем внимательны! несколько файлов и легко запутаться, делаем ровно по ману, ни в право ни в лево.

vim /etc/fail2ban/jail.local

Вставляем этот конфиг:

[pureftpd]

enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 3


[sasl]

enabled  = true
port     = smtp
filter   = sasl
logpath  = /var/log/mail.log
maxretry = 5


[courierpop3]

enabled  = true
port     = pop3
filter   = courierpop3
logpath  = /var/log/mail.log
maxretry = 5


[courierpop3s]

enabled  = true
port     = pop3s
filter   = courierpop3s
logpath  = /var/log/mail.log
maxretry = 5


[courierimap]

enabled  = true
port     = imap2
filter   = courierimap
logpath  = /var/log/mail.log
maxretry = 5


[courierimaps]

enabled  = true
port     = imaps
filter   = courierimaps
logpath  = /var/log/mail.log
maxretry = 5

Затем создаем сами правила для PureFtpd

vim /etc/fail2ban/filter.d/pureftpd.conf

Вставляем правило:

[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =

Как видно мы в этом файле задаем условия для сработки.

Затем создайте следующие фильтр для pop:

vim /etc/fail2ban/filter.d/courierpop3.conf
# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}?(?P\S+)
# Values: TEXT
#
failregex = pop3d: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Далее действуем по аналогии:

vim /etc/fail2ban/filter.d/courierpop3s.conf
# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}?(?P\S+)
# Values: TEXT
#
failregex = pop3d-ssl: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Правило для IMAP

vim /etc/fail2ban/filter.d/courierimap.conf
# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}?(?P\S+)
# Values: TEXT
#
failregex = imapd: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Правило для IMAP-SSL

vim /etc/fail2ban/filter.d/courierimaps.conf
# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P\S+)
# Values:  TEXT
#
failregex = imapd-ssl: LOGIN FAILED.*ip=\[.*:\]

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Рестартуем сервер.

/etc/init.d/fail2ban restart

Если появился faild! Проверяйте конфиги, возможно, при вставке в вим вы забыли нажать «a» и вставившийся код обрезался до первой «a» в нем. Все, кто часто пользуются vim, уже к этому привыкли и не допускают таких ошибок, если вы приверженец другого редактора, то тут вам может повезти меньше.

Оставить комментарий