Расширение идеального сервера - Debian 6.0 [ISPConfig 3]

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

DebianПродолжая развивать идею идеального сервера на Debian 6.0 которые опубликованны в статьях Идеальный сервер - Debian 6.0 [ISPConfig 3], а далее дополненной в Идеальный сервер - Debian 6.0 с BIND и Courier [ISPConfig 3]. Этот материал объясняет, как изменить порты по умолчанию (SSH, ISPConfig, Webmin), как установить некоторые полезные приложения (webmin, roundcube, atop, htop, multitail, tiger и так далее), как периодически обновлять Awstats (чаще одного раза в день) или когда Вы этого захотите, как создать клиентов резервного копирования данных с доступом в папку, и наконец, она объясняет, как настроить производительность Вашей системы (mysqltuner, tuning-primer) или безопасности (пользовательские правила брандмауэра, ((D)Dos Deflate, fail2ban изменения ). На нашем форуме имеется скрипт предназначеный для автоматической установки веб-клиента roundcube 0.7.1 со всеми фишками ISPConfig 3. Все действия на сервере выполняются из под root. Проверено пока на Ubuntu 10.04.03 и Debian-6.0.4. С благодарностью к SinglWolf администрация проекта mini Server. >>> [How To]Автоматическая установка Roundcube для ISPConfig 3

Конкретно в этом учебнике объясняется, как:

  • Установим Webmin и изменим его порт с 10000 на 50000
  • Изменим порт используемый для ISPConfig с 8080 до 50443
  • Установим Roundcube, так как все пользователи смогут получать доступ к нему на SSL (порт 50443 - как ISPConfig) на Web почте
  • Расширить fail2ban (для Webmin, RoundCube, SSH) и применить небольшой патч
  • Установим multitail и используем простые команды для просмотра всех полезных журналов
  • Изменим порт для SSH с 22 на 50022
  • Доступ к PhpMyAdmin через SSL (порт 50443 - как ISPConfig) при различных URL, в отличии от адреса по умолчанию (например, /mydomaindb)
  • Установим некоторые полезные приложения / расширения на Ваш сервер (htop, php-apc, iptraf, logwatch и так далее)
  • Обновление awstats производится вручную или автоматический, когда Вы захотите
  • Скорректируем настройки MySQL с помощью сценариев, как mysqltuner или tuning-primer, которые предлагают параметры для настройки вашей MySQL установки
  • Ваша система научится с помощь простых шагов, блокировать определенные - настойчивые - IP-адреса или сети, с помощью пользовательских правил для защиты сервера от простых DDoS-атак, в сопутствии с (D)Dos Deflate.
  • Создадим ежедневные резервные копирования папок клиентов сети и их баз данных в пользовательские папки, так что бы они могли были в состоянии загрузить их сами.

Для работы с этим руководством Вы должны прочитать и выполнить следующее:

- Идеальный сервер - Debian 6.0 [ISPConfig 3] и Идеальный сервер - Debian 6.0 с BIND и Courier [ISPConfig 3]
- Если Вы хотите получить доступ к ISPConfig Группам и веб-почте через SSL Я также предполагаю, что вы следовали инструкции Включение SSL для ISPConfig для веб-интерфейс ISPConfig 3 (Это необходимо, если только Вы хотите получить доступ к панели управления и веб-интерфейс ISPConfig 3 через SSL на порту 8080).

Чтобы не иметь проблем после будущего обновления сделайте это:

  • cp /etc/apache2/ssl/ispserver.crt /usr/local/ispconfig/interface/ssl/ispserver.crt
  • cp /etc/apache2/ssl/ispserver.key /usr/local/ispconfig/interface/ssl/ispserver.key

И отредактировать /etc/apache2/sites-enabled/000-ispconfig.vhost, удалив строки, которые Вы вставили, и раскомментировать строки по умолчанию для SSL:

  • nano /etc/apache2/sites-enabled/000-ispconfig.vhost

Содержание должно выглядеть так:

[...]

  # SSL Configuration

  SSLEngine On

  SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt
  SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
[...]

Если Вы следовали за вышеупомянутым, то я могу предполагть, что Вы читали работу о suExec и ISPConfig 3 в этом посте: ISPConfig 3 configuration.

Этот материал, является (основой) обновленной версией RoundCube (через SSL) и Webmin с fail2ban для ISPConfig 3 на Debian 6.0 с намного большим количеством дополнений.

{xtypo_warning}Перед началом работ убедитесь, что Ваш сервер является рабочим, и Вы довольны его функциональность. Вам прейдется сделать много изменений по этому руководству, и в случае ошибки прейдется много отладкить!{/xtypo_warning}

Webmin

Перед установкой Webmin нам надо установить некоторые зависимости:

  • apt-get install libapt-pkg-perl libauthen-pam-perl libio-pty-perl apt-show-versions

Загрузите последнюю версию Webmin с официального сайта:

  • cd /tmp
  • wget http://prdownloads.sourceforge.net/webadmin/webmin_1.530_all.deb

и установить его:

  • dpkg -i webmin_1.530_all.deb

{xtypo_alert}Перед изменением порта на какой либо другой, в отличии от порта по умолчанию, не забудьте добавить порт в брандмауэре. Если Вы используете стандартный порт ISPConfig, перейти: Система - Файрволл (Firewall) и добавить запись Firewall, порт выберети на свое усмотрение (В этом руководстве мы будем использовать 50000 для Webmin, 50443 для ISPConfig, 50022 для SSH). Сохраним не удаляя старые порты (8080, 10000, 22), пока Вы абсолютноне будете уверены, что новые порты работают.{/xtypo_alert}

Чтобы изменить порт Webmin по умолчанию, отредактируем файл /etc/webmin/miniserv.conf :

  • nano /etc/webmin/miniserv.conf

и изменить port = 10000 и listen = 10000 на port = 50000 и listen 50000. Перезапустим Webmin:

  • /etc/init.d/webmin restart

Посетите https://www.example.com:50000 для установки обновлений через интерфейс Webmin. Вам придется принять предупреждение системы безопасности, о сертификате Webmin.

Установим другой порт для панель управления ISPConfig

{xtypo_alert}Перед изменением порта на какой либо другой, отличный от порта по умолчанию, не забудьте добавить порт в брандмауэре. Если Вы используете стандартный порт ISPConfig, перейти: Система - Файрволл (Firewall) и добавить запись Firewall, порт выберети на свое усмотрение (В этом руководстве мы будем использовать 50000 для Webmin, 50443 для ISPConfig, 50022 для SSH). Сохраним не удаляя старые порты (8080, 10000, 22), пока Вы абсолютноне будете уверены, что новые порты работают.{/xtypo_alert}

Чтобы изменить порт (8080) по умолчанию панели управления ISPConfig, на другой (например 50443):

  • nano /etc/apache2/sites-enabled/000-ispconfig.vhost

и убедитесь, что все предпоссылки на 8080 заменены на 50443. Выглядит это следующим образом (показаны только первые строки):

[...]
Listen 50443
NameVirtualHost *:50443

<VirtualHost _default_:50443>
[...]

Перезапустите Apache и проверте доступ к панели управления на https://www.example.com:50443 :

  • /etc/init.d/apache2 restart

Продолжая материал, Вы можете установить RoundCube через apt-get. Однако прдерживаясь другой логике (если у Вас есть время и храбрость), Вы можете установить roundcube в своей собственной подобласти, вручную.

В материалах "Идеальный сервер" Вы обычно установливали SquirrelMail. Однако, если Вы не хотите, то можете удалить его:

  • apt-get remove squirrelmail

и удалить /etc/apache2/conf.d/squirrelmail.conf :

  • rm /etc/apache2/conf.d/squirrelmail.conf

Или если Вы хотите его изменить измените /etc/apache2/conf.d/squirrelmail.conf на что-то вроде webmail1.

Установить RoundCube. (Вы должны иметь пароль MySQL администратора, прежде чем приступить. Вам будут заданы несколько вопросов о пароле администратора базы данных и пароль нового пользователя, который будет создан для RoundCube:

  • rm /etc/apache2/conf.d/squirrelmail.conf
Examle answers:
"Configure database for roundcube with dbconfig-common?" ... Yes
"Database type to be used by roundcube: ... MySQL
"Password of the database's administrative user:" ... Ваш пароль администратора БД
"MySQL application password for roundcube:" ... Пароль для входа пользователя roundcube
"Password confirmation:"... Пароль для входа пользователя roundcube

Если что-то пойдет не так, Вы всегда можете запустить:

  • dpkg-reconfigure roundcube-core

Для получения дополнительной информации, пожалуйста, см. этот пост.

 

Для каждого пользователя для доступа к своей электронной почте (через его доменное имя), Вы должны создать или отредактировать файл /etc/apache2/conf.d/roundcube с тем чтобы установить псевдоним для "электронной почты". Если вы хотите SSL Вы должны включить последние две директивы (IfModule mod_rewrite.c), чтобы Apache Всегда перенаправлял ISPConfig на SSL.

  • nano /etc/apache2/conf.d/roundcube
# Those aliases do not work properly with several hosts on your apache server
# Uncomment them to use it or adapt them to your configuration
#    Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/
    Alias /roundcube /var/lib/roundcube
    Alias /webmail /var/lib/roundcube

# Access to tinymce files
<Directory "/usr/share/tinymce/www/">
      Options Indexes MultiViews FollowSymLinks
      AllowOverride None
      Order allow,deny
      allow from all
</Directory>

<Directory /var/lib/roundcube/>
  Options +FollowSymLinks
  # This is needed to parse /var/lib/roundcube/.htaccess. See its
  # content before setting AllowOverride to None.
  AllowOverride All
  order allow,deny
  allow from all
</Directory>

# Protecting basic directories:
<Directory /var/lib/roundcube/config>
        Options -FollowSymLinks
        AllowOverride None
</Directory>

<Directory /var/lib/roundcube/temp>
        Options -FollowSymLinks
        AllowOverride None
        Order allow,deny
        Deny from all
</Directory>

<Directory /var/lib/roundcube/logs>
        Options -FollowSymLinks
        AllowOverride None
        Order allow,deny
        Deny from all
</Directory>

<IfModule mod_rewrite.c>
  <IfModule mod_ssl.c>
    <Location /webmail>
      RewriteEngine on
      RewriteCond %{HTTPS} !^on$ [NC]
      RewriteRule . https://%{HTTP_HOST}:50443%{REQUEST_URI}  [L]
    </Location>
  </IfModule>
</IfModule>

<IfModule mod_rewrite.c>
  <IfModule mod_ssl.c>
    <Location /roundcube>
      RewriteEngine on
      RewriteCond %{HTTPS} !^on$ [NC]
      RewriteRule . https://%{HTTP_HOST}:50443%{REQUEST_URI}  [L]
    </Location>
  </IfModule>
</IfModule>

Изменить /var/lib/roundcube/config/main.inc.php :

  • nano /var/lib/roundcube/config/main.inc.php

и установить некоторые переменные в файле (если вы первый раз изменяете файл - строки 60 и 66):

auto_create_user = TRUE;
$rcmail_config['default_host'] = 'localhost';

Если Вы установите следующие плагины (авторизация которой помогжет fail2ban), Вы должны будете расширить список плагинов в том же самом файле. Если это единственный плагин - другие будут установленны пойзже, Вы должны отредактировать строку (42) как указано ниже:

$rcmail_config['plugins'] = array('fail2ban');

Установить плагин регистратор RoundCube.

В общем, Вы должны скачать файл (fail2ban.php) и вставьте этот fail2ban в папку plugins RoundCube каталога. Теперь, Вы должны получить этот файл: /usr/share/roundcube/plugins/fail2ban/fail2ban.php. Выполните команду:

  • cd /usr/share/roundcube/plugins/
  • wget --no-check-certificate http://github.com/downloads/mattrude/rc-plugin-fail2ban/roundcube-fail2ban-plugin.1.0.tgz
  • tar -xvzf roundcube-fail2ban-plugin.1.0.tgz
  • touch /var/log/roundcube/userlogins

Этот плагин будет обновлять файл журнала с каждой неудачной попыткой аторизации: /var/log/roundcube/userlogins

Не забудьте изменить ссылку на Web почтe в ISPConfig (Система -> Конфиг интерфейса (System Config) - (вкладка) Mail) и установить его в /webmail. И наконец, перезапустить Apache.

  • /etc/init.d/apache2 restart

Теперь можно получить доступ на Web почту http://www.example.com/webmail

Fail2ban

Расширение jail.local файл, которое предлагается в предыдущих статьях Идеальный сервер - Debian 6.0 [ISPConfig 3] и Идеальный сервер - Debian 6.0 с BIND и Courier [ISPConfig 3]: /etc/fail2ban/jail.local

  • nano /etc/fail2ban/jail.local

Вы должны добавить или изменить следующие:

[roundcube]
enabled  = true
port     = http,50443
filter   = roundcube
logpath  = /var/log/roundcube/userlogins
maxretry = 5

[webmin-auth]
enabled = true
port    = 50000
filter  = webmin-auth
logpath  = /var/log/auth.log
maxretry = 3 

[ssh]
enabled = true
port    = 50022
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6

50443 порт в RoundCube требуется, только если Вы включили перенаправление на HTTPS (смотрите в начале материала). 50000 порт в Webmin-аутентификации является измененным портом (смотрите в начале материала). 50022 портов в SSH является измененным портом (смотрите в следующих разделах этого учебника).

Последняя (и очень важное), не забудьте создать roundcube.conf файл /etc/fail2ban/filter.d/roundcube.conf .

  • nano /etc/fail2ban/filter.d/roundcube.conf

со следующим содержанием:

[Definition]
failregex = FAILED login for .*. from <host>
ignoreregex =

Удачно созданная Webmin-авторизации и фильтры SSH уже непосредственно создаст fail2ban. Перезагрузите fail2ban:

  • /etc/init.d/fail2ban restart

Если кто-то добавляет много тюрем в fail2ban, то некоторые из них не могут зайти (ошибки в /var/log/fail2ban.log но не выходят !!!). Смотрим это выполнив:

  • iptables -L -n

К сожалению, решение немного кривое ... но по крайней мере это работает:

В файле /usr/bin/fail2ban-client в строке 145 нужно вставить time.sleep (0,1) или time.sleep (0,05) :

  • nano /usr/bin/fail2ban-client

Так выглядит файл перед изменением:

[...]
 def __processCmd(self, cmd, showRet = True):
                beautifier = Beautifier()
                for c in cmd:
                        beautifier.setInputCmd(c)
                        try:
[...]

Так выглядит потом:

[...]
 def __processCmd(self, cmd, showRet = True):
                beautifier = Beautifier()
                for c in cmd:
                        time.sleep(0.05)
                        beautifier.setInputCmd(c)
                        try:
[...]

Перезагрузите снова fail2ban:

  • /etc/init.d/fail2ban restart

Вы можете проверить, что все тюрьмы являются активными командой:

  • iptables -L -n

multitail

В Debian multitail устанавливается через apt:

  • apt-get install multitail

Создайте папку /root/scripts (если Вы не сделали этого раньше) и вставить команду, которая позволит Вам видеть несколько файлов одновременно:

  • mkdir /root/scripts
  • cd /root/scripts
  • nano mytail

Вставим строки:

#!/bin/bash
multitail -ci yellow -e "ailed" -n 1000 /var/log/auth.log  -ci red -e "Ban" -n 1000 -I /var/log/fail2ban.log -ci red -e "iopen" -n 1000 -I /var/log/messages -ci green -e "Unban" \ 
 -n 1000 -I /var/log/messages -ci blue -e "fail" -n 1000 -I /var/log/syslog

Сохранитt, выйдети и сделать его исполняемым для root'а:

  • chmod 700 /root/scripts/mytail

Запустите его (чтобы увидеть результат) с помощью команды (нажмите "Q" для выхода):

  • /root/scripts/mytail

SSH более 50022 портов

{xtypo_alert}Перед изменением порта на какой либо другой, отличный от порта по умолчанию, не забудьте добавить порт в брандмауэре. Если Вы используете стандартный порт ISPConfig, перейти: Система - Файрволл (Firewall) и добавить запись Firewall, порт выберети на свое усмотрение (В этом руководстве мы будем использовать 50000 для Webmin, 50443 для ISPConfig, 50022 для SSH). Сохраним не удаляя старые порты (8080, 10000, 22), пока Вы абсолютноне будете уверены, что новые порты работают.{/xtypo_alert}

В Debian SSH сервер установливается (если у Вас его еще нет) с apt-get. После этого отредактируйте конфигурационной файла /etc/ssh/sshd_config

  • apt-get install ssh openssh-server openssh-client
  • nano /etc/ssh/sshd_config

Добавте Port 50022 сразу после Port 22. Сохраните изменения, закройте и перезапустите SSH:

  • /etc/init.d/ssh restart

{xtypo_info}Вы должны войти снова через SSH на порту 50022. После выполненной модификации выше, даже SFTP будет доступен через порт 50022. Если удалить порт 22, то Вы можете получить доступ к SSH и SFTP только по порту 50022.{/xtypo_info}

Если Вам удастся Войти с использованием порта 50022 (с помощью следующей команды), Вы можете удалить строку Port 22 в /etc/ssh/sshd_config :

  • ssh -p 50022 Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Если Вы не вошли, то вы должны переопределить SSH тюрьмы и изменить порт fail2ban SSH тюрьмы (от SSH к 50022) в /etc/fail2ban/jail.local .

(Если вы следовали этому материалу с самого начала, Вы уже сделали это в разделе Fail2ban.)

PhpMyAdmin под разными URL + SSL

Чтобы получить доступ к PhpMyAdmin через SSL под mydomaindb, (или другом уникальном именем), Вы можете применить ту же самую подсказку, как с RoundCube (для SSL). Что касается новых URL, Вы должны отредактировать /etc/apache2/conf.d/phpmyadmin.conf, изменив псевдоним "/phpmyadmin" на "/mydomaindb" и убедитесь, что у Вас в нем есть следующие строки. Заметьте последние строки от <IfModule mod_rewrite.c> до.... </IfModule>, которые используются, чтобы перенаправить на SSL):

# phpMyAdmin default Apache configuration

Alias /mydomaindb /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
        Options FollowSymLinks
        DirectoryIndex index.php

        <IfModule mod_php5.c>
                AddType application/x-httpd-php .php

                php_flag magic_quotes_gpc Off
                php_flag track_vars On
                php_flag register_globals Off
                php_value include_path .
        </IfModule>

</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    <IfModule mod_authn_file.c>
    AuthType Basic
    AuthName "phpMyAdmin Setup"
    AuthUserFile /etc/phpmyadmin/htpasswd.setup
    </IfModule>
    Require valid-user
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/libraries>
    Order Deny,Allow
    Deny from All
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Order Deny,Allow
    Deny from All
</Directory>

<IfModule mod_rewrite.c>
  <IfModule mod_ssl.c>
    <Location /mydomaindb>
      RewriteEngine on
      RewriteCond %{HTTPS} !^on$ [NC]
      RewriteRule . https://%{HTTP_HOST}:50443%{REQUEST_URI}  [L]
    </Location>
  </IfModule>
</IfModule>

После этого, перезапустите Apache

  • /etc/init.d/apache2 restart

Не забудьте изменить ссылку PhpMyAdmin в ISPConfig 3 GUI (Система - System Config (конфиг интерфейса - закладка Sites - пункт PhpMyAdmin).

Установика PHP accelarator и другое

В этом разделе мы установим APC (PHP accelarator), который разработан парнями, которые разрабатывают php и некоторые приложения (htop, iptraf, logwatch, tiger).

  • apt-get install php-apc htop iptraf logwatch tiger

Изменим /etc/php5/conf.d/apc.ini , для того чтобы увеличить кэш-память:

  • nano /etc/php5/conf.d/apc.ini

И добавьте следующие строки:

apc.shm_size=128

Теперь перезапустите Apache:

  • /etc/init.d/apache2 restart

С htop Вы можете видеть системную информацию лучшим способом чем с iptraf, Вы можете видеть статистику реального времени для своего соединения с logwatch, у Вас может быть своя система, отправляемая Вам по почте сводку файлов журнала, а с tiger Вам можно было бы обеспечить отправку себе отчетов по почте уязвимостей системы безопасности с периодичностью(если это необходимо).

Поскольку много сценариев/приложений отправляет много писем к пользовательскому root, Вы можете исправить почту root на более 'реальный' адрес электронной почты. Gосле того, как Вы устанавмте 'реальную' почту для Вашего example.com домена, Вы можете отредактировать псевдонимы и добавить псевдоним к пользователю root:

  • nano /etc/aliases

и измененим строку

root:root

на

root:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Если Вы хотите установить Drupal (или других CMS), Вам необходимо Propably uploadprogress и JSON. Чтобы выполнить их установку, сделайте следующее:

  • apt-get install php5-dev php-services-json
  • pecl install uploadprogress
  • touch /etc/php5/apache2/conf.d/uploadprogress.ini
  • nano /etc/php5/apache2/conf.d/uploadprogress.ini

И добавьте следующую строку:

extension=uploadprogress.so

Наконец перезапустим Apache:

  • /etc/init.d/apache2 restart

В этом разделе Вы можете применить модификацию, которая позволит Вам обновлять awstats в любое время, когда Вы захотите, или (при использовании cron) даже чаще. Прежде, чем продолжим дальше, мы должны изменить формат регистрации по умолчанию для awstats. В Debian формат по умолчанию 4, но мы необходимо в 1. Отредактируете файл /etc/awstats/awstats.conf или файл /etc/awstats/awstats.conf.local. Я предпочитаю второй, потому что он позволияет мне не отставать от обновлений:

  • nano /etc/awstats/awstats.conf.local

и добавьте строку: LogFormat = 1

После этого файл должен выглядеть следующим образом:

# You can overrides config directives here.
# This is particularly useful for users with several configs for
# different virtual servers, who want to reuse common parameters.
# Also, this file is not updated with each new upstream release.
LogFormat=1

Теперь у нас есть для ежедневного копирования по умолчанию cron в ISPConfig, изменим его ... На самом деле мы должны изменить его A LOT (новое название файла: mycron.php). В основном мы должны вырезать много строк и сохранить только некоторые из них.

  • cp /usr/local/ispconfig/server/cron_daily.php /root/scripts/mycron.php
  • chmod 700 /root/scripts/mycron.php
  • nano /root/scripts/mycron.php

и вставить все следующие строки:

<?php

/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/


require('/usr/local/ispconfig/server/lib/config.inc.php');
require('/usr/local/ispconfig/server/lib/app.inc.php');
set_time_limit(0);

// make sure server_id is always an int
$conf['server_id'] = intval($conf['server_id']);
// Load required base-classes
$app->uses('ini_parser,file,services,getconf');

#######################################################################################################
// Create awstats statistics
#######################################################################################################

$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE stats_type = 'awstats' AND server_id = ".$conf['server_id'];
$records = $app->db->queryAllRecords($sql);
$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
foreach($records as $rec) {
        $logfile = escapeshellcmd($rec['document_root'].'/log/access.log');
        $domain = escapeshellcmd($rec['domain']);
        $statsdir = escapeshellcmd($rec['document_root'].'/web/stats');
        $awstats_pl = $web_config['awstats_pl'];
        $awstats_buildstaticpages_pl = $web_config['awstats_buildstaticpages_pl'];
        $awstats_conf_dir = $web_config['awstats_conf_dir'];
        $awstats_website_conf_file = $web_config['awstats_conf_dir'].'/awstats.'.$domain.'.conf';
        if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file);
        if(!is_file($awstats_website_conf_file)) {
                $awstats_conf_file_content = 'Include "'.$awstats_conf_dir.'/awstats.conf"
                LogFile="/var/log/ispconfig/httpd/'.$domain.'/access.log"
                SiteDomain="'.$domain.'"
                HostAliases="www.'.$domain.' localhost 127.0.0.1"';
                file_put_contents($awstats_website_conf_file,$awstats_conf_file_content);
        }
 if(!@is_dir($statsdir)) mkdir($statsdir);

        // awstats_buildstaticpages.pl -update -config=mydomain.com -lang=en -dir=/var/www/domain.com/web/stats -awstatsprog=/path/to/awstats.pl
        $command = "$awstats_buildstaticpages_pl -update -config='$domain' -lang=en -dir='$statsdir' -awstatsprog='$awstats_pl'";

        if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {
                exec($command);
                rename($rec['document_root'].'/web/stats/awstats.'.$domain.'.html',$rec['document_root'].'/web/stats/index.html');
                $app->log('Created awstats statistics with command: '.$command,LOGLEVEL_DEBUG);
        } else {
                $app->log("No awstats statistics created. Either $awstats_pl or $awstats_buildstaticpages_pl is not owned by root user.",LOGLEVEL_WARN);
        }

}


die("finished.\n");
?>

Этот сценарий отсекает файла по умолчанию cron ISPConfig. Говоря простыми словами, сценарий читает файл access.log каждой области и не делает изменений, кроме того, что она воспроизводит HTML файлы для AWStats. Имейте в виду, что по умолчанию ISPConfig cron будет работать как обычно, а в 00:30, он просто будет добавлять в БД статистику и воссоздать HTML файлы.

В приведенном выше сценарий можно изменить язык произведенный awstats, если Вы просто изменить буквы после "LANG =" на те, которые представляют свою страну.

Чтобы запускать скрипт каждые 4 часа, сначала создайте файл /root/scripts/mycron.sh, сделать его исполняемым, а затем добавить его в список Cronjob:

  • touch /root/scripts/mycron.sh
  • chmod 700 /root/scripts/mycron.sh
  • nano /root/scripts/mycron.sh

и вставить следующее:

#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin
/usr/bin/php -p /root/scripts/mycron.php

Добавить Cronjob:

  • crontab -e

Добавьте следующую строку, сохраните файл и выйдите:

45 0,4,8,12,16,20 * * * /root/scripts/mycron.sh

Вы можете также инициировать создание статистика в любое время:

  • /root/scripts/mycron.sh

MySQL tuning

Скачайте tuning-primer.sh и mysqltuner.pl. Это поможет вам улучшить файла конфигурации MySQL.

  • cd /root/scripts
  • wget http://www.day32.com/MySQL/tuning-primer.sh
  • wget http://mysqltuner.pl/mysqltuner.pl
  • chmod 700 tuning-primer.sh mysqltuner.pl

Для их выполнения:

  • perl /root/scripts/mysqltuner.pl
  • /root/scripts/tuning-primer.sh

Сценарии (скрипты) зададут некоторые простые вопросы (пользователь/пароль) и покажут красным цветом их предложениях для критических параметров настройки. Вы можете использовать их предложения, чтобы повысить производительности mysql-сервера.


Прежде всего, убедитесь, что Вы установили "High" уровень безопасности ISPConfig 3 панели: Система - Конфигурация сервера - Web (вкладка).

{xtypo_warning}Следующие инструкции предназначены только для демонстрации. Полностью разберитесь в них (прочитайте документацию в интернете), прежде чем применять и использовать их.{/xtypo_warning}

В общем, если Вы будете следовать им, Вы сможете ограничивать скорость трафика по определенным портам, снизить sun соединения и предотвратить вторжение, которое используют похожие плохие пакеты. Чтобы применить их создадим папкуr /root/scripts (если она еще не существует), и следующие 5 файлов. (Loadfw, unloadfw, IPS, fwrules и reloadfail2ban). Первый будет содержать скрипт для загрузки правил, второй сценарий для выгрузки правила, третий будет содержать "плохие" IP-адреса и "плохие" хосты, четвертый пользовательские правила и пятый некоторые команды, чтобы перезагрузить eveything (включая fail2ban).

  • mkdir /root/scripts
  • touch /root/scripts/loadfw
  • touch /root/scripts/unloadfw
  • touch /root/scripts/IPs
  • touch /root/scripts/fwrules
  • touch /root/scripts/reloadfail2ban
  • cd /root/scripts
  • nano loadfw

Вставим следующие:

#!/bin/bash
# Simple iptables IP/subnet load script
# ----------------------------------------------------------

cd /root/scripts/

IPT=/sbin/iptables
DROPMSG="fwBLOCKED "
BADIPS=$(egrep -v -E "^#|^$" /root/scripts/IPs)

while read fwrule
do
  $IPT -I INPUT $fwrule

done < /root/scripts/fwrules

for ipblock in $BADIPS
do
   $IPT -I INPUT -s $ipblock -j DROP
   $IPT -I INPUT -s $ipblock -j LOG --log-prefix "$DROPMSG"
done

Изменим unloadfw:

  • nano unloadfw

Вставим следующие:

#!/bin/bash
# Simple iptables IP/subnet unload script
# ---------------------------------------------------------


cd /root/scripts/

IPT=/sbin/iptables
DROPMSG="fwBLOCKED "
BADIPS=$(egrep -v -E "^#|^$" /root/scripts/IPs)

while read fwrule
do
  $IPT -D INPUT $fwrule

done < /root/scripts/fwrules
for ipblock in $BADIPS
do
   $IPT -D INPUT -s $ipblock -j DROP
   $IPT -D INPUT -s $ipblock -j LOG --log-prefix "$DROPMSG"done

Изменим IP адреса:

  • nano IPs

Вставьте раздражающие IP (например, IP, запрещенные многократно fail2ban) или целые сети. Вы можете добавить здесь IP или сеть в любое время, но прежде, чем Вы сделаете любую модификацию (особенно, если Вы удаляете sth), Вы должны выполнить /root/scripts/unloadfw. Позже Вы можете отредактировать файл, вставив IP или сети, и наконец Вы должны выполнить /root/scripts/loadfw (см. ниже),

#IP
x.y.z.w
x.q.a.r

#netwroks
d.r.t.h/24

#mailservers
a.g.h.j

(Вы можете использовать http://www.countryipblocks.net, чтобы видеть сети, которые ассоциируются с каждой страной).

  • nano fwrules

Вставьте следующие (и что-либо еще, что может быть вставлено (-I) или удалено (-D) в/из ВХОДНОЙ цепочки. Правила для серверов с единственным сетевым интерфейсом (eth0). Пожалуйста, измените их, чтобы соответствовало Вашим потребностям (например, изменив eth0, если Ваш сетевой интерфейс отличается).

-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50022 -j DROP
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50022 -j LOG --log-prefix "LMfwport50022"
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --set --name fw50022
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50000 -j DROP
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50000 -j LOG --log-prefix "LMfwport50000"
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --set --name fw50000
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw10000 -j DROP
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw10000 -j LOG --log-prefix "LMfwport10000"
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --set --name fw10000
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw25 -j DROP
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw25 -j LOG --log-prefix "LMfwport25"
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --set --name fw25
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw110 -j DROP
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw110 -j LOG --log-prefix "LMfwport110"
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --set --name fw110
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50443 -j DROP
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50443 -j LOG --log-prefix "LMfwport50443"
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --set --name fw7443
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw22 -j DROP
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw22 -j LOG --log-prefix "LMfwport22"
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set --name fw22
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw20 -j DROP
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw20 -j LOG --log-prefix "LMfwport20"
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --set --name fw20
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw21 -j DROP
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw21 -j LOG --log-prefix "LMfwport21"
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --set --name fw21
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw143 -j DROP
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw143 -j LOG --log-prefix "LMfwport143"
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --set --name fw143
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw53 -j DROP
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw53 -j LOG --log-prefix "LMfwport53"
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --set --name fw53
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw443 -j DROP
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw443 -j LOG --log-prefix "LMfwport443"
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --set --name fw443
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw8081 -j DROP
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw8081 -j LOG --log-prefix "LMfwport8081"
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --set --name fw8081
-p icmp -j DROP
-p icmp -m limit --limit 2/s -j ACCEPT
-p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j DROP
-p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn80"
-p tcp --syn --dport 443 -m connlimit --connlimit-above 25 -j DROP
-p tcp --syn --dport 443 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn443"
-p tcp --syn --dport 50443 -m connlimit --connlimit-above 25 -j DROP
-p tcp --syn --dport 50443 -m connlimit --connlimit-above 25 -j  LOG --log-prefix "BLfwsyn50443"
-p tcp --syn --dport 50022 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 50022 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn50022"
-p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn22"
-p tcp --syn --dport 50000 -m connlimit --connlimit-above 15 -j DROP
-p tcp --syn --dport 50000 -m connlimit --connlimit-above 15 -j LOG --log-prefix "BLfwsyn50000"
-p tcp --syn --dport 10000 -m connlimit --connlimit-above 15 -j DROP
-p tcp --syn --dport 10000 -m connlimit --connlimit-above 15 -j LOG --log-prefix "BLfwsyn10000"
-p tcp --syn --dport 25 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 25 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn25"
-p tcp --syn --dport 20 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 20 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn20"
-p tcp --syn --dport 21 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 21 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn21"
-p tcp --syn --dport 110 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 110 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn110"
-p tcp --syn --dport 143 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 143 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn143"
-p tcp --syn --dport 53 -m connlimit --connlimit-above 10 -j DROP
-p tcp --syn --dport 53 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn53"
-i eth0 -p tcp --tcp-flags ALL ALL -j DROP
-i eth0 -p tcp --tcp-flags ALL ALL -j LOG --log-level 4 --log-prefix "FLAAfw"
-i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
-i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-level 4 --log-prefix "FINGfw"
-i eth0 -f -j DROP
-i eth0 -f  -m limit --limit 6/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "FRAGfw"
-i eth0 -p tcp --tcp-flags ALL NONE -j DROP
-i eth0 -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULLfw"
-i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
-i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMASfw"
-i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-level 4 --log-prefix "SYNRTSfw"
-i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
-i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-level 4 --log-prefix "SYNRTSACKfw"
-i eth0 -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
-i eth0 -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-level 4 --log-prefix "SYNRTSYNSfw"
-i eth0 -p tcp ! --syn -m state --state NEW -j DROP
-i eth0 -p tcp ! --syn -m state --state NEW  -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "DROSYNCfw"

Изменим reloadfail2ban:

  • nano reloadfail2ban

Вставив следующее:

#!/bin/bash

/etc/init.d/fail2ban restart
sleep 2
/root/scripts/unloadfw
sleep 2
/root/scripts/loadfw

Наконец выполним:

  • chmod 700 reloadfail2ban
  • chmod 700 unloadfw
  • chmod 700 loadfw
  • /root/scripts/reloadfail2ban

Если вы хотите, чтобы начать после каждой перезагрузки пасты линия: /root/scripts/loadfw в конце /etc/init.d/rc.local :

  • nano /etc/init.d/rc.local

и добавьте:

[...]
/root/scripts/loadfw

(D) DoS Deflate, легкий Bash сценарий оболочки, разработанный, чтобы помочь в процессе блокирования атаки отказ в обслуживании. Это создает список IP адресов, подключенных с серверу, наряду с их общим количеством соединений. Это - один из самых простых и самых легкий устанавливаемых решений на уровне программного обеспечения.

IP адреса по предварительно сконфигурированному числу соединений автоматически блокируются в брандмауэре сервера, который может быть прямым iptables или Усовершенствованным Брандмауэром Политики (APF). Чтобы установить (D) DoS, выполните:

  • cd /tmp
  • wget http://www.inetbase.com/scripts/ddos/install.sh
  • chmod 0700 install.sh
  • ./install.sh

Изменим /usr/local/ddos/ddos.conf и применим последующие изменения, которые будут отключать брандмауэр APF и использовать обычную Iptables, электронную почту событий в root и блокировать IP с более чем 100 соединений в минуту.

[...]
APF_BAN=0
EMAIL_TO="root"
NO_OF_CONNECTIONS=100
[...]

Вышеупомянутое - только набор предложений. Вы можете расширить их, как Вам нравится.

РЭто только ожин из способов их реализации. Вы можете использовать решение для брандмауэра как APF, Shorewall и т.д.


Следующий сценарий - это легкий способ сделать копию Ваших клиентских данных и Ваших клиентских баз данных в их папке веб-сайта. Как Вы можете знать в ISPConfig 3, у каждого клиента есть папка в виде /var/www/clients/clientXY, в котором есть все его веб-сайты. Сценарий поддержит все его веб-сайты в каждой веб-папке в комплекте с его базами данных, что бы клиент будел в состоянии загрузить их сам. Сценарий также сохраняет прошлые 3 дня этих файлов, и прошлые 3 воскресенья для администраторского использования в каталоге Вашего на выбор (значение по умолчанию /var/backup/sites).

Это очень простой сценарий. Для более продвинутых решение посмотреть на этот пост.

Создайте сценарий, сделав его исполняемым и изменить его:

  • cd /root/scripts/
  • touch mybackup.sh
  • chmod 0700 mybackup.sh
  • nano mybackup.sh

Содержание должно быть следующим: (Измените переменные ispUSER, ispPASS, ispHOST, DEST and SITES в соответствии со своими потребностями):

# 
# Last updated: March - 2011
# --------------------------------------------------------------------
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2011 iopen.gr
# Feedback/comment/suggestions : http://iopen.gr
# --------------------------------------------------------------------
#
#           INTENDED for the  ISPConfig 3.0.x and above
#
# This script will back up every web folder (web, stats, cgi e.t.c 
# of every client in companion with all the client's DBs
# The backups will be placed in the website client's folder 
# The scipt will keep the current and the 2 previous backup
# It will also keep the last 3 sundays
# --------------------------------------------------------------------

# Database credentials. Use a DB user with full read access or use the root user 
ispUSER="root"                  # DB user
ispPASS="---yourpass---"        # user's password
ispHOST="localhost"             # Hostname

CURDIR="$(pwd)" 
# Variables with full path to binaries
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"
TAR="$(which tar)" 

# Your Server's  Main  Backup Directory
DEST="/var/backup"
 
# Sites (ONLY) backup directory in your  Main Backup Directory
SITES="$DEST/sites"
  
 
# Variables for Dates in yymmdd format
TODAY=`date +%Y%0m%0d`
YESTERDAY=`date -d '1 day ago' +%Y%0m%0d`
BACK2=`date -d '2 day ago' +%Y%0m%0d`
BACK3=`date -d '3 day ago' +%Y%0m%0d`
BACK22=`date -d '22 day ago' +%Y%0m%0d`
 
[ ! -d $SITES ] && mkdir -p $SITES || :
 
# Give Only root access to backups in this scripts folders
$CHOWN 0.0 -R $SITES
$CHMOD 0600 $SITES

# -------------------------------------------------------------------------- 
# Remove previous (current) backups of the client directory
# The backups are in the form :
# xyzBU.tar.gz for the web sites
# xyzBU.gz for the databases
# -------- CAUTION ---------
# Do not store any other file in this form in the clients directory
# -------------------------------------------------------------------------- 
echo "-------------------------------------------------------------"

QRY="use dbispconfig; SELECT web_domain.system_user, web_domain.system_group, \
web_domain.document_root, web_domain.domain FROM web_domain WHERE  \
web_domain.type!='alias' AND web_domain.system_user IS NOT NULL AND LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) ;"

echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line
do  # ${col[0]}=domain user / folder name / system user, ${col[1]}=clientID / system group ,
        while read -a col  # ${col[2]}=path to website, ${col[3]}= domain name
        do
                echo "    CLEANING OLD BACKUPS in ${col[2]} folder "
                [ -f ${col[2]}/*BU.tar.gz ] && rm ${col[2]}/*BU.tar.gz 
                [ -f ${col[2]}/*BU.gz ] && rm ${col[2]}/*BU.gz 
        done
done

# -------------------------------------------------------------------------- 
# Remove anything that is older than 22 days old and have the form :
# xyzBU.tar.gz for the web sites
# xyzBU.gz for the databases
# from server's $SITES directory
# -------------------------------------------------------------------------- 
                echo "-------------------------------------------------------------"
                echo "    CLEANING OLD BACKUPS in SITES folder "
                [ -f $SITES/*.$BACK22.gz ] && rm $SITES/*.$BACK22.gz
        [ -f $SITES/*.$BACK22.tar.gz ] && rm $SITES/*.$BACK22.tar.gz
                echo "-------------------------------------------------------------"
                echo "                                                             "
                echo "                                                             "

# -------------------------------------------------------------------------- 
# For each client, backup his database in his website folder 
# Furthermore copy today's backup in the server's  $SITES directory 
# Remove the backup that is older than 3 days from server's $SITES directory
# Keep the last 3 Sundays
# -------------------------------------------------------------------------- 

QRY="use dbispconfig; SELECT web_database.database_name , web_database.database_user ,\
 web_domain.system_user, web_domain.system_group, web_domain.document_root, \
web_domain.domain FROM web_database, web_domain WHERE web_database.sys_userid=web_domain.sys_userid \
AND web_database.sys_groupid=web_domain.sys_groupid AND web_domain.type!='alias' \
AND web_domain.system_user IS NOT NULL AND LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) ;"

echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line
do  # ${col[0]} = dbname, ${col[1]}=dbuser , ${col[2]}=domain user / folder name / system user,
        while read -a col   #${col[3]}=clientID / system group , ${col[4]}=path to website, ${col[5]= domain name
        do
                echo "          DB: "${col[0]} 
                echo "-------------------------------------------------------------"
                echo "Backing Up DB:" ${col[0]}  "in :"  ${col[4]}/${col[0]}BU.gz
                $MYSQLDUMP -u $ispUSER -h $ispHOST -p$ispPASS -c --add-drop-table --add-locks \
        --all --quick --lock-tables ${col[0]} | $GZIP -9 > ${col[4]}/${col[0]}BU.gz
                cp ${col[4]}/${col[0]}BU.gz $SITES/${col[0]}.$TODAY.gz
                        if [ `date -d '3 day ago' +%u` -ne 7 ] # if 3 days ago is not Sunday
                        then    #remove the  backup
                                [ -f $SITES/${col[0]}.$BACK3.gz ] && rm $SITES/${col[0]}.$BACK3.gz
                        fi
                $CHOWN ${col[2]}:${col[3]} ${col[4]}/${col[0]}BU.gz
                $CHMOD 0660 ${col[4]}/${col[0]}BU.gz
                echo "-------------------------------------------------------------"
                echo "                                                             "

        done
done

# -------------------------------------------------------------------------- 
# For each client, backup his sites in his website folder 
# Furthermore copy today's backup in the server's  $SITES directory 
# Remove the backup that is older than 3 days from server's $SITES diriectory
# Keep the last 3 Sundays
# -------------------------------------------------------------------------- 



QRY="use dbispconfig; SELECT web_domain.system_user, web_domain.system_group,\
 web_domain.document_root, web_domain.domain FROM web_domain WHERE  \
web_domain.type!='alias' AND web_domain.system_user \
IS NOT NULL AND LENGTH(web_domain.redirect_path)<5 OR web_domain.redirect_path IS NULL) ;"

echo $QRY | mysql -u $ispUSER -h $ispHOST -p$ispPASS | while read -r line
do     # ${col[0]}=domain user / folder name / system user, ${col[1]}=clientID / system group ,
        while read -a col   # ${col[2]}=path to website, ${col[3]}= domain name
        do
                echo "                                                             "
                echo "         Site:" ${col[3]}
                echo "-------------------------------------------------------------"
                echo "Backing Up site: " ${col[2]}/  "in :"  ${col[2]}/${col[3]}BU.tar.gz
                cd ${col[2]}
                $TAR -czf ${col[2]}/${col[3]}BU.tar.gz .
                cp ${col[2]}/${col[3]}BU.tar.gz $SITES/${col[3]}.$TODAY.tar.gz
                        if [ `date -d '3 day ago' +%u` -ne 7 ] # if 3 days ago is not Sunday
                        then    #remove the backup
                                [ -f $SITES/${col[3]}.$BACK3.tar.gz ] && rm $SITES/${col[3]}.$BACK3.tar.gz
                        fi
                $CHOWN ${col[0]}:${col[1]} ${col[2]}/${col[3]}BU.tar.gz
                $CHMOD 0660 ${col[2]}/${col[3]}BU.tar.gz

                echo "-------------------------------------------------------------"
                echo "                                                             "
        done
done
cd $CURDIR

Вы можете запустить скрипт резервного копирования, выполнив:

  • /root/scripts/mybackup.sh

или Вы можете добавить его в качестве расписанию (например, каждый день в 22:30):

  • crontab -e

и добавьте следующую строку:

30 22 * * * /root/scripts/mybackup.sh > /dev/null 2>> /var/log/backup.log

Обсуждение темы на форуме Идеальный сервер - Debian 6.0 [ISPConfig 3]. На нашем форуме имеется скрипт предназначеный для автоматической установки веб-клиента roundcube 0.7.1 со всеми фишками ISPConfig 3. Все действия на сервере выполняются из под root. Проверено пока на Ubuntu 10.04.03 и Debian-6.0.4. С благодарностью к SinglWolf администрация проекта mini Server. >>> [How To]Автоматическая установка Roundcube для ISPConfig 3