Опубликовано

DKIM-filter on Centos

DKIM-filter — данный пакет служит для подписывания писем и работает в связке с postfix. Данный пост основан на статье с хабра, но дополнен информацией специально для centos.

Установка:

Прежде всего, хоть он и называется dkim-filter, в centos данный пакет назван dkim-milter и устанавливать надо именно его. Репозиторий epel вам в помощь, ну или любой другой где вы найдете данный пакет (:

yum install dkim-milter

 

Настройка:

Тут опять нас ждет сюрприз, потому как файла /etc/dkim-filter.conf после установки нет. Вся конфигурация находится в /etc/mail/dkim-milter/ ^_~

В файле /etc/mail/dkim-milter/dkim-filter.conf изменяем следующие параметры

BodyLengths    Yes
Canonicalization    relaxed/relaxed
Domain    mail.example.com
KeyList    /etc/mail/dkim-milter/keys/keylist
Selector        default
Socket    inet:8891@localhost
Syslog    Yes
SyslogSuccess    Yes
X-Header    Yes

Далее генерируем ключи для вашего домена

dkim-genkey -d example.com -s mail -r

Сейчас в mail.txt у нас лежит TXT запись, которую нужно добавить, а в mail.private лежит приватный ключ, который и будет использоваться для подписи писем. Запись, которую нужно добавить в DNS, будет вида:

mail._domainkey IN TXT «v=DKIM1; g=*; k=rsa; p=…»

Теперь обязательно нужно удалить расширение у файла с ключом, потому что в описываемой схеме dkim-filter берёт имя сервера из имени файла с ключом:

mv mail.private mail

В файл /etc/mail/dkim-milter/keys/keylist записываем какие домены каким ключом нужно подписывать:

*@example.com:example.com:/etc/mail/dkim-milter/keys/mail
*:example.com:/etc/mail/dkim-milter/keys/mail

Аналогично можно добавить свои отдельные ключи для других доменов или даже для отдельных адресов. Если не нужно, чтобы dkim-filter подписывал письма для всех других доменов, не указанных явно, последнюю строчку можно удалить.

Наконец, добавим в конец /etc/postfix/main.cf следующие строки:

milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Не забываем добавить DNS TXT запись и проверить, что она на месте:

dig txt mail._domainkey.example.com

Если проверка прошла успешно то стоит формально запретить другим серверам принимать письма с вашим доменом, но без подписи, добавив ADSP запись:

_adsp._domainkey IN TXT «dkim=all»

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

chkconfig —levels 345 dkim-milter on

Ня.

Опубликовано

Apache2 + PHP + FastCGI — горячее блюдо

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

На просторах интернетов есть очень много гайдов на тему установки и настройки mod_fastcgi, всё сводится к паре команд и добавлению стандартного конфига. Но не всегда всё обстоит так просто.

Итак, мы имеем связку Apache 2 (бэкенд), nginx (фронтенд), и PHP 5.3.x в режиме mod_php.

Задача: перевести PHP в режим FastCGI

Читать далее Apache2 + PHP + FastCGI — горячее блюдо

Опубликовано

How to add a new hdd in Centos

Очередная заметка про грабли, и болящую попу.

Допустим вы подключили новенький девственный hdd к своей шайтан-машине. Первым делом надо создать раздел:

fdisk /dev/sdx

n — создаем новый раздел

p — праймари

1 — номер раздела

t — тип файловой системы

83 — HEX код EXT3 (список кодов вы можете глянуть командой L)

w — сохранить изменения

проверьте всё ли верно создалось

fdisk -l

если да, двигаемся дальше и форматируем наш раздел

mkfs.ext3 /dev/sdx1

fsck -f -y /dev/sdx1

добавляем метку для диска иначе при загрузке будет попа (:

tune2fs -L /new-hdd /dev/sdx1

добавляем информацию в /etc/fstab

LABEL=/new-hdd    /new-hdd    ext3    defaults    1 2

пробуем смонтировать раздел

mount /new-hdd

df -h

если всё ок, то можно перезагружаться.

Если же во-время загрузки вы что-то напортачили и на горизонте маячит белый пушной зверёк, то вводим root пароль и переходим в режим Repair filesystem (: Но для того чтобы иметь возможность внести изменения в файл /etc/fstab надо сначала перемонтировать партицию с возможностью записи:

mount -w -o remount /

теперь открываем /etc/fstab и исправляем ошибки.

Читать далее How to add a new hdd in Centos

Опубликовано

Munin 1.4.x 95 percentage RRD patch

Сразу оговорюсь что велосипед не мой, но катается хорошо :D

Хостеры иногда предлагают клиентам так называймый burstable трафик, это когда можно на некоторое время зайти за лимит, скомпенсировав трафик во-время наименьшей нагрузки. Более подробно вы можете покурить педивикию, даже на русском!

Для того чтобы добавить сие решение к себе в munin придется немного попатчить RRD. Стоит отметить что пути от дистрибутива и версии могут отличаться, но смекалку никто не отменял ;)

Centos 5:

/usr/lib/perl5/vendor_perl/5.8.8/Munin/Master/GraphOld.pm

Centos 6:

/usr/share/perl5/vendor_perl/Munin/Master/GraphOld.pm

Я не буду приводить листинг кода тут, так как парсер может  его погрызть. Поэтому ссылочка на патчноуты Munin 1.4.x 95 percentage RRD patch или на оригинальный аттач в trac.

Опубликовано

Dovecot 2 + Multi-SSL certificates

Во второй версии dovecot’а есть возможность указывать разные сертификаты для разных доменов (IP адресов и протоколов).

Для этого создаем шаблон:

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
# country (2 letter code)
#C=FI

# State or Province Name (full name)
#ST=

# Locality Name (eg. city)
#L=Helsinki

# Organization (eg. company)
#O=Dovecot

# Organizational Unit Name (eg. section)
OU=IMAP server

# Common Name (*.example.com is also possible)
CN=imap.example.com

# E-mail contact
emailAddress=postmaster@example.com

[ cert_type ]
nsCertType = server

и сертификат:

# openssl req -new -x509 -nodes -config cert.cnf -out dovecot-domain-crt.pem -keyout dovecot-domain-key.pem -days 365

перемещаем сертификат и ключ куда надо, задаем права на файлы и т.д.

#  mv dovecot-crt.pem /etc/pki/dovecot/cert/dovecot-domain-crt.pem

#  mv dovecot-key.pem /etc/pki/dovecot/private/dovecot-domain-key.pem

# chmod 0600 /etc/pki/dovecot/cert/dovecot-domain-crt.pem

# chmod 0600 /etc/pki/dovecot/private/dovecot-domain-key.pem

# openssl x509 -subject -fingerprint -noout -in /etc/pki/dovecot/certs/dovecot-domain-crt.pem

далее необходимо поправить конфигурацию ssl для dovecot /etc/dovecot/conf.d/10-ssl.conf находим

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

и НИЖЕ ДОБАВЛЯЕМ

local xx.xx.xx.xx {
protocol pop3 {
ssl_cert = </etc/pki/dovecot/certs/dovecot-domain-crt.pem
ssl_key = </etc/pki/dovecot/private/dovecot-domain-key.pem
}
}

Стандартную секцию необходимо оставить, иначе вы будете получать ошибку doveconf: Error: ssl enabled, but ssl_cert not set

вместо local <ваш IP> можно использовать local_name domain.tld, в этом случае секция с protocol pop3 не нужна, но вам понадобится поддержка TLS SNI (Server Name Indication)!

Опубликовано

Centos 6: SELinux vs Postfix + Dovecot

Настраивая что-нибудь в центоси вы обязательно огребете проблем если у вас включен SELinux.

Таким замечательным примером может служить настройка Postfix с SASL аутентификацией в Dovecot. Вы спокойно сделали конфиги, всё проверили, рестартанули сервисы, а в результате нижуя не работает! WTF? Это няши, SELinux.

Идем в лог /var/log/maillog и любуемся такой вот ошибкой:

localhost postfix/smtpd: warning: SASL: Connect to private/auth failed: Permission denied

Благодарим это чудо за чудесную ночь секаса или же берем клаву и ставив на место это безобразие (:

grep smtpd_t /var/log/audit/audit.log | audit2allow -M postfixsasl

коротко о команде — найти smtpd_t в логе аудита и создать на основе этого правило для selinux

semodule -i posfixsasl.pp

добавляем правило в проклятый selinux, перезапускаем сервис(ы) и всё няшно. Эх, если бы я нашла эту фичку год назад…

 

Дополнительно:

Иногда может случиться так, что вы вроде бы всё добавили (например, модули для munin), а что-то всё ещё не работает из-за SELinux’a. Причиной этому может быть то, что события блокировки попадают под donotaudit события. В этом случае можно временно включить donotaudit события командой:

semodule -DB

и потом вернуть обратно

semodule -B

 

Так же, помимо описанного выше способа поиска для создания правил. Можно воспользоваться командой:

ausearch -m avc -ts today | audit2allow -M myfix

Которая автоматически поищет все события и создаст правила для их разрешения.

 

p.s.

Вот тут: гайд как это работает + ещё примеры для тех кто любит и пожестче.

Опубликовано

Переброс порта ssh в CentOS 6

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

 

Итак, для того чтобы изменить стандартный порт доступа надо сделать 3 вещи:

1. открываем /etc/ssh/sshd_config и раскомментируем строку

Port 22

меняем 22 на выбранный вами порт. Если вы хотите чтобы ssh слушал только на IPv4, то раскомментируйте строку

ListenAddress 0.0.0.0

остальные настройки по вкусу (:

 

2. добавляем правило для iptables (вы можете изменить стандартное правило для 22-го порта)

iptables-save > /path/to/rules.list

добавляем строку

-A INPUT -p tcp -m state —state NEW -m tcp —dport 1234 -j ACCEPT

и сохранив файлик обновляем правила

iptables-restore < /path/to/rules.list

НО, данный вариант будет работать только до первой перезагрузки! Если вы хотите добавить постоянное правило, изменения следует вносить в /etc/sysconfig/iptables

 

И вот казалось бы всё, но в этом случае перезапустив sshd вы рискуете потерять доступ к серверу, так как включенный по-умолчанию SELinux будет считать что негоже использовать иной порт. Так что переходим к пункту…

3. для того чтобы selinux не возникал, необходимо добавить ваш порт как порт для ssh

semanage port -a -t ssh_port_t -p tcp 1234

проверяем

semanage -l | grep ssh

 

Так же, вы можете столкнуться с проблемой когда центось вам скажет что знать не знает такой команды, тогда выполняем

yum whatprovides /usr/sbin/semanage

и получив ответ, устанавливаем нужный пакет. в моём случае это

yum install policycoreutils-python

 

Вот теперь можно смело (перепроверив не забыли ли вы чего!) перезапускать sshd и ломиться на новый порт

service sshd restart

Опубликовано

Free space and autostart

Парочка полезных команд:

чтобы глянуть какой бардак творится со свободным местом

df -h

 

добавление сервиса либо скрипта в автозагрузку

chkconfig —level 345 %scriptname% on

удаление из автозагрузки

chkconfig %scriptname% off

Wiki по run level (http://en.wikipedia.org/wiki/Runlevel)

0 — Halt (выключение)

1 — Single User mode

2 — Multi User mode (without networking)

3 — Multi-user mode (with networking, console logins only)

4 — User-definable

5 — Multi-user mode (with console, with display manager X11)

6 — reboot (перезагрузка)

Список сервисов

chkconfig —list

Опубликовано

постфикс и довкот — кого хочешь…

Изначально планировалась заметка о том, как поставить и настроить «лёгкий» и удобный почтовый сервер, но увы, задача оказалась сильнее меня. Поэтому публикую некоторые грабли с которыми успела познакомиться в процессе и решить.

Траблшутинг

Если в логах появляется следующая XYетень, то 90% что виноват в этом SELinux.

Mar  2 02:08:14 nyaa dovecot: POP3(xxx@yyy.zz): mkdir(/var/vmail/yyy.zz/xxx/cur) failed: Permission denied
Mar  2 02:08:14 nyaa dovecot: POP3(xxx@yyy.zz): Couldn’t open INBOX: Internal error occurred. Refer to server log for more information.

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

ВАРН! — Это решение работает частично, так как далее возникает затык с пермишенами при создании файлов писем и там полная жопа. Лечится по слухам добавлением специального типа пермишенов для довкота либо отключением SELinux’а, но на практике не проверяла.

# semanage fcontext -a -t dovecot_spool_t ‘/var/vmail(/.*)?’

# restorecon -Rv /var/vmail

Если у вас появляется ошибка:

postfix/cleanup[4486]: warning: connect to mysql server localhost: Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’

Можете смело пиздить тех умников, которые пишут localhost в манах. Разницу постфикс имеет, мой юный падаван!

Правим все hosts=localhost на hosts=127.0.0.1 опля!

Опубликовано

и никакой магии!

Установка ImageMagick на центось.

Для начала, проверьте чтобы эти пакеты были установлены:

#yum install gcc php-devel php-pear

Если всё в порядке, двигаемся далее и ставим самого магика:

#yum install ImageMagick ImageMagick-devel

Тут есть одно но: если у вас система 64бита, то вы можете ставить x86_64 пакеты, минуя i386 и сэкономив тем самым кол-во зависимостей.

Следующим шагом станет компиляция библиотеки iMagick для PHP.

#pecl install imagick

На вопрос: «Please provide the prefix of Imagemagick installation» отвечаем: «all»

Если всё прошло удачно, то в конце лога появится:

Build process completed successfully
Installing ‘/var/tmp/pear-build-root/install-imagick-3.0.1//usr/lib/php/modules/imagick.so’
Installing ‘/var/tmp/pear-build-root/install-imagick-3.0.1//usr/include/php/ext/imagick/php_imagick_defs.h’
Installing ‘/var/tmp/pear-build-root/install-imagick-3.0.1//usr/include/php/ext/imagick/php_imagick.h’
Installing ‘/var/tmp/pear-build-root/install-imagick-3.0.1//usr/include/php/ext/imagick/php_imagick_shared.h’
install ok: channel://pecl.php.net/imagick-3.0.1
You should add «extension=imagick.so» to php.ini

Последняя строка как бы намекает что надо прописать модуль, прописываем:

#echo «extension=imagick.so» > /etc/php.d/imagick.ini

Рестартуем httpd и проверяем загрузился ли модуль:

#service httpd restart

#php -m | grep imagick

Ня! Можно кушать сгущенку и ресайзить каваек :З

По мотивам: http://tuxologia.blogspot.com/2011/01/imagemagick-centos.html

Читать далее и никакой магии!