Собственный хостинг: Установка 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=
Никто не мог оставить ни одного заказа на сайтах, а это гигантские деньги, если учесть количество этих сайтов. Включаем еще и почту.
При рестарте демоны просто не могли начать писать лог и по этому попросту не начинали работу. А это вообще печально. Так что потеря даже целостности 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
Установка 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 =
Правило для
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, уже к этому привыкли и не допускают таких ошибок, если вы приверженец другого редактора, то тут вам может повезти меньше.
Оставить комментарий