29 заметок с тегом

сервер

Открытый почтовый релей

Внезапно обнаружил, что мой почтовый сервер стал полностью открытым. Если честно, то даже не помню когда вносил какие-то сколь значимые изменения в конфигурацию postfix. С какого перепуга произошло это событие — для меня пока что загадка. Единственное, что косвенно указывало на это — возросшая нагрузка на сервер. Но я «грешил» на другое. Команда mailq сегодня выдала очередь из более чем 100 тысяч сообщений на отправку. Пришлось убивать всю очередь, не искать же нормальные письма в такой куче. Изменил несколько параметров почтовика, вроде бы все более-менее пришло в норму, даже сервер стал отвечать побыстрей. Но тесты все равно выдают, что у меня открытый релей, поэтому завтра, если будет свободное время, придется сбрасывать конфигурацию postfix и dovecot на «заводскую» и настраивать всё заново. Благо, что есть рабочий корпоративный сервер и часть настроек можно перенести оттуда. Впрочем, настройка с нуля поможет освежить мою память в этом плане и, возможно, пересмотреть некоторые настройки безопасности.

Дело движется

В продолжение предыдущей заметки

«Облако» было починено очень просто — изменением прав доступа к каталогу с файлами. Следом возникла другая ошибка — невозможность загрузить любой файл в него. Логи показали, что в этом повинен модуль защиты, который не пропускал файлы размером более 128 Кб. Исправил.
Зеркало баз NOD32, к сожалению, пока что починить не получилось. Но, похоже, что я наткнулся на возможную причину некорректной проверки ключей. Надо списаться с автором скрипта.
Еще один момент, который я поначалу упустил из вида: сервер с контактами и задачами. С ним пришлось повозиться. В итоге все дело оказалось в том, что php-fpm не передает заголовки авторизации и, соответственно, не отправляет данные (логин пользователя и пароль). Этот момент оказался описан в документации к baikal, поэтому на исправление ошибки ушло немного времени. Возможно, что примерно такая же ситуация обстоит и с проверкой ключей NOD32 на их серверах.
Должен отметить, что связка apache-mpm-worker + FastCGI меня очень радует скоростью работы. Если раньше при работе с клиентом Nextcloud на телефоне приходилось ждать пока обновится/загрузится содержимое каталога, то теперь это происходит едва не мгновенно. Видимо, сказывается «тлетворное» влияние HTTP/2 :-)

Обновление сервера

Итак, попало ко мне в руки хорошее «железо», что стало неплохим поводом обновить свой сервер. Так как конфигурация слишком сильно отличалась от прежней, то систему тоже пришлось ставить заново. Поначалу не могу понять почему установка проходит нормально, а сама система после этого не грузится. Потом припомнил, что Linux с картами Intel HD Graphics так и не научился нормально работать. Что поделать, пришлось отключать в BIOS встроенную видеокарту и ставить внешнюю. Плохо то, что эта внешняя видеокарта предназначалась для установки в компьютер жены. Старое «железо» из сервера тоже должно было пойти на апгрейд ее компьютера.
Увы, но на работе тоже было много работы, поэтому апгрейд двух систем несколько затянулся. Затем пришлось устранять ошибки в работе веб-сервера, ибо я заодно захотел поменять некоторые настройки. Сейчас его работоспособность почти полностью восстановлена за исключением двух субдоменов: «зеркала» обновлений NOD32 и облака. Последнее из них меня волнует меньше всего, доступ к нужным файлам я могу получить и другими способами. А вот «зеркало»... На него слишком много завязано. Работа над ним пока что ведется. Написал разработчику, описал проблему, пока что жду от него ответа.
Также выяснилось, что dovecot не совсем корректно работает с wildcard-сертификатами. Если быть точней, то мне удалось настроить почти все нужные почтовые клиенты (веб-интерфейс, Outlook на телефоне), кроме Thunderbird, установленного на домашнем компьютере. При попытке просмотреть почту с его помощью dovecot ругается на сертификат. Проблема, как оказалось, не новая, но рабочего решения её пока не нашел.
Установил пока что другую видеокарту в компьютер жены, но она оказалась с «битой» памятью, что приводило к периодическим перезагрузкам. Интересно, сможет сервер работать без видеокарты вообще? Пока что пара моих попыток заставить его работать в таком режиме не увенчались успехом — все время «ругался» спикером. Подозреваю, что придется покупать новую, хоть какую-нибудь. Главное, чтобы присутствовала в системе.

Выполнение внешних скриптов в Sieve

Понадобилось недавно каким-то образом запускать внешний скрипт по приходу определенного письма. Начал поиски как это сделать. В Postfix это можно сделать, используя файл aliases, но мне этот способ не подходил, потому что он подразумевает приход письма на определенный почтовый адрес. С Dovecot сильно не разбирался, но вот информацию по Sieve нашел. Немного времени спустя у меня был наполовину рабочий вариант. Наполовину потому, что выполняемая во внешнем скрипте команда напрочь отказалась принимать отправляемые ей данные. Пришлось немного подправить скрипт в самом Sieve, чтобы получить желаемый результат.
Все оказалось очень просто. Для начала нужно включить доступ к плагину vnd.dovecot.execute. Для этого открываем файл с настройками Sieve /etc/dovecot/conf.d/90-sieve.conf и вносим следующие изменения:

plugin {
  sieve_extensions = +vnd.dovecot.execute
  sieve_plugins = sieve_extprograms
  sieve_execute_bin_dir = /etc/dovecot/sieve/execute
}

Все остальные параметры нам не нужны.
В первой строчке включаем доступ к плагину для пользователей. Можно использовать параметр sieve_global_extensions, в таком случае плагин будет работать глобально. Но глобальный скрипт работает ТОЛЬКО если у пользователя нет своего файла скрипта Sieve. Пользователей на моем сервере очень мало, поэтому такой вариант мне не подходит.
Во второй строке мы разрешаем использование плагинов как таковых.
И, наконец, в третьей строке указывает папку, в которой будут находиться эти самые внешние скрипты. Доступ к этой папке для Dovecot, конечно, нужно обеспечить. Подозреваю, что папку можно и не указывать, а в скрипте Sieve просто указать полный путь к запускаемой программе, но проверять лень.
Теперь остается только написать правило обработки входящих писем. Что-то вроде такого:

# rule:[Test rule]
if allof (header :contains "from" "test@example.com", header :contains "subject" "Prikaz 66")
{
        execute "test.sh";
	fileinto "Trash";
	stop;
}

Получив письмо от отправителя test@example.com с темой «Prikaz 66» Sieve запустит на выполнение скрипт /etc/dovecot/sieve/execute/test.sh, затем удалит письмо в корзину и завершит обработку писем.
Знаю, что информации по этой теме в интернете достаточно. Но большая часть из нее, как водится, на английском и содержит много воды. Хотелось сделать небольшую выдержку на более привычном русском языке.

Wildcard сертификаты от Let’s Encrypt

За всеми событиями в жизни как-то пропустил момент, когда Let’s Encrypt стали выдавать бесплатные «wildcard» сертификаты. Иными словами, вы можете получить один сертификат на свой основной домен и все его субдомены разом. Больше не нужно беспокоиться о том, что каждый раз при создании субдомена придется создавать и новый сертификат. Нужно будет просто в конфигурационном файле указать текущий.
В отличие от «стандартного» для генерирования сертификата «wildcard» нужно вручную прописать сервер для запросов. Команда будет выглядеть примерно так:

# certbot certonly --server https://acme-v02.api.letsencrypt.org/directory -d kini24.ru -d *.kini24.ru --agree-tos -m admin@kini24.ru --manual --preferred-challenges dns --must-staple --hsts --uir --staple-ocsp

Пройдемся по параметрам, чтобы было понятней:
—server — указывает на сервер, который мы хотим использовать для создания сертификата;
-d — указываем для каких доменов мы будем создавать сертификат. Советую вам первым указывать основной домен, а не его субдомены. Сэкономите немного времени;
—agree-tos — принимаем условия лицензионного соглашения;
-m — указываем свой адрес электронной почты. Он будет использоваться как логин;
—manual — используем «ручной» режим работы. Думаю, что можно было и не указывать, но я хотел проконтролировать процесс;
—preferred-challenges — указываем предпочтительный способ проверки, что именно вы имеете доступ к администрированию домена (являетесь его владельцем);
Остальные параметры не обязательны, можно их не указывать.
После ввода команды вас спросят не хотите ли вы получать новости от Electronic Frontier Foundation (EFF), основателя сервиса Let’s Encrypt. Ради интереса согласился, отписаться можно в любой момент. Затем был вопрос о том хочу ли я использовать указанный email в качестве логина. Соглашаемся. А вот дальше был один нюанс, который я поначалу не понял, но, в итоге, разобрался. Следующим шагом вас просят внести TXT-запись в ресурсные записи домена. Вносим и ждем, процесс занимает некоторое время. Обычно хватает 15 минут. Нажимаем Enter, чтобы скрипт проверил наличие записи. И вот тут он выдает точно такой же запрос на внесение записи TXT, но с другим значением. Это значение нужно также внести в ресурсные записи. Если быть точней, то первую запись нужно заменить на вторую. Этакая двойная проверка. Снова минуты ожидания и жмем Enter. Если проверка прошла, то сертификат будет создан.
Так как у меня также используется технология HPKP, то нужно еще и генерировать новые ключи для сертификата:

# openssl rsa -in /etc/letsencrypt/live/kini24.ru/privkey.pem -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64

Вносим изменения в конфигурационный файл веб-сервера и перезапускаем его:

# systemctl restart httpd2

Привет из прошлого

Работал я несколько лет назад в одной компании, которая занималась сборкой и продажей компьютеров и разной околокомпьютерной техникой. В одни прекрасный момент решили собрать сервер для 1С. Люди собрались знающие, скидали комп в один момент. Поставили все, что нужно, протестировали и запустили в работу. А какое первое правило хорошего системного администратора? Бэкап, бэкап и еще 100 раз бэкап. Вот и занялся я написанием скрипта, который все это проделывал.
Скрипт был простой, в формате bat-файла:

  1. Рассылал всем предупреждение, что базы 1С скоро будут недоступны и ждал две минуты, пока все не закроют подключение. Кто не успел, я не виноват.
  2. Отключал все сетевые карты, чтобы не было соблазна.
  3. Создавал архивы баз 1С.
  4. Заново включал сетевые подключения.
  5. Перезагружал компьютер.

На все-провсе уходило от 15 до 30 минут, точней было лень считать. Через некоторое время я получил более выгодное предложение о работе и ушел из фирмы.
Около недели назад я получил оттуда звонок с просьбой немного переделать скрипт так, чтобы он копировал все архивы на новенький NAS. Времени свободного почти не было, поэтому отложили на несколько дней. Во второй половине недели подключаюсь к серверу и смотрю что там и как.
Архивация перестала работать из-за того, что скрипт не видел исполняемого файла архиватора. Но резервная копия продолжала создаваться копированием папок с базами до последнего дня. Посмотрел на все это и порадовался — скрипт получился действительно хороший, отработал без сбоев много лет. А я тогда был все-таки догадливым мальчиком и все выполняемые команды очень хорошо прокомментировал.
Немного покопался в системе с командами — в разных версиях серверных систем от мелкомягких некоторые команды могут не выполняться. А потом мне стало лень все это тестировать и я установил xStarter. Программа достаточно известная, алгоритмы работы гибкие, позволяют выполнять множество нужных команд. Давно уже не обновляется, автор, видимо, забросил проект. Есть косяки с некоторыми операциями, но их знание, позволяет их обойти.
В общем, воспользовался этой программой, написал последовательность действий и оставил тестироваться. В первый день или два она по неизвестной причине не запустила создание резервной копии. Затем не смогла подключиться к NAS. Вчера, зайдя на сервер, я обнаружил, что задания нет как такового. Вот это уже удивило, ибо на нескольких других серверах никогда ничего такого не случалось. Написал все заново, установил пароль на редактирование и оставил на ночь.
Утром первым делом пошел смотреть на результат. Бэкап был создан и успешно перенесен на NAS. Добавил в программу отправку мне извещения на электронную почту и отправил номер своей карты для зачисления оплаты за работу.

Отказ от Serviio

Что-то в последнее время стал больше вызывать негативных чувств, чем положительных. Больше всего негатива вызывает тот факт, что если наименование файлов серий в скачанном сериал не соответствует шаблону, то он воспримет все эти файлы как отдельные фильмы и поместит их в соответствующую категорию. То есть после скачивания торрента нужно еще привести имена файлов в соответствие шаблону. Я не пробовал, но у меня очень большое подозрение, что торрент будет закачан еще раз.
Теперь представьте себе, что вы скачали торрент с сериалом, где 10 сезонов и в каждом из них по 20 серий. Имена серий не подпадают под шаблон Serviio, поэтому он их все помещает в папку «Фильмы». Теперь чтобы найти нужный вам фильм, придется основательно поискать. Более того, «фишка» Serviio в том, что он ищет данные о файле в сети, опираясь на название. Если он некорректно определил, что это сериал, он отыщет соответствующие обложку и название для серий. И тот же «Доктор Хаус» будет отображаться как фильм-ужасы с названием «Дом».
Еще одной «фишкой» является возможность добавить онлайн-источники в список. Тут тоже не все хорошо. Без ручного обновления базы медиафайлов, новый источник в списке вы не увидите. Вроде бы не так уж и сложно это сделать, но мы помним, что каждое сканирование вызывает существенную нагрузку на процессор. И внесенные в базу онлайн-источники никоим образом не попадают в список trakt.tv. Иными словами, вы не сможете никак отследить на какой серии вы остановились.
Про проблемы с русской кодировкой я уже писал. Это можно было бы исправить, создав в планировщике задачу, которая будет сканировать, например, mp3-файлы, определять кодировку данных и, если она не совпадает с UTF-8, менять ее на нужную. Но вы себе представляете как это будет выглядеть?
В общем, сдается мне, что я все-таки откажусь от Serviio в пользу minidlna. У него, по крайней мере, я нашел пока что только один недостаток — слишком много папок. И тот частично можно исправить, указав в файле конфигурации нужные параметры.

Установка Serviio

На домашнем сервере установлен Alt Linux, у которого свое видение в отношении сторонних программ. Того serviio в репозитории нет, а попытка установить его с сайта провалилась. Скорее всего, тут сыграло роль недостаточное знание мной линукса. Поэтому, в итоге, был выбран путь попроще, который я с начала не заметил. Речь идет об установке serviio в виде docker.
Для начала скачиваем образ на компьютер:

# docker pull lsiocommunity/serviio

Затем, в соответствии с документацией, запускаем, немного изменив параметры запуска под себя:

docker run -d --restart=always --name=serviio -v /mnt/sda/serviio/config:/config -v /mnt/sda/serviio/media:/media -v /mnt/sda/serviio/transcode:/transcode --net=host lsiocommunity/serviio

По пути /mnt/sda у меня находится второй жесткий диск, на котором располагается всякое «барахло».
Поначалу ни одно из устройств в сети не смогло увидеть serviio. Немного поэкспериментировав, понял, что все дело в том, не был открыт один из портов на сервере. В итоге, пришлось открыть порты 8895, 23423, 23424, 23523, 23524 и 1900. Serviio не видели именно из-за порта 8895.
Ну а дальше все было просто: заходим по адресу http://192.168.1.254:23423/console (где 192.168.1.254 — адрес моего сервера) и настраиваем сервер под свои нужды уже в графическом интерфейсе. Тестировал его работу на трех устройствах: ТВ Samsung UE43M5500AU, телефоне на базе Android и компьютере с установленными Alt Linux и VLC. Все три успешно подключились и смогли проиграть фильм с разрешением FullHD. Тормоза оказались только на телефоне, но с него, как говорится, «взятки гладки».

Небольшой апгрейд

Очередная зарплата ведет к очередным обновлениям

На днях попробовал перенести Transmission и сервер DLNA с роутера на домашний сервер, чтобы немного разгрузить первый. Итогом неожиданно стала сильно возросшая нагрузка на сервер, причем в первых строчках «потребителей» стабильно висели motion и Transmission. Нагрузка была такой, что другие программы периодически не отвечали на запросы, что, в свою очередь, вызвало шквал предупреждений в мой почтовый ящик. Конечно, это меня не устроило, поэтому торрент-клиент был на время отключен. Вызвал небольшое недоумение тот момент, что на роутере Transmission работал, не вызывая такой большой нагрузки на и без того слабый процессор. Лучше был оптимизирован что ли под OpenWrt? Аналогично, судя по отзывам, motion при статичном кадре (то есть когда нет движения) «сжирает» 5-10% процессорного времени. У меня же он поглощал в среднем около 40% на сервере.
Тут должен сделать небольшое отступление. Парой месяцев ранее собирал компьютер для профилактория «Сибиряк», чтобы они могли просматривать камеры видеонаблюдения на ресепшене. Компьютер получился достаточно слабенький, но, если воткнуть в него видеокарту, вполне тянул 8 внутренних камер. Так как видеокарт на складе у меня тогда не было, пришлось воткнуть свою личную. Она у меня все равно просто так лежала. Поставил, настроил, все хорошо. Неделю назад попросили подключить второй монитор на этот компьютер и вывести на него камеры, снимающие вокруг здания. Не вопрос! Заказал второй монитор и видеокарту — свою же нужно «отбить» :-)
Возвращаемся на текущий день. После недолгих раздумий, был куплен новый процессор и кабель HDMI. Процессор был установлен в сервер, что дало достаточно большой прирост мощности, судя по выводу команды top. Также установил туда новую видеокарту, которую приобрел для «Сибиряка». Был вариант установить в профилакторий новую карту, а оттуда забрать свою, но, после сравнительных тестов, оказалось, что установленная мной ранее видюха немного мощней, чем та, которую я приобрел на днях. HDMI кабелем соединил видеорегистратор и телевизор. Были некоторые опасения, что телевизор не увидит картинку с таким нестандартным разрешением, но все обошлось — он просто изменил разрешение на что-то среднее по качеству. В итоге, я теперь могу просматривать камеры на телевизоре в хорошем качестве. Плюс несколько «разгрузил» сервер — теперь нагрузка на процессор стала менее 50%. Правда появился какой-то дребезг от вентилятора, но непонятно от какого — пока снимаешь боковую стенку, он прекращается.

Ранее Ctrl + ↓