Счетчик

Поисковый анализ сайта
яндекс.ћетрика
Cервер и сайт запущен 2011.02.01 на Debian

Добрый день! Сегодня я расскажу Вам как своими силами создать идеальный сервер под управлением панелью ispconfig 

Начнем с самого нуля но перед этимнам понадобится установка дистра debian 6

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

Едем дальше.... а дальше нам потребуется установка почтового сервера (postfix). А так же ставим такое сочетание apache2php5phpmyadmin
Далее нам потребуются следующие пакеты, выполним команду

apt-get install libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick

imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby



Выполним 3 команды:

a2enmod suexec rewrite ssl actions include


и 

a2enmod dav_fs dav auth_digest


Далее рестартуем apache2

/etc/init.d/apache2 restart



Далее нам надо установить сервер ftp, для этой возможности мы возьмем пакет pureftpd

apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool


Редактируем конфиг файл

nano /etc/default/pure-ftpd-common


Смотрим что стоит режим standalone и virtualchrot=true

Дальше: редактируем файл nano /etc/initd.conf
и закоментим строки 

#:STANDARD: These are standard services.
#ftp    stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd......



Если вам пришлось коментить то рестартуем 

/etc/init.d/openbsd-inetd restart



Далее нам надо зашифровать ftp соединения, так как все пароли передаются в открытом виде. (это очень опасно)

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


создаем сертификат в папке /etc/ssl/
Выполним создание сертификата:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/ftpd.pem -out /etc/ssl/ftpd.pem



Далее нам надо будет ввести информацию:

Название страны [AU]: - Введите название страны RU
Государство или название провинции [Некоторые государства-]: - RF
Местность имя  []: - город
Название организации [Интернет Widgits Pty Ltd]: - ispconfig
Подразделение Название []: - IT
Общее имя []: - mail.domain.ru
Электронный адрес: []: - Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.



Устанавливаем права доступа на 600

chmod 600 /etc/ssl/ftpd.pem


рестартуем нашь ftp сервер

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



Отредактируем fstab

nano /etc/fstab
UUID=92bceda2-5ae4-4e3a-8748-b14da48fb297 /               ext3    errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0       1


примерно должно получится так, но UUID у каждого будет свой.

Устанавливаем DNS сервер

Далее ставим пакеты статистики Vlogger, Webalizer, AWstats

apt-get install vlogger webalizer awstats


Редактируем крон 

nano /etc/cron.d/awstats



Далее нам нужен пакет jailkit - его нет в стандартных репозиториях, так что качаем его
Установим доп пакеты без них joilkit не встанет

apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper



cd /tmp
wget jailkit-2.15.tar.gz
tar xvfz jailkit-2.13.tar.gz
cd jailkit-2.13
./debian/rules binary
cd ..
dpkg -i jailkit_2.13-1_*.deb
rm -rf jailkit-2.13*
jailkit-2.15.tar.gz
Устанавливаем fail2ban:

apt-get install fail2ban
редактируем конфиг:
nano /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


Далее редактируем: 
nano /etc/fail2ban/filter.d/pureftpd.conf

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


Редактирем следующее:
nano /etc/fail2ban/filter.d/courierpop3.conf

# 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 =


Редактирем:
nano /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 =


Редактирем:
nano /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 =


Редактирем:
nano /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 =


Рестартуем fail2ban
/etc/init.d/fail2ban restart

Ставим SquirrelMail:
apt-get install squirrelmail

создаем ссылку:

ln -s /usr/share/squirrelmail/ /var/www/webmail
squirrelmail-configure

SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1.  Organization Preferences
2.  Server Settings
3.  Folder Defaults
4.  General Options
5.  Themes
6.  Address Books
7.  Message of the Day (MOTD)
8.  Plugins
9.  Database
10. Languages

D.  Set pre-defined settings for specific IMAP servers

C   Turn color on
S   Save data
Q   Quit


Command >> - D


SquirrelMail Configuration : Read: config.php
---------------------------------------------------------
While we have been building SquirrelMail, we have discovered some
preferences that work better with some servers that don't work so
well with others.  If you select your IMAP server, this option will
set some pre-defined settings for that server.

Please note that you will still need to go through and make sure
everything is correct.  This does not change everything.  There are
only a few settings that this will change.

Please select your IMAP server:
    bincimap    = Binc IMAP server
    courier     = Courier IMAP server
    cyrus       = Cyrus IMAP server
    dovecot     = Dovecot Secure IMAP server
    exchange    = Microsoft Exchange IMAP server
    hmailserver = hMailServer
    macosx      = Mac OS X Mailserver
    mercury32   = Mercury/32
    uw          = University of Washington's IMAP server
    gmail       = IMAP access to Google mail (Gmail) accounts

    quit        = Do not change anything


Command >> - courier


SquirrelMail Configuration : Read: config.php
---------------------------------------------------------
While we have been building SquirrelMail, we have discovered some
preferences that work better with some servers that don't work so
well with others.  If you select your IMAP server, this option will
set some pre-defined settings for that server.

Please note that you will still need to go through and make sure
everything is correct.  This does not change everything.  There are
only a few settings that this will change.

Please select your IMAP server:
    bincimap    = Binc IMAP server
    courier     = Courier IMAP server
    cyrus       = Cyrus IMAP server
    dovecot     = Dovecot Secure IMAP server
    exchange    = Microsoft Exchange IMAP server
    hmailserver = hMailServer
    macosx      = Mac OS X Mailserver
    mercury32   = Mercury/32
    uw          = University of Washington's IMAP server
    gmail       = IMAP access to Google mail (Gmail) accounts

    quit        = Do not change anything
Command >> courier

              imap_server_type = courier
         default_folder_prefix = INBOX.
                      trash_folder = Trash
                       sent_folder = Sent
                      draft_folder = Drafts
           show_prefix_option = false
        default_sub_of_inbox = false
show_contain_subfolders_option = false
            optional_delimiter = .
                 delete_folder = true


Press any key to continue... - нажмите любую клавишу


SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1.  Organization Preferences
2.  Server Settings
3.  Folder Defaults
4.  General Options
5.  Themes
6.  Address Books
7.  Message of the Day (MOTD)
8.  Plugins
9.  Database
10. Languages

D.  Set pre-defined settings for specific IMAP servers

C   Turn color on
S   Save data
Q   Quit


Command >> - S


SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1.  Organization Preferences
2.  Server Settings
3.  Folder Defaults
4.  General Options
5.  Themes
6.  Address Books
7.  Message of the Day (MOTD)
8.  Plugins
9.  Database
10. Languages

D.  Set pre-defined settings for specific IMAP servers

C   Turn color on
S   Save data
Q   Quit


Command >> - Q

Далее заходим на веб модуль:

http://mail.domain.ru/webmail или http://192.168.1.111/webmail


Наконец то мы дошли до утсановки и настройки ISPConfig 3

cd /tmp
wget http://prdownloads.sourceforge.net/ispconfig/ISPConfig-3.0.5.3.tar.gz
tar xfz ISPConfig-3.0.4.6.tar.gz
cd ispconfig3_install/install/


Запускаем скрипт php -q install.php
Будет что то подобное 

--------------------------------------------------------------------------------
_____ ___________   _____              __ _         ____
|_   _/  ___| ___ \ /  __ \            / _(_)       /__  \
  | | \ `--.| |_/ / | /  \/ ___  _ __ | |_ _  __ _    _/ /
  | |  `--. \  __/  | |    / _ \| '_ \|  _| |/ _` |  |_ |
_| |_/\__/ / |     | \__/\ (_) | | | | | | | (_| | ___\ \
\___/\____/\_|      \____/\___/|_| |_|_| |_|\__, | \____/
                                              __/ |
                                             |___/
--------------------------------------------------------------------------------


>> Initial configuration

Operating System: Debian 6.0 (Squeeze/Sid) or compatible

    Following will be a few questions for primary configuration so be careful.
    Default values are in [brackets] and can be accepted with .
    Tap in "quit" (without the quotes) to stop the installer.


Select language (en,de) [en]: - ENTER

Installation mode (standard,expert) [standard]: - ENTER

Full qualified hostname (FQDN) of the server, eg server1.domain.tld  [server1.example.com]: - ENTER

MySQL server hostname [localhost]: - ENTER

MySQL root username [root]: - ENTER

MySQL root password []: - Ваш_root_пароль_SQL

MySQL database to create [dbispconfig]: - ENTER

MySQL charset [utf8]: - ENTER

Generating a 2048 bit RSA private key
.......+++
...........................................................................................................+++
writing new private key to 'smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: - ENTER
State or Province Name (full name) [Some-State]: - ENTER
Locality Name (eg, city) []: - ENTER
Organization Name (eg, company) [Internet Widgits Pty Ltd]: - ENTER
Organizational Unit Name (eg, section) []: - ENTER
Common Name (eg, YOUR name) []: - ENTER
Email Address []: - ENTER
Configuring Jailkit
Configuring SASL
Configuring PAM
Configuring Courier
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring Pureftpd
Configuring BIND
Configuring Apache
Configuring Vlogger
Configuring Apps vhost
Configuring Firewall
Installing ISPConfig
ISPConfig Port [8080]: - ENTER

Configuring DBServer
Installing ISPConfig crontab
no crontab for root
no crontab for getmail
Restarting services ...
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
Stopping SASL Authentication Daemon: saslauthd.
Starting SASL Authentication Daemon: saslauthd.
Stopping amavisd: amavisd-new.
Starting amavisd: amavisd-new.
Stopping ClamAV daemon: clamd.
Starting ClamAV daemon: clamd .
Stopping Courier authentication services: authdaemond.
Starting Courier authentication services: authdaemond.
Stopping Courier IMAP server: imapd.
Starting Courier IMAP server: imapd.
Stopping Courier IMAP-SSL server: imapd-ssl.
Starting Courier IMAP-SSL server: imapd-ssl.
Stopping Courier POP3 server: pop3d.
Starting Courier POP3 server: pop3d.
Stopping Courier POP3-SSL server: pop3d-ssl.
Starting Courier POP3-SSL server: pop3d-ssl.
Restarting web server: apache2 ... waiting ..
Restarting ftp server: Running: /usr/sbin/pure-ftpd-mysql-virtualchroot -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -H -b -A -O clf:/var/log/pure-ftpd/transfer.log -8 UTF-8 -Y 1 -D -u 1000 -E -B
Stopping domain name service...: bind9 waiting for pid 22267 to die.
Starting domain name service...: bind9.
Installation completed.


Программа установки автоматически настроит все основные услуги, так что никакой ручной настройки не требуется. После этого Вы можете получить доступ к ISPConfig 3 по адресу http://mail.domain.ru:8080/ илиhttp://192.168.1.111:8080/ . Войти с именем пользователя admin и паролем admin (Вы должны изменить пароль по умолчанию после первого входа):

Система готова к использованию. Есть конечно вариант, изменение портов SSH и много других примудрастей. Будут вопросы спрашивайте.
OpenVZ

Если Debian сервер, который Вы установили из учебника Идеальный сервер - Debian 6.0 [ISPConfig 3] является виртуальноным, созданый на машине OpenVZ (виртуальная машина OpenVZ), вы должны выполнить это на хост-системе (я предполагаю, что идентификатор контейнера OpenVZ 101 - заменим правильно его VPSID в Вашей системе):VPSID=101

for CAP in CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE CHOWN DAC_READ_SEARCH SETGID SETUID NET_BIND_SERVICE NET_ADMIN SYS_CHROOT SYS_NICE
do
vzctl set $VPSID --capability ${CAP}:on --save
done


SquirrelMail

Многие люди жалуются на проблемы (такие, как получение 404 ошибки Not Found) с использованием Web почты пакета SquirrelMail на свои Web сайтах, созданные через ISPConfig 3. Это руководство объясняет, как настроить SquirrelMail на сервере Debian Squeeze так что вы можете использовать его в ваших веб-сайтов (созданные через ISPConfig).

cd /etc/apache2/conf.d/

ln -s ../../squirrelmail/apache.conf squirrelmail.conf
/etc/init.d/apache2 reload



Вот теперь - /etc/apache2/conf.d/squirrelmail.conf определяет псевдонимом /squirrelmail, который указывает на каталог установки SquirrelMail в /usr/share/squirrelmail.

Теперь перейдите к строке PHP open_basedirв параметрах вкладки Вашего Web сайта на ISPConfig 3 и добавим каталоги /usr/share/squirrelmail и /etc/squirrelmail (это каталог, в котором SquirrelMail хранится конфигурацию) в строке, например, следующим образом:
Подождать две-три минуты пока ISPConfig 3 обновит конфигурации сайта. Теперь можно получить доступ к SquirrelMail с вашего сайта следующим образом, введя ссылку в браузере рабочего персонального компьютера:http://www.example.com/squirrelmail


Вы также можете получить доступ из панели управления виртуальным хостом ISPConfig следующим образом:http://server1.example.com:8080/squirrelmail


Если Вы хотели бы использовать псевдоним для Web почты - / SquirrelMail , просто откройте /etc/apache2/conf.d/squirrelmail.conf ...nano /etc/apache2/conf.d/squirrelmail.conf


... и добавьте строку Alias /webmail /usr/share/squirrelmail:

Alias /squirrelmail /usr/share/squirrelmail
Alias /webmail /usr/share/squirrelmail

<Directory /usr/share/squirrelmail>
  Options FollowSymLinks
  
    php_flag register_globals off
  
  
    DirectoryIndex index.php
  

  # access to configtest is limited by default to prevent information leak
  
    order deny,allow
    deny from all
    allow from 127.0.0.1
  
</Directory>

# users will prefer a simple URL like http://webmail.example.com
#<VirtualHost 1.2.3.4>
#  DocumentRoot /usr/share/squirrelmail
#  ServerName webmail.example.com
#</VirtualHost>

# redirect to https when available (thanks 
Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.)
#
#  Note: There are multiple ways to do this, and which one is suitable for
#  your site's configuration depends. Consult the apache documentation if
#  you're unsure, as this example might not work everywhere.
#
#<IfModule mod_rewrite.c>
#  
#    
#      RewriteEngine on
#      RewriteCond %{HTTPS} !^on$ [NC]
#      RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}  [L]
#    
#  
#</IfModule>


Затем перезагрузите Apache:/etc/init.d/apache2 reload

Если вы хотите, определить виртуальный хост, как webmail.example.com , на котором пользователи смогут получить доступ к SquirrelMail, Вам придется добавить следующую конфигурацию виртуальный хост к /etc/apache2/conf.d/squirrelmail.conf:nano /etc/apache2/conf.d/squirrelmail.conf

[...]

<VirtualHost 1.2.3.4:80>
  DocumentRoot /usr/share/squirrelmail
  ServerName webmail.example.com
</VirtualHost>


Убедитесь, что Вы заменили 1.2.3.4 на правильный IP адрес вашего сервера. Можно было бы записать и DNS запись для webmail.example.com, который указывает так же ссылается на IP адрес, который Вы используете в конфигурации виртуального хоста. Также убедитесь, что виртуальный хост webmail.example.com не существует в панели управления Web хостингом ISPConfig 3 (иначе виртуальные домены будут мешать друг другу!).

Теперь перезагрузите Apache .../etc/init.d/apache2 reload


... и Вы сможете получить доступ к SquirrelMail через http://webmail.example.com
Расширение идеального сервера - Debian 6.0 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] и 


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

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 с намного большим количеством дополнений.

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

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.600_all.deb


и установить его:
dpkg -i webmin_1.600_all.deb

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

Чтобы изменить порт 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

Перед изменением порта на какой либо другой, отличный от порта по умолчанию, не забудьте добавить порт в брандмауэре. Если Вы используете стандартный порт ISPConfig, перейти: Система - Файрволл (Firewall) и добавить запись Firewall, порт выберите на свое усмотрение (В этом руководстве мы будем использовать 50000 для Webmin, 50443 для ISPConfig, 50022 для SSH). Сохраним не удаляя старые порты (8080, 10000, 22), пока Вы абсолютно не будете уверены, что новые порты работают.
Чтобы изменить порт (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>
  
    
      RewriteEngine on
      RewriteCond %{HTTPS} !^on$ [NC]
      RewriteRule . https://%{HTTP_HOST}:50443%{REQUEST_URI}  [L]
    
  
</IfModule>

<IfModule mod_rewrite.c>
  
    
      RewriteEngine on
      RewriteCond %{HTTPS} !^on$ [NC]
      RewriteRule . https://%{HTTP_HOST}:50443%{REQUEST_URI}  [L]
    
  
</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://www.sysadmin-komi.ru/images/download/postfix/roundcube-fail2ban-plugin.1.1.zip
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

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


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

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

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

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


В 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

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

Если Вам удастся Войти с использованием порта 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

        
                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 .
        

</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    
    AuthType Basic
    AuthName "phpMyAdmin Setup"
    AuthUserFile /etc/phpmyadmin/htpasswd.setup
    
    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>
  
    
      RewriteEngine on
      RewriteCond %{HTTPS} !^on$ [NC]
      RewriteRule . https://%{HTTP_HOST}:50443%{REQUEST_URI}  [L]
    
  
</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 (вкладка).


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

В общем, если Вы будете следовать им, Вы сможете ограничивать скорость трафика по определенным портам, снизить 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

Комментарии   

0 #2 Elisabeth 07.02.2017 16:16
This is a good tip particularly to those fresh to the blogosphere.
Simple but very accurate info… Appreciate your sharing this one.
A must read article!

Also visit my site: Carly (Elisabeth: cisoso.com/.../...)
Цитировать | Сообщить модератору
0 #1 شرکت فنی مهندسی 05.02.2017 18:17
I like what you guys tend to be up too. This sort of clever work
and exposure! Keep up the amazing works guys I've added you guys to our blogroll.
Цитировать | Сообщить модератору

Добавить комментарий


Защитный код
Обновить