Идеальный сервер: настройка Ubuntu Gutsy Gibbon 7.10 Server для ISP и хостеров
Работаете администратором или инженером в провайдерской конторе? А может сами хотите начать свой бизнес в этой сфере? Вполне вероятно, что вам сильно поможет данное руководство.
Эта статья расскажет о подробной установке веб-сервера Apache (+SSL), почтового сервера Postfix (+ SMTP-AUTH и TLS), BIND DNS сервера, Proftpd FTP сервера, MySQL сервера, Courier POP3/IMAP, Quota, Firewall, и т.п.
Рассматривается установка на 32-х битную версию Ubuntu Server, для иных версий (x64, UltraSPARC) возможны небольшие отличия.
Используемое ПО:
- веб-сервер: Apache 2.2
- сервер баз данных: MySQL 5.0
- почтовый сервер: Postfix
- DNS сервер: BIND9
- FTP сервер: proftpd
- POP3/IMAP: используется формат Maildir с установкой Courier-POP3/Courier-IMAP.
- Webalizer для статистики
В итоге, вы получите надежную работающую систему, и сможете поверх нее установить бесплатную систему для удаленного управления веб-хостингом ISPConfig.
Для установки нам нужен CD с Ubuntu Server 7.10 x86 и хорошее соединение с интернетом.
В статье будет использовано имя хоста server1.example.com с IP-адресом 192.168.0.100 и шлюзом 192.168.0.1.
Эти установки могут отличаться от нужных вам, просто замените их своими данными.
Шаги установки, на которых система будет требовать от вас действий:
- Ставим диск с Ubuntu Server 7.10 x86 и загружаемся с него.
- Перед началом установки выбираем опцию F2 и выбираем русский язык.
- Выбираем “Установить на жесткий диск”.
- Выбираем способ переключения языковой раскладки (у меня например Alt+Shift).
- Вводим имя компьютера.
- Разметка диска (Авто - использовать весь диск), либо на ваше усмотрение.
- Выбрать диск для разметки (если их несколько, выберите нужный).
- Подтверждаем изменения на диске.
- Выбираем часовой пояс.
- Указываем, что системные часы показывают UTC.
- Заводим учетную запись пользователя с административными привелегиями.
- Забиваем и подтверждаем пароль для этого пользователя.
- Выбираем какие пакеты мы поставим. ВНИМАНИЕ: нужно выбрать только OpenSSH.
- Завершаем установку, вынимаем диск, перезагружаемся.
После перезагрузки, заходим в систему под тем пользователем и паролем, который мы создали.
Дальнейшая работа будет происходить под суперпользователем root, для этого зададим ему пароль:
указываем пароль для него и начинаем работать уже из-под root
если вы вдруг не поставили OpenSSH сервер во время установки, это можно исправить установив его сейчас
после этого можно вообще отключить от этой машины монитор, клаву и мышь, и работать удаленно по сети, например через Putty, чтобы не забивать ручками, а просто копировать информацию для конфигов прямо из этого руководства :)
В оригинале статьи автор использует консольный редактор vim, я предлагаю начинающим использовать ee (easy editor), а бывалые пользователи пусть используют, что им по вкусу.
Ставим ee:
Настраиваем сеть:
По умолчанию установщик сконфигурировал наш сетевой интерфейс на получение настроек по DHCP, но наш сервер должен иметь статический IP-адрес, для этого надо поправить настройки в файле /etc/network/interfaces
vim /etc/network/interfaces
Пример файла конфигурации (тут вам надо использовать уже ваши данные, вместо примера данных, описывающих iface eth0 inet static, то есть укажите ваш адрес, маску сети, сеть и броадкаст):
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
Указали свои данные? Сохраните файл и перезапустите сеть:
Затем поправьте файл /etc/hosts
Он должен выглядеть примерно так (только с вашими данными):
192.168.0.100 server1.example.com server1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Теперь выполните
/etc/init.d/hostname.sh start
Затем:
hostname -f
Обе команды должны вывести server1.example.com (или то имя, которое указали вы)
Правим файл /etc/apt/sources.list и проводим апдейт для нашей системы
Закомментируем или удалим ссылки на установочный CD из этого файла и удостоверимся, что репозитории universe и multiverse доступны, т.е. файл будет выглядеть примерно так:
# deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted
#deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu/ gutsy main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ gutsy main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ gutsy-updates main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ gutsy-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
deb http://de.archive.ubuntu.com/ubuntu/ gutsy universe
deb-src http://de.archive.ubuntu.com/ubuntu/ gutsy universe
deb http://de.archive.ubuntu.com/ubuntu/ gutsy-updates universe
deb-src http://de.archive.ubuntu.com/ubuntu/ gutsy-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu/ gutsy multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ gutsy multiverse
deb http://de.archive.ubuntu.com/ubuntu/ gutsy-updates multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ gutsy-updates multiverse
## Uncomment the following two lines to add software from the ‘backports’
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://de.archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical’s
## ‘partner’ repository. This software is not part of Ubuntu, but is
## offered by Canonical and the respective vendors as a service to Ubuntu
## users.
# deb http://archive.canonical.com/ubuntu gutsy partner
# deb-src http://archive.canonical.com/ubuntu gutsy partner
deb http://security.ubuntu.com/ubuntu gutsy-security main restricted
deb-src http://security.ubuntu.com/ubuntu gutsy-security main restricted
deb http://security.ubuntu.com/ubuntu gutsy-security universe
deb-src http://security.ubuntu.com/ubuntu gutsy-security universe
deb http://security.ubuntu.com/ubuntu gutsy-security multiverse
deb-src http://security.ubuntu.com/ubuntu gutsy-security multiverse
Затем запускаем обновление базы данных ПО:
и устанавливаем последние обновления (если они есть):
Теперь нам необходимо сменить шелл, поскольку иначе мы не сможем установить ISPConfig.
/bin/sh это символическая ссылку на /bin/dash, а нам нужно /bin/bash, а не /bin/dash
Поправляем это таким образом:
Теперь нам нужно установить кое-какие пакеты, которые нам потребуются в дальнейшем.
Внимание: эта команда идет одной строкой!
Настройка квот.
Если вы сделали разметку своего диск как-то по своему, то вам придется применять квотирование к тем разделам где это вам нужно.
Установим:
Поправим /etc/fstab. Мой выглядит так(я добавил usrquota, grpquota к основному разделу с точкой монтирования /):
#
#
proc /proc proc defaults 0 0
# /dev/sda1
UUID=9fc157ff-975c-4f20-9fef-6a70085abdbd / ext3 defaults,errors=remount-ro,usrquota,grpquota 0 1
# /dev/sda5
UUID=48fb7dd8-f099-4d63-ac1b-30e886ac7436 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec 0 0
Для активации квоты выполните:
chmod 600 /quota.*
mount -o remount /
quotacheck -avugm
quotaon -avug
Настройка DNS
Выполните:
Про соображениям безопасности BIND надо запускать через chroot:
Правим файл /etc/default/bind9 так, чтобы демон запускался как непривелигированный пользователь bind, с chroot в /var/lib/named. Поправьте строку: OPTIONS=”-u bind” на OPTIONS=”-u bind -t /var/lib/named”:
# Set RESOLVCONF=no to not run resolvconf
RESOLVCONF=yes
Создадим необходимые директории в /var/lib:
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run
Переместим директорию с конфигами из /etc в /var/lib/named/etc:
mv /etc/bind /var/lib/named/etcСоздадим символическую ссылку на новую директорию с конфигами ( чтобы не было проблем с обновлением bind в дальнейшем):
Создадим null и random устройства, исправим разрешения для директорий:
mknod /var/lib/named/dev/random c 1 8
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind
Изменим /etc/default/syslogd чтобы мы могли получать важные сообщения в логах
Исправьте строку: SYSLOGD=”" на эту SYSLOGD=”-a /var/lib/named/dev/log”:
# Top configuration file for syslogd
#
#
# Full documentation of possible arguments are found in the manpage
# syslogd(8).
#
#
# For remote UDP logging use SYSLOGD=”-r”
#
SYSLOGD=”-a /var/lib/named/dev/log”
Перезапускаем демон логов:
Запускаем BIND, и проверяем /var/log/syslog на ошибки:
MySQL
Устанавливаем пакет:
Вас спросят ввести пароль для root пользователя MySQL - этот пароль будет использоваться как для пользователя root@localhost , так и для root@server1.example.com, так что нам не придется указывать пароль для рута MySQL позже(как это было в предыдущих версиях):
New password for the MySQL “root” user: введите-свой-пароль
Нам нужно чтобы MySQL слушал на других интерфейсах, а не только на localhost, для этого правим /etc/mysql/my.cnf и закомментируем строку _bind-address = 127.0.0.1_:
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
#
[…]
Затем перезапускаем MySQL:
Проверьте, что MySQL доступен для сети:
Вывод должен быть примерно таким:
tcp 0 0 *:mysql *:* LISTEN 5286/mysqld
Postfix с SMTP-AUTH и TLS
По шагам:
Вам зададут два вопроса, отвечать надо примерно так:
General type of mail configuration: <– Internet Site
System mail name: <– server1.example.com
затем запустите
И опять ответьте на вопросы:
System mail name: <– server1.example.com
Root and postmaster mail recipient: <– [blank]
Other destinations to accept mail for (blank for none): <– server1.example.com, localhost.example.com, localhost.localdomain, localhost
Force synchronous updates on mail queue? <– No
Local networks: <– 127.0.0.0/8
Use procmail for local delivery? <– Yes
Mailbox size limit: <– 0
Local address extension character: <– +
Internet protocols to use: <– all
Затем, сделайте следующее:
postconf -e ’smtpd_sasl_auth_enable = yes’
postconf -e ’smtpd_sasl_security_options = noanonymous’
postconf -e ‘broken_sasl_auth_clients = yes’
postconf -e ’smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination’
postconf -e ‘inet_interfaces = all’
echo ‘pwcheck_method: saslauthd’ >> /etc/postfix/sasl/smtpd.conf
echo ‘mech_list: plain login’ >> /etc/postfix/sasl/smtpd.conf
После этого создадим сертификаты для TLS:
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
И сконфигурируем Postfix для TLS (удостоверьтесь, что вы используете правильное имя компьютера для myhostname):
postconf -e ’smtpd_tls_auth_only = no’
postconf -e ’smtp_use_tls = yes’
postconf -e ’smtpd_use_tls = yes’
postconf -e ’smtp_tls_note_starttls_offer = yes’
postconf -e ’smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key’
postconf -e ’smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt’
postconf -e ’smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem’
postconf -e ’smtpd_tls_loglevel = 1′
postconf -e ’smtpd_tls_received_header = yes’
postconf -e ’smtpd_tls_session_cache_timeout = 3600s’
postconf -e ‘tls_random_source = dev:/dev/urandom’
теперь файл /etc/postfix/main.cf должен выглядеть примерно так:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA’s job.
append_dot_mydomain = no
# Uncomment the next line to generate “delayed mail” warnings
#delay_warning_time = 4h
# TLS parameters
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = server1.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = server1.example.com, localhost.example.com, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_command = procmail -a “$EXTENSION”
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
Перезапускаем Postfix:
Аутентификация будет производится saslauthd. Нужно кое-что изменить, чтобы это работало как надо.
Поскольку Postfix работает через chroot в /var/spool/postfix мы делаем так:
Теперь мы правим /etc/default/saslauthd для того чтобы активировать saslauthd.
Установите START значение yes и измените строку OPTIONS=”-c” на OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”:
# Settings for saslauthd daemon
#
# Should saslauthd run automatically on startup? (default: no)
START=yes
# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent — use the getpwent() library function
# kerberos5 — use Kerberos 5
# pam — use PAM
# rimap — use a remote IMAP server
# shadow — use the local shadow password file
# sasldb — use the local sasldb database file
# ldap — use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS=”pam”
MECHANISMS=”pam”
# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=”"
# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5
# Other options (default: -c)
# See the saslauthd man page for information about these options.
#
# Example for postfix users: “-c -m /var/spool/postfix/var/run/saslauthd”
# Note: See /usr/share/doc/sasl2-bin/README.Debian
OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”
Теперь запускаем saslauthd:
Чтобы удостоверится, что SMTP-AUTH и TLS работают правильно, проверим так:
После соединения с Postfix наберите:
Если вы увидети строки:
и
значит все в порядке
Вывод на моей системе выглядел так:
Trying 127.0.0.1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
220 server1.example.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
Courier-IMAP/Courier-POP3
Устанавливаем Courier-IMAP/Courier-IMAP-SSL (для IMAP на порту 993) и Courier-POP3/Courier-POP3-SSL (для POP3 на порту 995):
Вам зададут вопросы:
SSL certificate required <– Ok
Если вы не захотите использовать систему управления ISPConfig, сконфигурируйте Postfix на доставку почты в Maildir* пользователя:
postconf -e ‘mailbox_command =’
/etc/init.d/postfix restart
Обратите внимание: вам не надо этого делать, если вы будете использовать ISPConfig, поскольку он сам выполнит необходимое конфигурирование. При этом, вам лучше убедится в этом самостоятельно - удостоверьтесь что Maildir задействован в Management -> Server -> Settings -> EMail (в веб-интерфейсе ISPConfig).
Apache/PHP5
Ставим Apache:
Затем PHP5:
Отвечаем на вопрос:
Далее правим /etc/apache2/mods-available/dir.conf:
Правим строку DirectoryIndex (в IfModule mod_dir.c):
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml
Теперь надо активировать некоторые модули Apache (SSL, rewrite, suexec и include):
a2enmod rewrite
a2enmod suexec
a2enmod include
Перезагружаем конфигурацию Apache:
Отключаем глобальную работу PHP (если вы не планируете установку ISPConfig пропустите этот раздел!)
В ISPConfig вы сконфигурируете PHP под каждый веб-сайт, т.е. укаже кто может использовать скрипты PHP, а кто нет. Это можно сделать только при отключении глобальной работы PHP, потому что иначе все вебсайты смогут запускать скрипты PHP, несмотря на установки в ISPConfig.
Для отключения мы правим /etc/mime.types и закомментируем строки application/x-httpd-php:
#application/x-httpd-php phtml pht php
#application/x-httpd-php-source phps
#application/x-httpd-php3 php3
#application/x-httpd-php3-preprocessed php3p
#application/x-httpd-php4 php4
[…]
Правим /etc/apache2/mods-enabled/php5.conf и закомментируем следующие строки в IfModule mod_php5.c:
#AddType application/x-httpd-php-source .phps
Перезагружаем Apache:
Proftpd
Устанавливаем:
Отвечаем на вопрос:
Открываем /etc/proftpd/proftpd.conf и отклбчаем UseIPv6 (off); иначе будем получать предупреждения:
или можно поправить /etc/hosts and add server1.example.com (добавив строку ::1):
192.168.0.100 server1.example.com server1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback server1.example.com
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
или изменить /etc/proftpd/proftpd.conf:
UseIPv6 off
[…]
По соображениям безопасности нужно добавить следуюшие строки в /etc/proftpd/proftpd.conf (спасибо Reinaldo Carvalho; подробности "здесь":http://proftpd.org/localsite/Userguide/linked/userguide.html ):
DefaultRoot ~
IdentLookups off
ServerIdent on “FTP Server ready.”
[…]
ISPConfig ищет конфиг в /etc/proftpd.conf вместо /etc/proftpd/proftpd.conf, поэтому создадим символическую ссылку (можете пропустить этот шаг если вы не будете ставить ISPConfig):
Затем перезапустим Proftpd:
Webalizer
Просто ставим его:
Синхронизируем системные часы
Через сервер NTP(network time protocol), достаточно установить:
И все, часы будут синхронизированы.
Поставим некоторые модули Perl, которые потребуются SpamAssassin (который идет с ISPConfig):
ISPConfig
Поскольку конфигурирование нашего сервера завершено, теперь вы можете поставить на него систему управления ISPConfig, работающую через веб-интерфейс. Мануал по ее установке "здесь":http://www.ispconfig.org/manual_installation.htm
Обратите внимание на SuExec
Если вы хотите запускать CGI скрипты под suExec, вам нужно указать /var/www в качестве домашней директории для вебсайтов создаваемых через ISPConfig в то время как Ubunt-овый suExec скомпилирован с /var/www в качестве Doc_Root.
Выполните:
Вывод будет примерно таким:
-D AP_DOC_ROOT=”/var/www”
-D AP_GID_MIN=100
-D AP_HTTPD_USER=”www-data”
-D AP_LOG_EXEC=”/var/log/apache2/suexec.log”
-D AP_SAFE_PATH=”/usr/local/bin:/usr/bin:/bin”
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX=”public_html”
Так что если вы будете использовать suExec с ISPconfig, не меняйте значения web-пути по умолчанию (т.е. оставьте /var/www) если вы работает в expert mode, когда будете устанавливать ISPConfig (в standard mode вы в любом случае этот путь поменять не сможете).
Оригинал статьи: http://www.xima4.com/?p=236.

