Панель управления хостингом SysCP

2 Сен
2008

Статья годичной давности, но недавнее знакомство показало, что основа осталась прежней.

Как упростить управление хостингом? Даже при тщательно спланированой архитектуре и выборе компонентов будущей системы, без некоторой автоматизации процесса потребуется очень много времени, чтобы решить все возможные задачи.

Началом проекта можно считать ноябрь 2003 года, когда Флориан Липперт (Florian Lippert) стал администрировать почтовый сервер. Скоро он заметил, что добавлять новых пользователей, субдомены не совсем удобно, некоторые изменения заносились в конфигурационный файл и требовался перезапуск сервера. Осенью 2004 года были сформулированы требования к будущей системе:

- по возможности она не должна создавать локальных (системных) пользователей;

- позволять управлять почтовыми адресами и пересылкой писем;

- создавать новые базы в MySQL;

- управлять субдоменами для клиентов;

И в последствии было добавлено еще одно требование создание новых зон в BIND.

Результат System Control Panel (SysCP) под лицензией GNU GPL был представлен общественности 15 июня 2004. Сама система написана на PHP, для хранения информации использован MySQL. Поддерживаются следующие сервисы:

- веб-сервер Apache 1.3 и 2.x с поддержкой PHP 4/5 (ранее рекомендовался только 1.3 и PHP 4, PHP должен поддерживать командный интерфейс CLI), Lighttpd;

- MTA Postfix, Exim4;

- POP3/IMAP – Courier, Dovecot;

- ftp-сервер – ProFTPd, PureFTP

- аутентификация Cyrus-sasl;

- статистика – Webalizer, Awstats.

Опционально могут быть установлены BIND (может быть заменен на PowerDNS), Maildrop, ClamAV и Spamassassin, PHPmyAdmin и веб-интерфейс к почте вроде SquirrelMail. Используя клиентскую часть ПО можно: управлять почтовыми учетными записями с возможностю Catch-all (то есть ловить все письма идущие в домен), управлять перенаправлением почты, субдоменами, паролями, базой данных, установкой паролей на каталоги, а также доступом к webmail и PHPmyAdmin. Административный интерфейс, с позволяет создавать новых пользователей, задавать доступные ресурсы и лимиты, поддерживается работа с реселлерами с заданием зоны видимости каждого. Интерфейс переведен на 15 языков среди которых есть и русский. Перед установкой можно ознакомиться с полнофункциональной демоверсией SysCP.

Установка SysCP

Поддерживаются:

  • Debian 4.0 (Etch)
  • Debian 3.1 (Sarge)
  • Ubuntu 8.04 (Hardy Heron)
  • Gentoo Linux
  • OpenSuSE Linux 10.0
  • FreeBSD

В составе группы разработчиков есть мантайнер пакетов FreeBSD, поэтому в систему портов включен порт syscp, который можно можно найти в sysutil/syscp.  Пакеты для Debian подходят и к Ubuntu. Актуальной на момент написания статьи была версия 1.2.19, поэтому все сказаное относится к ней. В нестабильной версии 1.3 установка несколько отличается, хотя процесс установки SysCP как вы увидите не самый тяжелый. Cкачиваем файл:

$ wget -c http://debian.syscp.de/etch/syscp_1.2.x_all.deb

Смотрим зависимости.

$ sudo dpkg-deb –info ./syscp_1.2.x_x.deb

Устанавливаем все необходимое.

$ sudo apt-get apache2-mpm-prefork libapache2-mod-php5 mysql-server postfix-mysql proftpd-mysql libsasl2 courier-authlib courier-authlib-mysql courier-base courier-pop-ssl bind9 php5 php5-mysql php5-cli webalizer

Создаем символическую ссылку с каталога /etc/apache2/mods-available в mods-enabled, чтобы активировать поддержку PHP в веб-сервере.

$ sudo a2enmod php5

This module is already enabled!

Установка с исходных текстов также не вызовет трудностей:

$ cd /var/www

$ sudo tar -xzvf syscp-1.2.x.tar.gz

$ chown www-data:www-data syscp/lib/userdata.inc.php

$ chmod 777 syscp/lib/userdata.inc.php

Теперь заходим по адресу http://server_name/syscp и нажимаем ссылку в строке «You have to configure SysCP first!». В появившемся окне выбираем язык интерфейса которым будут выводиться подсказки при инсталляции, в раскрывающемся списке присутствует только английский, французкий и немецкий.

 install

Ниже вводим параметры для доступа к MySQL: узел, имя базы данных, пользователя для доступа к БД. В поле «Administrator Account» указываем пароль администратора, в целях безопасности можно указать учетную запись отличную от admin. И в «Server settings» указываем FQDN сервера и версию Apache. После нажатия на ОК будут проверены введенные данные и созданы все необходимые для работы таблицы, введенная информация будет сохранена в файле /var/www/syscp/lib/userdata.inc.php. В случае ошибки некорректное поле будет отмечено красным цветом. По окончании установки можно зарегистрироваться в системе с администраторскими правами, здесь уже можно выбрать русский язык интерфейса. Хотя делать это еще рано. Сначала необходимо указать Postfix, Courier и ProFTPd чтобы они получали настройки из MySQL и настроить Apache для работы с виртуальными серверами. Во вкладке «Сервер – Настройки служб» даны подсказки команд для Debian и SUSE , причем в них уже выставлены все необходимые имена применительно к установленной системе, поэтому часто их можно просто скопировать.

distrib

Некоторые пути предлагаемые скриптом можно изменить зайдя в «Настройки сервера». По умолчанию считается, что все сервисы размещены на одном компьютере, но ничего не мешает перенести почтовый сервер на другую машину, забирая данные из базы под управлением MySQL по сети.

 Настройки серверов

Все указанные настройки не догма, можно добавить и другие параметры, не нарушающие общий принцип настроек. Комментировать их не буду, в журнале уже были статьи по этим серверам. Строку MYSQL_PASSWORD необходимо заменить на пароль пользователя syscp, который является владельцем базы данных. Начнем с Apache. Создаем и подключаем файл, в который будет заноситься информация о виртуальных узлах.

$ sudo echo -e «\nInclude /etc/apache2/sites-available/99_syscp_vhosts.conf» >> /etc/apache2/httpd.conf

$ sudo touch /etc/apache2/sites-available/99_syscp_vhosts.conf

И каталог для виртуальных узлов.

$ sudo mkdir -p /var/kunden/webs/

Перезапускаем веб-сервер.

$ sudo /etc/init.d/apache2 restart

Теперь настоим BIND, чтобы он добавлял необходимые записи автоматически. Создаем файл для записи виртуальных зон.

$ sudo touch /etc/bind/syscp_bind.conf

Подключаем его в основном файле.

$ sudo echo «include \»/etc/bind/syscp_bind.conf\»;» >> /etc/bind/named.conf

Добавляем в файл /etc/bind/default.zone, информацию о своем компьютере (вместо 127.0.0.1 указываем рабочий адрес):

$TTL 1W

@ IN SOA ns root (

2004060501 ; serial

8H ; refresh

2H ; retry

1W ; expiry

11h) ; minimum

IN NS ns

IN NS ns1.provider.com.

IN NS ns2.provider.com.

IN MX 10 mail

IN A 127.0.0.1

IN MX 10 mail

* IN A 127.0.0.1

IN MX 10 mail

ns IN A 127.0.0.1

mail IN A 127.0.0.1

IN MX 10 mail

И перезапускаем BIND.

$ sudo /etc/init.d/bind9 restart

Настройки ProFTPd вообщем то стандартны. Сначала в /etc/proftpd/modules.conf указываем необходимые для работы модули:

ModulePath /usr/lib/proftpd

ModuleControlsACLs insmod,rmmod allow user root

ModuleControlsACLs lsmod allow user *

#LoadModule mod_ctrls_admin.c

LoadModule mod_tls.c

LoadModule mod_sql.c

LoadModule mod_ldap.c

LoadModule mod_sql_mysql.c

LoadModule mod_quotatab.c

LoadModule mod_quotatab_file.c

LoadModule mod_quotatab_ldap.c

LoadModule mod_quotatab_sql.c

LoadModule mod_radius.c

LoadModule mod_wrap.c

LoadModule mod_rewrite.c

LoadModule mod_ifsession.c

<IfModule mod_delay.c>

DelayEngine off

</IfModule>

И в основном конфигурационном файле /etc/proftpd/proftpd.conf, особое внимание обращаем на параметры доступа к MySQL, остальные параметры стандартны:

Include /etc/proftpd/modules.conf

ServerName «grinder.com FTP Server»

ServerType standalone

DeferWelcome off

MultilineRFC2228 on

DefaultServer on

ShowSymlinks on

AllowOverwrite on

TimeoutNoTransfer 600

TimeoutStalled 600

TimeoutIdle 1200

DisplayLogin welcome.msg

DisplayFirstChdir .message

ListOptions «-l»

DenyFilter \*.*/

Port 21

MaxInstances 30

User nobody

Group nogroup

<Directory /*>

Umask 022 022

AllowOverwrite on

</Directory>

DefaultRoot ~

RequireValidShell off

SQLAuthTypes Crypt Plaintext

SQLAuthenticate users* groups*

# здесь меняем MYSQL_PASSWORD на пароль

SQLConnectInfo syscp@127.0.0.1 syscp MYSQL_PASSWORD

SQLUserInfo ftp_users username password uid gid homedir shell

SQLGroupInfo ftp_groups groupname gid members

SQLUserWhereClause «login_enabled = ‘y’»

SQLLog PASS login

SQLNamedQuery login UPDATE «last_login=now(), login_count=login_count+1 WHERE username=’%u’» ftp_users

SQLLog RETR download

SQLNamedQuery download UPDATE «down_count=down_count+1, down_bytes=down_bytes+%b WHERE username=’%u’» ftp_users

SQLLog STOR upload

SQLNamedQuery upload UPDATE «up_count=up_count+1, up_bytes=up_bytes+%b WHERE username=’%u’» ftp_users

И перезапускаем сервер.

$ sudo /etc/init.d/proftpd restart

Теперь приступаем к настройке почтовой подсистемы. Создадим необходимые для работы Postfix каталоги и новую учетную запись.

$ sudo mkdir -p /etc/postfix/sasl

$ sudo mkdir -p /var/spool/postfix/etc/pam.d

$ sudo mkdir -p /var/spool/postfix/var/run/mysqld

$ sudo groupadd -g 2000 vmail

$ sudo useradd -u 2000 -g vmail vmail

$ sudo mkdir -p /var/kunden/mail/

$ sudo chown -R vmail:vmail /var/kunden/mail/

В главный конфигурационный файл /etc/postfix/main.cf вносим информацию о подключении виртуальных почтовых ящиков:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

biff = no

append_dot_mydomain = no

myhostname = grinder.com

mydomain = grinder.com

myorigin = $myhostname

mydestination = $myhostname $mydomain localhost localhost.$mydomain

mynetworks = 127.0.0.0/8

alias_maps = $alias_database

smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination

virtual_mailbox_base = /var/kunden/mail/

virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf

virtual_alias_domains =

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf

virtual_uid_maps = static:2000

virtual_gid_maps = static:2000

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain = $myhostname

smtpd_sasl_security_options = noanonymous

broken_sasl_auth_clients = yes

Остальные параметры оставлены в значении по умолчанию, напомню, что просмотреть все настройки можно использовав команду postconf. Ничто не мешает добавить TLS и прочие возможности. И далее создаем конфигурационные файлы на которые есть ссылки в main.cf.

$ sudo cat > /etc/postfix/mysql-virtual_alias_maps.cf

user = syscp

# меняем MYSQL_PASSWORD на пароль

password = MYSQL_PASSWORD

dbname = syscp

table = mail_virtual

select_field = destination

where_field = email

additional_conditions = and destination <> » and destination <> ‘ ‘

hosts = 127.0.0.1

Следующий.

$ sudo cat > /etc/postfix/mysql-virtual_mailbox_domains.cf

user = syscp

# меняем MYSQL_PASSWORD на пароль

password = MYSQL_PASSWORD

dbname = syscp

table = panel_domains

select_field = domain

where_field = domain

additional_conditions = and isemaildomain = ‘1′

hosts = 127.0.0.1

$ sudo cat > /etc/postfix/mysql-virtual_mailbox_maps.cf

user = syscp

# меняем MYSQL_PASSWORD на пароль

password = MYSQL_PASSWORD

dbname = syscp

table = mail_users

select_field = maildir

where_field = email

hosts = 127.0.0.1

Настройка связки с Cyrus SASL.

$ sudo cat > /etc/postfix/sasl/smtpd.conf

pwcheck_method: auxprop

auxprop_plugin: sql

mech_list: plain login cram-md5 digest-md5

sql_engine: mysql

sql_hostnames: 127.0.0.1

sql_user: syscp

# меняем MYSQL_PASSWORD на пароль

sql_passwd: MYSQL_PASSWORD

sql_database: syscp

sql_select: select password from mail_users where username=’%u@%r’

И перезапускаем Postfix.

$ sudo /etc/init.d/postfix restart

Для настройки Courier в каталоге /etc/courier/ необходимо отредактировать два файла. Основные настройки работы демона указываются в файле authdaemonrc:

authmodulelist=»authmysql»

authmodulelistorig=»authcustom authcram authuserdb authldap authmysql authpam»

daemons=5

version=»"

authdaemonvar=/var/run/courier/authdaemon

# и на всякий случай? Потом можно будет перевести в 0

DEBUG_LOGIN=1

И создаем файл /etc/courier/authmysqlrc, в котором описываются параметры подключения к MySQL:

MYSQL_SERVER 127.0.0.1

MYSQL_USERNAME syscp

# меняем MYSQL_PASSWORD на пароль

MYSQL_PASSWORD MYSQL_PASSWORD

MYSQL_PORT 0

MYSQL_DATABASE syscp

MYSQL_USER_TABLE mail_users

MYSQL_CRYPT_PWFIELD password_enc

MYSQL_UID_FIELD uid

MYSQL_GID_FIELD gid

MYSQL_LOGIN_FIELD username

MYSQL_HOME_FIELD homedir

MYSQL_MAILDIR_FIELD maildir

Перезапускаем демоны Courier.

$ sudo /etc/init.d/courier-authdaemon restart

$ sudo /etc/init.d/courier-pop restart

Последним шагом необходимо обеспечить периодическое обновление конфигурации серверов. Для этих целей используется скрипт cronscript.php запускаемый с помощью сrond.

$ sudo echo «*/5 * * * * root /usr/bin/php -q /var/www/syscp/scripts/cronscript.php » >> /etc/crontab

$ sudo /etc/init.d/cron restart

Создаем нового пользователя

Теперь можно воспользоваться веб-интерфейсом. На первой странице показана статистика по использованным ресурсам, информация по системе. Выбрав ссылку внизу «Запросить через веб-сервис» можно уточнить наличие новой версии на сайте проекта. Прежде чем начинать создавать новых пользователй следует указать IP-адреса сервера с которых будут приниматься запросы, для этого выбираем «Сервер – IP-адреса и порты» и нажав «Добавить комбинацию IP/порт» вводим данные в доступные поля. Перейдя по ссылке «Клиенты» можно раздавать пространство на виртуальном сервере. В появившемся поле следует заполнить персональную информацию о клиенте и указать доступные ресурсы, создание поддомена, пароль и прочее. К сожалению если ввести имя на русском при проследующем просмотре в основном окне разобрать что-либо будет невозможно, поэтому лучше использовать транслит. После нажатия на кнопку «Сохранить», через некоторое время будут созданы все необходимые подкаталоги для FTP, HTTP серверов и добавлены необходимые записи в конфигурационные файлы. Все имеющиеся поддомены можно просмотреть и при необходимости отредактировать/добавить перейдя по ссылке «Домены». Как уже говорилось раздачу места можно разрешить другим администраторам или реселлерам, для этого следует зайти по ссылке «Админы» и установить разрешения и объем/количество ресурсов которыми он может распоряжаться. Доступные настройки не очень отличаются от пользовательских, но Админы сами могут раздавать ресурсы.

klient

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

Комментировать

Наверх