Внедряем email-аутентификацию DKIM в Postfix за 5 минут

Работал у нас почтовый сервер для рассылки корреспонденции клиентам. И все бы ничего, но стал люд жаловаться, что не доходят письма или  в спам попадают. И хотя spf был настроен, все говорило о том, что пора нам к нашему Postfix прикрутить DKIM. Как гласит цитата откуда-то с хабра:

Для начала установим необходимый софт командой

После установки необходимо отредактировать файл /etc/opendkim.conf, добавив в него строки

Теперь создадим рабочий каталог,а в нем новый приватный и открытый ключ. Открытый ключ мы потом пропишем на нашем DNS-сервере.

В каталоге /etc/opendkim у вас должно появиться 2 новых файла. mail.private — это наш приватный ключ, которым мы будем подписывать письма. А mail.txt содержит публичный ключ. Список имеющихся ключей укажем в файле /etc/opendkim/keytable в формате «название домен:селектор:/путь/до/ключа». В нашем случае содержимое файла будет таким:

Теперь объясним OpenDKIM почту каких доменов какими ключами подписывать в файле /etc/opendkim/signingtable в формате «домен название-ключа».

В файле /etc/opendkim/trusted необходимо прописать ваши доверенные узлы:

Зададим необходимые права, добавим пользователя postfix в группу opendkim. Это нужно чтобы postfix смог отправлять письма на подпись через сокет OpenDKIM. После чего перезапустим службу. Я рекомендую заглянуть в системный лог и убедиться, что нет ошибок при запуске службы.

Вторым этапом настроим postfix, чтобы он мог подписывать нашу почту. В main.cf необходимо добавить:

Ну и опять рестарт/релоад

Третьим и последним этапом мы настроим наш DNS сервер добавив в него TXT запись. Выведите содержимое файла mail.txt и используйте следующую пару ключ-значение для добавления новой записи в DNS.

Для применения изменений в DNS может пройти несколько часов. Проверить DKIM-подпись вы можете отправив пиьсмо через свой сервер на ящик check-auth2@verifier.port25.com. Ответное письмо вы получите в виде отчета. Например:

Полезные ссылки:

Server 2008 R2 xenpci.sys BSOD

Based on customer feedback, we have come across an error that can occur when restoring your VM onto the new
platform. After completing steps 11-k in the ‘Migrate_Server2k8r2’ guide you are told to restore the server and you
should get to the login. Sometimes you will be presented with another BSOD instead stating ‘”xenpci.sys, the driver
unloaded without cancelling pending operations’. If you experience this, you will need to remove the xen drivers
manually.
1. Select ‘Launch Startup Repair (recommended)’.
a. Select the radio button ‘use recovery tools….’, and install the Virtio Storage drivers and make a note
of the drive letter assigned to the OS drive. In this case, I’ll refer to it as the ‘F:\’ drive but yours
might be different.
b. Wait for the ‘Startup Repair’ process to fail, or cancel it and click ‘Finish’.
c. From the ‘Choose a recovery tool’ window select ‘Command Prompt’.
d. Now type the following:
i. ‘rmdir /q /s “f:\Program Files (x86)\Xen PV Drivers”
ii. ‘del /q “f:\Windows\System32\drivers\xen*”
iii. ‘del /q f:\Windows\inf\oem1.inf
iv. ‘del /q f:\Windows\inf\oem2.inf
v. ‘del /q f:\Windows\inf\oem3.inf
vi. ‘del /q f:\Windows\inf\oem4.inf
vii. ‘del /q f:\Windows\inf\oem5.inf
viii. ‘del /q f:\Windows\inf\oem*.pnf
e. Now type ‘regedit’, then hit enter.
f. Select ‘HKLM’, go to ‘File\Load Hive
g. For this step, make sure you select the drive you are recovering and not the X: (boot) drive. Go to
C:\Windows\system32\config’ and open the ‘SYSTEM’ file.
h. Type any ‘Key Name’ you want, example ‘temp’.
i. Navigate to ‘HKLM\temp\ControlSet001\services’.
i. Delete Key Names ‘xennet’, ‘xenpci’, ‘xenvdb’.
j. Navigate to ‘HKLM\temp\ControlSet002\services’.
i. Delete Key Names ‘xennet’, ‘xenpci’, ‘xenvdb’.
k. Navigate back to ‘HKLM\temp’.
i. Press ‘Ctrl + f’ to find.
ii. Search for ‘upperfilters’ and keep pressing F3 to find any key with reference to ‘xenpci’ that
have the same class value as below and delete them.
1. ‘HKLM\***\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
2. ‘HKLM\***\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
3. ‘HKLM\***\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}
l. Check these values are still true:
i. intelide ‘3’
ii. msahci ‘0’
iii. pciide ‘0’
iv. LSI_SAS ‘3’
m. Navigate back to the ‘temp’ registry key and select ‘File\Unload Hive’, then press ‘Yes’.
n. Restart the server.
2. When your server has started, Login.

Сегодня мы будем решать проблему, с которой я столкнулся давеча. Итак, у нас есть виртуальная машина Windows Server 2008 R2 на борту с установленными паравиртуальными драйверами. Эта виртаулка крутится работает под XEN’ом. Необходимо ее перести на другой сервер под VirtualBox. Но не все так просто. Первое, что необходимо было сделать — это сконвертировать. Как это сделать, я уже писал в одной из своих заметок:
После того как вы сконвертируйте IMG в VDI формат и подключие к этот диск к новой виртуальной машине под VirtualBox, скорее всего вы получите первый BSOD с кодом 0x0000007B. 0x0000007B указывает, что  во время запуска операционная система Microsoft Windows потеряла доступ к системному разделу. Чтобы пофиксить эту проблему необходимо в настройках виртуальной машины удалить SATA-контроллер и добавить IDE-контроллер:
VirtualBox-IDE
Далее после попытки запустить сервер вы скорее всего получите второй BSOD (0x0000000d4 xenpci.sys), причиной которого будут установленные паравиртуальные драйверы. Давайте удалим их. Запускаем Windows в режиме восстановления и открываем командную строку. Далее по списку выполняем:
После удаления файлов перейдем к правке реестра. Введите команду regedit, выберите раздел HKLM и загрузите куст (File\Load Hive) C:\Windows\system32\config\SYSTEM с именем temp. В разделе HKLM\temp\ControlSet001\services и HKLM\temp\ControlSet002\services удаляем ключи xennetxenpcixenvdb.
Переходим обратно в HKLM\temp, жмем CTRL+F и ищем по фразе upperfilters (F3 для продолжения поиска). Как только в значение появится xenpci необходимо удалить этот раздел. У меня нашлись разделы:
  • HKLM\***\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
  • HKLM\***\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
  • HKLM\***\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}
Теперь вернемся к разделу temp и выгрузим куст (File\Unload Hive). После чего перезагрузим сервер и радуемся рабочему серверу.

Шпаргалка по deadlock в MSSQL

Включить трассировку

-1 = сбор информации изо всех сессий.

Проверить трассировку

или

логи о дедлоках будут писаться в errorlog сервера

Рекомендации:

1.Перед включением трассировки настроить сохранение логов сервера, скажем, не 6, а 24 и более. Это делается в EM, Management / SQL Server logs / Right mouse click / Configure / [X] Limit… Maximem number of поставить, скажем, в 30.

2.Настроить на планировщике ежедневный вызов sp_cycle_errorlog — эта процедура вызывает сброс текущего лога.

После того, как будут пойманы 1 — 2 — 3 дедлока выключить трассировку:

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

  • 1204 – сбор расширенной информации о взаимоблокировке.
  • 3605 – выдача информации в EventLog.
  • 3406 – выдача информации в файл errorlog.
  • 1206 – сбор информации не только о блокировках, участвующих во тупиковой ситуации (что делает флаг 1204), но и об остальных блокировках, наложенных заблокированными транзакциями.
  • 1200 – сбор информации о порядке наложения блокировок (недокументированный).

Сейчас нас интересует флаг под номером 1204 – выдача расширенной информации о взаимоблокировке, получить же информацию при выставленном флаге можно двумя способами.

1. Запустить SQL Profiler, специальную программу для отслеживания работы сервера, и настроить в ней перехват ошибок (event class Errors and Warnings: Exception and Error Log), а затем выставить флаг трассировки 3605. В этом случае вся дополнительная информация о работе SQL-сервера будет сбрасываться в Event Log и перехватываться профайлером, где ее в последствии можно будет посмотреть.
2. Выставить флаг отладки 3406. В этом случае вся дополнительная информация будет сбрасываться в файл errorlog, который по умолчанию находится в каталоге LOG директории SQL сервера.

PAG: 7:1:845557
DBCC PAGE ({dbid | dbname}, filenum, pagenum[, printopt]) в результатах вывода которой можно увидеть object_id (а по нему уже и мя объекта получить)

Полезные ссылки

http://www.sql.ru/articles/mssql/2007/011005DeadlockTroubleshootingPart1.shtml
http://rsdn.ru/article/db/deadlocks.xml

Выводим информацию о сервере на рабочий стол Windows

В определенный момент количество обслуживаемых Windows серверов стало достаточно большим. Поэтому я решил выводить информацию о сервере на рабочий стол. Для решения этой простой задачки возьмем замечательную утилиту от Microsoft — bginfo.

bginfo-screen

Скачиваем архив, распаковываем программу в c:\windows\system32 и открываем ее. Откроется шаблон и настройки программы. Произведите необходимые настройки шаблона и сохраните в произвольном месте. Я сохранил в c:\Users\serverinfo.bgi. Мне нужно было чтобы информация отображалась у всех пользователей, включая терминальных. Поэтому щелкните кнопку Desktops и в поле Logon Desktop for Terminal Services users выберите пункт Update this wallpaper.

Теперь добавим все это в автозагрузку. Для этого открываем ветку реестра HKLM\Software\Microsoft\Windows\CurrentVersion\Run и добавляем строковый параметр bginfo c:\Users\serverinfo.bgi /timer:0 /silent /nolicprompt. На этом настройка закончена.

Экстракт на все времена

tar-gzНазвание конечно шуточное, но намекающее на то, о чем хочу написать. А написать я хотел на тему распаковывания файлов разных форматов. В очередной раз пытаясь сначала вспомнить параметры для распаковки файла, а потом и прочтения help, я понял, что меня это достало. И надо что-то с этим делать.

Итак, создадим shell-скрипт и назовем его extract. В качестве аргумента он будет получать файл и в зависимости от формата выполнять распаковку.  Сам скрипт имеет вид:

Поместим его в /usr/bin и сделаем исполняемым для всех пользователей.

Компилируем Nginx с последним OpenSSL

heartbleed

Это очень ленивая заметка. Честно говоря не знаю зачем я решил ее написать. Скорее просто для себя заметочка, чтобы потом не искать опции и сам метод.

Вообщем всвязи с последними дырами OpenSSL пришлось в срочном порядке поддерживать актуальную версию этого «добра». Итак, качаем последние доступные исходные коды с официального сайта OpenSSL и Nginx с последующей распаковкой. Надеюсь, что вы умеете пользоваться wget и tar, потому что мне просто лень приводить пример как
это сделать.

Установим все что необходимо для компиляции(на примере Debian/Ubuntu):

Следующим шагом заходим в каталог распакованного OpenSSL. Там все просто:

Теперь заходим в каталог с распакованным nginx.

Единственно на что стоит обратить внимание это переменные «../openssl-1.0.1j/» в команде конфигурирования. Это просто каталог, куда вы распаковали свежиспеченный OpenSSL. Когда выйдет следующее обновление просто заменим его на нужный путь и дело в шляпе.

PS Для дабавления в автозагрузку Ubuntu надо прописать в /etc/init/nginx.conf

Автозапуск можно проверить командой

После чего запустить nginx

Блокируем клавиатуру в Linux

Изначально может показаться, что это очень странная задача, ведь можно просто заблокировать экран. Но если у вас в доме появился маленький ребенок, который то и дело норовит что то нажать, то поговорить, например, по Skype становится нереально. Итак, нужно максимально быстро заблокировать/разблокировать клавиатуру, чтобы маленький человечек не мог нажать/закрыть/удалить что-то во время общения по Skype с родственниками.

baby

Сначала Гугл меня навел меня на мысль использовать для этих целей xinput, но по какой то неведомомй причине моя клавиатура упорно не блокировалась. Дальнейшие поиски решения привели проекту Lock Keyboard for Baby. Проект не развивается уже с 2008, но у меня все заработало «с пол пинка». Итак, скачиваем скрипт и кладем его в папочку /usr/bin:

Откройте скрипт в любом удобном редакторе в первой строке поменяйте путь до вашего интерпретатора perl. Подсмотеть где он располагается можно используя команду

Далее в 7 строке (параметр defaultpassword) задайте пароль для разблокировки. После чего сохраните изменения и попробуйте его запустить. Если клавиатура заблокировалась, то все в порядке и блокировку можно вызывать по комбинации клавишь Alf+F2 и введя команду lock.

Под катом итоговый скрипт. Спасибо за внимание.

(далее…)

Вышло обновление ПО IP АТС NEOPbx до версии 1.0.49

  • Улучшен дизайн панели управления АТС и Личного кабинета пользователя.
  • Оптимизирован модуль «Статистика 2.0».
  • В личный кабинет пользователя добавлен модуль «Статистика 2.0».
  • Произведена замена сервера телефонии.
  • Добавлена функция транзитной записи разговоров на транках.
  • Оптимизирована работа DNS (для изолированных локальных сетей).
  • Исправлены некоторые мелкие ошибки.

Screenshot-NEOPbx - Google Chrome

В текущем обновлении обращаем ваше внимание на функцию транзитной записи разговоров, которая стала доступна на всех видах транках: SIP, IAX2, GSM, E1 с её помощью можно реализовать транзитную запись всех телефонных вызовов, проходящих через IP АТС NEOPbx. Это расширяет сценарии использования нашей АТС, в частности в России очень много современных АТС, но они не обладают функцией записи разговоров, а обладающие ими компании хотели бы получить такой функционал. Теперь у нас есть решение, которое справится с этой задачей, и даже немного больше, через модуль «Статистика 2.0» можно получить удобный доступ ко всем транзитным вызовам, в считанные секунды найти нужный разговор и прослушать его! Также хотим заметить, использование данной возможности не огрничивается только аппаратной версией АТС, если есть возможность на вашей АТС организовать SIP-транк в режиме точка-точка, то в этом случае вы можете использовать для транзитной записи разговоров и виртуальную версию IP АТС NEOPbx.

После установки этого обновления необходимо перезагрузить АТС.

Обзор PAC Manager под Linux

В который раз я убеждаюсь в «силе» OpenSource. Не в той силе, что OpenSource-программы на много круче закрытых аналогов, а той, что позволяет при определенных знаниях и навыках закрыть баг самостоятельно. Помимо того , что вы получаете бесценный опыт в анализе чужого кода, вы еще и получаете моральное удовлетворение от проделанной работе. Главное не забывайте отправить багфикс автору. В конце заметки мы с вами самостоятельно исправим маленький баг в программе о которой пойдет речь.

В этот раз мне на глаза попался лучший, из всех что я видел, менеджер соединений под Linux. Для тех админов и программистов,у которых их больше трех, без удобного менеджера никуда. Для меня идеалом оказался PAC Manager. Я с легкостью настроил синхронизацию всех серверов через DropBox, да еще и подключил хранитель паролей KeePassX Manager.

По сути это просто продвинутая оболочка к таким типам подключений как:

  • SSH
  • RDP
  • MOSH
  • FTP
  • SFTP
  • SERIAL
  • VNC
  • WEBDAV

На столько продвинутая, что вы можете сами написать скрипты которые будут выполняться, например, перед подключением к серверу(например поднятие VPN-сессии).
pac

(далее…)

Elastix 3.0. Первый запуск

Итак, с горем пополам мне удалось сделать первый запуск Elastix 3.0 Stable. Сразу скажу, что система меня не очень порадовала. Ожидал гораздо большего от компании PaloSanto. Есть, конечно приятные моменты в виде добротно сделанного навигационного меню. Но в купе со старым дизайном модулей система смотрится нелепо. Вот, например:

elastix1

Хотелось бы отметить, что процесс инсталляции по-умолчанию стал графическим. Но выбор текстового режима установки все таки оставили. Сам процесс установки ничем не отличается от предыдущих версий Elastix. Я ставил на виртуалку VirtualBox. Как оказалось баг, который отмечали пользователи еще в alpha-версии с клавиатурой остался. В постустановочном скрипте у меня не вводились символы. Как следствие я не мог задать нормально задать пароль ни на mysql, ни на пользователя superadmin.

Обойти это недоразумение можно следующим образом: когда выскочит предложение задать пароль на mysql — намите клавишу Ins, тем самым вы пропустите эту настройку. Далее авторизуйтесь под пользователем root и узнайте IP-адрес. Подключитесь к Elastix по SSH и запустите постинсталляционный скрипт вручную:

Теперь можно авторизоваться. Заходите по IP-адресу вашей АТС и авторизовывайтесь под пользователем superadmin. Вот тут есть какая то непонятка со входом. Когда я вошел под superadmin, а потом сделал logout — то попал на другую страницу входа в систему по адресу http://192.168.1.30/admin/, которая по дизайну явно отличается от https://192.168.1.30/. Но это не самое страшное. Самое интересное это то , что я почему-то теперь должен заходить под пользователем admin.

elastix3

Авторизовываемся и видим наш Dashboard, который остался от предыдущих версии в наследство. Далее, судя новой логике работы Elastix, а именно, что одна АТС может обслуживать сразу несколько организаций, нам нужно создать новую организацию. Но и тут меня ждал сюрприз:

Screenshot-Elastix - Google Chrome-1

По какой-то причине нельзя использовать дефисы в имени домена. Изменим на voiplab.ru. Но и тут опять сюрприз при попытке сохранить организацию:

Screenshot-Elastix - Google Chrome-2

Оказалось, что по какой то причине не прочитались настройки Asterisk. Поэтому делаем рестарт/релоад Asterisk и повторям попытку создать организацию:

После этого я зашел в раздел Users и назначил пользователю admin@voiplab.ru пароль. Теперь можно авторизовываться под этим админом.

В итоге можно сказать, что Elastix 3.0 требует серьезной доработки. Поэтому ставить в продакшн окружение я вам не рекомендую.