Вышел nginx 1.0

12/04/2011 вышла стабильная версия nginx.
Так же уже доступен svn репозитарий по адресу svn://svn.nginx.org

Deb-пакет для lenny / squeeze / wheezy от debian.org.ua будет готов чуть позже уже в репозитарии на http://ftp.debian.org.ua/debian-dou/

Начиная с этой версии дополнительно включена поддержка IPv6 и GeoIP (deb-пакет собран с опциями --with-ipv6 и --with-http_geoip_module)

Опубликовано в рубрике nginx
Tagged с

Собственный хостинг

C 26.03.2011 блог переехал на собственный хостинг.

Адрес нового хостинг-проекта: https://www.linevps.com.
Довольно гибкие тарифы - оплата только за то, что используется. Панель управления - DirectAdmin. Ежедневное архивирование всех данных как локально, так и на удаленный сервер. Никаких проблем с правами на файлы - скрипты выполняются от имени пользователя. Географически разнесенные NS-серверы (Украина и Германия).

Вообщем, пробуйте.

apache и htaccess

Итак, дано: сервер с директадмином и стандартными настройками apache.
До определенного момента все прекрасно работало и "вдруг" перестало.

Симптомы:
у одного из юзеров перестали выполняться cgi скрипты, на многих доменах вместо сайта - 404 ошибка или 403.
В корне доменов (domain/public_html/...) файла htaccess нет, но такое впечатление, что делается переопределение с index.php на index.html и другие манипуляции с типами.
Конфиги апачи правильные, ничего подозительного нет. У пользователя в аккаунте более 300 доменов, подумалось, может какие грабли у апачи при таком количестве доменов на одном пользователе.
Оказалось что проблема совсем в другом и достаточно тривиальна.

Фикс проблемы.
Выяснил, что в корне хомки (/home/username/) лежит файлик .htaccess, где все и реврайтилось.
После переименования /home/username/.htaccess все заработало как прежде.

Дополнение.
Точно также себя ведет вебсервер под ISPmanager-ом.

Вывод.
Не создавайте .htaccess выше public_html, т.е. выше корня сайта.
По крайней мере это касается серверов с directadmin-ом

Установка IPSET, TARPIT и т.д. на Squeeze

Честно скопи-пастил отсюда 🙂

# aptitude update && aptitude install module-assistant xtables-addons-source
# m-a prepare
# m-a auto-install xtables-addons-source
# depmod -a

Новые таржеты для iptables:

  • CHAOS: randomly use REJECT, DELUDE or TARPIT targets.
    This will fool network scanners by returning random results
  • DELUDE: always reply to a SYN by a SYN-ACK. This will fool TCP half-open discovery
  • DHCPADDR: replace a MAC address from and to a VMware host
  • IPMARK: mark a packet, based on its IP address
  • LOGMARK: log packet and mark to syslog
  • SYSRQ: trigger a sysreq over the network (sending a saK over the network looks like a real funny ida
  • TARPIT: try to slow down (or DoS) remote host by capturing the session and holding it for a long time, using a 0-bytes TCP window. Run that on port 25 if you have no mail server to slow down spammers 😉

Новые совпадения (matches) для iptables:
condition: match on boolean value stored in /proc/net/nf_condition/name
dhcpaddr: match the DHCP Client Host address in a DHCP message
fuzzy: match a rate limit based on a fuzzy logic controller
geoip: match a packet by its source or destination country
ipp2p: match (certain) p2p protocols
quota2: named counters
pknock: port knock
.... и другие.

У себя собрал, но запустить в работу еще руки не дошли.

mod_ruid2 и php mail() = sender verify failed

При использовании apache + mod_ruid2 в некоторых случаях может не доставляться почта, отправленная с помощью php-шной функции mail(), не смотря на все корректно заполненные заголовки.

При попытке отправить письмо приходит "отлуп":

Subject: Mail delivery failed: returning message to sender
This message was created automatically by mail delivery software. A message that you sent could
not be delivered to one or more of its recipients. This is a permanent error.
The following address(es) failed: remoteuser@domain.com
SMTP error from remote mail server after
RCPT TO:: host mx.domain.com.ua [89.1xx.xx.xx]: 550 Can't verify sender

Кто-то уже сталкивался с таким ?

Update:
Вылечилось легкой правкой конфига Exim-а

Причина проявления данного эффекта связана с тем, что вот эта директива, указанная в юзеровском httpd.conf:

    php_admin_value sendmail_path '/usr/sbin/sendmail -t -i -f user@domain.net'

полностью игнорировалась.

Фикс такой - добавляем в конфиг ексима следующее:

local_from_check = false
local_sender_retain = true
untrusted_set_sender = *

Перезапускаем и наслаждаемся отсутствием описанной выше проблемы.

Для справки.
до установки мода mod_ruid2 php скрипты работали под именем apache. В свою очередь, пользователь apache входит в trusted_users в конфигурации ексима.
Поэтому заголовок 'Sender:' изменялся с помощью "sendmail -t -i -f user@domain.net" вполне нормально.

После установки mod_ruid, скрипты выполняются уже от имени владельца, который не входит в trusted_users и естественно не мог сделать подмену 'Sender:' и 'From:'

Как проверить почтовый сервер на open relay

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

Есть довольно неплохой сервис, который тестирует на разного рода виды открытого релея.
Использовать его очень просто - необходимо подключиться telnet-ом (порт 23) с хоста, где запущен почтовый сервер, вот на этот адрес: relay-test.mail-abuse.org

Почти сразу после подключения начнется тестирование почтового сервера. Этот сервис подключится по SMTP обратно на хост, откуда инициировано telnet-подключение и будет пробовать различные варианты тестирования.
Результаты тестов отображаются тут же в telnet сессии.

Примерно так:

# telnet relay-test.mail-abuse.org
Trying 168.61.4.13...
Connected to Cygnus.mail-abuse.org.
Escape character is '^]'.
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
:Relay test: #Quote test
>>> mail from: 
< << 250 OK
>>> rcpt to: < "nobody@mail-abuse.org">
< << 501 <"nobody@mail-abuse.org">: recipient address must contain a domain
>>> rset
< << 250 Reset OK
:Relay test: #Test 1
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 451 Temporary error, please try again later
>>> rset
< << 250 Reset OK
:Relay test: #Test 2
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 451 Temporary error, please try again later
>>> rset
< << 250 Reset OK
:Relay test: #test 3
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 451 Temporary error, please try again later
>>> rset
< << 250 Reset OK
:Relay test: #Test 4
>>> mail from: 
< << 501 : sender address must contain a domain
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : sender address must contain a domain
>>> rset
< << 250 Reset OK
:Relay test: #Test 5
>>> mail from: <>
< << 250 OK
>>> rcpt to: 
< << 550 Relay not permitted
>>> rset
< << 250 Reset OK
:Relay test: #Test 6
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 451 Temporary error, please try again later
>>> rset
< << 250 Reset OK
:Relay test: #Test 7
>>> mail from: 
< << 501 : domain literals not allowed
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 8
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 550 ERR. not allowed symbols in domain name
>>> rset
< << 250 Reset OK
:Relay test: #Test 9
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 10
>>> mail from: 
< << 250 OK
>>> rcpt to: < "nobody@mail-abuse.org">
< << 501 <"nobody@mail-abuse.org">: recipient address must contain a domain
>>> rset
< << 250 Reset OK
:Relay test: #Test 11
>>> mail from: 
< << 250 OK
>>> rcpt to: < "nobody%mail-abuse.org">
< << 501 <"nobody%mail-abuse.org">: recipient address must contain a domain
>>> rset
< << 250 Reset OK
:Relay test: #Test 12
>>> mail from: 
< << 501 : domain literals not allowed
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.fs-host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 13
>>> mail from: 
< << 250 OK
>>> rcpt to: < "nobody@mail-abuse.org"@[193.1x.x.x]>
< << 501 <"nobody@mail-abuse.org"@[193.1x.x.x]>: domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 14
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 501 : malformed address: @[193.1x.x.x]> may not follow >> rset
< << 250 Reset OK
:Relay test: #Test 15
>>> mail from: 
< << 501 Too many syntax or protocol errors
Connecting to 193.1x.x.x ...
<<< 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 16
>>> mail from: 
< << 250 OK
>>> rcpt to: < @[193.1x.x.x]:nobody@mail-abuse.org>
< << 501 <@[193.1x.x.x]:nobody@mail-abuse.org>: domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 17
>>> mail from: 
< << 501 : domain literals not allowed
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #test 18
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #test 19
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 550 Relay not permitted
>>> rset
< << 250 Reset OK
>>> QUIT
< << 221 server1.host.net closing connection
Tested host banner: 220 server1.host.net ESMTP Exim
System appeared to reject relay attempts
Connection closed by foreign host.

vsftpd: No /usr/sbin/vsftpd found running; none killed.

Итак, сервер: Debian Squeeze + ISPmanager + vsftpd.
При попытке перезапуска фтп демона пишет:

# /etc/init.d/vsftpd restart
Stopping FTP server: No /usr/sbin/vsftpd found running; none killed.

При этом init-скрипт пишет номер процесса:

# cat /var/run/vsftpd/vsftpd.pid
4634

Но пишет неправильный PID.
По всей видимости, при установке ftp из панели ISPmanager, в конфиг /etc/vsftpd.conf была добавлена строка:

background=YES

Соответственно, в pid файл записывался некорректный пид процесса. Это древний баг, оказывается
Собственно, про это же написано и в /usr/share/doc/vsftpd/README.Debian:

The included init script uses start-stop-daemon's --background option to run
vsftpd in the background.  If you have "background=yes" in your configuration,
the wrong PID will be recorded in /var/run/vsftpd/vsftpd.pid, and the init
script may fail to restart or stop vsftpd later.  Just remove "background=yes"
from vsftpd.conf.

Т.е. комментируем или убираем вообще строку "background=yes", после чего init-скрипт начинает нормально запускать/останавливать vsftpd

PS. Как все таки, иногда, полезно почитывать документацию 🙂

/lib/libc.so.6: version ‘GLIBC_2.11’ not found

Попал в руки сервер Debian Lenny 5.0.7 со следующими симптомами:
не добавляются юзеры,  часть сервисов отвалилась (exim и dovecot, в частности, остальное не проверял), а при попытке что-ли установить получаем:

dpkg: /lib/libc.so.6: version `GLIBC_2.8' not found (required by dpkg)
dpkg: /lib/libc.so.6: version `GLIBC_2.11' not found (required by dpkg)
E: Sub-process /usr/bin/dpkg returned an error code (1)

Смотрим почему:

# ldd -v /usr/bin/dpkg
/usr/bin/dpkg: /lib/libc.so.6: version `GLIBC_2.8' not found (required by /usr/bin/dpkg)
/usr/bin/dpkg: /lib/libc.so.6: version `GLIBC_2.11' not found (required by /usr/bin/dpkg)
linux-vdso.so.1 => (0x00007fffeccfd000)
libc.so.6 => /lib/libc.so.6 (0x00007f4a09e8d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4a0a1e0000)
Version information:
/usr/bin/dpkg:
libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
libc.so.6 (GLIBC_2.8) => not found
libc.so.6 (GLIBC_2.3) => /lib/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/libc.so.6
libc.so.6 (GLIBC_2.11) => not found
libc.so.6 (GLIBC_2.2.5) => /lib/libc.so.6
/lib/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

Примечательный факт: /lib/libc.so.6 был не симлинком на libc-2.7.so, а был самостоятельным файлом.
Мдааа.. ))
На всякий случай попросил клиента заказать ipkvm и liveCD, а также показать /etc/apt/source.list (Откуда в lenny libc-2.11 ??).
После увиденного я вообще удивился как оно еще жило. Были подключены репы stable и sid (жуть !), да в придачу еще и от убунты репа. Apt-Pinning , естественно не использовался.

Пришлось хаком приводить систему в чувства.
Убрал лишние репы, скачал нормальный штатный deb пакет dpkg.
Так как установить его все равно не получится, подменил файл /usr/bin/dpkg на тот который из deb-пакета.
dpkg заработал, уже лучше.

Ну а дальше пошли уже мытарства по вычистке системы от всего лишнего и чуждого для этой версии. Вот тут как раз и пригодился ipkvm.
Загрузился в rescue режиме, поднял сеть, потом chroot /dev/sda1 (диск был разбит на root и swap)
Перелинковал libc.so.6 на libc-2.7.so ну и на всякий случай переустановил libc6, а то мало ли откуда там файл вместо симлинка взялся.
После чего попытка взлететь с родного винта.

Скажу, что на этот раз повезло и система поднялась удачно.
Правда, после этого было потрачено пару часов на вычистку и переустановку пакетов.
Но в итоге, все заработало как и должно работать, клиент доволен.
Ну и я доволен, что смог помочь )

Обновляем Exim для Directadmin

Все еще используете ексим 4.69 ?
Пора обновить версию.
Можно, конечно, собрать из исходников (как описано тут), а можно просто поставить уже готовый пакет.
Скачиваем и ставим пакет с сайта directadmin.
Для Debian:

# cd /usr/local/directadmin/custombuild
# wget http://files.directadmin.com/services/debian_5.0/da_exim-4.72.deb
# dpkg -i da_exim-4.72.deb

Для Debian 64bit:

http://files.directadmin.com/services/debian_5.0_64/da_exim-4.72.deb

Для CentOS:

# cd /usr/local/directadmin/custombuild
# wget http://files.directadmin.com/services/es_5.0/da_exim-4.72-2.i386.rpm
# rpm -Uvh da_exim-4.72-2.i386.rpm

Возможно понадобится доставить отсутствующие библиотеки (libperl5.10, db4 и т.д.).
Если отвалился TLS - выставить нужные права на /etc/exim.key (chown mail: /etc/exim.key)

Еще можно использовать dkim, достаточно поправить exim.conf и добавить проверки:

acl_smtp_dkim    = acl_check_dkim
.....
.....
###############################
#       ACL check_dkim        #
###############################
acl_check_dkim:
  defer dkim_status = fail
     logwrite   = DKIM test failed: $dkim_verify_reason
     message    = DKIM test failed: $dkim_verify_reason
     add_header = X-DKIM-FAIL: DKIM test failed: \
                  (address=$sender_address domain=$dkim_cur_signer), \
                  signature is bad.
  warn  dkim_status = invalid
     add_header = :at_start:Authentication-Results: \
                  $dkim_cur_signer ($dkim_verify_status); $dkim_verify_reason
     logwrite   = DKIM test passed (address=$sender_address domain=$dkim_cur_signer), \
                  but signature is invalid.
  accept dkim_status = pass
     add_header = :at_start:Authentication-Results: dkim=$dkim_verify_status, \
                  header.i=@$dkim_cur_signer
     logwrite   = DKIM test passed (address=$sender_address domain=$dkim_cur_signer), \
                  good signature.
  accept

Теперь ексим будет проверять цифровую подпись (если она есть) для входящих писем.
Для проверки можно отправить письмо с гугло- или mail.ru ящика. При получении письма в логе можно увидеть результат проверки:

2010-12-27 09:31:21 1PXxxx-000xxx-PR DKIM: d=gmail.com s=gamma c=relaxed/relaxed a=rsa-sha256 [verification succeeded]
2010-12-27 09:31:21 1PXxxx-000xxx-PR DKIM test passed (address=user@gmail.com domain=gmail.com), good signature.
...
2010-12-27 12:01:26 xxxx-xxx-FX DKIM: d=mail.ru s=mail c=relaxed/relaxed a=rsa-sha256 [verification succeeded]
2010-12-27 12:01:26 xxxx-xxx-FX DKIM test passed (address=user@mail.ru domain=mail.ru), good signature.

DKIM можно использовать как дополнительную проверку для фильтрации почты.