# tar zxvf daemontools-0.76.tar.gz
# cd daemontools-0.76
# make
# make setup check
mkdir -p /packageЗагрузить daemontools-0.76.tar.gz в /package. Распаковать:
chmod 1755 /package
cd /package
gunzip daemontools-0.76.tarСкомпилировать и установить:
tar -xpf daemontools-0.76.tar
rm daemontools-0.76.tar
cd admin/daemontools-0.76
package/install
По структуре каталога верна, скорее, авторская редакция. Как это ставил
я, уже не помню.)
# cd ucspi-tcp-0.88
# make
# make setup check
# cp tcpserver /usr/local/bin
В /etc/smtp - добавить строки вида:
127.0.0.1:allow,RELAYCLIENT=""
198.168.1.:allow,RELAYCLIENT=""
Последняя строчка, понятно, описывает Вашу локальную сеть или перечень тех хостов, с которых разрешена беспрепятственная отправка почты во внешний мир.
Создаем базу данных,
с которой tcpserver работает непосредственно:
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
# chmod 644 /etc/tcp.smtp.cdbРедактируем /var/qmail/rc
#!/bin/sh
env env -
PATH="/var/qmail/bin:/usr/local/bin"
qmail-start ./Maildir/
Редактируем
/var/qmail/supervise/qmail-pop3d/run
#!/bin/sh
exec /usr/local/bin/tcpserver -H
-R -v
-c100 0 110 /var/qmail/bin/qmail-popup <имя_сервера.имя_домена>
/home/vpopmail/bin/vchkpw
/var/qmail/bin/qmail-pop3d Maildir 2>&1
Права на него:
# chmod 751 run
Редактируем
/var/qmail/supervise/qmail-pop3d/log/run
#!/bin/sh
exec
/usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20
/var/log/qmail/qmail-pop3d 2>&1
Права на него:
# chmod 751 run
Редактируем /var/qmail/supervise/qmail-smtdp/run
#!/bin/sh
exec /usr/local/bin/tcpserver -p -R -x /etc/tcp.smtp.cdb -u82 -g81 -v -c100 0 smtp rblsmtpd /var/qmail/bin/qmail-smtpd 2>&1
Права на него:
# chmod 751 run
Редактируем
/var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1
Права на него:
# chmod 751 run
Редактируем
/var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc
Права на него:
# chmod 751 run
Редактируем
/var/qmail/supervise/qmail-send/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog
t s100000 n20 /var/log/qmail/qmail-send 2>
Права на него:
# chmod 751 run
И самый большой скрипт /usr/local/etc/rc.d/qmail
#! /bin/sh
#PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
#export PATH
case "$1" in
start)
echo -n "Starting qmail: svscan"
cd /var/qmail/supervise
env - PATH="/var/qmail/bin:/usr/local/bin:/usr/bin:/bin" svscan
&
echo $! > /var/run/svscan.pid
echo "."
;;
stop)
echo -n "Stopping qmail: svscan"
kill `cat /var/run/svscan.pid`
echo -n " qmail"
svc -dx /var/qmail/supervise/*
echo -n " logging"
svc -dx /var/qmail/supervise/*/log
echo "."
;;
stat)
cd /var/qmail/supervise
svstat * */log
;;
doqueue|alrm)
echo "Sending ALRM signal to qmail-send."
svc -a /var/qmail/supervise/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /var/qmail/supervise/qmail-send
echo "Sending HUP signal to qmail-pop3d."
svc -h /var/qmail/supervise/qmail-pop3d
;;
pause)
echo "Pausing qmail-send"
svc -p /var/qmail/supervise/qmail-send
echo "Pausing qmail-smtpd"
svc -p /var/qmail/supervise/qmail-smtpd
echo "Pausing qmail-pop3d"
svc -p /var/qmail/supervise/qmail-pop3d
;;
cont)
echo "Continuing qmail-send"
svc -c /var/qmail/supervise/qmail-send
echo "Continuing qmail-smtpd"
svc -c /var/qmail/supervise/qmail-smtpd
echo "Continuing qmail-pop3d"
svc -c /var/qmail/supervise/qmail-pop3d
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /var/qmail/supervise/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /var/qmail/supervise/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /var/qmail/supervise/qmail-smtpd
echo "* Sending qmail-pop3d SIGTERM and restarting."
svc -t /var/qmail/supervise/qmail-pop3d
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp*
echo "Reloaded /etc/tcp.smtp."
;;
*)
echo "Usage: $0
{start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue}"
exit 1
esac
exit 0
Права на него
# chmod 751 qmail
Еще команды:
# ln -s /var/qmail/supervise/* /service/
# cd qmail-smtpd
# cd supervise ; rm -rf * ; cd .. ; rmdir supervise ; cd
log/supervise ; rm -rf * ; cd .. ; rmdir supervise ; cd ..
# cd /var/log/qmail ; cd qmail-pop3d ; rm -rf * ; cd .. ; cd
qmail-send ; rm -rf * ; cd .. ; cd qmail-smtpd ; rm -rf * ; cd ..
Удалить из /etc/inittab строку, в которой есть слово svscanboot. (осторожно. Если используются другие
сервисы под управлением этого пакета, делать этого, наверно, не стоит).
На скрипт /usr/local/etc/rc.d/qmail повесить ссылки на все /etc/rc.d/ следующим образом:
ln –s /etc/rc.d/init.d/qmail /rc0.d/K30qmail
ln –s /etc/rc.d/init.d/qmail /rc1.d/K30qmail
ln –s /etc/rc.d/init.d/qmail /rc2.d/S80qmail
ln –s /etc/rc.d/init.d/qmail /rc3d/S80qmail
ln –s /etc/rc.d/init.d/qmail /rc4d/S80qmail
ln –s /etc/rc.d/init.d/qmail /rc5d/S80qmail
ln –s /etc/rc.d/init.d/qmail /rc6d/K30qmail
Из каталога /command/ удалить ссылку на файл svscanboot.
После этого qmail должен загрузится сам при следующем старте системы.
Или можно запустить
его вручную немедленно:
# qmail start
svscanboot использует перенаправление через pipeline
svscan /service 2>&1 | readproctitle service errors: .....содержащей в себе изначально 400 точек. Последние 400 байт сообщений об ошибках из svscan можно увидеть с помощью readproctitle.
svscanboot устанавливает переменную $PATH в
следующее значение:
/command:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/binи очищает все другие переменные окружения. Разработчики программного обеспечения должны использовать для создания глобальных переменных окружения каталог /command.
svscan может запускать парные процессы supervise, один для подкаталога s, один для s/log, с pipe между ними. Это происходит в случае, если имя директории s не превышает в длину 255 байт и существует поддиректория s/log. svscan требуется по два свободных дескриптора для каждой pipe.
С промежутком в пять секунд, svscan проверяет свои подкаталоги. Если он встречает новый подкаталог, он запускает новый процесс supervise. Если он обнаруживает подкаталог, процесс supervise для которого завершился, он запустит этот процесс заново. В случае для log будет использован тот же pipe, поэтому данные потеряны не будут.
svscan, будучи запущен однажды, работает постоянно. Если у него возникают проблемы с созданием перенаправления (pipe) или запуском supervise, сообщение об этом выводится в stderr; повторная попытка неудавшегося действия будет повторена позднее.
Если svscan передается в командной строке аргумент, то этим аргументом является имя каталога, в котором данный svscan должен проводить наблюдение.
supervise s
supervise переходит в директорию s и запускает в ней файл ./run. Он перезапускае ./run если ./run завершает выполнение. После кажого запуска выдерживаются паузы, чтобы не было зацикливания в случае, если процесс завершается немедленно после запуска.
Если имеется в наличии файл s/down, supervise не будет немедленно запускать ./run. Можно использовать svc как для запуска ./run, так и для передачи других команд supervise.
supervise записывает информацию о своем состоянии в двоичном формате в каталог s/supervise, этот каталог должен быть доступен для него по записи. Статустная информация может быть просмотрена командой svstat.
supervise может немедленно завершиться после запуска, если он не может обнаружить необходимых для работы файлов, каталогов или же если другая копия supervise находится в стадии исполнения для заданного каталога s. После того, как supervise успешно запущен, он остается резидентным до тех пор, пока не будет прекращен командой kill или специальным запросом на выход. Вы можете использовать svok для проверки, успешно или нет исполняется supervise. Можно использовать и svscan для рабочего запуска коллекции процессов supervise.
svc opts services
opts - последовательность опций в стандартном стиле. services состоит из любого числа аргументов, каждый аргумент является именем поддиректории, используемой supervise.
svc последовательно применяет все опции к каждому сервису из списка. Опции следующие:
io errors: ....................то при чтении данных
fatal error xyzаргумент командной строки примет следующий вид:
warning abc
readproctitle io errors: ... xyz!warning abc!
-named[*]: Cleaned cache *снимет пометку со строки named[135]: Cleaned cache of 3121 RRs. Первая звёздочка соответствует любой строке, не содержащей символа правой закрывающейся скобки.
-*выводит в файл /log/status копию последних строк, начинающихся со STAT.
+STAT*
=log/status
fatal: out of memoryто в журнал эта строка будет записана в следующем виде:
@400000003b4a39c23294b13c fatal: out of memoryв данном случае первая звездочка соответствует отметке о времени.
@4000000037c219bf2ef02e94 markОбратите, однако, внимание, что текущая реализация tai64nlocal базируется на стандартной процедуре из системной библиотеки UNIX, служащей для определения точного времени. Некоторые реализации этой функции используют неверную временную шкалу, что может влиять на преобразование.
будет преобразована в
1999-08-23 21:03:43.787492500 mark
softlimit opts child
opts серия опций в стандартной форме. child состоит из одного или большего количества аргументов.
softlimit устанавливает программные лимиты на ресурсы системы, в соответствии с opts. Затем производится запуск child.
Опции:Опции управления памятью:
Опции управления размером файлов:
Опции эффективности:
setlock opts fn child
opts серия опций в обычном стиле. fn единичный аргумент. child состоит из одного или большего количества аргументов.
setlock открывает fn для записи (создаёт его, если он не существует), устанавливает для этого файла эксклюзивную блокировку (lock), затем запускает child.
В нормальной ситуации блокировка снимается после того, как child завершит свою работу.
Дальнейшее развитие ситуации: процессу child передаетсяis дескриптор запертого файла, указывающий на дисковый файл с именем fn. Эта блокировка исчезает, если над этим файлом произвести следующие действия:
tcpserver ожидает входящие соединения и для каждого соединения запускает программу по вашему выбору. Ваша программа получает переменные окружения, показывающие имена локального и удаленного хостов, IP-адреса и имена портов.
tcpserver следит за всеми исполняемыми под его управлением программами и отслеживает ситуации переполнения памяти. Когда он уже управляет 40 (по умолчанию) одновременными соединениями, tcpserver приостанавливает отслеживание новых соединений.
tcpserver также обеспечивает функции контроля доступа через TCP,
подобно пакетам tcp-wrappers/tcpd и файлу hosts.allow, но делает это
быстрее. Его правила доступа заранее скомпилированы в хэш-формат с
помощью cdb, так что вы можете легко регулировать деятельность тысяч
различных хостов.
Данный пакет включает в себя утилиту recordio, которая наблюдает над
процессами ввода и вывода сервера.
tcpclient устанваливает TCP-соединение и запускает программу по вашему выбору. Он устанавливает для нее переменные окружения точно так же, как tcpserver.
Пакет всключает в себя простые примеры программ-клиентов, демонстрирующих возможности tcpclient: who@, date@, finger@, http@, tcpcat, и mconnect.
tcpserver и tcpclient полностью соответствуют требованиям
UCSPI,
(UNIX Client-Server Program Interface),
и используют протокол
TCP
.
ucspi-tcp может служить заменой следующим программам:
Администраторы многих серверов заменили inetd на tcpserver, причины для этого следующие:
tcpserver opts host port progopts - cерия опций
joe@127.0.0.1:first
18.23.0.32:second
:third
127.:fourth
ftp stream tcp nowait root tcpd ftpd -l -Aв /etc/inetd.conf. Программа ftpd будет запущена с нулевым аргументом ftpd и остальными аргументами -l -A. Обратите внимание, что tcpd может (и должен) быть заменен tcpserver с опцией -x:
5135 > cat: /dev/fd/8: Bad file descriptorили
5135 > [EOF]
5135 > cat: +если команда cat производит посылки информации разными пакетами.
5135 > /dev/fd/8+
5135 > : +
5135 > Bad file descriptor
5135 > [EOF]
rblsmtpd opts progopts - серия стандартных (getopt) ключей. prog - состоит из одного или большего числа аргументов.
Поддерживается произвольное количество опций -r и -a. rblsmtpd
последовательно проверяет каждый источник, до тех пор пока не обнаружит
совпадения или список опций не закончится.
Если вы не задали ни одной опции -r, rblsmtpd попытается в качестве
источника использовать rbl.maps.vix.com. Этот адрес может меняться в
зависимости от версии пакета.
Примечание от Sir Serge:
Сервисы "черных списков" - один из самых одиозных сегментов "обороны" против спама. Прежде чем использовать подобное, внимательно задумайтесь над тем, что это может за собой повлечь. Например, вы пропишете в качестве источника такой известный сервер черных листов, как spamhaus.org. И потом будете удивляться, почему кроме явного спама к вам больше не приходят нормальные письма с адресных сетей вполне известных и приличных российских провайдеров, в том числе с серверов, с которых спам никогда не рассылался. Ан все потому, что spamhaus имеет привычку после получения десятка жалоб на какой-нибудь сервер, находящейся на подсети провайдера, банить все адресные подсети, принадлежащие этому провайдеру, в отместку выставляя условия исключения из списков, которые по России любой здравомыслящий человек сочтет неприемлемым. Полностью со всеми своими сетями в эти списки попадали, например, Ростелеком и Di-net, с объяснением причины, де данные провайдеры обеспечивают хостирование спамеров и обманных интернет-магазинов и в том, что было 10-15 жалоб от маниакальных владельцев сетей каких-нибудь американских колледжей, где незащищенные виндовые машины выставлены напрямую в интернет, зато стоит аппаратный снифер, регистрирующий "атаки". Черные списки от Spamhaus, к сожалению, очень популярны среди администраторов почтовых серверов зоны .de; Хорошо, немцы имеют другой менталитет, но я изумляюсь количеству серверов зоны .ru, использующих черные листы. Конечно, это так просто - влепил черный список и радуйся тому, что на сервер ничего не приходит. А в то же время абонент сервера, который случайно попал в эти списки, не может отослать на определенные адреса жизненно важные например, для его бизнеса, почтовые сообщения. Провайдер этого абонента не может высказать свое "фи" администратору сервера, отбивающего почту, потому что его письма тоже не доходят - ибо блокируются все входящие, на все адреса, в том числе и на административные. Причем, самое подлое в этом всем то, что программы-менеджеры черных списков выставляют при отбое smtp код ошибки 450 - т.е. некритическую ошибку. А это значит, что автор письма получит bounce message не ранее чем через неделю безуспешных попыток соединения почтового сервера его провайдера. То же самое будет, если сервер просто не отвечает на запросы smtp. И видны эти ситуации только через логи сервера.
tcpclient opts host port progopts - последовательность опций в стиле getopt. host - единственный аргумент. prog состоит из одного или большего числа аргументов.
tcpserver -RHl0 0 11 who
tcpserver -RHl0 0 13 date
finger@ host userfinger@ соединяется по порту 79 (finger) машины host, отсылает имя пользователя user и выводит на печать все данные, которые может прочитать с порта. Удаляет знаки возврата каретки и преобразует непечатаемые символы в печатаемые.
http@ host page porthttp@ подключается к порту port на машине host, посылает запрос:
GET /page HTTP/1.0на host и печатает содержимие ответа, удаляя символы CR в концах строк.
Host: host
tcpcat host porttcpcat соединяется с удаленным компьютером host по порту port TCP и выводит на печать все данные, полученные им. tcpcat может быть использован для получения двоичных данных. Преобразования не производятся.
mconnect host portПрограмма посылает свой поток ввода на host, добавляя к каждой строке CR. В то же время, она выводит на печать все, что получает в ответ. Если порт не указан, подразумевается стандартный порт SMTP 25. Если параметр host не указан, попытки соединения делаются с той машиной, с которой запущена программа.
$TCPLOCALIP
это IP адрес локальной машины, в десятично-точечной нотации.
$TCPLOCALPORT
номер TCP порта локальной машины, в десятичном виде.
$TCPLOCALHOST
имя из DNS для локального хоста.
Если имя не определено, переменная $TCPLOCALHOST не
установлена.
$TCPREMOTEIP
IP адрес удаленной машины.
$TCPREMOTEPORT
номер TCP порта удаленной машины, в десятичном виде.
$TCPREMOTEHOST
имя из DNS для удаленной машины. Если имя не определено, переменная
окружения $TCPREMOTEHOST не установлена.
$TCPREMOTEINFO
строка, характеризующая соединение с удаленным компьютером через
протоколы 931/1413/IDENT/TAP.
Если такая информация отсутствует, $TCPREMOTEINFO не
установлена.
файл программа default краткое описание
badmailfrom qmail-smtpd нет неприемлемые адреса отправителей
badmailpatterns qmail-smtpd нет
badrcptto qmail-smtpd нет
bouncefrom qmail-send MAILER-DAEMON пользователь для отвергнутых сообщений
bouncehost qmail-send me хост для отвергнутых сообщений
concurrencylocal qmail-send 10 max число одновр. доставляемых сообщ.(лок)
concurrencyremote qmail-send 20 max число одновр. доставляемых сообщ.(внеш)
defaultdomain qmail-inject me домен по умолчанию
defaulthost qmail-inject me хост по умолчанию
databytes qmail-smtpd 0 максимальный размер сообщения в байтах
doublebouncehost qmail-send me хост для повторно отвергнутых сообщений
doublebounceto qmail-send postmaster пользователь для повторно отвергнутых сообщ.
envnoathost qmail-send me домен для адресов без знака @
helohost qmail-remote me имя хоста для приветствия удал. SMTP сервера
idhost qmail-inject me
localiphost qmail-smtpd me замена локальных IP-адресов на имя хоста
locals qmail-send me список доменов для локальной доставки
morercpthosts qmail-smtpd нет дополнительные разрешенные RCPT-домены
percenthack qmail-send нет домены для которых возможен в адресах знак %
plusdomain qmail-inject me имя домена для имен хостов, оканчивающихся +
qmqpservers qmail-qmqpc нет
queuelifetime qmail-send 604800 max время нахождения сообщения в очереди
rcpthosts qmail-smtpd нет разрешенные RCPT-домены
smtpgreeting qmail-smtpd me приглашение SMTP
smtproutes qmail-remote нет искусственная SMTP маршрутизация
timeoutconnect qmail-remote 60 таймаут ожидания связи с удал. SMTP сервером
timeoutremote qmail-remote 1200 таймаут ожидания ответа от удал. SMTP сервера
timeoutsmtpd qmail-smtpd 1200 таймаут в данных от удал. SMTP клиента
virtualdomains qmail-send нет список виртуальных пользователей или доменов
Максим Иванов OC: Linux 2007-04-24 19:08:01
Sir Serge OC: Linux 2007-04-24 20:06:29
GLADtr OC: Windows XP 2007-09-10 21:11:40
GLADtr OC: Windows XP 2007-09-11 13:49:28
Текст опубликован: 2004-11-28
Последние изменения текста: 2006-09-25
Вы можете добавить свои комментарии.
Комментарий появится на сайте только после того, как он будет проверен администрацией на запрещённую законодательством информацию.
Для возможности внесения комментариев в браузере должна быть включена поддержка JavaScript. Реклама и ссылки на сайты, не относящиеся к делу, являются прямым основанием удаления комментария. Поля "E-mail" и "WWW" обязательными для заполнения не являются, поле E-Mail не публикуется. Если хотите просто что-то написать автору статьи, без публикации на сайте - воспользуйтесь специальной формой под пунктом меню "О сайте". Администрация оставляет за собой право публиковать или не публиковать адреса, введенные в поле www, а также при необходимости редактировать текст вашего сообщения. Ответы на ваши сообщения по введенному вами E-mail автоматически сайтом не высылаются. Теги PHPBB и HTML не действуют.