Легче не бывает. Строим сервер из легких компонентов [2009]
Для построения сервиса администраторы предпочитают выбирать решение или такое, с которым сталкивались раньше, или наиболее известное – Apache, Squid, BIND, Postfix, Courier Mail Server. Но не всегда проторенный путь оптимален. Альтернативные программы, особенно если используется не самое современное оборудование, зачастую гораздо эффективнее.
Веб-сервер lighttpd
Apache, благодаря своей надежности, функциональности и расширяемости, на сегодняшний день стал стандартом де-факто для веб-сервера. Но на медленных компьютерах, встраиваемых платформах и для обработки статичного контента индеец будет выглядеть неповоротливым тяжеловесом. Поиск в репозитарии Debian/Ubuntu «sudo apt-cache search httpd» выдаст не один десяток схожих проектов. Среди них - nginx (nginx.net) и lighttpd (http://www.lighttpd.net/), которые, по данным компании NetCraft (netcraft.com), входят в первую пятерку популярных веб-серверов. Оба сервера работают очень быстро, потребляя малое количество ресурсов, и используют одну и ту же модель многозадачности - асинхронный I/O. Стоит отметить, что на lighttpd крутятся такие сайты, как SourceForge, Youtube, Википедия. Он поддерживает выдачу динамических страниц (при помощи FastCGI) и балансировку нагрузки. Функциональность можно изменить за счет подключения/отключения модулей. В настоящее время реализованы модули управления виртуальными хостами, переадресации, аутентификации и др. Для примера настроим lighttpd с поддержкой PHP5 и MySQL.
Действие первое: выполняем установку веб-сервера из репозитария Ubuntu (чтобы упростить задачу, все примеры буду приводить на Ubuntu 8.04 LTS, более понятном для новичков, хотя все сказанное, за исключением особенностей установки, будет актуально и для других систем):
Некоторые модули вынесены в отдельные пакеты, найти которые можно поиском. Теперь, если набрать в браузере http://localhost, увидим страницу по умолчанию, где вкратце расписаны особенности сервера. Конфигурационные файлы находятся в /etc/lighttpd, каталог DocumentRoot - /var/www, место для CGI-скриптов - /usr/lib/cgi-bin, логи - /var/log/lighttpd.
Чтобы не нарушать совместимость с большинством приложений, необходимо активировать параметр «cgi.fix_pathinfo» (так мы дадим указание PHP устанавливать имя файла в переменной SCRIPT_FILENAME):
$ sudo nano /etc/php5/cgi/php.ini
cgi.fix_pathinfo = 1
Основной файл lighttpd.conf состоит из директив и стандартен для Unix. Если директива должна принимать несколько значений, они перечисляются через запятую и заключаются в скобки. Открываем конфиг в редакторе и правим:
$ sudo nano /etc/lighttpd/lighttpd.conf
# Описание модулей server.modules = ( "mod_access", "mod_alias", "mod_accesslog", "mod_compress", # Добавляем строку, подключающую FastCGI "mod_fastcgi", # "mod_rewrite", ) # Расположение файлов server.document-root = "/var/www/" # Индексные файлы, не забываем о index.php index-file.names = ( "index.php", "index.html", "index.htm", "default.htm", "index.lighttpd.html" ) # При необходимости указываем порт и адрес, на котором будут приниматься подключения # server.port = 80 # server.bind = "localhost" # Кодировка для листинга файлов dir-listing.encoding = "utf-8" # UID|GID, с правами которых будет работать демон server.username = "www-data" server.groupname = "www-data" # Добавляем строку-обработчик PHP-файлов fastcgi.server = ( ".php" => ("bin-path" => "/usr/bin/php5-cgi", "socket" => "/tmp/php-fastcgi.socket" ))
По окончании настройки проверяем файл на отсутствие ошибок:
$ lighttpd -t -f /etc/lighttpd/lighttpd.conf Syntax OK
Можно поставить и другие пакеты, реализующие разные модули PHP, часто требующиеся в работе – php-imap, php-gd, php-ldap и другие. Для включения или отключения модулей можно использовать специальные Perl-скрипты lighty-enable-mod, lighty-disable-mod, поставляемые вместе с сервером. Например, включаем модуль fastcgi:
$ sudo lighty-enable-mod fastcgi Available modules: auth cgi fastcgi proxy rrdtool simple-vhost ssi ssl userdir Already enabled modules: Enabling fastcgi: ok Run /etc/init.d/lighttpd force-reload to enable changes
Многофункциональный прокси DeleGate
Выбор прокси-серверов в *nix огромен. Поиск в репозитарии любого дистра выдаст десяток приложений, ориентированных на разные задачи и протоколы. Возможности у них различны: кэширующие, фильтрующие, прозрачные и так далее. Популярный Squid несколько тяжеловат и в настройке довольно сложен. Если нужен только кэширующий прокси, заменить кальмара поможет или Polipo (www.pps.jussieu.fr/~jch/software/polipo) — легкий проксик, ориентированный на небольшое количество клиентов, или популярный Oops! (http://www.oops-cache.org/).
Когда нужен контроль доступа и прочие фичи без кэширования данных, обрати внимание на Tinyproxy (www.banu.com/tinyproxy) или 3proxy (3proxy.ru). Требуется фильтровать web-контент? Посмотри в сторону WillowNG (launchpad.net/willowng), bfilter (bfilter.sf.net), WebCleaner (webcleaner.sf.net). Но мы остановимся на DeleGate (http://www.delegate.org/). Причина такого выбора кроется в многофункциональности этого прокси. Он поддерживает работу с большим количеством протоколов (HTTP, FTP, NNTP, SMTP, POP, IMAP, LDAP, Telnet, SOCKS, DNS). Реализовано кэширование данных, фильтрация трафика, аутентификация и другие функции. DeleGate нет в репозитарии Ubuntu, но его установка несложна. Скачать архив с исходными текстами можно с сайта проекта (в качестве логина указав e-mail). Приступаем к установке:
$ tar xzvf delegate9.9.0.tar.gz $ cd delegate9.9.0 $ make
В процессе сборки будет запрошен email-адрес, который будет использоваться в сообщениях об ошибках. По завершении процесса в каталоге $HOME/delegate создается DGROOT-окружение, содержащее все рабочие библиотеки. Здесь же будут находиться pid-файл, журнал и кэш. Для удобства работы скопируем исполняемый файл delegated в каталог, доступный через переменную окружения PATH:
$ sudo cp -v src/delegated /usr/bin
Для примера запустим delegate в режиме http-прокси, работающего на 8080 порту ('-v' для отладки):
$ delegated -v -P8080 SERVER=http
Настраиваем браузер на новый порт и пробуем подключиться. В консоли наблюдаем за ходом работы. Если номер порта выбрать <1024, Delegate при запуске потребует права root. Если не использовать параметр '-v', то после инициализации демон освободит консоль. Остановить затем процесс можно так:
Процессы delegated никак не связаны между собой, таким образом, нам ничто не мешает запустить столько копий Delegate со своими параметрами, сколько действительно необходимо. Аналогично активируется FTP-прокси:
$ delegated -P8021 SERVER=ftp
Кроме того, Delegate может работать как HTTP, FTP, DNS или NNTP-сервер. Например, запустим его как веб-сервер:
Использование своего DNS-сервера позволяет ускорить серфинг и чуточку сократить нагрузку на внешний канал за счет кэширования. Популярный BIND – монструозен, жаден до оперативки и имеет репутацию самого дырявого DNS-решения. Но ему легко найти замену. Команда «sudo apt-cache search dns» выдаст несколько предложений на любой вкус. К примеру, lwresd — сильно урезанный, только кэширующий, сервер имен, который отвечает на запросы с помощью облегченного протокола определения имен BIND 9, а не протокола DNS. Есть еще PowerDNS - очень мощный и простой в настройке DNS-сервер, к которому написано много графических тулз; MaraDNS с хорошей секурити историей; кэширующий djbdns; Dnsmasq, о котором пойдет речь дальше, и другие.
Разработанный для небольших сетей Dnsmasq (www.thekelleys.org.uk/dnsmasq) является кэширующим DNS, а также DHCP и TFTP-сервером. Объединение DNS и DHCP-серверов в одной программе дает ряд преимуществ. Обмен данными «DNS – DHCP» упрощен, и как только что-то делает одна часть, вторая тут же узнает об этом, на лету корректируя свои установки. Скажем, полученный при помощи DHCP IP-адрес сразу же попадает в DNS-таблицу. Сервер Dnsmasq умеет загружать информацию из файла /etc/hosts, которую и будет использовать как для службы DNS, так и для DHCP. Полученный клиентом IP может заноситься в hosts. Ставим:
$ sudo apt-get install dnsmasq
Настройки Dnsmasq производятся в единственном файле /etc/dnsmasq.conf. В самом простом случае достаточно уточнить в нем интерфейс, чтобы он принимал запросы только из внутренней сети:
listen-address=127.0.0.1, 192.168.0.1
Как вариант, можно использовать параметр «interface». Теперь открываем /etc/resolv.conf и добавляем в самом начале строку «nameserver 127.0.0.1», указывая, что при опросе первым сервером имен станет локальная система. Если провайдер для раздачи IP-адресов использует DHCP, то файл /etc/resolv.conf будет переписан при следующем подключении. Чтобы этого избежать, в /etc/dhcp3/dhclient.conf снимаем комментарий с записи:
prepend domain-name-servers 127.0.0.1;
Теперь при обновлении первой строкой в resolv.conf будет вставлена ссылка на 127.0.0.1. При необходимости сюда через запятую можно добавить IP-адреса других предпочитаемых DNS-серверов. Перезапускаем dnsmasq:
$ sudo /etc/init.d/dnsmasq restart
Минимальная настройка DHCP-сервера фактически сводится к настройке директивы dhcp-range, при помощи которой задаются границы диапазона IP-адресов для выдачи клиентов:
В этом примере был задан диапазон 192.168.1.100-192.168.1.150. Сетевая маска необязательна, – Dnsmasq способен подобрать оптимальную, исходя из текущих настроек. Так же из системных настроек берутся имена домена, DNS-сервера и IP-адрес маршрутизатора. Последним идет необязательный параметр, указывающий на время выдачи адреса, после которого клиент повторяет запрос на его получение. Кроме того, в файле можно найти еще несколько директив, начинающихся на dhcp-. С их помощью под силу задать практически любые настройки DHCP. Например, чтобы клиенту с определенным MAC-адресом всегда выдавался один и тот же IP-адрес, используем dhcp-host:
dhcp-host=00:11:AA:BB:22:CC,192.168.1.200,dejavu
Кстати, у dhcp-host есть несколько дополнительных опций. Так, чтобы игнорировать систему с определенным адресом, в конце предыдущего правила добавляем «ignore».
Легкий почтовик XMail
Небольшой (1.5 Мб) и легкий в работе XMail (http://www.xmailserver.org/) – это полноценный SMTP, POP3 и Finger-сервер, который может работать на широком спектре систем: Linux, *BSD, Mac OS X, Solaris и Windows NT/2000/XP/2003/Vista. Позиционируется как для внутренней сети интранет, так и для работы в интернете. Может обслуживать несколько доменов, умеет управлять внешними POP3 учетными записями, алиасами, списками рассылки, поддерживает несколько типов аутентификации и многое другое. Очень прост в настройке и идеально подходит для случаев, когда Sendmail/Postfix/Exim админу не по зубам или попросту излишен. Соответствующие пакеты есть в репозитарии Ubuntu:
$ sudo apt-get install xmail xmail-doc
В процессе установки будет запрошено имя домена по умолчанию и учетная запись для отправки служебных сообщений. Рабочими каталогами для XMail являются /var/lib/xmail (при установке из сырцов /var/Mailroot), /var/spool/xmail и некоторые другие. В пакетах Debian/Ubuntu для удобства настройки основные конфигурационные файлы размещены в /etc/xmail, а в указанных каталогах находятся символические ссылки. Для каждого домена так же создается отдельный каталог. Управление запуском сервера производится при помощи скрипта /etc/init.d/xmail. Все настройки описаны в README, который доступен как на сайте проекта, так и в /usr/share/doc/xmail. При ручной правке разработчики советуют помнить о формате файлов. Каждый параметр начинается с новой строки. Если команда имеет несколько значений, то их следует прописывать через табуляцию (сколько они займут строк, неважно; пока не нажат <Enter>, вся запись будет сопоставлена этому параметру).
Команда «netstat -atn», введенная после инсталляции, показывает, что слушаются 25 (SMTP) и 110 (POP3) порты. Поэтому нас ждет минимум настроек. Сервер XMail не использует общесистемные учетные записи, а хранит данные о пользовательских аккаунтах в своих файлах. Например, учетные записи для работы с почтой находятся в файле mailusers.tab, а в smtpauth.tab заносятся учетные записи для подключения к SMTP-серверу (используются они только для отправки сообщений). Сети, с которых можно отправлять и получать почту, указываются соответственно в файлах pop3.ipmap.tab и smtp.ipmap.tab. По умолчанию запись в них разрешает подключение с любого адреса:
"0.0.0.0" "0.0.0.0" "ALLOW" 1
Вероятно, здесь следует разрешить подключения только из внутренних сетей:
В других файлах находятся данные SMTP-шлюзов и релеев, алиасы доменов, настройки антиспама и прочее. Править файлы вручную необязательно. Сервер XMail предоставляет возможность удаленного управления (порт 6017).
На сайте проекта в разделе «XMail Tools» можно найти ссылки на некоторые инструменты. Например, PHP-интерфейс к XMail — PHPXmail (phpxmail.sf.net). Но вначале нужно создать в ctrlaccounts.tab учетную запись администратора. Создание новой записи здесь несколько необычно. Первым делом при помощи утилиты XMCrypt генерируем хэш пароля:
Копируем полученную строку в ctrlaccounts.tab и добавляем логин. Примерно так: «admin 1525501612551701». Кроме того, в ctrl.ipmap.tab следует ограничить доступ к управлению сервером только определенными сетями или адресами, как это сделано в других *.ipmap.tab. Скачиваем, распаковываем в каталог /var/www архив PHPXmail и набираем в браузере http://localhost/phpxmail. Выбираем ссылку «Add new server», а затем вводим данные своего сервера и учетные данные админа. После подключения получаем возможность управлять учетными записями через веб-интерфейс, а пользователи могут работать с почтой. Журналы находятся в каталоге /var/log/xmail. Здесь три файла: ctrl* - управление, smtp* - отправка почты и pop3 – получение.
INFO
Сервер lighttpd используется такими сайтами, как SourceForge, Youtube, Википедия.
Статьи по настройке прокси-сервера Squid читай в майском, июньском и июльском номерах ][акера за 2008 год.
Настройка LAMP-сервера описана в статье «Волшебная лампа админа», опубликованной в X_12_2008.