Перейти к публикации

Блоги

Настройка чат сервера Matrix Synapse и клиента Riot

Для меня остается открытым вопрос использования бесплатного корпоративного чата, не определился с ним. В данной статье хочу рассмотреть установку и настройку бесплатного чат сервера Matrix Synapse и web клиента для него Riot. В целом, проект мне показался интересным и вполне рабочим, но со своими нюансами. Далее постараюсь подробно раскрыть эту тему.   Информация по Matrix Synapse без проблем гуглится, поэтому не буду подробно рассказывать, что это такое. Кратко пройдемся по основному: Matrix — это открытый протокол для децентрализованной коммуникации. Он может быть реализован в различных серверах и мессенджерах. Synapse — локальный сервер, который работает на протоколе matrix, обеспечивает возможность подключения и общения клиентов. Riot — клиент, который может подключаться к любому серверу, работающему по протоколу matrix, в том числе к synapse. Представлен в виде десктропной или web версии, которую можно установить на свой сервер. Далее мы займемся установкой локальной версии Matrix Synapse для подключения своих клиентов. На этом же сервере разместим веб клиента Riot. Все это дело снабдим ssl сертификатом. В общем, на выходе должны получить готовое бесплатное локальное решение для корпоративного чата. Сразу хочу предупредить, что мое описание не подходит под готовое руководство, которое позволит простым копипастом все настроить. Это руководство именно по matrix и riot, вы должны как минимум уметь настраивать web сервер с nginx, устанавливать сертификаты, проксировать запросы, если вам это понадобится. Установка Matrix Synapse home server Я буду устанавливать чат сервер на CentOS 7. Сразу обращаю внимание, что у меня на сервере будет отключен selinux. Как это сделать, смотрите в статье по настройке сервера, ссылка на которую выше. Для работы synapse server необходим Python 2.7, который в CentOS 7 установлен по-умолчанию. Убедиться в этом можно введя в консоли: # python -V Python 2.7.5 Сервер чата synapse может использовать различные базы данных. По-умолчанию, он работает с SQLite, что подходит только для теста. В продакшене использовать эту базы плохое решение. Но даже для теста у меня не получилось настроить работу с SQLite. По-умолчанию, в CentOS устанавливается очень старая версия базы. При ее использовании возникает ошибка и сервер не работает. Я обновил базу до последней версии, но как оказалось, с ней тоже возникают проблемы. Я почитал на эту тему обсуждения и понял, что проблема распространенная, а не уникальная, поэтому решил в ней не разбираться. Вместо этого сразу буду использовать postgresql, что является самым надежным и разумным выбором. С этого и начнем. Установим postgresql на Centos 7. У меня установлена следующая версия системы: # cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) Устанавливаю соответствующий моей версии репозиторий: # rpm -Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7.4-x86_64/pgdg-centos10-10-2.noarch.rpm Ставим самую свежую на момент написания статьи версию postgresql: # yum install postgresql10-server postgresql10-contrib Инициализируем базу данных: # /usr/pgsql-10/bin/postgresql-10-setup initdb Редактируем конфигурационный файл для включения MD5 аутентификации. # mcedit /var/lib/pgsql/10/data/pg_hba.conf Меняем строки в самом конце: host all all 127.0.0.1/32 ident host all all ::1/128 ident на host all all 127.0.0.1/32 md5 host all all ::1/128 md5 Запускаем PostgreSQL и добавляем в автозагрузку: # systemctl start postgresql-10 # systemctl enable postgresql-10 Заходим в систему под пользователем postgres: # su - postgres Создаем пользователя базы данных: $ createuser synapse Запускаем консольный клиент для работы с базой данных: $ psql Задаем пароль userpass для только что созданного пользователя: # ALTER USER synapse WITH ENCRYPTED password 'userpass'; Создаем базу данных для чат сервера matrix synapse: # CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse; Выходим из консоли управления и учетной записи postgres. # \q # exit Установим еще несколько пакетов, необходимых для взаимодействия synapse с postgresql. # yum install postgresql-devel libpqxx-devel.x86_64 Подготовительные действия выполнили, теперь можно устанавливать сам сервер. Для этого установим необходимые зависимости. # yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel redhat-rpm-config python-virtualenv libffi-devel openssl-devel # yum groupinstall "Development tools" Устанавливаем менеджер пакетов Python — pip. # wget https://bootstrap.pypa.io/get-pip.py # python get-pip.py Создаем виртуальную среду для приложения synapse. Она используется для изоляции отдельного python проекта. Проект будет использовать свои собственные директории и библиотеки, без взаимодействия с глобальным окружением. # virtualenv -p python2.7 ~/.synapse # source ~/.synapse/bin/activate Устанавливаем необходимые пакеты питона. # pip install --upgrade pip virtualenv six packaging appdirs psycopg2 Обновляем setuptools: # pip install --upgrade setuptools Устанавливаем сам сервер matrix synapse. # pip install https://github.com/matrix-org/synapse/tarball/master Перед запуском сервера, необходимо создать файл конфигурации. Делаем это. # cd ~/.synapse # python -m synapse.app.homeserver --server-name chat.serveradmin.ru --config-path homeserver.yaml --generate-config --report-stats=yes Я использую доменное имя для своего чат сервера chat.serveradmin.ru. Обращаю внимание на этот параметр. Он важен, если вы захотите использовать полноценный ssl сертификат и https подключения. Используйте реальное доменное имя, на которое потом будете получать сертификат. После выполнения команды вы получите примерно такой вывод: A config file has been generated in 'homeserver.yaml' for server name 'chat.serveradmin.ru' with corresponding SSL keys and self-signed certificates. Please review this file and customise it to your needs. If this server name is incorrect, you will need to regenerate the SSL certificates По умолчанию, в файле конфигурации homeserver.yaml будет указано использовать базу данных SQLite. Комментируем строки, отвечающие за эту настройку и добавляем параметры для подключения созданной ранее postgresql базы. #database: # The database engine name #name: "sqlite3" # Arguments to pass to the engine #args: # Path to the database #database: "/root/.synapse/homeserver.db" database: name: psycopg2 args: user: synapse password: userpass database: synapse host: localhost cp_min: 5 cp_max: 10 Обращаю внимание на отступы в файле конфигурации. Они принципиально важны. Должно быть именно так, как показано — database без отступа, name, args один пробел с начала строки. Все остальное — два пробела. На этом установка сервера закончена, двигаемся дальше. Использование ssl сертификата Let’s Encrypt Прежде чем начать настройку сервера, установим на него полноценный ssl сертификат. Если вам это не нужно, можно пропустить данный пункт. Просто посмотреть на чат можно и с самописным сертификатом, который мы получили ранее. Но есть один нюанс. Клиент Riot, который я буду использовать для подключения к серверу, не будет работать с самописным сертификатом. Он будет ругаться на него во время подключения. Так что если вы хотите полноценно протестировать работу мессенджера Riot в связке с matrix synapse, придется установить нормальный сертификат. Мой сервер с чатом напрямую не смотрит в интернет. Я буду проксировать все подключения к нему через web сервер, на котором установлен nginx. Поэтому получение сертификата нужно выполнять именно на нем. Если у вас matrix сервер будет смотреть напрямую в интернет, то настраивать получение ssl сертификата надо именно на нем. Прежде чем получить сертификат, нарисовал примерно такой конфиг виртуального домена для nginx. server { listen 80; server_name chat.serveradmin.ru; location /.well-known { root /web/sites/chat.serveradmin.ru/www/; } } Подробно про получение сертификатов Let’s Encrypt я рассказывал в статье по настройке веб сервера. За всеми подробностями можете заглянуть туда. Здесь же без подробных пояснений выполняем необходимые действия. Устанавливаем certbot. # yum install certbot Запускаем запрос сертификата. # certbot certonly При первом запуске на сервере, нужно будет зарегистрировать новую учетную запись на сервер и указать почтовый ящик. Я все это уже ранее делал, так что просто выбираю тип подтверждения домена: 2: Place files in webroot directory (webroot) Далее указываю имя домена: Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): chat.serveradmin.ru Указываю директорию веб сервера: Input the webroot for chat.serveradmin.ru: (Enter 'c' to cancel): /web/sites/chat.serveradmin.ru/www Сертификат получил. Дальше рисую следующий конфиг для виртуального хоста nginx уже для работы по https. upstream matrix { server 77.37.225.129:22991; } server { listen 80; server_name chat.serveradmin.ru; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name chat.serveradmin.ru; ssl on; ssl_certificate /etc/letsencrypt/live/chat.serveradmin.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/chat.serveradmin.ru/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; location /.well-known { root /web/sites/chat.serveradmin.ru/www/; } location / { client_max_body_size 50M; proxy_set_header Connection ""; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_pass http://matrix; } } На сервере 77.37.225.129 сделан проброс внешнего порта 22991 на локальный 8008. На этом порту работает synapse по незащищенному соединению. Редиректить надо именно на этот порт, так как если сделать переадресацию на защищенный порт, который работает со своим сертификатом, будут проблемы при совместной работе этого локального сертификата и внешнего от Let’s Encrypt. С сертификатом и самим сервером synapse разобрались. Дальше я предлагаю сначала установить и настроить бесплатный web клиент для чата — Riot. Если он вам не нужен, можно сразу переходить к настройке самого сервера. Установка клиента Riot Вам не обязательно устанавливать собственную версию веб клиента riot. Вы можете использовать публичный web клиент https://riot.im/app/, и с его помощью подключаться к своему серверу. Для этого надо указать адрес своего сервера во время подключения. Чтобы подключиться через riot, у вас обязательно должно быть настроено подключение по https. По обычному протоколу подключиться не получится, будет ошибка. Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted. или вот такая: Can't connect; check your SSL settings and trust the server Я и так и сяк пробовал, но оказалось проще и быстрее сделать ssl сертификат от Let’s Encrypt, чем разбираться с ошибками. В общем, получайте сертификат любым удобным для вас способом. Для того, чтобы установить собственный web клиент riot достаточно скачать его исходники и разместить их на веб сервере. Последнюю версию можно скачать отсюда — https://github.com/vector-im/riot-web/releases. Далее я использую свежую версию на момент написания статьи. # wget https://github.com/vector-im/riot-web/releases/download/v0.13.3/riot-v0.13.3.tar.gz # tar -xzvf riot-v0.13.3.tar.gz Дальше копируем содержимое распакованной директории в корневую папку веб сервера для домена, который вы назначили. В моем примере это /web/sites/riot.serveradmin.ru/www/. Рисуем примерно такой конфиг для публикации riot в web. # cat /etc/nginx/conf.d/riot.conf server { listen 80; server_name riot.serveradmin.ru; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name riot.serveradmin.ru; root /web/sites/riot.serveradmin.ru/www/; index index.php index.html index.htm; access_log /web/sites/riot.serveradmin.ru/log/access.log main; error_log /web/sites/riot.serveradmin.ru/log/error.log; ssl on; ssl_certificate /etc/letsencrypt/live/riot.serveradmin.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/riot.serveradmin.ru/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; location /.well-known { root /web/sites/riot.serveradmin.ru/www/; } } Перечитываем конфиг nginx и можно заходить по указанному веб адресу для использования своего клиента riot. В директории с клиентом есть конфигурационный файл config.sample.json. Переименуйте его в config.json и измените параметр сервера подключения по-умолчанию. Укажите свой. "default_hs_url": "https://chat.serveradmin.ru", Этого достаточно для использования своего собственного веб клиента riot по настроенному адресу. Настройка matrix synapse сервера Запускаем установленный сервер. # source ~/.synapse/bin/activate # synctl start Если увидели такой же вывод, значит все в порядке. Проверим, на каких портах запустилась служба чата. # netstat -tulnp | grep python tcp 0 0 0.0.0.0:8448 0.0.0.0:* LISTEN 26827/python2.7 tcp 0 0 0.0.0.0:8008 0.0.0.0:* LISTEN 26827/python2.7 Порт 8448 для шифрованных соединений, 8008 для обычных. Создание учетной записи администратора Создадим первую учетную запись администратора. # register_new_matrix_user -c homeserver.yaml http://localhost:8008 New user localpart [root]: admin Password: Confirm password: Make admin [no]: yes Sending registration request... Success. Теперь можно пройти по адресу https://chat.serveradmin.ru и залогиниться в систему под созданным пользователем администратора. Если вы не настраивали проксирование через nginx, то можно зайти напрямую на сервер с чатом по его ip адресу — http://192.168.13.31:8008 В моем случае я вижу ту же самую страницу. В веб интерфейсе нет практически никаких настроек. Вы можете только создать нужные комнаты и изменить некоторые настройки пользователя. Так же вы можете заходить и общаться в чатах, но стандартный серверный интерфейс для этого беден и неинтересен. Позже мы подключимся к серверу более удобным клиентом Riot, а пока изменим некоторые настройки сервера. Включение свободной регистрации Первым делом вам надо решить, будет ли у вас открыта свободная регистрация пользователей, или вы будете каждого создавать вручную. За это отвечает параметр в файле конфигураций homeserver.yaml enable_registration: True Я разрешил свободную регистрацию в своем примере. По-умолчанию она запрещена. Если у вас будет публичный чат-сервер, то обязательно надо настроить каптчу. В synapse уже интегрирована гугловская reCAPTCHA. Чтобы она заработала, вам надо зарегистрировать свой сайт в гугле — https://developers.google.com/recaptcha/, затем указать следующие параметры в конфиге: recaptcha_public_key: PUBLIC_KEY recaptcha_private_key: PRIVATE_KEY enable_registration_captcha: true Public и Private ключи вы получаете после регистрации каптчи для вашего доменного имени в гугле. Настройка почтовых уведомлений Сервер корпоративного чата synapse matrix умеет отправлять почтовые уведомления на различные события. Настройка этих событий выполняется в пользовательских настройках. Но чтобы сервер мог отправлять оповещения, их надо настроить в конфигурации самого сервера. Для этого в конфиге рисуем такие параметры для отправки почты через локальный сервер. email: enable_notifs: true smtp_host: "localhost" smtp_port: 25 notif_from: "Your Friendly %(app)s Home Server <chat@serveradmin.ru>" app_name: Matrix template_dir: res/templates notif_template_html: notif_mail.html notif_template_text: notif_mail.txt notif_for_new_users: True riot_base_url: "https://riot.serveradmin.ru" Перезапускаем сервер и проверяем. # source ~/.synapse/bin/activate # synctl restart Я сразу же получил ошибку на тему того, что файл notif_mail.html не найден. Долго разбирался, в чем может быть проблема. Потом все-таки понял, когда скачал вручную полные исходники сервера из github, что у меня не хватает директории res/templates. Похоже, их просто забыли положить в сборку, которая качается через pip. Так что вам нужно будет сделать то же самое, если этот баг не пофиксят к тому моменту, как вы будете пробовать настраивать свой сервер чата. Я поступил вот так: # cd /usr/src # git clone https://github.com/matrix-org/synapse # mv /usr/src/synapse/res ~/.synapse После этого еще раз перезапускайте сервер и проверяйте. Я очень много времени потратил на отладку оповещений. Так и не понял, как их внятно настроить и когда они будут срабатывать. Вроде в профиле все включаю, ухожу юзером в офлайн, шлю ему в чат письмо. Иногда оповещение приходит через 10 минут, иногда нет. Где настраивается этот интервал в 10 минут — не понял. Вроде в основном конфиге есть некоторые намеки на этот интервал, но явно не указано, что он влияет на время, через которое будет отправлено оповещение на почту. По логике, его бы надо сразу отправлять, если пользователя нет, а не ждать 10 минут. Наверно есть какой-то механизм аккумулирования оповещений, возможно у него какая то своя логика, которую я не понял, поэтому мне не до конца ясно, как работают оповещения. Шаблон самих сообщений по-умолчанию очень корявый, по нему толком не понятно, где и в каком чате произошло событие. Вот пример: Я кое-как восстановил последовательность событий по сообщениям в чатах, но в целом все не очевидно. Этот момент можно самому доработать, шаблоны можно настраивать. Но это нужно разбираться и тратить время. В этом моменте продукт явно не готов в текущем виде к продуктовому использованию. Так же у меня не получилось настроить оповещения через внешние почтовые сервисы. В частности, пробовал через ящик на Яндексе, но мне ничего не приходило. То ли проблема с почтовыми настройками, то ли с самими оповещениями, не разобрался. Дебажить эти моменты неудобно. Лог самого сервера завален спамовыми запросами от web клиентов. В общем, тема неоднозначная и неочевидная. Документации по ней нету. Разобраться, в принципе, можно, по идее то работает, но надо тратить время. Автозагрузка чат сервера со стартом системы Из коробки никакое решение для автостарта сервиса после загрузки системы не предлагается, если вы используете систему centos. Для debian есть готовый пакет, который можно просто установить в систему через apt. В комплекте будет конфиг для systemd. У нас же сервер запускается из домашней директории root в virtualenv, что не очень удобно для настройки автозагрузки. Но все решаемо. Рисуем такой конфиг для systemd по следующему пути — /etc/systemd/system/synapse.service. [Unit] Description=Synapse Matrix homeserver [Service] Type=simple User=root Group=root WorkingDirectory=/root/.synapse ExecStart=/root/.synapse/bin/python -B -u -m synapse.app.homeserver -c /root/.synapse/homeserver.yaml ExecStop=/root/.synapse/bin/synctl stop /root/.synapse/homeserver.yaml [Install] WantedBy=multi-user.target Вообще, не очень правильно, что у нас сервер работает от root. Но так как у меня это тест, я не стал заморачиваться и создавать отдельного юзера и делать все под ним. Да и вспомнил об этом только в самом конце, когда этот конфиг рисовал. Добавляем сервер в автозагрузку и запускаем: # systemctl enable synapse # systemctl start synapse Проверим, все ли в порядке. # systemctl status synapse Не очень удобно, что сервер будет дублировать свои логи в системный лог /var/log/messages, но это уже мелочи. Если реально будет мешать, можно это дело поправить. Заключение Дальше можно создавать комнаты, регистрировать юзеров, менять настройки. Не буду это описывать, каждый сам может сделать, чтобы понять продукт и познакомиться с ним получше. В целом, впечатление у меня осталось неоднозначное. Продукт неплохой, особенно в части заявленного функционала. Я нигде не видел такого же функционала бесплатно. Если у вас много времени и желания, то можно допилить до подходящего уровня, когда будет нормально работать все, что вас интересует. Но мелкие баги и ошибки, с которыми я сталкивался в процессе настройки не вселяют в меня уверенности, что все это будет стабильно работать длительное время. Я на первое место всегда ставлю стабильность и надежность работы, даже в ущерб функционалу. Я не люблю решения, которые требуют много сил на свою поддержку. В итоге они могут оказаться дороже коммерческих продуктов. Уже сейчас могу представить, сколько вылезет ошибок при очередном обновлении. Вот мое краткое резюме по плюсам и минусам synapse matrix на основе того, что я успел попробовать и проверить. Плюсы: Обширный бесплатный функционал. Свой локальный сервер Гибкие настройки email оповещений. Хоть и не очень понятные настройки, но думаю, если разобраться, будет в итоге работать. Контроль набора текста и прочтения сообщения. Вы видите, когда пользователь прочтет отправленное ему сообщение. Это важный и удобный функционал. Тот же mattermost или rocket.chat не предлагают этого в бесплатной версии. Хороший выбор клиентов. Тот же riot есть как приложение для десктопа, для смартфона и web версия через браузер. Звонки между клиентами. Никаких настроек не надо, работают сразу. Минусы: Много багов, с которыми сталкиваешься сразу же во время установки. Забыть положить файлы с шаблонами в дистрибутив и не исправить это. Мне не понятен такой подход. Нету документации, кроме небольшой справки на github. Очень много вопросов на гитхабе, в основном с ошибками. Пропадают сообщения, комнаты, юзеры, кого-то куда-то не пускает и т.д. Думаю со всем этим придется столкнутся после масштабного внедрения. Мало информации в интернете. В русскоязычном интернете вообще ничего, кроме нескольких упоминаний, все только в англоязычном сегменте, да и то в основном краткие руководства по установке. Даже по настройке ничего не нашел, разбирался во всем сам. Для себя сделал такой вывод — буду наблюдать за развитием. Сам нигде внедрять и пробовать не буду. Подожду какое-то время. Если взлетит, хорошо, буду пользоваться. Если будет в таком же состоянии, как сейчас, то увы, не считаю его готовым для внедрения в реально рабочие коллективы. Пока еще сыро.   Статья позаимствована с ресурса serveradmin.ru    

k010v

k010v

Как заработать на своем сайте

Лучшие партнерки для заработка на сайте Push-заработок: CLICKSTAR, REALBIGMEDIA, REDPUSH, PUSHPROFIT Биржи ссылок: GOGETLINKS, MAINLINK, ROTAPOST, SAPE CPA-сети: LEADS, ACTIONPAY, ADMITAD, EPN Тизеры на сайт: BODYCLICK, TEASERNET, DIRECTADVERT Биржи статей: MIRALINKS, WEBARTEX Всплывающая реклама: ADVMAKER, RTB.SAPE, ADVERTUR, Разное: XMLSTOCK, TRAFFIC.SAPE, BESEED, CONTEMA Существует два основных направления как заработать на своем сайте: Продажа ссылок (статей); Размещение рекламы (баннеры, тизеры, контекстная, оплата за действия); При монетизации блога могут применяться эти же принципы заработка. Советую прочитать статьи: Как заработать на варезнике и развлекательном портале Как заработать на киносайте Как заработать на мобильном трафике 1. Заработать сайтом на продаже ссылок (статей) Любой сайт находящийся в индексе Яндекса может зарабатывать деньги на продаже ссылок и статей. Продажа ссылок на сайте — является прекрасным способом заработать на сайте. Этот способ можно отнести к пассивным методом дохода, потому что это не отнимает у Вас никакого личного времени. Весь процесс продажи и получения прибыли происходит автоматически. При правильной продаже ссылок с сайта шанс попасть под фильтры поисковых систем за продажу ссылок минимален. То есть нельзя размещать ссылки на запрещенные тематики. В идеале размещать ссылки только на тематические страницы, но в этом случае мы сильно ограничиваем рынок. Чтобы ссылки активно покупали необходимо наличие страниц сайта в индексе Яндекса или наличие PageRank на страницах сайта. Так же с 2015 года очень сильным фактором стала посещаемость. Чем она выше, тем дороже можно поставить цены. В интернете есть множество бирж ссылок. Я советую Вам работать с самыми крупными и проверенными: GOGETLINKS (продажа вечных ссылок) MAINLINK ROTAPOST SAPE В крупных биржах ссылки всегда будут быстро раскупаться по средним ценам из-за большого количества оптимизаторов в них. В связи с проблемами на ссылочном рынке (спрос сильно просел с 2014 года) я рекомендую регистрироваться сразу в нескольких биржах с целью охватить как можно больше рынок. Сколько можно заработать на сайте в биржах ссылок?
Очень много. Вот конкретные цифры заработка некоторых веб-мастеров на продаже ссылок в Sape: Доход 8000-25000 рублей в день и это только на продаже ссылок в SAPE. Рекомендую почитать: Секреты успешного заработка на sape Зависимость дохода от тИЦ и количества страниц Заработок на продаже вечных ссылок Примечание:
→ В биржах MAINLINK, SAPE - ежедневная оплата за размещение ссылок.
→ В биржах GOGETLINKS, ROTAPOST - оплата за вечные ссылки. Заработать на своем сайте можно не только продавая ссылки, но и размещая статьи. При правильном размещении статей на сайте можно зарабатывать большие деньги, почти без риска санкцией от поисковых систем. Я советую Вам зарабатывать в трех биржах статей: MIRALINKS WEBARTEX ARTICLES.SAPE Это самые крупные биржи. У вас будет много заявок на размещение статьи, а, следовательно, и большой заработок. Сколько можно заработать на сайте, размещая статьи?
Примерно столько же, сколько на продаже ссылок, то есть лучшие вебмастеры получают десятки тысяч рублей. Плюсом продажи ссылок и статей является то, что они не требуют наличие посетителей на сайте (можно хорошо зарабатывать и на сайте где 0 посетителей). При правильном подходе можно получать хорошую и стабильную прибыль, но все же лучше ориентироваться на создание сайтов для людей, а далее уже зарабатывать на размещение рекламы. Как заработать на своем сайте с помощью рекламы читайте ниже. Примечание
Полный список бирж ссылок и смотрите на странице: рейтинг бирж ссылок 2. Заработать на своих сайтах с помощью рекламы Как было сказано выше, чтобы зарабатывать сайтом с помощью рекламы необходима, чтобы ресурс имел посещаемость. Чем больше посетителей будет, тем больше потенциальная прибыль. Существует много видов рекламы, с помощью которых можно монетизировать сайт. Перечислить абсолютно все способы практически невозможно, поскольку их сотни, поэтому перечислим самые основные способы как можно заработать на сайте с помощью рекламы. 2.1. Заработать сайтом на контекстной рекламе Контекстная реклама представляет из себя набор текстовых ссылок с описаниями (все это выглядит в виде объявления). Главная фишка этой рекламы в том, что она показывает пользователю ту рекламу, которая наиболее подходит тематике контента на странице. Например, если пользователь читает страницу про "выбор пластиковых окон", то логично, что он может кликнуть на объявления об их продаже. Заработок на контекстной рекламе очень сильно зависит от аудитории. Например, для сайта развлекательной тематики такая реклама не пойдет, т.к. молодая аудитория больше всего обращает внимание на яркие картинки (тизеры, баннеры), чем на скучные объявления. В рунете есть 2 гиганта контекстной рекламы: Яндекс Директ, Google Adsense. В Яндекс Директе довольно строгие требование к сайтам: от 500 уникальных посетителей, хороший дизайн и контент, поэтому далеко не все сайты проходят модерацию. Google Adsense также имеет множество ограничений наложенных прежде всего на содержание сайта. Есть и альтернативные варианты партнерок, которые подойдут для всех сайтов: CONTEMA RTB.SAPE 2.2. Заработать сайтом на CPA (продажах товаров, услуг) CPA-сеть представляет из себя сервис, где представлено множество офферов. Каждый оффер представляет из себя какую-то цель: продажа товара, регистрация на сайте, отправка заявки и прочее. За каждое такое целенаправленное действие вебмастер получает вознаграждение. При чем есть предложения с очень существенными суммами. Например, за заявку на кредит можно получить сразу 1000 рублей. Неудивительно, что с такими суммами вознаграждения некоторые топовые вебмастера получают за один день несколько миллионов рублей дохода. CPA позволяют даже не имея в наличии своего интернет-магазина получать комиссию с продаж лишь "сливая" трафик на партнерку. Лучше всего монетизируется платежеспособный трафик. Но не все так просто. Для заработка на CPA-сетях потребуется не мало знаний маркетинга. Ведь успех большого заработка кроется в грамотном умение преподать своей аудитории товар/услугу. CPA-сетей очень много. Вот список самых крупных: EPN (партнерка от Алиэкспресс и одновременно сервис для кэшбэка) ADMITAD (включает тысячи офферов для заработка) LEADS (полностью финансовая CPA-сеть: кредиты, микрозаймы, карты, ипотеки) CITYADS (один из самых крупных гигантов в сфере офферов) LEADGID (крупная сеть ориентированная на множество сфер) ADVERTISE (широкий ассортимент офферов) CPA-PRIVATE (продажа дешевых аксессуаров, копий часов и прочее) Советую прочитать следующие статьи Как заработать в CPA-сетях CPA партнерки Какой выбрать оффер в CPA Рейтинг CPA-сетей 2.3. Заработок на Push-уведомления Push-уведомления позволяют зарабатывать на подписках. Делается это через специальные партнерские программы. Этот способ монетизации пока что относится к пассивному белому заработку. Помимо заработка Вы еще наберете и базу подписок, которую можно потом продать (хотя это не хорошо по отношению к пользователям). Также можно будет оповещать свою аудиторию через рассылку о всех новостях на сайте. REALBIGMEDIA CLICKSTAR PUSHPROFIT PUSHADSGURU PROPELLERADS (зарубежная партнерка, выплаты в Webmoney) С недавнего времени открылась новая партнерская программа OFFERGATE, которая относится к классу CPA-сетей, но здесь есть специальный оффер, который позволяет зарабатывать на push уведомлениях. Более подробно про этот способ заработка читайте здесь: Push-уведомления — что это такое и как можно заработать на них 2.4. Заработать сайтом на баннерной рекламе Размещение баннеров на сайте относится к безопасным методам заработка на сайте. Однако сложность заключается в том, что сложно найти рекламодателей. Существуют биржи баннерной рекламы, которые позволят Вам сэкономить время поиска рекламодателя и позволят получать стабильный доход. Однако этих бирж крайне мало. Биржи баннерной рекламы для заработка на сайтах: RTB.SAPE ROTABAN ADVMAKER BODYCLICK 2.5. Заработать сайтом на тизерной рекламе Тизерная реклама — это вид рекламы, которая состоит из картинки и текста. Заработок на тизерах лучше подойдет для динамичных сайтов и сайтов развлекательной тематики. Лучшие вебмастеры зарабатывают на тизерах довольно большие деньги — около 6000 рублей в день (данные взяты с топ10 лучших вебмастеров TEASERNET). Биржи тизерной рекламы для заработка на сайтах: DIRECTADVERT BODYCLICK ACTIONTEASER Примечание
Бирж тизерной рекламы очень много. Советую ознакомиться с рейтингом тизерок. 2.6. Заработать сайтом на файлообменниках В чем смысл заработка на файлообменнике? Вы закачиваете какой-то файл на файлообменник. Потом когда кто-то этот файл захочет скачать, то ему будет предложено два варианта скачивания: платный и бесплатный. Если он выберет платный, то ему придется заплатить денежку за более быструю скорость и Вам капнет от этой денежки приличный процент. А за каждую тысячу бесплатных скачиваний так же платят от 5 до 15 баксов. Советую прочитать: как заработать на файлообменниках. Партнерки файлообменников для заработка на сайтах: INSTALLS COSTACTION 2.7. Заработать сайтом на мобильных партнерках Заработок на sms-партнерках развивается довольно стабильно, поэтому есть смысл зарабатывать на этом. Бирж sms-партнерок много и каждая из них специфична, но всех их объединяет одно, что Вы получаете прибыль от привлеченных пользователей, которые что-то купили, на что-то подписался и тому подобное. Биржи sms-партнерок для заработка на сайтах: ZORKA GGAGENCY MPAY69 RICHWAP Примечание
Советую ознакомиться с рейтингом sms-партнерок. 2.8. Заработать сайтом на попандерах, кликандерах Как показывает практика, попандеры и кликандеры приносят гораздо больше денег, чем тизеры. Размещение попандера и кликандера имеет 1 важный недостаток, о котором Вы сами, наверное, догадываетесь. Попандеры и кликандеры — раздражают посетителей. Подавляющее большинство опрошенных (около 70% - 80%) ответили, что их раздражает попандеры и кликандеры. Но зато размещая попандер и кликандер, Вы будете получать большой заработок с сайта. На попандерах и кликандерах можно заработать очень много. Свыше 10000 рублей в день получают самые лучшие партнеры. Со временем появлятся специальные блокираторы подобной рекламы (Adblock и т.п.), которые снижают прибыль. В целом попадеры являются умирающим видом рекламы, поскольку поисковые системы крайне негативно настроены на этот формат рекламы. Биржи попандеров и кликандеров для заработка на сайтах: ADVMAKER RTB.SAPE ADVERTUR POPUNDER Примечание
Отличной альтернативной для попандеров является новые форматы рекламы: SlideBanner и TopRich. Они почти не вызывают раздражения у пользователей, а поисковые системы лояльно относятся к ним. Такие форматы есть у следующих крупных партнерок: TEASERNET. 2.9. Заработать сайтом на кинопартнерках У Вас есть сайт про кино? Тогда Вы можете зарабатывать большие деньги на своем сайте в биржах кинопартнерок. Для этого необходимо привлекать пользователей, которые хотят купить диск с кино или скачать его. Конечно, чтобы монетизировать сайт кинопартнеркой не обязательно иметь сайт именно про кино. Вы можете привлекать пользователей с сайтов любой тематики. Биржи кинопартнерок для заработка на сайтах: BESEED BUZZOOLA TEASERNET Примечание
Сейчас это почти умирающий подвид для рекламы. 2.10. Прочий заработок для сайта Способов монетизации сайта так много, что охватить их все очень трудно. Перечислю кратко ещё способы как можно заработать сайтом с помощью рекламы: 1. XMLSTOCK — это продажа XML лимитов в Яндексе. Это легальный пассивный заработок, который вообще ничем не грозит сайту и репутации. Более подробно читайте в специальной статье: как заработать на продаже xml лимитов. 2. Оплата за просмотры видео из YouTube от BUZZOOLA и BESEED. Вы можете размещать определенные ролики у себя на сайте и за просмотры получать деньги (750 руб за 1000 просмотров). В систему принимаются сайты от 1000 уникальных посетителей в сутки и сообщества в ВК и FaceBook от 10 тыс. подписчиков. Полный список партнерских программ для заработка на сайте.

k010v

k010v

Сделать резервную копию сайта на яндекс диск

В современном мире все большую ценность получает информация, потеря которой может обернуться серьезными финансовыми расходами. Сайт является ценной информацией, резервную копию которого, или просто бэкап, мы сделаем в этой статье на примере wordpress и разместим на яндекс диске. Я рассмотрю вариант автоматизации процесса, который придумал для своих нужд и использую достаточно давно и успешно.   Двигаться будем поэтапно. Сначала просто рассмотрим вариант бэкапа непосредственно файлов сайта и базы данных. А затем полностью ответим на вопрос о том как сделать регулярную резервную копию сайта на wordpress .   Скрипт для архива файлов сайта   Тут я не изобретал велосипеда, а воспользовался стандартным способом архивирования файлов — архиватором tar. Все комментарии и пояснения напишу сразу в скрипте: #!/bin/sh # Задаем переменные # Текущая дата в формате 2015-09-29_04-10 date_time=`date +"%Y-%m-%d_%H-%M"` # Куда размещаем backup bk_dir='/mnt/backup/site1.ru' # Директория на уровень выше той, где лежат файлы inf_dir='/web/sites/site1.ru/' # Название непосредственно директории с файлами dir_to_bk='www' # Создание архива /usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk На выходе после работы скрипта имеем папку с именем www_2015-09-29_04-10.tar.gz, внутри которой будет лежать папка www со всем содержимым. Изначально, эта папка располагалась по адресу /web/sites/site1.ru/www. Здесь я применил tar с параметром -С для того, чтобы в архиве не было точного пути /web/sites/site1.ru, а была только папка www. Мне просто так удобнее. Можно пользоваться отдельно этим скриптом для создания архивов файлов, не обязательно сайта. Кладем его в cron и получаем регулярную архивацию. Скрипт для бэкапа базы данных   Теперь сделаем скрипт для резервной копии базы данных. Тут тоже ничего особенного, использую стандартное средство mysqldamp: #!/bin/sh # Задаем переменные # Текущая дата в формате 2015-09-29_04-10 date_time=`date +"%Y-%m-%d_%H-%M"` # Куда размещаем backup bk_dir='/mnt/backup/site1.ru' # Пользователь базы данных user='user1' # Пароль пользователя password='pass1' # Имя базы для бэкапа bd_name='bd1' # Выгружаем базу /usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz На выходе имеем файл с дампом базы mysql_2015-09-29_04-10.sql.gz. Дамп хранится в текстовом формате, можно открывать и редактировать любым редактором.   Подключение яндекс диска в CentOS 7 по webdav   Существует достаточно удобный и бесплатный сервис Яндекс.Диск, который может использовать любой желающий. Бесплатно дается не так много места, но для бэкапа сайта на wordpress хватит. К слову, у меня с помощью всевозможных акций бесплатно доступно 368 ГБ:       Яндекс.Диск можно подключить с помощью webdav. У меня в качестве сервера выступает CentOS 7, я расскажу как подмонтировать в ней. Первым делом подключаем репозиторий epel. Затем устанавливаем пакет davfs2: # yum -y install davfs2 Теперь пробуем подмонтировать диск: # mkdir /mnt/yadisk # mount -t davfs https://webdav.yandex.ru /mnt/yadisk/ Please enter the username to authenticate with server https://webdav.yandex.ru or hit enter for none. Username: Please enter the password to authenticate user zeroxzed@yandex.ru with server https://webdav.yandex.ru or hit enter for none. Password: /sbin/mount.davfs: Warning: can't write entry into mtab, but will mount the file system anyway Яндекс.Диск смонтирован в папку /mnt/yadisk. Чтобы автоматизировать процесс архивации и не вводить каждый раз имя пользователя и пароль, отредактируем файл /etc/davfs2/secrets, добавив в конец новую строку с именем пользователя и паролем: # mcedit  /etc/davfs2/secrets /mnt/yadisk/ user@yandex.ru password /mnt/yadisk/ точка монтирования user@yandex.ru имя пользователя яндекса password пароль пользователя Теперь при монтировании диска никаких вопросов задаваться не будет. Можно добавить подключение яндекс диска в fstab, чтобы он монтировался автоматически при загрузке, но я считаю это лишним. Я подключаю и отключаю диск в скрипте бэкапа. Если же вы хотите его монтировать автоматически, добавьте в fstab: https://webdav.yandex.ru /mnt/yadisk davfs rw,user,_netdev   0   0   Автоматизация архивации сайта   По отдельности разобрали все элементы создания резервной копии сайта, теперь пришел черед собрать все это в одном месте. Я использую следующую схему бэкапа сайта: Папка day, где хранится 7 архивов сайта за последние 7 дней. Папка week, где хранятся 4 бэкапа за последние 4 недели. Папка month, где хранятся все резервные копии сайта за все время, эту папку я автоматически не очищаю. С такой схемой мы всегда имеем под рукой 7 последних архивов, недельные архивы текущего месяца и архив за каждый месяц на всякий случай. Пару раз меня такая схема выручала, когда нужно было что-то достать из бэкапа недельной давности, к примеру. Привожу 3 полных скрипта по созданию резервной копии сайта wordpress, именно этот движок я чаще всего использую, но реально можно бэкапить любой сайт — joomla, drupal, modx и др. Принципиального значения cms или фреймворк не имеет. Скрипт ежедневного бэкапа сайта backup-day.sh: #!/bin/sh # Задаем переменные # Текущая дата в формате 2015-09-29_04-10 date_time=`date +"%Y-%m-%d_%H-%M"` # Куда размещаем backup bk_dir='/mnt/yadisk/site1.ru/day' # Директория для архива inf_dir='/web/sites/site1.ru/' # Название непосредственно директории с файлами dir_to_bk='www' # Пользователь базы данных user='user1' # Пароль пользователя password='pass1' # Имя базы для бэкапа bd_name='bd1' # Монтируем яндекс.диск mount -t davfs https://webdav.yandex.ru /mnt/yadisk/ # Создание архива исходников /usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk # Выгружаем базу данных /usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz # Удаляем архивы старше 7-ми дней /usr/bin/find $bk_dir -type f -mtime +7 -exec rm {} \; # Отключаем яндекс.диск umount /mnt/yadisk Скрипт еженедельного бэкапа сайта backup-week.sh: #!/bin/sh # Задаем переменные # Текущая дата в формате 2015-09-29_04-10 date_time=`date +"%Y-%m-%d_%H-%M"` # Куда размещаем backup bk_dir='/mnt/yadisk/site1.ru/weeek' # Директория для архива inf_dir='/web/sites/site1.ru/' # Название непосредственно директории с файлами dir_to_bk='www' # Пользователь базы данных user='user1' # Пароль пользователя password='pass1' # Имя базы для бэкапа bd_name='bd1' # Монтируем яндекс.диск mount -t davfs https://webdav.yandex.ru /mnt/yadisk/ # Создание архива исходников /usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk # Выгружаем базу данных /usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz # Удаляем архивы старше 30-ти дней /usr/bin/find $bk_dir -type f -mtime +30 -exec rm {} \; # Отключаем яндекс.диск umount /mnt/yadisk Скрипт ежемесячного бэкапа сайта backup-month.sh: #!/bin/sh # Задаем переменные # Текущая дата в формате 2015-09-29_04-10 date_time=`date +"%Y-%m-%d_%H-%M"` # Куда размещаем backup bk_dir='/mnt/yadisk/site1.ru/month' # Директория для архива inf_dir='/web/sites/site1.ru/' # Название непосредственно директории с файлами dir_to_bk='www' # Пользователь базы данных user='user1' # Пароль пользователя password='pass1' # Имя базы для бэкапа bd_name='bd1' # Монтируем яндекс.диск mount -t davfs https://webdav.yandex.ru /mnt/yadisk/ # Создание архива исходников /usr/bin/tar -czvf $bk_dir/www_$date_time.tar.gz -C $inf_dir $dir_to_bk # Выгружаем базу данных /usr/bin/mysqldump --opt -v --databases $bd_name -u$user -p$password | /usr/bin/gzip -c > $bk_dir/mysql_$date_time.sql.gz # Отключаем яндекс.диск umount /mnt/yadisk Не забудьте создать директорию /mnt/yadisk/site1.ru на яндекс диске, а в ней еще 3 папки: day, week, month: # cd /mnt/yadisk/site1.ru && mkdir day week month   Теперь для автоматизации добавляем эти 3 файла в cron: # mcedit /etc/crontab # site backup to yandex.disk # ежедневно в 4:10 10 4 * * * root /root/bin/backup-day.sh >/dev/null 2>&1 # еженедельно в 4:20 в воскресенье 20 4 * * 0 root /root/bin/backup-week.sh >/dev/null 2>&1 # ежемесячно в 4:30 1-го числа месяца 30 4 1 * * root /root/bin/backup-month.sh >/dev/null 2>&1 Все, наш wordpress надежно забэкаплен. По идее, сюда нужно прикрутить оповещение на почту, но у меня всю руки не доходят это сделать. Да и за несколько месяцев использования у меня не было ни одного сбоя.   Восстановление сайта wordpress из резервной копии   Теперь рассмотрим вариант, когда вам необходимо восстановить сайт из резервной копии. Для этого нам понадобятся оба архива: исходники и база данных. Разархивировать в принципе можно где угодно. В windows архивы открываются бесплатным архиватором 7zip. Дамп базы данных в обычном текстовом формате, его можно открыть блокнотом, скопировать и вставить в phpmyadmin.   Так что вариантов восстановления может быть много, этим мне и нравится такой подход. Все файлы в открытом виде, с ними можно работать любыми подручными средствами. Вот пример того, как извлечь файлы из архива в консоли сервера. Разархивируем каталог www из бэкапа: # tar -xzvf www_2015-10-01_04-10.tar.gz Файлы извлечены в папку www. Теперь их можно скопировать в папку с сайтом. Для восстановления базы данных поступаем следующим образом. Сначала распакуем архив: # gunzip mysql_2015-10-01_04-10.sql.gz Теперь зальем дамп в базу данных: # mysql --host=localhost --user=user1 --password=pass1 bd1; MariaDB [(none)]> source mysql_2015-10-01_04-10.sql; Все, база данных восстановлена.   Необходимо учесть, что база будет восстановлена в базу с оригинальным именем и заменит ее содержимое, если таковая на сервере есть. Чтобы восстановить базу в другую, необходимо отредактировать начало дампа и заменить там название базы на новое. Если восстановление происходит на другом сервере, то это не имеет значения. Заключение Итак, мы рассмотрели варианты создания резервных копий сайта и базы данных на примере движка wordpress. При этом использовали только стандартные средства сервера. В качестве примера мы использовали приемник для хранения копий Яндекс.Диск, но ничто не мешает адаптировать его под любой другой. Это может быть отдельный жесткий или внешний диск, другое облачное хранилище данных, которое можно подмонтировать к серверу. Схема создания бэкапа позволяет откатиться практически на неограниченное время назад. Глубину архивов вы можете сами задавать, изменяя параметр mtime в скрипте. Можно хранить, к примеру, ежедневный архив не 7 дней, как делаю я, а 30, если у вас есть такая потребность. Так что пробуйте, адаптируйте под себя. Если есть какие-то замечания по работе, ошибки или предложения по улучшению функционала, делитесь своими мыслями в комментариях, буду рад их услышать.   Статья позаимствована с ресурса serveradmin.ru

k010v

k010v

Базовая настройка фаервола в Микротик

Сегодня хочу поподробнее раскрыть тему защиты роутеров популярной латвийской марки. Речь пойдет о базовой настройке Firewall в Mikrotik для обеспечения безопасности и удобства. Статья на эту тему была написана уже давно, но я решил ее полностью переделать и актуализировать.     Введение   Долгое время у меня была опубликована статья про простую настройку файрвола на микротик. Там были перечислены базовые правила для ограничения доступа к роутеру, и тем не менее, статья собрала более 200 тыс. просмотров. Некоторое время назад я обновил и актуализировал статью про базовую настройку mikrotik. В комментариях многие люди пеняли мне на то, что я совсем не уделил внимание настройке фаервола. Мне не захотелось мешать все в кучу, поэтому я пишу отдельную подробную статью на эту тему, а в настройке роутера оставлю ссылку на нее. Итак, будем считать, что вы уже настроили роутер примерно так же, как я описал в своей статье. Есть локальная сеть, которая будет выходить в интернет через микротик. И есть сам микротик, который хочется защитить, ограничив доступ для всего лишнего, разрешив только то, что нам нужно. 192.168.88.1 локальный адрес микротика bridge название бриджа, в который объединены все интерфейсы для локальной сети ether1 интерфейс для внешнего подключения WAN 192.168.88.0/24 локальная сеть, которую обслуживает микротик   Default firewall в Mikrotik Если вы используете дефолтную конфигурацию роутера, то она по-умолчанию имеет стандартные правила firewall. Привожу список стандартных правил (rules) с комментариями. Напоминаю, что экспорт правил firewall в mikrotik можно выполнить следующей командой: >> ip firewall export file=rules Вот список стандартных правил: /ip firewall filter add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp add action=drop chain=input comment="defconf: drop all not coming from LAN" in-interface-list=!LAN add action=accept chain=forward comment="defconf: accept in ipsec policy" ipsec-policy=in,ipsec add action=accept chain=forward comment="defconf: accept out ipsec policy" ipsec-policy=out,ipsec add action=fasttrack-connection chain=forward comment="defconf: fasttrack" connection-state=established,related add action=accept chain=forward comment="defconf: accept established,related, untracked" connection-state=established,related,untracked add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid add action=drop chain=forward comment="defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new in-interface-list=WAN /ip firewall nat add action=masquerade chain=srcnat comment="defconf: masquerade" ipsec-policy=out,none out-interface-list=WAN В принципе, по приведенным комментариям примерно понятно, что тут происходит. Дропаются все входящие и транзитные соединения не из локальной сети, разрешен пинг — icmp, разрешен ipsec, разрешены установленные соединения. Все. Ну и настроен NAT через WAN интерфейс. Во многих случаях данных правил по-умолчанию может быть достаточно обычному пользователю, который просто настроил маршрутизатор дома для выхода в интернет. Берите на вооружение, если вам от маршрутизатора больше ничего не надо.   Firewall и базовая настройка безопасности   Давайте теперь немного порассуждаем, зачем нужен файрвол и какие вопросы он решает. Причем не только в контексте микротика, а вообще. Сейчас каждый доморощенный админ рассказывает, как важно всегда настраивать firewall, иногда даже не понимая, для чего он нужен. Лично я не сторонник создания лишних сущностей, поэтому там где межсетевой экран не нужен, я его не настраиваю. Сетевой экран позволяет настраивать доступ как к самому шлюзу, так и к ресурсам за ним. Допустим, у вас не запущено никаких сервисов на роутере, и нет никакого доступа извне в локальную сеть. У вас есть какая-то служба на шлюзе, с помощью которой к нему подключаются и управляют (ssh, winbox, http и т.д.), причем ограничение доступа к этой службе настраивать не планируется. Вопрос — зачем вам в таком случае настраивать фаервол? Что он будет ограничивать и какие правила туда писать? В таком случае вам будет достаточно отключить все сервисы на роутере, которые слушают подключения из вне и все. На самом деле такой кейс очень популярный дома или в мелких организациях, где нет постоянного админа. Просто настроен какой-то роутер, поднят NAT и все. Я понимаю, что не правильно не настраивать ограничения на доступ к управлению, но я рассказываю, как часто бывает. То есть firewall должен решать конкретную задачу по ограничению доступа к ресурсам, а не существовать просто так, чтобы был. Еще популярны случаи, когда настроена куча правил, а в конце все равно стоит accept для всех подключений. Такие ляпы я сам иногда делал, когда отлаживал где-то работу сервиса и забывал потом вернуть обратно ограничения. Фаервол вроде настроен, но реально его нет. Если отключить — ничего не изменится. К чему я все это написал? К тому, что прежде чем настраивать firewall, надо определиться с тем, для чего мы это делаем. Какие разрешения или ограничения и для кого мы будем вводить. После этого можно переходить к настройке. Я рекомендую первым правилом при любой настройке firewall ставить разрешение на подключение к управлению устройством. Этим вы подстрахуете себя, если где-то дальше ошибетесь и заблокируете доступ к устройству в одном из правил. В своем примере я буду настраивать межсетевой экран на микротике, находясь в локальной сети. Вам всегда советую поступать так же. Есть старая админская примета — удаленная настройка файрвола к дальнему пути. Идем в раздел IP -> Firewall. Первая вкладка Filter Rules то, что нам надо. Если делаете настройку firewall с нуля, то там должно быть пусто. Добавляем новое правило. По идее, надо еще заглянуть во вкладку action, но в данном случае не обязательно, так как там по-умолчанию и так выставляется нужное нам значение accept. Дальше разрешаем уже установленные и связанные входящие соединения. Для этого создаем следующее правило. Не забывайте писать комментарии для всех правил. Так вам проще самим будет. Через пол года уже позабудете сами, что настраивали и зачем. Не говоря уже о том, что кто-то другой будет разбираться в ваших правилах. Теперь сделаем запрещающее правило, которое будет блокировать все входящие соединения через WAN интерфейс. В моем случае ether1. Данными правилами мы заблокировали все входящие соединения из интернета и оставили доступ из локальной сети. Далее создадим минимальный набор правил для транзитных соединений из цепочки forward. Первым правилом в фаерволе микротик для транзитного трафика будет правило с использованием фирменной технологии Fasttrack. Подробно о том, что это такое читайте в официальной wiki по ссылке. Если кратко, то данная технология экономит ресурсы процессора, за счет упрощенной обработки пакетов, к которым не надо применять дополнительных правил фаервола, ставить его в очереди и т.д. Это подойдет для большинства пользователей, у которых микротик это просто шлюз в интернет с небольшим набором простых правил в firewall. При этом транзитный трафик никак дополнительно не обрабатывается и не фильтруется. Возьмем примеры этих правил из дефолтной конфигурации файрвола. Добавляем 2 новых правил для цепочки forward. В первом action выбираем fasttrack connection, во втором accept для established и related подключений. Дальше по примеру дефолтной конфигурации, запретим и все invalid подключения. В завершении запретим все подключения из WAN в LAN. Подведем краткий итог того, что получилось. Вот самый простой, минимальный набор правил firewall в mikrotik для базового случая: Запрещены все входящие подключения, в том числе ответы на пинги. Включена технология fasttrack для соединений из локальной сети. При этом из локальной сети разрешены абсолютно все подключения, без ограничений. То есть это пример типовой безопасной конфигурации для микротик в роли обычного шлюза в интернет для небольшого офиса или дома. Но если firewall оставить как есть в таком виде, то раздачи интернета для локальной сети не будет. Для этого надо настроить NAT. Это сделать не сложно, рассказываю как.   Настройка NAT в микротик Для того, чтобы пользователи локальной сети, которую обслуживает роутер на микротике, смогли получить доступ в интернет, настроим на mikrotik NAT. Для этого идем в раздел IP -> Firewall, вкладка NAT и добавляем простое правило. Действие указываем masquerade. Все, NAT настроен, пользователи могут выходить в интернет.   Проброс портов Покажу на простом примере, как при настроенном NAT и включенном фаерволе выполнить проброс порта в mikrotik для доступа к службе в локальной сети. Пробросить порт можно в той же вкладке NAT в настройках Firewall. Для примера выполним проброс порта rdp из интернета через микротик. Извне будет открыт порт 41221, а проброс будет идти на локальный адрес 192.168.88.10 и порт 3389. Я настоятельно не рекомендую открывать доступ к rdp порту для всего интернета. Лично имел печальный опыт в такой ситуации. Обязательно настройте ограничение доступа по ip к этому порту, если такое возможно. Если невозможно, то не пробрасывайте порт, а сделайте доступ по vpn. Ограничение по ip делается просто. Добавляем еще один параметр в правило проброса порта. Если используется список ip адресов, который будет меняться, проще сразу в правиле проброса указать на список, а потом править уже сам список. Для этого его надо создать. Создать список ip можно на вкладке Address List. Добавим список: Возвращаемся в правило проброса порта, переходим на вкладку Advanced и добавляем указанный список в Src. Adress List Теперь для изменения списка доступа к проброшенному порту не надо трогать само правило. Достаточно отредактировать список.   Защита подключения через winbox Расскажу отдельно о том, как защитить подключение по winbox с помощью firewall. В микротиках время от времени находят критические уязвимости. Единственным способом надежно от них защититься — ограничить доступ к winbox с помощью фаервола. В приведенном выше списке правил для фаервола заблокированы все внешние подключения полностью. Это самый безопасный вариант настроек. Иногда нужен доступ к удаленному управлению. Самое безопасное в этом случае настроить vpn сервер на микротике и подключаться через vpn. Не всегда это уместно. Ограничение доступа по ip, если такое подходит, будет не менее безопасно. Для начала создадим список IP, которым будет разрешено подключаться удаленно к winbox. Добавляем правило в Firewall. Оно должно быть выше правила, где блокируются все входящие соединения. В вкладке Advanced указываем список: В разделе action ставим accept. Итоговый список правил должен быть таким. Так мы обезопасили удаленный доступ через winbox. Считаю это самым простым и безопасным способом защиты микротика. Если есть возможность органичений по ip, всегда используйте. Это универсальный способ, годный для любого случая и системы, не только в отношении микротика. В современном мире ИТ постоянно находят уязвимости. Невозможно всегда оперативно ставить обновления. Зачастую, эти обновления могут либо нарушить работу системы, либо содержать другие уязвимости. Только ограничение доступа к службам и системам позволяет более ли менее надежно защититься и спать спокойно, не торопясь обновляться со всех ног при обнаружении очередной критической уязвмости.   Как на микротике отключить файрвол Для того, чтобы полностью отключить Firewall на микротике, достаточно просто отключить или удалить все правила в списке. По-умолчанию, в mikrotik используются разрешающие правила. Все, что не запрещено — разрешено. То есть если у вас нет ни одного активного правила, можно считать, что файрвол отключен, так как он пропускает все соединения без ограничений. Вот пример отключенного фаервола на микротике 🙂 Итоговый список правил, настроенный по этой статье, получился вот такой: /ip firewall address-list add address=77.88.0.81 list=rdp_access add address=77.88.8.8 list=rdp_access add address=8.8.8.8 list=rdp_access add address=1.1.1.1 list=winbox_remote add address=2.2.2.2 list=winbox_remote /ip firewall filter add action=accept chain=input comment="local accept" in-interface=bridge add action=accept chain=input comment="established and related accept" connection-state=established,related add action=accept chain=input comment=winbox_accept dst-port=8291 in-interface=ether1 protocol=tcp src-address-list=winbox_remote add action=drop chain=input comment="all input block" in-interface=ether1 add action=fasttrack-connection chain=forward comment=fasttrack connection-state=established,related add action=accept chain=forward comment="established and related accept" connection-state=established,related add action=drop chain=forward comment="drop invalid" connection-state=invalid add action=drop chain=forward comment="drop WAN -> LAN" in-interface=ether1 out-interface=bridge /ip firewall nat add action=masquerade chain=srcnat out-interface=ether1 add action=dst-nat chain=dstnat dst-port=41221 in-interface=ether1 protocol=tcp src-address-list=rdp_access to-addresses=192.168.88.10 to-ports=3389   Статья позаимствована с ресурса serveradmin.ru      

k010v

k010v

Как настроить решение резервного копирования Bareos на CentOS 7

Bareos (Backup Archiving Recovery Open Sourced) — надежное межсетевое программное обеспечение с открытым исходным кодом для резервного копирования, архивирования и восстановления данных во всех распространенных операционных системах (Linux, UN * X, MacOS, Windows). С файлом Bareos или, скорее, деревьями каталогов можно настроить централизованно, а затем автоматически и периодически сохранять в виде полной, дифференциальной или инкрементной резервной копии на жесткие диски, ленточные накопители или в облако. Он также предлагает свой собственный веб-интерфейс, используя администраторов веб-интерфейса или пользователи могут выбирать файлы для восстановления. Благодаря открытым интерфейсам Bareos можно легко расширить с помощью сценариев или плагинов, например. для запуска команд приложения до, во время или после резервного копирования. Плагины для резервного копирования MySQL / MariaDB, LDAP, MSSQL или VMWare Snapshots поэтапно уже возможны с помощью bareos. Компоненты Bareos Базовая структура Bareos состоит из блока управления, Резервного директора, одного или нескольких демонов хранилища и демонов Файла на клиентах для резервного копирования. Демон файлов отвечает за резервное копирование данных с клиента или восстановление данных на клиенте. Этот демон постоянно работает на клиентах и выполняет инструкции Директора. Директор — это контроллер: он содержит всю логику и учитывает большинство настроек. Установка Bareos Backup: На RHEL 7 и CentOS 7 bareos доступны через дополнительный канал RHEL Server. На CentOS 7 и Fedora он включен в основной репозиторий, который вы можете использовать с помощью команды ниже. ? # wget -O /etc/yum.repos.d/bareos.repo http://download.bareos.org/bareos/release/latest/CentOS_7/bareos.repo   После загрузки репозитория используйте команду ниже для установки Bareos вместе с зависимыми пакетами, используя приведенную ниже команду.   ?   # yum install bareos bareos-database-mysql   Нажмите кнопку «y», чтобы продолжить установку следующих отображаемых пакетов.     У вас есть возможность выбрать mysql-базу данных или postgresql вместе с bareos, но в этой статье мы используем базу данных MySQL. Подготовить базу данных Bareos: Прежде всего убедитесь, что ваша предпочтительная база данных должна быть установлена и запущена. Самый простой способ настроить базу данных — использовать системную учетную запись, которая имеет свободный доступ к базе данных без доступа к базе данных. Часто это root пользователя для MySQL или пользовательских postgres для PostgreSQL. Давайте запустим следующую команду для установки MySQL / MariaDB на вашем сервере CentOS 7, если она еще не установлена в вашей системе, а затем запустите ее службы. ? # yum install mariadb-server ? # systemctl start mariadb.service ? # systemctl enable mariadb.service Убедитесь, что «root» имеет прямой доступ к локальному серверу MySQL. Проверьте, не подключена ли команда mysql к базе данных без определения пароля. Это значение по умолчанию для RedHat и SUSE. На других системах (Debian, Ubuntu) создайте файл ‘~ / .my.cnf’ с информацией об аутентификации, как показано ниже. [client]
host=localhost
user=root
password=YourPasswordForAccessingMysqlAsRoot Давайте настроим таблицы базы данных Bareos следующими командами.   ? #/usr/lib/bareos/scripts/create_bareos_database #/usr/lib/bareos/scripts/make_bareos_tables #/usr/lib/bareos/scripts/grant_bareos_privileges Запуск демонов bareos ? # systemctl start bareos-dir # systemctl start bareos-sd # systemctl start bareos-fd После запуска служб вам в конечном итоге придется разрешить доступ к портам 9101-9103, которые используются Bareos. После этого вы сможете получить доступ к директору, используя команду «bconsole». ? #bconsole Connecting to Director ksh-cent7:9101
1000 OK: ksh-cent7-dir Version: 15.2.2 (16 November 2017)
Enter a period to cancel a command.
* Установка Bareos Webui: Bareos-webui является частью проекта Bareos и доступен для ряда платформ. Ниже приведены основные системные требования для Bareos-webui: Рабочая среда Bareos, Bareos> = 15.2.2, включая режим JSON API, см. Jansson. Платформа Bareos, где предоставляются пакеты bareos-webui. Веб-сервер Apache 2.x с mod-rewrite, mod-php5 и mod-setenv PHP> = 5.3.3 Zend Framework 2.2.x или новее. Примечание. К сожалению, не все дистрибутивы для пакета Zend Framework 2. В следующем списке показано, где получить пакет Zend Framework 2. Выполните приведенную ниже команду, чтобы установить Apache и PHP на ваш сервер CentOS 7. ? # yum install httpd php php-cli php-common   Добавьте репозиторий Bareos, соответствующий вашему дистрибутиву Linux, здесь мы будем использовать команду «yum» для установки последней версии epel.   ? # yum install epel-release   Теперь вы можете установить Barios-webui с помощью команды ниже, которая будет устанавливать barios-webui вместе с необходимыми пакетами.   ? # yum install bareos-webui     Barios-webui конфигурация: Пакет bareos-webui предоставляет консоль по умолчанию и профильную конфигурацию в разделе ‘/etc/bareos/bareos-dir.d/’, которые должны быть включены в нижней части вашего ‘/etc/bareos/bareos-dir.conf’ и отредактированный в соответствии с вашими потребностями. ? # echo "@/etc/bareos/bareos-dir.d/webui-consoles.conf" &gt;&gt; /etc/bareos/bareos-dir.conf [/code</pre> </div> </div> </div> <div> <div class="codecolorer-container text blackboard"> <div class="text codecolorer"> <pre> # echo "@/etc/bareos/bareos-dir.d/webui-profiles.conf" &gt;&gt; /etc/bareos/bareos-dir.conf    Вы можете просмотреть файлы по умолчанию «webui-consoles.conf» и «webui-profiles.conf», используя команду «cat» или «vim».   ? # vim /etc/bareos/bareos-dir.d/webui-consoles.conf</div> <div></div> <div># vim /etc/bareos/bareos-dir.d/webui-profiles.conf   Конфигурации веб-сервера Apache: Конфигурация по умолчанию предоставляется в файле /etc/httpd/conf.d/bareos-webui.conf для настройки конфигураций веб-сервера Apache для Bareos-webui. Необходимые модули Apache, setenv, rewrite и php активируются с помощью сценария post postinstall. Вам просто нужно перезапустить веб-сервер apache вручную. Затем сконфигурируйте своих директоров в '/etc/bareos-webui/directors.ini' в соответствии с вашими настройками, которые вы выбрали на предыдущих шагах. Конфигурация file '/etc/bareos-webui/directors.ini' должна выглядеть примерно так. ? # vim /etc/bareos-webui/directors.ini   ? ; Section localhost-dir ; [localhost-dir]   ; Enable or disable section. Possible values are “yes” or “no”, the default is “yes”. enabled = “yes” ; Fill in the IP-Address or FQDN of you director. diraddress = “localhost” ; Default value is 9101 dirport = 9101 ; Section another-host-dir ; [another-host-dir] enabled = “no” diraddress = “” dirport = 9101 Сохраните и закройте файл конфигурации, а затем перезапустите веб-службы Apache. ?   #systemctl restart httpd</div> </div> <div class="codecolorer-container text blackboard"> <div class="text codecolorer"># systemctl restart bareos-dir     Для установки bareos-webui в системе с включенным SELinux необходимо выполнить следующие дополнительные шаги, чтобы разрешить HTTP-скрипты и модули подключаться к сети.   ? # setsebool -P httpd_can_network_connect on   Доступ к Bareos-webui: Теперь откройте свой браузер, выбрав FQDN или IP-адрес вашего сервера, предоставленный вашими учетными данными, определенными в вашей конфигурации консоли Bareos Director Console.   ? http://your_servers_ip/bareos-webui/   login: user1
passwd: CHANGEME   Вы можете изменить эти учетные данные в файле '/etc/bareos/bareos-dir.d/webui-consoles.conf'.   После предоставления успешных учетных данных для входа в систему вы будете перенаправлены на свою панель управления, где вы можете увидеть старые текущие и предыдущие резервные копии.   Использование bconsole: Bconsole запускает программу Bareos Console, как только вы подключились к bconsole, введите «help», чтобы просмотреть список доступных команд.   Ниже приведены наиболее полезные команды из приведенного выше списка.   ? * show filesets ? * status dir ? * status client ? * status storage   Теперь запустите резервное задание, используя команду «run», как показано ниже:   ? *run   Вывод: Мы успешно установили и настроили решение Bareos Backup на CentOS 7. Bareos - это решение для резервного копирования с открытым исходным кодом с его замечательными функциями. Bareos - это форк  Bacula с предложениями по созданию готовых бинарных файлов для всех основных дистрибутивов Linux и Windows. Он также включает в себя множество новых функций, таких как «Пассивные клиенты», «Копирование заданий» между разными дисками хранилища, резервное копирование NDMP и т. д. Все разрабатывается как Open Source. 

k010v

k010v

Установка Bind 9 (named) в CentOS 7

Одним из важных сервисов, обеспечивающих функционирование современного интернета является сервис по преобразованию имени сайта в ip адрес. Настройкой реализации сервиса DNS мы займемся в этой статье на примере настройки Bind 9 (named) на сервере под управлением CentOS 7. Мы подготовим минимально необходимый базовый функционал и заглянем немного глубже в настройки логирования.   Что такое DNS сервер BIND   Bind — самая распространенная на текущий день реализация ДНС сервера, которая обеспечивает преобразование IP адресов в dns-имена и наоборот. Его также называют named, например в Freebsd. Судя по информации из Википедии, сейчас 10 из 13 корневых ДНС серверов интернета работают на bind. Он установлен из коробки практически во всех linux дистрибутивах. Я рассмотрю его установку на сервер CentOS 7.   Устанавливаем Bind 9 (named) в CentOS 7 Первым делом проверим, установлен ли у нас днс сервер в системе: # rpm -qa bind* bind-libs-lite-9.9.4-14.el7.x86_64 bind-license-9.9.4-14.el7.noarch У меня не установлен, так как во время инсталляции centos выбрал минимальный пакет программ. Сервер имен у нас будет работать в chroot окружении, так что устанавливаем соответствующие пакеты: # yum -y install bind bind-utils bind-chroot Еще раз обращаю внимание, что мы будем использовать bind в chroot среде для увеличения безопасности. Это накладывает определенные особенности в настройке и управлении сервером. Нужно быть внимательным в этих мелочах. Итак, запускаем bind: # systemctl start named-chroot # systemctl enable named-chroot ln -s '/usr/lib/systemd/system/named-chroot.service' '/etc/systemd/system/multi-user.target.wants/named-chroot.service' Проверяем содержимое chroot каталога: # ls -l /var/named/chroot/etc Все в порядке, сервер запустился, необходимые файлы созданы, все готово для настройки. Займемся ей.   Настраиваем DNS сервер в CentOS 7   Файл конфигурации нашего сервера располагается по адресу /var/named/chroot/etc/named.conf. Открываем его и приводим к следующему виду: # mcedit /var/named/chroot/etc/named.conf options { listen-on port 53 { any; }; listen-on-v6 port 53 { none; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; allow-query { 127.0.0.1; 192.168.7.0/24; }; recursion yes; allow-recursion { 127.0.0.1; 192.168.7.0/24; }; forwarders { 8.8.8.8; }; version "DNS Server"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; dnssec-enable no; dnssec-validation no; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; logging { channel default_file { file "/var/log/named/default.log" versions 3 size 5m; severity dynamic; print-time yes; }; category default { default_file; }; }; Эта конфигурация обеспечит работу обычного кэширующего сервера в локальной сети. Комментарии к некоторым параметрам: listen-on-v6 port 53 { none; }; Отключили работу на интерфейсе ipv6. allow-query { 127.0.0.1; 192.168.7.0/24; }; Разрешаем обычные запросы только из локальной сети. allow-recursion { 127.0.0.1; 192.168.7.0/24; }; Разрешаем рекурсивные запросы только из локальной сети. forwarders { 8.8.8.8; }; Перенаправляем запросы, которые сами не резолвим, на днс сервер гугла. У меня указан он просто для примера. Тут лучше всего указать сначала ДНС серверы провайдера. version «DNS Server»; Скрываем версию бинда, вместо этого выводим указанную строку. Не забудьте отредактировать правила фаервола для корректной работы DNS сервера — открыть 53 порт UDP для работы кэширующего сервера, который мы сейчас настроили, и 53 порт TCP для пересылки зон, о которых речь пойдет дальше Теперь создадим папку для логов. Не забываем, что мы работаем в chroot окружении: # cd /var/named/chroot/var/log && mkdir named && chown named. named Поддержка собственной зоны Допустим, нам необходимо в нашем named разместить собственную зону site1.ru. Первым делом создаем файл зоны, которую будет обслуживать dns сервер: # mcedit /var/named/chroot/var/named/site1.ru.zone $TTL 86400 @ IN SOA site1.ru. site1.ru.local. ( 2015092502 43200 3600 3600000 2592000 ) IN NS ns1.site1.ru. IN NS ns2.site1.ru. IN A 192.168.7.254 IN MX 10 mx.site1.ru. gate IN A 192.168.7.254 mx IN A 192.168.7.250 ns1 IN A 192.168.7.235 ns2 IN A 192.168.7.231 Описание синтаксиса файлов зон достаточно хорошо освещено в интернете, не хочется подробно на этом останавливаться. При желание каждый сам сможет посмотреть, если у него возникнет необходимость настроить поддержку собственной зоны. Выставляем необходимые права: # chown root:named /var/named/chroot/var/named/site1.ru.zone # chmod 0640 /var/named/chroot/var/named/site1.ru.zone Дальше подключаем файл зоны в конфигурационном файле bind — /var/named/chroot/etc/named.conf: zone "site1.ru" { type master; file "site1.ru.zone"; }; Перечитываем конфигурацию named с помощью rndc: # rndc reconfig Добавление в bind slave zone Если вы хотите на своем сервере держать копию какой-то зоны, взятой с другого dns сервера, то добавьте следующие настройки в конфиг. zone "site.ru" IN { type slave; masters { 10.1.3.4; }; file "site.ru.zone"; }; 10.1.3.4 — ip адрес dns сервера, с которого мы берем зону. Не забудьте на нем разрешить передачу зоны на ваш dns сервер. Чтобы сервер смог корректно сохранить файл со slave зоной, необходимо добавить разрешение на запись bind для директории /var/named/chroot/var/named. По-умолчанию она имеет следующие права: drwxrx--- 6 root named 164 Jan 6 06:06 named Нужно добавить группе named разрешение на запись, чтобы стало вот так: drwxrwx--- 6 root named 164 Jan 6 06:06 named После этого можно перезапустить bind и проверить, что создался файл слейв зоны. С указанными выше настройками, он будет располагаться по адресу /var/named/chroot/var/named/site.ru.zone. Если у bind не будет прав для создания файла, в логе вы получите ошибку: dumping master file: tmp-7Swr6EZpcd: open: permission denied Настройка логов в bind (named) Гораздо интереснее и полезнее разобраться с подробным логированием работы сервера. Я долгое время поверхностно хватался за всякие рекомендации и куски примерных конфигов в интернете, пока в не решил разобраться сам с этой темой и не полез в оригинальный мануал. Bind дает широкие возможности для ведения логов. Можно фиксировать практически все, что связано с работой сервера. Я сейчас на простых примерах покажу, как это работает. Первым делом в конфигурации мы задаем канал, куда будут складываться логи по тем или иным событиям. Вот пример подобного канала: channel general { file "/var/log/named/general.log" versions 3 size 5m; severity dynamic; print-time yes; Здесь указано название канала, которые мы придумываем сами — general, указан путь до файла, сказано, что хранить будем 3 версии лога размером не более 5 мегабайт. Параметр severity может принимать следующие значения: Описание параметров severity critical Только критические ошибки. error Обычные ошибки и все что выше. warning Предупреждения и все, что выше. notice Уведомления и все, что выше. info Информационные сообщения и все что выше. debug Сообщения уровня debug и все, что выше. Уровни debug  регулируются значениями 0, 1, 2, 3. dynamic То же, что и debug, только его уровень регулируется глобальной настройкой сервера. Параметр print-time указывает на то, что в лог необходимо записывать время события. Помимо указанных мной настроек, в конфигурации канала могут быть добавлены следующие параметры: print-severity yes | no — указывает, писать или нет параметр severity в лог print-category yes | no — указывает писать или нет название категории логов Я эти параметры не указал, так как по-умолчанию устанавливается значение no, которое лично меня устраивает. Дальше необходимо указать категорию логов и в какой канал мы будем ее записывать: category general { general; }; Категорий у днс сервера bind достаточно много. Вот мой перевод полного списка с описаниями: Описание категорий логов в bind (named) default Сюда будут попадать события всех категорий из этой таблицы, если они не определены отдельно, за исключением категории queries, которую нужно включать специально. То есть если обозначить только категорию default, то в нее будут сыпаться события всех категорий. general Эта категория для всех логов, которые не включены ни в одну из перечисленных категорий. database Сообщения, относящиеся к хранению зон и кэшированию. security Подтверждение и отказ в выполнении запросов. config Все, что относится к чтению и выполнению файла конфигурация. resolver Разрешение имен, включая информацию о рекурсивных запросах, выполняемых от имени клиента кэширующим сервером. xfer-in Информация о получении зон. xfer-out Информация о передаче зон. notify Логирование операций протокола NOTIFY. client Выполнение клиентских запросов. unmatched Сообщения, которые named не смог отнести ни к одному классу или для которых не определено отображение. network Логирование сетевых операций. update Динамические апдейты. update-security Подтверждение или отклонение запросов на апдейт. queries Логирование запросов к ДНС серверу. Для включения этой категории необходимо отдельно задать параметр в конфигурации сервера. Это связано с тем, что эта категория генерирует очень много записей в лог файл, что может сказаться на производительности сервера. query-errors Ошибки запросов к серверу. dispatch Перенаправление входящих пакетов модулям сервера на обработку. dnssec Работа протоколов DNSSEC и TSIG. lame-servers Фиксируются ошибки, которые получает bind при обращении к удаленным серверам в попытке выполнить запрос на разрешение имени. delegation-only Логирование запросов, вернувших NXDOMAIN. edns-disabled Запросы, которые вынуждены использовать plain DNS из-за превышения timeouts. RPZ  Все операции, связанные с выполнение Response Policy Zone (RPZ). rate-limit  Операции связанные с одним или несколькими rate-limit statements в options или view. Таким образом, чтобы вывести все категории логов в отдельные файлы, необходимо в конфиг named добавить следующую конструкцию: logging { channel default { file "/var/log/named/default.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel general { file "/var/log/named/general.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel database { file "/var/log/named/database.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel security { file "/var/log/named/security.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel config { file "/var/log/named/config.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel resolver { file "/var/log/named/resolver.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel xfer-in { file "/var/log/named/xfer-in.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel xfer-out { file "/var/log/named/xfer-out.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel notify { file "/var/log/named/notify.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel client { file "/var/log/named/client.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel unmatched { file "/var/log/named/unmatched.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel network { file "/var/log/named/network.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel update { file "/var/log/named/update.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel update-security { file "/var/log/named/update-security.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel queries { file "/var/log/named/queries.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel query-errors { file "/var/log/named/query-errors.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel dispatch { file "/var/log/named/dispatch.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel dnssec { file "/var/log/named/dnssec.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel lame-servers { file "/var/log/named/lame-servers.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel delegation-only { file "/var/log/named/delegation-only.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel edns-disabled { file "/var/log/named/edns-disabled.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel rpz { file "/var/log/named/rpz.log" versions 3 size 5m; severity dynamic; print-time yes; }; channel rate-limit { file "/var/log/named/rate-limit.log" versions 3 size 5m; severity dynamic; print-time yes; }; category default { default; }; category general { general; }; category database { database; }; category security { security; }; category config { config; }; category resolver { resolver; }; category xfer-in { xfer-in; }; category xfer-out { xfer-out; }; category notify { notify; }; category client { client; }; category unmatched { unmatched; }; category network { network; }; category update { update; }; category update-security { update-security; }; category queries { queries; }; category query-errors { query-errors; }; category dispatch { dispatch; }; category dnssec { dnssec; }; category lame-servers { lame-servers; }; category delegation-only { delegation-only; }; category edns-disabled { edns-disabled; }; category rpz { rpz; }; category rate-limit { rate-limit; }; }; Если мы хотим собирать все логи запросов из категории queries, то в раздел options файла конфигурации необходимо добавить параметр, который это разрешает: querylog yes; Перезапускаем bind: # systemctl restart named-chroot.service   Проверка работы DNS Server Первым делом пойдем в каталог с логами и проверим, что там у нас: # cd /var/named/chroot/var/log/named # ls -l Все файлы журнала созданы и начали наполняться. Можно проверить один из них. Например, посмотрим, как наш сервер centos (192.168.7.246) логирует запросы пользователей. Попробуем с компьютера 192.168.7.254 (windows) выполнить nslookup yandex.ru и посмотрим как это отразится в лог файле: 26-Sep-2015 19:25:30.923 client 192.168.7.254#56374 (yandex.ru): query: yandex.ru IN A + (192.168.7.246) 26-Sep-2015 19:25:31.013 client 192.168.7.254#56375 (yandex.ru): query: yandex.ru IN AAAA + (192.168.7.246) Теперь выполним ping site1.ru, чтобы проверить, как сервер поддерживает нашу зону: Смотрим, что в логах: 26-Sep-2015 19:28:01.660 client 192.168.7.254#49816 (site1.ru): query: site1.ru IN A + (192.168.7.246) Таким образом очень удобно отследить, куда лезет компьютер. Например, можно поднять временно dns сервер, включить лог запросов. В клиенте указать единственный днс сервер, который мы настроили. Дальше можно отслеживать, к примеру, куда лезет винда после загрузки без нашего ведома. Или откуда грузится реклама в скайпе. Все запросы будут аккуратно складываться в файл, который потом можно спокойно анализировать. Это все, что я хотел в данном материале рассказать. Тема настройки bind (named) достаточно обширная. Возможно я еще вернусь к ней.   Статья позаимствована с ресурса serveradmin.ru    

k010v

k010v

Подключение сетевой папки Windows в CentOS 7

Данное руководство предназначено для тех, у кого есть желание самостоятельно подключить сетевую папку Windows в CentOS. В этом руководстве мы будем рассматривать тот случай, когда у вас уже есть сервер с установленной на нем операционной системой CentOS 7. Подробно о том, как установить CentOS 7, вы можете прочитать в моем руководстве «Установка CentOS 7 на сервер». Обратите внимание, все команды необходимо выполнять без кавычек. В данном руководстве будет подключаться сетевая папка Windows Share, которая расположена на компьютере с присвоенным ему IP-адресом 10.77.2.30. Для начала вам потребуются полноценные права. Выполняем команду «su». Проверим наличие доступных обновлений для пакетов. Выполняем команду «yum check-update». Далее установим доступные обновления для пакетов. Выполняем команду «yum update». Система уведомляет о том, что для установки потребуется свободное место на диске. Нажимаем на кнопку “y”, затем “Enter”. Система снова уведомляет о том, что для установки потребуется свободное место на диске. Нажимаем на кнопку “y”, затем “Enter”. Теперь установим пакеты необходимые для покдлючения сетевой папки Windows. Выполняем команду «yum install samba-client». Система уведомляет о том, что для установки потребуется свободное место на диске. Нажимаем на кнопку “y”, затем “Enter”. Выполняем команду «yum install cifs-utils». Система уведомляет о том, что для установки потребуется свободное место на диске. Нажимаем на кнопку “y”, затем “Enter”. Создадим папку, в которую будет подключена сетевая папка Windows. Выполняем команду «mkdir /mnt/share01». Выполняем команду «mount.cifs //10.77.2.30/Windows\ Share /mnt/share01 -o user=vmikhalev». Обратите внимание, в параметре “user” необходимо указать логин учетной записи, которая имеет права доступа к сетевой папке Windows. Указываем пароль от учетной записи, которая имеет права доступа к сетевой папке Windows. Сетевая папка Windows подключена. Просмотрим содержимое папки “/mnt/share01”. Выполняем команду «ls -l /mnt/share01». Содержимое сетевой папки Windows теперь доступно в папке “/mnt/share01”. Все содержимое сетевой папки корректно отображаются в CentOS. Подключение сетевой папки Windows в CentOS успешно завершено.

k010v

k010v

БЭКАП И ВОССТАНОВЛЕНИЕ LINUX (CENTOS, DEBIAN, UBUNTU) СЕРВЕРА С ПОМОЩЬЮ VEEAM AGENT FOR LINUX

Пример приводится для ОС Centos 7 Установка Veeam Agent for Linux КОД: ВЫДЕЛИТЬ ВСЁ# cd /root
# wget https://download2.veeam.com/veeam-release-el7-1.0-1.x86_64.rpm
# rpm -Uhv veeam-release-el7-1.0-1.x86_64.rpm
Далее нужно скачать и установить ключ: КОД: ВЫДЕЛИТЬ ВСЁrpm --import http://repository.veeam.com/keys/RPM-EFDCEA77
Обновляем репозитории и устанавливаем veeam. КОД: ВЫДЕЛИТЬ ВСЁ# yum update
# yum install veeam Запускаем Veeam Agent for Linux КОД: ВЫДЕЛИТЬ ВСЁ# veeam
После запуска будет предложение ввести номер лицензии, но мы не вводим ввиду отсутствия. Настройка бекапа
- Нажимаем C (configure) для настройки задания на backup. Задаем любое имя задания, затем указываем, что будем делать полный бэкап сервера.
- В пункте Restore Points указывается глубина архива. Это число копий, которые будут храниться на сервере. Если делать бэкап каждый день и указать число 14, то будут храниться резервные копии системы за последние 14 дней. Если делать будете через день, то за 28 дней и т.д.
Если будет ошибка: КОД: ВЫДЕЛИТЬ ВСЁCurrent system does not support cifs. Please install cifs client package.
то необходимо выполнить: КОД: ВЫДЕЛИТЬ ВСЁyum install cifs-utils

Отличия FREE от платной: https://habr.com/company/veeam/blog/317952/

Подробное описание: https://serveradmin.ru/backup-i-perenos-linux-servera/

k010v

k010v

Как правильно настроить DNS для почтового сервера

Многие современные методы борьбы со спамом активно используют службу DNS для выявления нежелательных сообщений электронной почты. Поэтому правильная настройка DNS-зоны для собственного сервера корпоративной почты позволит администратору избежать множества проблем с приёмом электронной почты от удалённых почтовых серверов и с отправкой электронной почты со своего почтового сервера. Рассмотрим настройку DNS-зоны на примере наиболее распространённого DNS-сервера BIND для правильной работы почтового хостинга корпоративной почты. Итак, в доменной зоне должны в обязательном порядке быть указаны следующие записи: Запись типа NS— Name Server, сервер имён В записях типа NS указываются имена DNS-серверов, которые будут поддерживать доменную зону. По требованиям регистраторов доменных имён в целях доступности и отказоустойчивости их должно быть не менее двух и они должны быть расположены в различных подсетях класса C. Имя должно заканчиваться точкой иначе DNS-сервер интерпретирует имя как поддомен текущей зоны. NS ns1.tendence.ru.
NS ns2.tendence.ru.
NS ns3.tendence.ru. Запись типа MX — Mail eXcanger, сервер обмена электронной почтой Основная запись в доменной зоне, указывающая на имена почтовых серверов этого домена, без которой невозможны приём и отправка (косвенно) почты. Невозможность отправки почты указана как косвенная потому, что подавляющее большинство почтовых серверов перед приёмом сообщения в целях защиты от спама обязательно проверит наличие в DNS-зоне MX-записей и их соответствие IP-адресу отправителя. В случае отсутствия такой записи и/или её несоответствия удалённым почтовым сервером с вероятностью чуть менее 100% в приёме электронной почты будет отказано. Указание MX-записи отличается от синтаксиса рассмотренной ранее A-записи тем, что MX поддерживает приоритеты. Приоритет MX-записи — целое число от нуля включительно, указывающее несколько возможных почтовых серверов для этого домена, и определяющее порядок их перебора почтовым сервером отправителя в случаях недоступности некоторых из них. Обратите внимание, адресом почтового сервера в MX-записи не может быть IP-адрес, только доменное имя. MX 0 mx1.tendence.ru.
MX 5 mx2.tendence.ru.
MX 10 mx3.tendence.ru.
MX 100 mx4.tendence.ru. В примере выше наибольшим приоритетом (0) в приёме почты обладает хост mx1.tendence.ru Именно к нему в первую очередь будут обращаться для отправки сообщений на ваш корпоративный почтовый сервер все другие почтовые серверЫ. Если по каким-то причинам в соединение с этим почтовым сервером будет отказано, отправитель перейдёт к попытке оправки почты на почтовый сервер с следующим приоритетом — 5, mx2.tendence.ru и так далее. Таким образом, MX-записи дают возможность гибкой настройки балансировки нагрузки (можно указать несколько записей с один и тем же приоритетом) и отказоустойчивости хостинга почты. Запись типа A - Address, IP-адрес, соответствующий доменному имени Необходима для преобразования доменного имени непосредственно в IP-адрес. Должна соответствовать внешнему статическому маршрутизируемому IP-адресу, выделенному провайдером. mail A 192.168.0.1 Запись типа PTR — PoinTeR, указатель в обратной зоне DNS Исключительно важная запись, значение rDNS-записи в работе хостинга почты невозможно переоценить! Удалённые почтовые серверы проверяют наличие и содержимое этой записи при попытке отправить им почту и их системы антиспама придают очень веское значение результатам проверки. Рекомендуется давать им осмысленное имя, которое соответствует имени, данному почтовому серверу к MX и A-записях. Почтовые серверы Mail.Ru, например, вообще не принимают электронную почту от почтовых серверов с неправильными с их точки зрения PRT/rDNS-записями. Так, почта от хоста 4-3-2-1.dsl-pool.prodiver.ru будет отклонена из-за исчезающей вероятности наличия у серьёзного корпоративного почтового сервера такого имени. Как правило запись в эту зону вносится вашим хостером или провайдером, если вы не обладаете собственной автономной системой (AS). 1 PTR mx1.tendence.ru.   Также желательно указать следующие необязательные записи. Их наличие позволит почтовым серверам, принимающим вашу электронную почту, однозначно идентифицировать ваш почтовый домен и не путать сообщения, с него поступающие, со спамом. Запись типа TXT/SPF — TeXT, текстовая запись/Sender Policy Framework, структура политики отправителя Замечательное средство защиты от подделки адреса отправителя, принятое в качестве стандарта RFC с 2006 года. Является эффективным, быстрым и использующим крайне мало ресурсов как со стороны отправителя, так и получателя средством. Остаётся только сожалеть, что за прошедшие годы не все почтовые домены внедрили у себя SPF-записи, если бы это произошло, спама в электронной почте стало бы на порядок меньше. Значительно снижает вероятность ложного определения сообщения с вашего сервера корпоративной электронной почты как спам. Заключается в явном указании списка IP-адресов/серверов, которые имеют право на отправку электронной почты от имени домена. TXT «v=spf1 +mx -all» Запись такого вида указывает используемую версию SPF — 1 (а другой пока и нет, сделано для совместимости с будущими версиями протокола), разрешает приём почты домена со всех адресов, указанных как MX-записи и запрещает приём почты со всех других почтовых серверов. Такой настройки будет достаточно в подавляющем большинстве случаев настройки корпоративной почты для предотвращения подделки адресов и снижения шансов маркировки ваших сообщений как спама. Запись типа TXT/DKIM — TeXT, текстовая запись/Domain Keys Identified Mail, электронная почта, идентифицированная доменными ключами Криптографическая технология, принятая в качестве стандарта с 2007 года. Как и SPF призвана предотвратить подделку адресов отправителя, уникальным образом идентифицировать его, а также подтвердить, что в процессе доставки сообщение электронной почты не было изменено. Требует поддержки почтового сервера для подписания каждого сообщения доменным ключом. Для проверки используется открытый ключ, указанный в зоне DNS: selector._domainkey TXT "v=DKIM1; p=MIGfMA1CSqGSIb1DQEBAQUAA4GNADCBiQKBgQCnmGN26HP/0oxTdlKSaivGvO0y38tY6RbBbJXHerIE1aHkCk/PTJhnD3hAIEhLobIqWazInJFZMO1W/jqUP2MxH16lU/jzuZvvUH3l8/kq4egAxYiwcya6ksVe0OzTtkF2XHFzhvGxQ/SJD/26PugcDS2NwVIG9PrWL9POXwIDAQAB" 
_domainkey TXT «o=-» Имя selector означает конкретный ключ (их может быть несколько), используемый для подписания сообщения, параметр v — версия DKIM, p — собственно ключ. Политика o=- указывает, что неподписанные/неправильно подписанные сообщения должны отклоняться. Настоятельно рекомендуется для применения — повсеместное внедрение этой технологии позволило бы навсегда решить проблему спама. Подключение DKIM к корпоративной почте позволит сообщениям сотрудников не быть ложно опознанными как спам у получателей. Более подробную информацию по подключению DKIM к вашему почтовому серверу ищите в документации к нему.

k010v

k010v

Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим

В данной инструкции выполнена настройка полноценного почтового сервера. Список всех особенностей и возможностей: Почтовая система на базе Postfix; Поддержка виртуальных доменов; Хранение почты на сервере; Подключение к почтовым ящикам по POP3 и IMAP (Dovecot); Поддержка шифрования; Хранение части настроек в MariaDB; Защита от СПАМа и вирусов; Доступ к почте с помощью веб-интерфейса (Roundcube); Возможность управление почтовыми ящиками с помощью PostfixAdmin. 1. Преднастройка системы Напоминаю, данная инструкция написана под систему Linux CentOS версии 7. Общие настройки Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа. vi /etc/hostname relay.dmosk.ru * необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.dmosk.ru. После вводим такую команду: hostname relay.dmosk.ru Устанавливаем служебные пакеты (они понадобятся в процессе настройки сервера): yum install ntpdate wget * ntpdate для возможности синхронизировать время на сервере; wget — клиент для загрузки файлов. Задаем временную зону (в данном примере московское время): \cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime Синхронизируем время: ntpdate ru.pool.ntp.org Обновляем систему: yum update Настройка безопасности Заранее открываем порты на брандмауэре с помощью firewalld: firewall-cmd --permanent --add-port=25/tcp firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=110/tcp firewall-cmd --permanent --add-port=143/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --permanent --add-port=465/tcp firewall-cmd --permanent --add-port=587/tcp firewall-cmd --permanent --add-port=993/tcp firewall-cmd --permanent --add-port=995/tcp firewall-cmd --reload * где мы откроем следующие порты: 25 — стандартный SMTP через STARTTLS; 80 — HTTP для порталов Postfixadmin и Roundcube; 110 — стандартный POP3 через STARTTLS; 143 — стандартный IMAP через STARTTLS; 443 — защищенный HTTPS для порталов Postfixadmin и Roundcube; 465 — защищенный SMTP через SSL/TLS; 587 — защищенный SMTP через STARTTLS; 993 — защищенный IMAP через SSL/TLS; 995 — защищенный POP3 через SSL/TLS. В CentOS также может использоваться утилита iptables — в таком случае команды будут следующие: iptables -A INPUT -p tcp --dport 25 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 110 -j ACCEPT iptables -A INPUT -p tcp --dport 143 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp --dport 465 -j ACCEPT iptables -A INPUT -p tcp --dport 587 -j ACCEPT iptables -A INPUT -p tcp --dport 993 -j ACCEPT iptables -A INPUT -p tcp --dport 995 -j ACCEPT После сохраняем правила любым из описанных способов. 2. Настройка веб-сервера: NGINX + PHP + MariaDB Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB. Установка NGINX Добавляем репозиторий с нужным пакетом: vi /etc/yum.repos.d/nginx.repo [nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1 Устанавливаем nginx: yum install nginx Разрешаем автозапуск сервиса и запускаем его: systemctl enable nginx systemctl start nginx Проверяем работоспособность веб-сервера, обратившись к нему в браузере по IP-адресу. Если видим заголовок «Welcome to nginx!», NGINX настроен верно. PHP + PHP-FPM + NGINX Устанавливаем php и php-fpm: yum install php yum install php-fpm Настраиваем NGINX: vi /etc/nginx/conf.d/default.conf server {
    listen       80 default_server;
    set $root_path /usr/share/nginx/html;

    location / {
        root   $root_path;
        index index.php index.hml;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
    }
} * где /usr/share/nginx/html — каталог для размещения портала управления Postfix. Настраиваем PHP-FPM: vi /etc/php-fpm.d/www.conf listen = /var/run/php-fpm/php5-fpm.sock * здесь мы поменяли строку 127.0.0.1:9000. Запускаем сервисы: systemctl enable php-fpm systemctl start php-fpm systemctl restart nginx * если в процессе перезапуска nginx выскочит ошибка nginx: [emerg] a duplicate default server, необходимо найти настройку виртуального домена, в которой также указана опция default_server — опцию нужно убрать. Или можно самостоятельно настроить другой виртуальный домен. Для проверки, создаем индексный файл в директории сайта со следующим содержимым: vi /usr/share/nginx/html/index.php <?php phpinfo(); ?> Открываем сайт в браузере по его IP-адресу. На открывшейся странице мы должны увидеть подробную информацию по php: MariaDB Устанавливаем сервер баз данных следующей командой: yum install mariadb mariadb-server Включаем автозапуск сервиса и запускаем его: systemctl enable mariadb systemctl start mariadb Задаем пароль для пользователя sql root: mysqladmin -u root password 3. Установка и настройка PostfixAdmin Устанавливаем дополнительные компоненты для PHP: yum install php-mysql php-mbstring php-imap Для применения установленных пакетов, перезапускаем обработчик скриптов: systemctl restart php-fpm Скачиваем PostfixAdmin: wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz В директории сайтов nginx создаем каталог для postfixadmin и распаковываем в него архив: mkdir /usr/share/nginx/html/postfixadmin tar -C /usr/share/nginx/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1 Задаем права на каталог: chown -R apache:apache /usr/share/nginx/html/postfixadmin * несмотря на то, что мы используем веб-сервер nginx, php-fpm по умолчанию, запускается от пользователя apache. Создаем базу данных postfix и учетную запись в mariadb: mysql -u root -p CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; * где postfix — имя базы. GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfix123'; * где postfix — имя учетной записи; postfix123 — пароль; localhost разрешает подключение только с локального сервера. Выходим из командной оболочки MariaDB: \q Открываем конфигурационный файл postfixadmin: vi /usr/share/nginx/html/postfixadmin/config.inc.php И редактируем следующее: $CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_password'] = 'postfix123';
$CONF['emailcheck_resolve_domain']='NO'; Запускаем браузер и вводим адрес http://<IP-адрес сервера>/postfixadmin/setup.php Начнется процесс проверки конфигурации и установки портала PostfixAdmin. После ее окончания вводим дважды пароль и генерируем хэш: После перезагрузки страницы копируем хэш: Открываем конфигурационный файл: vi /usr/share/nginx/html/postfixadmin/config.inc.php Находим строчку: $CONF['setup_password'] = 'changeme'; И меняем ее на: $CONF['setup_password'] = '7a8e14...c26'; * где '7a8e14...c26' — скопированный хэш. После, на той же странице, где показан хэш, добавляем суперпользователя PostfixAdmin: * где Setup password — пароль, который мы ввели на предыдущей странице; Пароль — новый пароль для создаваемой учетной записи. В итоге мы увидим следующее: И переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/ Вводим логин и пароль для созданного пользователя. Готово. 4. Настройка Postfix По умолчанию, Postfix уже установлен в CentOS 7. Но если встретится сервер без него, выполним установку простой командой: yum install postfix Создаем учетную запись, от которой мы будем работать с каталогом виртуальных почтовых ящиков: groupadd -g 1024 vmail
useradd -d /home/mail -g 1024 -u 1024 vmail -m * сначала мы создаем группу vmail и guid 1024, после — пользователя vmail с uid 1024 и домашней директорией /home/mail. Обратите внимание, что в некоторых системах идентификатор группы и пользователя 1024 может быть занят. В таком случае необходимо создать другой, а в данной инструкции ниже заменить все 1024 на альтернативный. Теперь открываем на редактирование конфигурационный файл почтового сервера: vi /etc/postfix/main.cf И редактируем следующие строки: myorigin = $mydomain * данная настройка указывает, какой домен подставлять отправителю, если он не указан в заголовке FROM. mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain * указываем, для каких доменов принимаем входящую почту. local_recipient_maps = unix:passwd.byname $alias_maps * указываем, откуда брать список локальных пользователей. mynetworks = 127.0.0.0/8 * разрешаем отправлять сообщения локальному серверу. alias_maps = hash:/etc/aliases * указываем, откуда брать список алиасов. inet_interfaces = all * необходимо убедиться, что postfix будет слушать на всех необходимых интерфейсах, в данном случае, на всех. Теперь в конец конфигурационного файла допишем следующее: virtual_mailbox_base = /home/mail
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1 smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth smtpd_tls_cert_file = /etc/ssl/mail/public.pem
smtpd_tls_key_file = /etc/ssl/mail/private.key
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes * где: virtual_mailbox_base — базовый путь хранения почтовых ящиков в системе UNIX. virtual_alias_maps — формат и путь хранения алиасов для виртуальных пользователей. virtual_mailbox_domains — формат и путь хранения доменов виртуальных пользователей. virtual_mailbox_maps — формат и путь хранения почтовых ящиков для виртуальных пользователей. virtual_minimum_uid — с какого номера присваивать идентификаторы пользователям. virtual_uid_maps — идентификатор пользователя, от которого записываются сообщения. virtual_gid_maps — идентификатор группы, от которой записываются сообщения. virtual_transport — задает доставщика сообщений. dovecot_destination_recipient_limit — передача сообщений от Postfix в Dovecot выполняется по заданному количеству (в нашем примере, по 1 шт.). smtpd_sasl_auth_enable — разрешает sasl аутентификацию. smtpd_sasl_exceptions_networks — исключение сетей от использования шифрования. smtpd_sasl_security_options — дополнительные опции настройки sasl. broken_sasl_auth_clients — эту опцию прописываем для клиентов MS Outlook. smtpd_sasl_type — указывает тип аутентификации. smtpd_sasl_path — путь до временных файлов обмена информацией с Dovecot. Указывается либо абсолютный путь, либо относительный queue_directory. smtpd_tls_cert_file — полный путь до публичного сертификата. smtpd_tls_key_file — полный путь до приватного сертификата. smtpd_use_tls — указывает клиентам на наличие поддержки TLS. smtpd_tls_auth_only — использовать только TLS. smtpd_helo_required — требовать начинать сессию с приветствия. Создаем файл с настройками обращения к базе с алиасами: vi /etc/postfix/mysql_virtual_alias_maps.cf user = postfix
password = postfix123
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1' * где user и password — логин и пароль для подключения к MySQL; hosts — имя сервера баз данных (в нашем случае, локальный сервер); dbname — имя базы данных; query — шаблон запроса к данным. Создаем файл с инструкцией получения данных по виртуальным доменам: vi /etc/postfix/mysql_virtual_domains_maps.cf user = postfix
password = postfix123
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u' И файл с почтовыми ящиками: vi /etc/postfix/mysql_virtual_mailbox_maps.cf user = postfix
password = postfix123
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1' Открываем файл master.cf и дописываем в самый конец: vi /etc/postfix/master.cf submission     inet  n       -       n       -       -       smtpd
    -o smtpd_tls_security_level=may
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_sasl_type=dovecot
    -o smtpd_sasl_path=/var/spool/postfix/private/auth
    -o smtpd_sasl_security_options=noanonymous
    -o smtpd_sasl_local_domain=$myhostname smtps      inet n - n - - smtpd
    -o syslog_name=postfix/smtps
    -o smtpd_tls_wrappermode=yes
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject dovecot    unix  -       n       n       -        -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient} * необходимо убедиться, что в содержимом файла нет других раскомментированных опций для submission, smtps и dovecot (по умолчанию, их нет). В данном случае, мы настроили работу postfix на портах 25, 465 и 587. Перезапустим postfix: systemctl restart postfix 5. Настройка Dovecot Устанавливаем Dovecot с компонентом для работы с СУБД: yum install dovecot dovecot-mysql Настраиваем способ хранения сообщений: vi /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/home/mail/%d/%u/
first_valid_gid = 1024 * в данном примере сообщения будут храниться в продвинутом формате maildir. Настраиваем слушателя для аутентификации: vi /etc/dovecot/conf.d/10-master.conf service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
} * обращаем внимание, что /var/spool/postfix/private/auth — это тот же private/auth, который был прописан нами в postfix. Настраиваем аутентификацию в Dovecot: vi /etc/dovecot/conf.d/10-auth.conf #!include auth-system.conf.ext
!include auth-sql.conf.ext * в данном случае мы просто комментируем обычную аутентификацию и снимаем комментарий для использования sql-аутнтификации. Настраиваем использование шифрования: vi /etc/dovecot/conf.d/10-ssl.conf ssl = required
ssl_cert = </etc/ssl/mail/public.pem
ssl_key = </etc/ssl/mail/private.key * данная настройка укажет dovecot требовать от клиентов использования шифрования. Настроим автоматическое создание каталогов при первом подключении пользователя к ящику: vi /etc/dovecot/conf.d/15-lda.conf lda_mailbox_autocreate = yes Настраиваем подключение к нашей базе данных: vi /etc/dovecot/conf.d/auth-sql.conf.ext passdb {
  …
  args = /etc/dovecot/sql.conf
} userdb {
  …
  args = /etc/dovecot/sql.conf
} * в данном примере мы указали на файл, в котором будут находиться настройки для получения пользователей и паролей из базы данных. Создаем файл с настройками работы с mysql: vi /etc/dovecot/sql.conf driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix123
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u' И, напоследок, настраиваем протоколы и интерфейс, на котором будет слушать dovecot: vi /etc/dovecot/dovecot.conf protocols = imap imaps pop3 pop3s
listen = * * по умолчанию, dovecot слушает также на ipv6 (listen = *, ::). Если на сервере не используется 6-я версия протокола TCP/IP, в логах dovecot появятся ошибки:
master: Error: service(imap-login): listen(::, 143) failed: Address family not supported by protocol
master: Error: service(imap-login): listen(::, 993) failed: Address family not supported by protocol Генерируем сертификаты безопасности Создаем каталог, в котором разместим сертификаты: mkdir -p /etc/ssl/mail И сгенерируем их следующей командой: openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=relay.dmosk.ru" * сертификат сгенерирован на 1461 день, ключи subj могут быть произвольными, CN необходимо указать в соответствии с именем сервера, по которому мы будем подключаться к почте. Запускаем dovecot: systemctl start dovecot 6. Создаем первый почтовый ящик и проверяем работу сервера В браузере вводим в адресной строке путь до Postfixadmin — http://<IP-адрес сервера>/postfixadmin/. Вводим логин и пароль от административной учетной записи, которую мы создали на шаге 3. Перед нами появится страница управления учетными записями. Переходим в Список доменов - Новый домен: Заполняем формы и нажимаем по Добавить домен: Теперь переходим в Обзор - Создать ящик: Вводим данные нового пользователя и нажимаем по Создать ящик: Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird. Параметры для подключения: Сервер: имя сервера или его IP-адрес (не желательно, так как сертификат выдается по доменному имени). IMAP: 143 STARTTLS или 993 SSL/TLS POP3: 110 STARTTLS или 995 SSL/TLS SMTP: 25 STARTTLS или 465 SSL/TLS или 587 STARTTLS 7. Устанавливаем и настраиваем Roundcube Webmail На официальном сайте заходим на страницу загрузки Roundcube. Смотрим ссылку на последнюю стабильную версию продукта: Используем ссылку, чтобы загрузить архив программы: wget https://github.com/roundcube/roundcubemail/releases/download/1.1.9/roundcubemail-1.1.9.tar.gz Создаем каталог, где будут размещаться файлы портала: mkdir /usr/share/nginx/html/webmail И распаковываем скачанный архив: tar -C /usr/share/nginx/html/webmail -xvf roundcubemail-1.1.9.tar.gz --strip-components 1 Копируем шаблон конфига: cp /usr/share/nginx/html/webmail/config/config.inc.php.sample /usr/share/nginx/html/webmail/config/config.inc.php И открываем его на редактирование: vi /usr/share/nginx/html/webmail/config/config.inc.php $config['db_dsnw'] = 'mysql://roundcube:roundcube123@localhost/roundcubemail';
$config['enable_installer'] = true; * первую строку мы редактируем, а вторую добавляем. В первой строке roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных. Задаем владельца apache на папку портала: chown -R apache:apache /usr/share/nginx/html/webmail Создаем в MariaDB базу для roundcubemail: mysql -uroot -p > CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; > GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'roundcube123'; > quit И загружаем в созданную базу данные: mysql -uroot -p roundcubemail < /usr/share/nginx/html/webmail/SQL/mysql.initial.sql Устанавливаем компоненты, необходимые для работы Roundcube: yum install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-pear-Net-IDNA2 php-pear-Mail-Mime Настроим php: vi /etc/php.ini date.timezone = "Europe/Moscow" Перезагружаем php-fpm: systemctl restart php-fpm Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK). Проверяем, что все пункты находятся в состоянии OK. После удаляем папку с установочными скриптами: \rm -R /usr/share/nginx/html/webmail/installer И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/. 8. Защищаемся от вирусов Установка и настройка ClamAV Устанавливаем антивирус: yum install clamav clamsmtp clamav-scanner-systemd clamav-update Настраиваем postfix: vi /etc/postfix/main.cf content_filter = scan:[127.0.0.1]:10025
receive_override_options = no_address_mappings * где content_filter указывает на приложение, которое будет сканировать сообщения; receive_override_options позволяет увидеть оригинальные email адреса писем с вирусами. Теперь редактируем master.cf: vi /etc/postfix/master.cf Дописываем следующее: scan unix - - n - 16 smtp
  -o smtp_send_xforward_command=yes
  -o smtp_enforce_tls=no

127.0.0.1:10026 inet n - n - 16 smtpd
  -o content_filter=
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
  -o smtpd_helo_restrictions=
  -o smtpd_client_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks_style=host
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8 Перезапускаем postfix: systemctl restart postfix Конфигурируем clamsmtpd: vi /etc/clamsmtpd.conf ClamAddress: /var/run/clamd.scan/clamd.sock
TempDirectory: /var/run/clamd.scan * где ClamAddress указываем на путь к сокетному файлу — он должен совпадать с путем в конфигурационном файле для clam scan; TempDirectory — путь для хранения временных файлов. Редактируем конфигурационный файл для clam scan: vi /etc/clamd.d/scan.conf PidFile /var/run/clamd.scan/clamd.pid
LocalSocket /var/run/clamd.scan/clamd.sock
User clamsmtp * где PidFile — путь для pid-файла сервиса; LocalSocket — путь до сокетного файла для взаимодействия с clamsmtp; User — пользователь, от которого будет запускаться clamd. Редактируем владельца на каталог для сокетного файла: chown clamsmtp:clamscan /var/run/clamd.scan Теперь разрешаем запуск антивируса и запускаем его: systemctl enable clamsmtpd systemctl start clamsmtpd systemctl enable clamd@scan systemctl start clamd@scan Обновление Открываем конфиг freshclam и ставим комментарий напротив Example: vi /etc/freshclam.conf #Example Разрешаем и запускаем сервис: systemctl enable clamd@freshclam systemctl start clamd@freshclam Запускаем обновление: freshclam Для настройки автоматического обновления, редактируем cron: crontab -e 15 3 * * * /bin/freshclam * в данном примере, каждый день в 03:15 будет запускаться процесс обновления clamav. Проверка Для проверки отправляем сообщение со следующим содержимым: X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* Письмо не должно дойти. 9. Боремся со СПАМом Проверка контента с помощью Spamassassin Устанавливаем spamassassin yum install spamassassin Редактируем master.cf: vi /etc/postfix/master.cf Для smtp добавляем следующую опцию:  smtp      inet  n       -       n       -       -       smtpd
    -o content_filter=spamassassin И добавить следующее: spamassassin      unix  -       n       n       -       -       pipe
  flags=R user=spamd argv=/usr/bin/spamc -u spamd -e /usr/sbin/sendmail -f $sender $recipient Обновляем spamassassin: sa-update --nogpg Разрешаем его запуск и стартуем сервис: systemctl enable spamassassin systemctl start spamassassin Перезапускаем postfix: systemctl restart postfix Для автоматического обновления добавим в cron следующее: crontab -e 30 3 * * * /bin/sa-update * обновление будет происходить каждый день в 03:30. Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым: XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X Антиспам средствами Postfix В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 6 секций, обработка которых выполняется в следующем порядке: client -> helo -> sender -> relay -> recipient -> data И так, для настройки антиспама в конфигурационный файл main.cf добавляем: vi /etc/postfix/main.cf smtpd_client_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_unauth_pipelining
        permit

smtpd_helo_restrictions =
        permit

smtpd_sender_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_non_fqdn_sender
        reject_unknown_sender_domain
        permit

smtpd_relay_restrictions =
        permit

smtpd_recipient_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_non_fqdn_recipient
        reject_unauth_destination
        reject_unknown_recipient_domain
        reject_unverified_recipient
        permit

smtpd_data_restrictions =
        permit

smtpd_end_of_data_restrictions =
        permit * это более или менее мягкие правила. Их можно использовать первое время, пока тестируем сервер. Для усиления защиты добавляем: smtpd_recipient_restrictions =
        ...
        reject_unknown_client_hostname
        reject_invalid_helo_hostname
        reject_non_fqdn_helo_hostname
        reject_unknown_helo_hostname
        reject_rbl_client bl.spamcop.net
        reject_rbl_client cbl.abuseat.org
        reject_rbl_client dul.ru
        reject_rbl_client dnsbl.abuse.ch
        permit * где: reject_unknown_client_hostname — проверяет наличие PRT-записи отправителя и наличие рабочей А-записи в соответствие PTR. reject_invalid_helo_hostname — проверяет синтаксис HELO-приветствия. reject_non_fqdn_helo_hostname — требует правильного FQDN-имени во время HELO-приветствия. reject_unknown_helo_hostname — запрещает представляться именами, для которых нет А-записи или MX. reject_rbl_client — проверяет наличие отправителя в черных списках. После внесения всех правок, необходима перезагрузка Postfix: systemctl restart postfix Сервер настроен — можно пользоваться.

k010v

k010v

Обзор нововведений в Windows Server 2019

В октябре Microsoft без лишней шумихи выпустила в свет новую версию операционной системы Windows Server. Рассказываем о наиболее интересных изменениях и улучшениях обновлённой серверной платформы. Впервые о новом поколении серверной операционной системы Microsoft открыто заговорила в марте текущего года. Компания не только раскрыла информацию об основных направлениях работы над продуктом и представила тестовую сборку ОС на канале Windows Insider, но и официально озвучила название платформы — Windows Server 2019 (изначально система позиционировалась как Windows Server 2016 R2). На «обкатку» обновлённой ОС у Microsoft ушло немногим более полгода, и уже 2 октября увидела свет финальная версия серверной платформы, которую можно приобрести как на сайте компании, так и у партнёров редмондского гиганта, в том числе российских. Что же нового появилось в системе?   Говоря о нововведениях в Windows Server 2019, прежде всего, стоит отметить новый интерфейс администратора Windows Admin Center (ранее известный как Project Honolulu), основанный на веб-технологиях и позволяющий непосредственно из браузера управлять локальными и удалёнными серверами, в том числе рабочими станциями с Windows 10 на борту. С помощью Windows Admin Center можно конфигурировать серверы и компьютеры в сети организации и за её пределами, получать доступ к файлам, инициализировать терминальные RDP-сессии и подключаться к рабочим столам, запускать PowerShell-скрипты, управлять сервисами, службами, виртуальными машинами, правами пользователей, сертификатами и всевозможными настройками обслуживаемых систем. Поддерживается интеграция с облачными сервисами Azure. Всё это делает Windows Admin Center универсальным инструментом для администрирования серверов, рабочих станций и облачных сервисов. Пользовательский интерфейс Windows Admin Center Вторая интересная особенность Windows Server 2019 — возможность запуска рабочих столов, бинарных исполняемых файлов и bash-скриптов Linux без использования виртуализированных сред. Реализовано это с помощью специальной прослойки Windows Subsystem for Linux (WSL) в ядре ОС, транслирующей системные вызовы Linux в вызовы Windows. Впервые подсистема WSL появилась в Windows 10 с выпуском обновления Fall Creators Update, теперь же работать с окружением Linux можно и в серверной версии операционной системы. В Microsoft убеждены, что нововведение получит широкое применение в среде разработчиков и администраторов мультиплатформенных IT-систем. Как работает подсистема Windows Subsystem for Linux С выпуском Windows Server 2019 компания Microsoft существенно доработала средства обеспечения безопасности программной платформы. Входящий в состав операционной системы Windows Defender получил поддержку технологий Advanced Threat Protection, выявляющих атаки на уровне памяти и ядра и реагирующих на них путём завершения вредоносных процессов и удаления вирусов, механизмов защиты от эксплойтов (Exploit Guard) и сетевых атак, а также функцию «Контролируемый доступ к файлам», блокирующую доступ недоверенных приложений к выбранным папкам и защищающую данные от несанкционированных изменений, в том числе, от программ-шифровальщиков. Упоминания также заслуживают средства шифрования программно-определяемых SDN-сетей (Encrypted Network), позволяющие шифровать трафик виртуальной сети между виртуальными машинами, которые обмениваются между собой данными. Windows Server 2019 обеспечивает комплексную защиту от цифровых угроз Значительно в новой версии серверной платформы эволюционировали экранированные виртуальные машины (Shielded Virtual Machines), впервые появившиеся в Windows Server 2016. Они получили поддержку автономного режима работы, возможность удалённого администрирования посредством VMConnect и PowerShell Direct и — самое главное — поддержку защищённых виртуальных Linux-окружений. Теперь Windows Server 2019 поддерживает выполнение систем Ubuntu, Red Hat Enterprise Linux и SUSE Linux Enterprise Server внутри экранированных виртуальных машин при работе в средах со смешанными ОС. Особенностью экранированных ВМ является то, что доступ к ним может получить только их владелец, администратор лишён этих полномочий Ещё одна новинка — служба миграции хранилища (Storage Migration Service), упрощающая перенос серверов под управлением Windows Server 2003/2008/2012 на более свежие версии ОС. Данная система полностью автоматизирует процесс переноса и выполняет его в несколько этапов, включающих предварительную инвентаризацию старых серверов (определение конфигурации, параметров сети и безопасности, сбор сведений об идентификаторах и учётных записей пользователей Active Directory и проч.), перенос данных на новые серверы и применение сохранённых параметров. По заверениям Microsoft, служба Storage Migration Service учитывает все нюансы переноса рабочих сред с одного сервера на другой и делает процесс миграции абсолютно незаметным для пользователей. Схема работы Storage Migration Service Изменился инструментарий Storage Replica, который позволяет IT-администраторам реплицировать данные между удалёнными серверами, кластерными системами и центрами обработки данных, повышая тем самым их катастрофоустойчивость и предотвращая потери на уровне файловой системы. Теперь реплика хранилища доступна в Windows Server 2019 редакции Standard (ранее этой функцией можно было пользоваться только в версии Datacenter) и дополнительно позволяет проверять подключаемые хранилища на предмет отказоустойчивости. Отдельное внимание разработчиками Microsoft было уделено оптимизации системы журналирования Storage Replica. Улучшениям подверглись инструменты для работы с географически распределёнными кластерами серверов. Из наиболее значимых новшеств упомянем возможность объединения вычислительных кластеров в группы (Cluster Sets) и последующей работы с ними как с единой структурой. Это нововведение должно существенно упростить работу тех, кто на базе Windows Server 2019 строит конвергентные и гиперконвергентные среды. Сюда же стоит добавить поддержку кластеров Azure и возможность перемещения отказоустойчивых кластеров между доменами с сохранением доступности всех развёрнутых на них сервисов, будь то базы данных, веб-службы или виртуальные машины. Последняя функция может быть особенно актуальной для крупных организаций, которые в случае использования Windows Server 2019 могут легко переводить вычислительные ресурсы поглощаемых компаний в свой домен. Поддержка отказоустойчивой кластеризации серверов — одна из сильных сторон платформы Windows Server Немало в новой версии Windows Server реализовано других изменений. Из заслуживающих внимания отметим следующие: существенно сокращённый (с 5 до 1,7 Гбайт) размер образа контейнера Server Core, благодаря своей компактности обеспечивающему ещё более высокий уровень плотности размещения экземпляров ОС на одном физическом хосте; встроенные средства системной аналитики, использующие технологии машинного обучения и позволяющие не только находить проблемные места в серверной инфраструктуре, но и прогнозировать возникновение возможных неисправностей; улучшенную совместимость приложений со средой Server Core; поддержку протокола SMB для контейнеров; встроенные средства защиты виртуализованных окружений; поддержку сетевого протокола HTTP/2; функции дедупликации и сжатия томов ReFS; возможности масштабирования файловых хранилищ Scale-Out File Server до 4 Пбайт на кластер и ручного разграничения выделения томов для повышения отказоустойчивости; поддержку Kubernetes; упрощённый механизм проверки подлинности копий Windows в контейнерах; поддержку энергонезависимой памяти для виртуальных машин Hyper-V; наличие средств оценки производительности в Storage Spaces Direct а также прочие нововведения, полный список которых представлен на информационной площадке Windows IT Pro Center и доступен для вдумчивого изучения по этой ссылке. Как было отмечено выше, операционная система Windows Server 2019 уже доступна для приобретения и развёртывания в организациях. Как и в случае с предыдущей версией, ОС предлагается в редакциях Datacenter, Standard и Essentials, разнящихся набором поддерживаемых функций и стоимостью. Для оценки функциональных возможностей системы предусмотрена пробная версия программной платформы, имеющая ограничения по времени работы.

k010v

k010v

Создаем сетевое хранилище на основе FreeNAS

Недавно я рассматривал дистрибутив NAS4Free в качестве основы для домашнего сетевого хранилища. NAS4Free не впечатлил своими возможностями, теперь настала очередь его прародителя — FreeNAS.
Основное отличие с потребительской точки зрения заключается в том, что FreeNAS как бы больше ориентирован на корпоративный сегмент. Поэтому у разработчиков не стоит задача сделать систему, которая будет работать даже на доисторическом компе. У FreeNAS довольно большие рекомендуемые требования к оперативной памяти — 6 Гб, дистрибутив распространяется только для платформы x64. В качестве основы для домашнего сетевого хранилища я его рассматриваю только из-за бесплатности.
На момент написания обзора актуальная версия дистрибутива FreeNAS 9.10. Я специально взял комп с меньшим количеством оперативной памяти, всего 2 Гб. Посмотрим, что из этого выйдет. Пока в компьютере один жесткий диск, который предназначен для установки системы. Установка С сайта разработчиков скачивается установочный iso-образ. Можно ли скачать LiveCD версию или образ для USB-флешки я проверять не стал. Система загружается в первоначальный экран. Выбираем Install/Upgrade: Если на вашем ПК оперативной памяти меньше 4Гб, то вы получите соответствующее уведомление. Сообщение можно просто проигнорировать. Далее просят отметить диски, на которые мы хотим установить FreeNAS. Не совсем понятно, что именно разработчики имеют ввиду. Как это установить систему на несколько дисков сразу? Это будет RAID или что? Ну да фиг с ним. У нас всего один диск, его и выбираем: Далее надо придумать пароль для root и ввести его 2 раза. Ничего сложного: Последний вопрос перед началом установки — в каком режиме работать загрузчику на ПК. Если у вас старая материнская плата, то следует выбрать Boot via BIOS. Если новая, то можно выбрать Boot via UEFI: Через несколько минут установщик сообщит, что система установлена и нам нужно перезагрузиться: На этом установка завершена. Хочется сразу отметить, что процесс установки FreeNAS гораздо проще чем у NAS4Free. Выключаю комп, добавляю еще 2 жестких диска одинаковой емкости, которые будут использоваться для хранения информации. Подключаю ПК к сети и включаю питание. После загрузки начальный экран примет следующий вид. И тут так же есть отличие в пользу FreeNAS. Система сразу же получила IP адрес от роутера без нашей помощи. Ссылка для входа на web-интерфейс отображается в нижней части экрана. В нашем примере это http://192.168.17.50 Настройка Заходим в web-интерфейс с использованием пароля указанного при установке: После успешного входа запускается мастер начальной настройки. Это удобно. В NAS4Free этого нет. Нам предлагают выбрать язык, часовой пояс и раскладку клавиатуры для консоли: Далее нам предлагают определить схему добавления жестких дисков. Кроме первого и последнего пункта выбрать ничего нельзя. Странный вопрос. Выбираем первый пункт (automatic) и указываем имя пула: Дальше следует диалог сопряжения с доменом. Пропускаем этот шаг: Затем нас предлагают сразу насоздавать сетевых папок. Мы это сделаем чуть позже, а пока пропускаем: Далее идет настройка почтовых систем. Пропускаем… Последняя менюха, тут мы подтверждаем все наши действия: Вот наконец-то мы и добрались до интерфейса сетевого хранилища. Перавым бросается в глаза некоторая несуразица: зачем все элементы управления продублированы слева и сверху? Ну да ладно. Попробуем создать сетевую папку. Идем в меню Общие ресурсы, Windows SMB. Сделаем ресурс с названием test в нашем пуле жестких дисков: Интерфейс FreeNAS довольно предусмотрительный. После создания первой сетевой папки нам сразу предлагают включить нужную службу. Мы, конечно, соглашаемся: При необходимости можно отредактировать некоторые параметры службы: Однако, есть и ложка дегтя. Так же как и в NAS4Free мы не можем через web-интерфейс задать разрешения на каждую сетевую папку отдельно. Можем только выбрать гостевой доступ или нет. Если все было сделано с настройками по умолчанию (как у нас), то доступа на запись в сетевые папки у вас не будет: Получается, что так или иначе нужно уметь работать в консоли, чтобы гибко назначить права на каждую папку. Если права разграничивать не нужно, то в настройках службы можно выбрать уровень доступа по умолчанию в root. После этого появятся права на запись в сетевые папки у всех: Плюс FreeNAS заключается в том, что в отличие от NAS4Free вам не нужно заранее создавать папки в файловой системе, чтобы потом их расшаривать. Медиасервер Немаловажной функцией домашнего сетевого хранилища можно назвать функцию медиасервера. Здесь FreeNAS так же смотрится гораздо лучше, чем NAS4Free. Всё дело в том, что в интерфейсе FreeNAS есть возможность устанавливать плагины, которые реализуют ту или иную функцию. На мой взгляд, лучший медиасервер на любой платформе — это Plex, потому что он умеет транскодировать любые форматы для любых устройств и при этом обладает самым лучшим интерфейсом. Plex тут есть, только устанавливается через задницу. Установка плагина длилась около часа. При этом все это время было непонятно делает ли система что либо или нет. Об окончании установки вас никто не оповестит. Просто нужно обладать телепатическими способностями, чтобы заглянуть в раздел установленных плагинов. Когда там появится установленный медиасервер, его нужно будет включить: Еще не лишним будет перезагрузить web-интерфейс в браузере, чтобы Plex появился в левом древовидном списке. Часть настроек будет в разделе Jail. Первая странность, которую я обнаружил — Plex втихаря повесил себе отдельный IP: У меня этот адрес оказался уже занят другим устройством, поэтому настройку в Plex’e необходимо изменить. Еще один ньанс, что все содержимое Plex’a хранится в созданной нами ранее сетевой папке test\jail\plexmediaserver_1\ Зайти в web-интерфейс Plex’a можно отсюда: We-bинтерфейс: Plex предложит вам создать аккаунт, чтобы потом впаривать вам премиальные фичи за деньги. Можно от этого отказаться, нажав на ссылку «Что это» в правом нижнем углу и в следующем экране согласиться с ограниченной функциональностью: Далее несколько шагов настройки. Можно повторить в точности как на скриншотах. Нажимаем кнопку Следующий: Добавим одну библиотеку, например, с фильмами: Укажем путь до библиотеки: И нажмем Готово. Заключительная особенность медиасервера заключается в том, что он хранит все сое борохло в ранее созданной нами сетевой папке test\jails\plexmediaserver_1\media\ Пройдите в этот каталог, создайте там папку video и закиньте туда какой-нибудь фильм. Через некоторое время фильм появится в web-интерфейсе медиасервера и станет доступен для просмотра с любого ТВ по протоколу DLNA. С компьютеров можно смотреть или сразу с файла или через браузер. С мобильных устройств через приложение Plex. Аналогичные библиотеки вы можете создать для музыки и фотографий. torrenet-клиент torrent-клиент так же устанавливается в виде плагина, так же через задницу в Jails. Так же добавляется отдельный IP для службы, так же все папки настраиваются относительно корня Jails. Просто жопа!   Проверка отказоустойчивости В плане управления жесткими дисками мы согласились на автоматические настройки мастера при первом запуске. Настало время проверить, насколько надежно хранить информацию на FreeNAS. Как мы сказали в начале статьи для хранения данных мы вставили в ПК 2 жестких диска. Что будет, если мы один диск выдернем? Выдернул. Ничего не случилось, вся информация на месте, но в web-интерфейсе появился статус DEGRADED, свидетельствующий о повреждении пула: Выключил ПК, добавил новый чистый диск взамен «отказавшего». Но как его добавить в поврежденный пул без бубна не разберешься. Для обычных пользователей это адский ад! Заключение Как и ожидалось, FreeNAS плохо подходит для реальных задач для обычных пользователей или специалистов не знакомых с *nix системами. А если сюда еще добавить то количество несуразиц и недоработок, то можно уверенно сказать, что FreeNAS это очередное вечно недоделанное говно, которое чуть лучше, чем NAS4Free. Из-за неочевидности работы с жесткими дисками у вас есть реальный риск рано или поздно приехать на потерю данных. Как и в NAs4Free нельзя гибко настраивать права доступа к сетевым папкам Jails — это взрыв мозгов для нормального человека Не могу рекомендовать этот дистрибутив ни для домашнего применения ни для корпоративного. Плюсы бесплатности просто меркнут по сравнению с количеством потенциальных проблем.  

k010v

k010v

Как настроить микротик routerboard RB951G-2HnD

Продолжаю рассказ про замечательную серию устройств из Латвии, которые зарекомендовали себя как функциональные и надежные девайсы. В данной статье я подробно рассмотрю вопрос базовой настройки роутеров mikrotik на примере бюджетной и самой популярной модели RB951G-2HnD. Данная инструкция подойдет практически к любой модели, так как все они сделаны на базе одной и той же операционной системы. Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курсы по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Все подробности читайте ниже. Роутеры Mikrotik routerboard достаточно давно появились на рынке, но так до сих пор и не завоевали большую популярность. Хотя свою нишу заняли. Лично я считаю, что это отличный роутер для дома, по надежности у него нет конкурентов. Это действительно маршрутизатор, который можно один раз настроить и забыть. Лично мне еще ни разу не попадалось устройство, которое бы приходилось принудительно перезагружать, чтобы вывести его из комы, как это часто бывает с другими бюджетными железками. Распространение среди домашних пользователей сдерживает в первую очередь сложность настройки. И хотя более ли менее продвинутому пользователю может показаться, что ничего тут сложного нет. Но на самом деле есть. И я часто сталкивался с просьбами настроить роутер дома для раздачи интернета по wifi, так как купившие по чьей-нибудь рекомендации пользователи сами не могли полностью настроить нужный функционал, хотя инструкций в интернете хватает. Этот пробел я хочу восполнить и написать подробную пошаговую инструкцию по настройке микротика с нуля для чайников на примере самой подходящей для дома модели RB951G-2HnD. У меня давно подготовлена личная шпаргалка в виде текстового файла. По ней я буквально за 10 минут настраиваю роутер и отдаю пользователю. То есть реально ничего сложного нет, если знаешь, что делаешь. На основе этой шпаргалки я и напишу материал. Возможно опытному пользователю нечего будет тут почерпнуть, а может быть я сам что-то делаю не совсем правильно или не оптимально. Прошу сделать подсказку или замечание в комментарии, если это действительно так. Я пишу статьи в том числе и для того, чтобы самому научиться чему-то новому. Как гласит одна восточная мудрость — чтобы получить новые знания, нужно поделиться теми, что есть у тебя с другими. Именно этим я и занимаюсь на страницах данного сайта. Описание Mikrotik RB951G-2HnD Вот он, герой сегодняшней статьи — Mikrotik RB951G-2HnD. Его описание, отзывы и стоимость можно быстро проверить на Яндекс.Маркете. По количеству отзывов уже можно сделать вывод об определенной популярности этого роутера. Внешний вид устройства. Важной особенностью этого роутера, которой лично я активно пользуюсь, является возможность запитать его с помощью специального poe адаптера. На изображении он справа. Берется стандартный блок питания от роутера и poe адаптер. Блок питания подключается к адаптеру, а от адаптера уже идет патч корд в первый порт routerboard. Маршрутизатор можно повесить на стену в любое место, нет необходимости привязываться к розетке. Сразу отмечу, что запитать роутер можно только poe адаптером микротика. У него другой стандарт и привычные poe свитчи 802.3af не подойдут. Существует похожая модель RB951Ui-2HnD. Она отличается от описываемой мной только тем, что у нее 100Mb порт, а у RB951G-2HnD 1Gb. Если для вас эти отличия не принципиальны, то можете покупать более дешевую модель. В остальном они идентичны. Будем потихонечку двигаться дальше. Как проще всего настроить микротик? Я для этого использую стандартную утилиту winbox. Можно пользоваться и web интерфейсом, но лично мне намного удобнее winbox. Так что для продолжения настройки скачивайте ее на компьютер. Сброс настроек роутера Подключаем роутер к сети, подаем питание и запускаем на компьютере winbox. Переходим на вкладку Neighbors и ждем, когда утилита найдет наш микротик. Это может занять какое-то время. На всякий случай можно нажать Refresh, если роутер долго не обнаруживается. Нажимаем на мак адрес устройства, он должен будет скопироваться в поле Connect To. Пароль по-умолчанию для входа в роутеры mikrotik — пустой, а пользователь — admin. Вводим имя пользователя, поле с паролем оставляем не заполненным. Нажимаем connect. Нас встречает информационное окно, в котором приведено описание стандартных настроек. Здесь их можно либо оставить, либо удалить. Я всегда удаляю, так как стандартные настройки чаще всего не подходят под конкретную ситуацию. Приведу несколько примеров, почему это так: Я запитал свой роутер по первому порту через poe адаптер и поэтому вынужден использовать этот порт как локальный. В настройках по-умолчанию этот порт используется как wan порт для получения интернета от провайдер. В настройках по-умолчанию установлено автоматическое получение настроек от провайдера по dhcp. Если у вас другой тип подключения, то вам стандартная настройка не подходит. По-умолчанию устанавливается адресное пространство 192.168.88.0/24. Мне лично не нравятся сетки по-умолчанию, так как если в них случайно воткнуть новое устройство, где будет так же забит умолчательный адрес, то в сети начнутся проблемы. Дома может это и не актуально, но в коммерческих организациях мне приходилось с этим сталкиваться. Поэтому я на всякий случай сетку всегда меняю. Так что мы нажимаем Remove Configuration, чтобы удалить настройки. После этого роутер перезагрузится. Ждем примерно минуту и подключаемся к нему снова. Если вы по какой-то причине не удалили сразу предустановки, то выполнить сброс настроек в mikrotik на заводские можно позже. Для этого надо в терминале набрать сначала system, а затем reset. У вас спросят подтверждение и после этого routerboard перезагрузится с заводскими настройками. Обновление прошивки После очистки настроек я рекомендую сразу выполнить обновление прошивки роутера Mikrotik. Для этого идем в раздел Download официального сайта и скачиваем нужный файл. В данном случае это платформа mipsbe, пакет для загрузки Main package. Загружаем его на компьютер и подключаемся к роутеру с помощью winbox. Выбираем слева раздел Files. Затем открываем рядом два окна — один с файлом прошивки, второй с winbox и перетаскиваем мышкой файл из папки в winbox в список файлов. Дожидаемся окончания загрузки прошивки и перезагружаем микротик через раздел меню System -> Reboot. Прошивка обновится во время загрузки роутера. Подождать придется минуты 3. Поле этого снова подключаемся к устройству. После обновления прошивки, нужно обновить загрузчик. Делается это в пункте меню System — RouterBoard. Заходите туда, проверяете строки Current Firmware и Upgrade Firmware. Если они отличаются, то жмете кнопку Upgrade. Если одинаковые, то можно ничего не делать. Изменения вступят в силу после перезагрузки. Проверить версию установленной прошивки можно в разделе System — Packages. В моем случае версия прошивки — 6.43.4. В будущем, когда на роутере будет настроен интернет, обновляться можно автоматически в этом разделе, нажимая на Check For Updates. Прошивку обновили, можно приступать к настройке. Объединение портов в бридж Одной из особенностей роутеров mikrotik routerboard является отсутствие предустановленных настроек портов. Объясняю на пальцах, что это такое. Покупая обычный бюджетный роутер, вы увидите подписи к портам. На одном из них обязательно будет написано WAN, на других либо ничего не будет написано, либо LAN. То есть у вас уже будет один порт настроен определенным образом для подключения интернета и остальные порты будут объединены в switch для удобства подключения оборудования. В Mikrotik не так. Там все порты равнозначны и WAN портом может стать абсолютно любой, какой пожелаете. Так как я 1-й порт использую для подключения питания, в качестве WAN у меня будет выступать 5-й порт. А все остальные я объединю в единую сеть с помощью bridge и добавлю к ним wifi интерфейс. Для этого идем в раздел Bridge и создаем новый bridge1. Настройки все оставляем дефолтные. У нас появился bridge1. Переходим на вкладку ports и жмем плюсик. Добавляем в brdige1 все порты, кроме WAN. В моем случае это 5-й порт. Мы объединили все необходимые интерфейсы в бридж для организации единого пространства для всех подключенных устройств. Настройка статического IP До этого мы подключались к роутеру по МАК адресу. Сейчас можно ему назначить статический локальный ip адрес, по которому он будет доступен в сети. Для этого идем в раздел IP -> Addresses и жмем плюсик. Указываете в разделе Address любую подсеть. Я выбрал 192.168.9.0. Соответственно микротику мы назначаем адрес  192.168.9.1/24. В качестве интерфейса выбираем bridge1. Поле Network можно не заполнять, оно заполнится автоматически. Теперь наш роутер доступен и по локальным интерфейсам, и по wifi (который еще предстоит настроить) по адресу 192.168.9.1. Настройка интернета в микротик Сейчас самое время подключиться к провайдеру и настроить интернет. Тут трудно охватить все возможные варианты подключения. Их может быть много. Я рассмотрю два самых популярных способа: Вы получаете настройки от провайдера автоматически по dhcp. Провайдер дал вам готовые настройки и вы их вводите вручную. Как я уже писал ранее, для подключения к провайдеру мы будем использовать 5-й порт. Подключайте провод провайдера. Для получения настроек по dhcp переходите в winbox в раздел IP -> DHCP Client и жмите плюсик. Выбираете интерфейс ether5 и жмете ОК. Если вы все сделали правильно, то увидите, какой IP адрес получили. В разделе IP -> Addresses будет информация о настройках. Рассмотрим вариант, когда провайдер выдал все настройки и вам нужно самим их задать. Будем считать, что наши настройки интернета следующие: IP адрес 192.168.1.104 Маска 255.255.255.0 Шлюз 192.168.1.1 DNS 192.168.1.1 Сначала укажем IP адрес. Делаем все то же самое, что и в предыдущем пункте при настройке статического IP. Только теперь вместо интерфейса bridge1 указываем ether5 и вводим соответствующий адрес — 192.168.1.104/24. Тут мы сразу указали и адрес и маску подсети. Дальше нам нужно установить шлюз по-умолчанию. Без этого обязательного шага интернет не заработает. Идем в раздел IP -> Routes и жмем плюсик для добавления шлюза по-умолчанию. В Dst. Address оставляем как есть 0.0.0.0/0, а в поле Gatewayвписываем шлюз провайдера и жмем ОК. Уже сейчас интернет должен заработать, но без указания DNS сервера обращаться можно только по прямым ip адресам. Например можно пропинговать ip адрес серверов гугла. Открываем New Terminal и проверяем. Теперь установим DNS сервер. Для этого идем в IP -> DNS, в поле Servers вводим адрес dns сервера провайдера. Если у вас их два, то нажав на треугольничек, направленной вершиной вниз, вы можете ввести еще одно значение. Обязательно ставите галочку напротив Allow Remote Requests. На этом все, мы полностью установили настройки интернета провайдера. Можно проверить и пропинговать привычный адрес сайта. На самом маршрутизаторе уже есть выход в интернет. На нам нужно его настроить для пользователей. Для этого продолжаем настройку mikrotik. Настройка dhcp сервера Для того, чтобы подключенные устройства могли получать сетевые настройки автоматически с роутера, на нем необходимо настроить DHCP сервер. Делается это не сложно, я сейчас по шагам все распишу. Идем в IP -> DHCP, переходим на вкладку DHCP и нажимаем DHCP Setup. Нам предлагают выбрать интерфейс, на котором будет работать сервер. Выбираем bridge1. Жмем next. Теперь нужно выбрать адресное пространство, из которого будут выдаваться ip адреса. По-умолчанию указана подсеть, в которую входит ip адрес роутера. На это подходит, оставляем значение по-умолчанию 192.168.9.0/24. Дальше нужно указать адрес шлюза, который будут получать клиенты. Так как для них шлюзом будет выступать сам микротик, оставляем его адрес, который уже предложен. Теперь нужно указать диапазон адресов, которые будут выдаваться клиентам. Если вам не принципиально и вы не знаете, зачем его нужно менять, то оставляйте как есть. Будут использованы все свободные адреса подсети. На последнем этапе вводим адрес dns сервера, который будет выдаваться клиентам. Это может быть как сам микротик, так и dns сервер провайдера. Это не принципиально, но лучше указать сам роутер. Так что пишем туда локальный адрес 192.168.9.1. Следующий параметр оставляем по-умолчанию и жмем Next. На этом настройка dhcp сервера для локальной сети закончена. Если мы сейчас проводом подключим любого клиента к mikrotik, то он получит сетевые настройки, но в интернет выйти не сможет. Не хватает еще одной важной настройки — NAT. Настройка NAT NAT это преобразование, или как еще говорят трансляция сетевых адресов. Я не буду рассказывать, что это такое, можно самим почитать в интернете. Все современные роутеры имеют функцию NAT для обеспечения доступа к интернету абонентов. Так что мы тоже настроим NAT в mikrotik. Идем в раздел IP -> Firewall, открываем вкладку NAT и жмем плюсик. На вкладке General указываем только один параметр Out. Interface — ether5 (интерфейс подключения к провайдеру), все остальное не трогаем. Переходим на вкладку Action, выбираем в выпадающем списке masquerade. Остальное не трогаем и жмем ОК. Все, NAT настроили. Теперь если подключить клиента проводом в один из портов, то он получит сетевые настройки по DHCP и будет иметь доступ к интернету. Нам осталось самая малость — настроить wifi для подключения беспроводных клиентов. Настройка wifi точки доступа в mikrotik Наш роутер почти готов к работе. Осталось только настроить wi fi точку доступа и можно про него забывать :). Настройка wifi в микротике заслуживает отдельной статьи. Там очень много нюансов и возможностей. Мы сейчас сделаем самую простую настройку, которая подойдет и полностью удовлетворит потребности домашнего wifi роутера. А для более глубоких познаний можно будет воспользоваться отдельным материалом на эту тему. Первым делом активируем беспроводной интерфейс. По-умолчанию он выключен. Идем в раздел Wireless, выбираем wlan1 и жмем синюю галочку. Интерфейс из серого станет светлым. Переходим на вкладку Security profiles, два раза жмем мышкой на строчку с профилем default. В поле Mode выбираем dynamic keys. Ставим галочки напротив WPA PSK и WPA2 PSK и aes ccm. В поля WPA Pre-Shared Key и WPA2 Pre-Shares Key вводим пароль от будущей беспроводной сети. Я рекомендую использовать длинный пароль (не меньше 12-ти символов) с цифрами и спецсимволами. Да, вводить не очень удобно, но после того, как я сам без проблем брутил хэши простых паролей, я убедился, что лучше поставить сложный пароль, если не хочешь, чтобы к твоему wifi кто-то подключался. Сохраняем настройки. Возвращаемся на вкладку Interfaces и два раза жмем на wlan1, открываются настройки wifi интерфейса микротика. Переходим на вкладку Wireless. Выставляем настройки как у меня на скриншоте. Обращаю внимание на следующие настройки: SSID — имя вашей беспроводной сети. Пишите то, что хочется. Frequency — частота, соответствующая одному из 12-ти каналов. Самое первое значение это первый канал и так далее. Тут рекомендуется выбрать тот канал, который в вашем конкретном случае менее всего занят другими точками доступа. Если вы не знаете что это за каналы и как их проверить, то не обращайте внимания, может выбрать любое значение из списка. Сохраняете настройки, нажимая ОК. Все, wifi  точка доступа на mikrotik настроена, можно проверять. Запускаете любое устройство, ищете вашу сеть, вводите пароль доступа и проверяете интернет. Все должно работать. На этом основная настройка микротика закончена, но я рекомендую выполнить еще несколько настроек для удобства и безопасности. Смена пароля администратора по-умолчанию Как я уже писал ранее, пароль администратора по-умолчанию в mikrotik не задан, он пустой. Имя пользователя — admin. Давайте установим свой пароль для ограничения доступа посторонних к настройкам. Для этого идем в раздел System -> Users. Выбираем единственного пользователя admin, жмем правой кнопкой мыши и выбираем самый последний пункт password. В открывшемся окошке 2 раза вводим свой пароль и сохраняем его. Теперь, чтобы подключиться через winbox нужно будет указать не только пользователя admin, но и установленный пароль. В свете последних взломов микротика, я настоятельно рекомендую не просто установить сложный пароль на административную учетную запись, а создать полностью новую, с именем пользователя отличным от admin. Для этого в списке пользователей, жмите плюсик и создавайте нового пользователя. После этого, пользователя admin можно отключить. Настройка времени Я рекомендую устанавливать правильное время и включать его автоматическую синхронизацию. Это может пригодиться, если вам понадобится посмотреть какие-нибудь логи и сопоставить время. Если оно не будет установлено, то это трудно сделать. Так что настроим его. Идем в System -> Clock, устанавливаем вручную время, дату и часовой пояс. Сделаем так, чтобы время автоматически обновлялось через интернет. Идем в раздел System -> SNTP Client. Ставим галочку Enabled, в поле с адресами серверов вводим 193.171.23.163 и 85.114.26.194. Жмем Apply и наблюдаем результат синхронизации. Теперь часы роутера всегда будут иметь актуальное время. На этом базовая настройка роутера mikrotik для домашнего пользования закончена. Можно устанавливать его на место и пользоваться.   Статья позаимствована с ресурса serveradmin.ru    

k010v

k010v

Asterisk — SIP АТС для офиса, пошаговая инструкция по настройке с нуля

Одним из рабочих инструментов офиса, несмотря на стремительные изменения последних десятилетий, по-прежнему является телефон. Мы займемся пошаговой настройкой с нуля АТС asterisk — современного инструмента для организации телефонии в офисе на основе протокола SIP. Я подробно с примерами и описанием проведу вас по основным параметрам, необходимым для базового функционала.   Не буду останавливаться на описании сервера asterisk, в интернете много информации на эту тему. Да и сам я кратко рассказывал в своих предыдущих статьях про установку. Материал будет объемный, поэтому сразу перейдем к сути. Статья планируется учебная, поэтому использовать будем голый asterisk без каких-либо web панелей для управления. Выполнять настройку asterisk будем с нуля, то есть с самой начальной установки самого сервера телефонии и всех зависимостей. Если вы разберетесь и освоите этот материал, то потом без проблем сможете настроить и поддерживать любую конфигурацию на основе астериска. Я хочу подробно рассказать о настройке asterisk на конкретном примере, где будет собран в одном месте расширенный функционал, отвечающий практически на все запросы среднестатистического офиса. Сразу хочу обратить внимание на очень важный момент. Я не являюсь профессионалом в настройке asterisk. Данный материал является калькуляцией всех моих знаний на текущий момент, которые я методично шаг за шагом собирал из доступных в интернете источников. По этой статье вы получите рабочий, многофункциональный сервер телефонии, работу которого я проверял на практике. Но это не означает, что все, что здесь настроено, сделано наилучшим образом. Я постоянно учусь и совершенствую свои знания. Если вы увидите ошибки, недочеты, варианты более правильной и удобной настройки, прошу об этом сообщить в комментариях, я проверю и обновлю статью. Для примера опишем наш воображаемый офис: Работает 30 сотрудников. Номера будут трехзначные, от 100 до 130. У нас будут 3 отдела — менеджеры, техподдержка, руководство и все остальные. Номер секретаря 100, менеджеры 101-110, техподдержка 111-120, руководство 121-130. Мы будем использовать одного SIP провайдера для звонков. Кратко получается такая картина. Я не пишу в самом начале о техническом задании, которое буду реализовывать. Каждый момент буду описывать и раскрывать в соответствующем разделе. Для настройки я буду использовать учетную запись сервиса zadarma.com. Сразу скажу, что в реальной работе я никогда не использовал этот сервис и его качество мне не известно. Беру его для примера, потому что удобно использовать для тестирования конфигурации. Сразу после регистрации вам дают аккаунт, пример настроек для asterisk. Вы можете позвонить на прямой городской номер, ввести добавочный и совершить звонок на свой аккаунт. Это полностью эмулируер работу sip подключения от какого-нибудь провайдера. В качестве операционной системы у меня выступает CentOS 7. Но для данной статьи это не имеет принципиального значения. Конфигурация астериск кроссплатформенная, без проблем переносится между системами. Приступаем к нашей работе по настройке сервера телефонии. Быстрая установка из репозитория У asterisk не существует официального репозитория пакетов, поэтому предпочтительным способом установки свежей версии является сборка из исходников. Но если вы хотите быстро установить и потестить систему, то можно использовать один из сторонних репозиториев asterisk. К примеру — Tuncy. Я не знаю, кто ведет этот репозиторий, как часто он обновляется и насколько там актуальные версии. Добавляем репозиторий астериск в систему. Для этого создаем файл /etc/yum.repos.d/tuncy-asterisk-13.repo следующего содержания. [asterisk-common] name=Asterisk Common Requirement Packages @ tucny.com baseurl=https://ast.tucny.com/repo/asterisk-common/el\$releasever/\$basearch/ enabled=1 gpgcheck=1 gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny [asterisk-13] name=Asterisk 13 Packages @ tucny.com baseurl=https://ast.tucny.com/repo/asterisk-13/el\$releasever/\$basearch/ enabled=1 gpgcheck=1 gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny Обновляем информацию о репозиториях и устанавливаем астериск. # yum install asterisk Установка из исходников Вопроса установки asterisk я уже касался в своей прошлой статье. Но там я использовал связку с панелью управления freepbx. Здесь же мы будем использовать голый астериск, без обвязок. Более того, я не буду использовать никаких дополнительных плат расширения и модемов. Будет только софтовая АТС, которая легко переносится с одного сервера на другой при желании. Считаю, что такой подход наиболее эффективен и к нему стоит стремиться. Настроив виртуальную машину, вы навсегда будете отвязаны от конкретного железа и спокойно можете переносить свой сервер куда угодно, заменив только сетевые настройки. Таким образом, нам нужно установить непосредственно asterisk и pjproject с jansson. На первоначальном этапе этого достаточно. Если вы предпочитаете сервер debian, то воспользуйтесь отдельной инструкцией по установке asterisk 13 на debian 8. После этого можете сразу же переходить на следующий этап настройки. Приступим. Первым делом обновляем систему и отключаем SELinux, как рассказано в статье про настройку centos. Подключаем репозиторий epel и устанавливаем необходимые пакеты, которые нам пригодятся в дальнейшем: # yum -y install epel-release # yum -y install lynx mariadb-server mariadb php php-mysql php-mbstring tftp-server httpd ncurses-devel sendmail sendmail-cf sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel sqlite-devel net-tools gnutls-devel php-pear phpmyadmin # yum -y groupinstall core base "Development Tools" Скачиваем и устанавливаем pjproject: # cd /usr/src # wget http://www.pjsip.org/release/2.4/pjproject-2.4.tar.bz2 # tar -xjvf pjproject-2.* # cd pjproject-2.* # CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr --libdir=/usr/lib64 # make dep # make # make install Скачиваем и устанавливаем jansson: # cd /usr/src # wget -O jansson.tar.gz https://github.com/akheron/jansson/archive/v2.7.tar.gz # tar vxfz jansson.tar.gz # cd jansson-* # autoreconf -i # ./configure --libdir=/usr/lib64 # make # make install Скачиваем и устанавливаем asterisk 13: # cd /usr/src # wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz # tar xvfz asterisk-13-current.tar.gz # cd asterisk-* # contrib/scripts/install_prereq install # contrib/scripts/get_mp3_source.sh # ./configure --libdir=/usr/lib64 --with-pjproject-bundled # make menuselect Выбираем необходимые модули и звуки: Add-ons: format_mp3, res_config_mysql, app_mysql и cdr_mysql. Core Sound Packages: Выбираем русские звуки RU-WAV. Music On Hold File Packages: Выбираем звук WAV. Extras Sound Packages: Выбираем английский EN-WAV, русского к сожалению нет. Все остальные настройки оставляем по-умолчанию. Ставится много модулей. Все они не нужны, но мало ли, пригодится что-то в будущем. Неиспользуемые модули можно будет потом отключить в конфигурации. Продолжаем установку: # make # make install # make samples # make config # ldconfig Устанавливаем русскую core озвучку хорошего качества и английскую для extra, русской к сожалению нету: # cd /var/lib/asterisk/sounds # wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ru-wav-current.tar.gz # wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-wav-current.tar.gz # tar xvf asterisk-core-sounds-ru-wav-current.tar.gz # tar xvf asterisk-extra-sounds-en-wav-current.tar.gz Добавляем астериск в автозагрузку и запускаем: # chkconfig asterisk on # service asterisk start Проверим, запустился ли он, зайдя в консоль: # asterisk -r Если получили такой же вывод команды, значит все в порядке, астериск установлен. Настройка iptables, asterisk за NAT, проброс портов Сразу же уделим внимание настройке iptables для работы астериск. У нас может быть 2 ситуации, которые требуют двух принципиально различных настроек: Сервер телефонии имеет свой внешний ip адрес и напрямую смотрит через него в интернет. Сервер стоит за шлюзом, не имеет своего внешнего адреса, доступ в интернет с помощью NAT. В первом случае нам нужно открыть на iptables необходимые порты для работы, все остальное закрыть.  Я не могу привести универсальные настройки для всех случаев. У каждого будут свои нюансы. Кто-то, к примеру, будет пользоваться phpmyadmin для настройки базы mysql для хранения статистики звонков. Потом эту же статистику будет просматривать через cdr viewer, установленный на веб сервере. Доступ к этому веб серверу можно открыть через внешний IP адрес, а можно только через локальную сеть. Настройки iptables в данном случае будут разные. В моем примере сервер будет находиться в локальной сети офиса за nat. Доступ в интернет осуществляется через офисный шлюз, на котором установлены iptables. На нем будет сделан проброс необходимых портов для работы внешних телефонных аппаратов. В случае, если у вас все телефоны будут находиться в локальной сети офиса вместе с сервером телефонии, пробрасывать ничего не нужно. С сервисом zadarma все будет работать без проброса портов. Пиры зарегистрируются на внешнем сервере провайдера и этого будет достаточно для приема и совершения звонков. С другими провайдерами этого может быть не достаточно. В общем случае для настройки asterisk за nat нужно будет на шлюзе пробросить порт 5060 и диапазон 10000:20000. По-умолчанию астериск использует UDP порты. Если вы не будете менять эти настройки, то пробрасывать нужно именно UDP. В моем случае получается следующая картина. На шлюзе сделан проброс необходимых портов: iptables -t nat -A PREROUTING -p udp --dst $WAN_IP --dport 5060 -j DNAT --to 192.168.1.25:5060 iptables -t nat -A PREROUTING -p udp --dst $WAN_IP --dport 10000:20000 -j DNAT --to 192.168.1.25 $WAN_IP Внешний IP адрес на шлюзе 192.168.1.25 Локальный адрес сервера астериск Настройкой фаервола на самом астериске я не хочу сейчас заниматься, статья и так масштабная получается. С этим без проблем можно разобраться с помощью моей статьи по iptables, ссылку на которую я привел в начале раздела. Нужно просто открыть указанные выше порты, и любые другие, которые будут использоваться на сервере. Подключение абонентов и проверка внутренних звонков Астериск у нас установлен, firewall настроен. Можно попробовать подключиться и протестировать работу АТС. Я для отладки использую бесплатную софтовую звонилку 3CXPhone 6-й версии. Не знаю, где ее сейчас найти в интернете. У самого производителя давно уже вышли более новые и платные версии, которые работают только с его АТС. А эта версия универсальная. В ней отличный функционал, удобные настройки, есть дебаг режим с подробным логированием. Пользоваться программой удобно и приятно. Скачиваем ее у меня и устанавливаем. Теперь нам нужно сделать некоторые общие настройки и добавить пользователей. Работать будем с файлом конфигурации /etc/asterisk/sip.conf. Файлы настроек астера хорошо закомментированы, но мне это мешает с ними работать. Они слишком большие и громоздкие, неудобно прокручивать вверх и вниз, поэтому я их полностью чищу и вношу только те настройки, которые мне нужны. Так удобнее и нагляднее получается. Сохраните на всякий случай куда-нибудь оригинальный файл sip.conf и начинайте новую настройку. Вот мой пример конфига для нашего случая: [general] ;Внешний ip адрес externaddr=212.78.136.18:5060 ;Указываем использовать русскую озвучку language=ru context=default allowoverlap=no udpbindaddr=0.0.0.0 tcpenable=no tcpbindaddr=0.0.0.0 transport=udp srvlookup=yes allowguest=no limitonpeers=yes [authentication] ;Создаем шаблон для телефонов менеджеров [managers-phones](!) type=friend context=call-out secret=123 host=dynamic nat=no qualify=yes canreinvite=no callgroup=1 pickupgroup=1 call-limit=1 dtmfmode=auto disallow=all allow=alaw allow=ulaw allow=g729 allow=g723 allow=g722 ;Создаем пользователей менеджеров [100](managers-phones) callerid="Number 100" <100> [101](managers-phones) callerid="Number 101" <101> [102](managers-phones) callerid="Number 102" <102> [103](managers-phones) callerid="Number 103" <103> [104](managers-phones) callerid="Number 104" <104> [105](managers-phones) callerid="Number 105" <105> [106](managers-phones) callerid="Number 106" <106> [107](managers-phones) callerid="Number 107" <107> [108](managers-phones) callerid="Number 108" <108> [109](managers-phones) callerid="Number 109" <109> [110](managers-phones) callerid="Number 110" <110> ;Создаем шаблон для телефонов поддержки [support-phones](!) type=friend context=call-out secret=456 host=dynamic nat=no qualify=yes canreinvite=no callgroup=2 pickupgroup=2 call-limit=1 dtmfmode=auto disallow=all allow=alaw allow=ulaw allow=g729 allow=g723 allow=g722 ;Создаем пользователей техподдержки [111](support-phones) callerid="Number 111" <111> [112](support-phones) callerid="Number 112" <112> [113](support-phones) callerid="Number 113" <113> [114](support-phones) callerid="Number 114" <114> [115](support-phones) callerid="Number 115" <115> [116](support-phones) callerid="Number 116" <116> [117](support-phones) callerid="Number 117" <117> [118](support-phones) callerid="Number 118" <118> [119](support-phones) callerid="Number 119" <119> [120](support-phones) callerid="Number 120" <120> ;Создаем шаблон для телефонов топов [top-phones](!) type=friend context=call-out secret=789 host=dynamic nat=no qualify=yes canreinvite=no callgroup=3 pickupgroup=3 call-limit=1 dtmfmode=auto disallow=all allow=alaw allow=ulaw allow=g729 allow=g723 allow=g722 ;Создаем пользователей топов [121](top-phones) callerid="Number 111" <121> [122](top-phones) callerid="Number 122" <122> [123](top-phones) callerid="Number 123" <123> [124](top-phones) callerid="Number 124" <124> [125](top-phones) callerid="Number 125" <125> [126](top-phones) callerid="Number 126" <126> [127](top-phones) callerid="Number 127" <127> [128](top-phones) callerid="Number 128" <128> [129](top-phones) callerid="Number 129" <129> [130](top-phones) callerid="Number 130" <130> Я немного пояснил комментариями отдельные моменты. Чтобы сократить размер sip.conf, я использую шаблоны групп номеров, где задаю общие настройки для группы. Затем просто создаю пользователей и указываю их принадлежность к группе. Они берут все настройки этой группы. Если вам необходимо будет задать отдельные настройки для какого-то пользователя, как у меня, к примеру, callerid, то вы просто в его разделе указываете эти настройки. У меня стоит один и тот же пароль для всей группы. Это удобно, если все телефоны стационарные и стоят в офисе, настраивают их только сисадмины. Делать каждому персональный пароль особого смысла нет. Если вам это не нужно, то указывайте персональный пароль для каждого пользователя. Я просто привожу примеры использования тех или иных настроек, но не призываю делать так же, как я. Во многих случаях так делать нельзя. Уточню еще некоторые нюансы. Параметры callgroup и pickupgroup задают группы перехвата звонков. Люди из одной группы могут перехватывать звонки друг друга. Удобно заводить в одну группу людей, сидящих в одной комнате. Так они видят, что человека нет на месте и перехватывают его звонок. Эти параметры можно индивидуально задать для каждого пользователя в отдельности, если разбивка по шаблонам настроек не соответствует реальной рассадке людей в офисе. Параметр callerid можно задать кириллицей, но могут возникнуть проблемы с некоторыми телефонами и точно возникнут проблемы, когда вы будете вести статистику звонков в mysql. Я не смог победить эту проблему с кодировками, поэтому использую только латиницу в этом параметре. Туда можно писать либо должность, либо ФИО человека. call-limit=1 задает количество одновременных соединений на линию. Если у вас один человек = один телефонный аппарат, то разрешать больше одной линии на пользователя нет смысла. Ему будет идти новый звонок в тот момент, как он разговаривает. Конечно, если есть необходимость переключаться между разговорами и ставить кого-то на удержание, то можно делать и больше линий. Но мне кажется, это неудобно. Если ты разговариваешь, пусть звонящий лучше услышит занято и перезвонит. Я всех добавляю в один context. В данном примере у нас будет только один номер телефона на всех. Если у вас их будет несколько, то контекстами можно будет разводить звонки на разные номера. Эту ситуацию я рассмотрю в отдельной статье. Сохраняем sip.conf. Теперь нам нужно добавить план звонков, для того, чтобы можно было совершать вызовы. Для этого как и с предыдущим конфигурационным файлом, очищаем файл extensions.conf и записываем туда следующую информацию: [general] static=yes writeprotect=no [globals] [default] ;Вешаем трубку [handup-sip] exten => _X!,1,HangUp() ;Исходящие звонки [call-out] ;Звонок на внутренний номер exten => _XXX,1,Dial(SIP/${EXTEN}) include => handup-sip Мы просто добавили один план звонков на трехзначные номера. Я сразу добавляю комментарии с заделом на дальнейшее расширение этого файла, чтобы потом было проще разбираться. Сохраняем файл. У нас все готово для внутренних звонков через asterisk. Заходим в консоль и перезагружаем его: # asterisk -r CLI> reload Вы увидите некоторые предупреждения и ошибки. Это не страшно, так и должно быть, так как мы многое еще не настроили. Загружаются модули, которым не хватает настроек. Проверим список созданных пользователей с помощью команды в консоли: CLI> sip show users Видим всех наших пользователей, их пароли и контекст. Список отсортирован не по порядку, не пугайтесь, если не заметите какой-то номер. Дальше устанавливайте любую софтовую звонилку на компьютер или можете сразу использовать телефон, если он у вас под рукой. С телефонами удобнее, но не всегда они есть. В 3CXPhone задаем следующие настройки подключения к нашей ip атс: Я сразу открываю дебаг окно для отладки. Корректное подключение к серверу будет выглядеть вот так: Проверим на сервере список подключенных пиров с помощью команды: CLI> sip show peers Должна быть строка с подключенным пиром: 100/100                   192.168.1.100                            D  No         No             59891    OK (104 ms) Если у вас так же, то все в порядке. Чтобы протестировать звонки, нам нужно подключить двух абонентов. Настраивайте еще один телефон или софтофон. Проверяйте в списке подключенных пиров чтобы было 2 подключения и попробуйте позвонить друг другу. Если вы все сделали правильно, то локальные звонки должны работать. После звонка в файле /var/log/asterisk/cdr-csv/Master.csv появится запись о совершенном звонке: "","100","121","call-out","""Number 100"" <100>","SIP/100-00000000","SIP/121-00000001","Dial","SIP/121","2016-04-21 12:32:37","2016-04-21 12:32:42","2016-04-21 12:32:46",9,4,"ANSWERED","DOCUMENTATION","1461241957.0","" В этом файле будет накапливаться статистика звонков. Позже мы перенесем ее в mysql. Я позвонил с номера 100 на номер 121, там мне ответили. В файле отражены все основные данные этого звонка. Один небольшой шажок по настройке voip атс asterisk мы сделали. Будем двигаться дальше. Настройка sip trunk (транка) и добавление номера Регистрируемся у какого-нибудь sip провайдера и получаем настройки транков для подключения. Как я говорил выше, я буду использовать провайдера zadarma. После регистрации в личном кабинете я вижу свой логин, пароль для подключения и адрес сервера. Там же можно узнать пример настройки подключения для астериска и номера для тестовых звонков: Номер для эхо-теста: 4444. Информация про остаток на счету: 1111 Прямой звонок: Москва +7 (495) 777-66-75 и внутренний номер клиента (логин) Нам этого будет достаточно для полноценного тестирования конфигурации астериска. Добавляем необходимые настройки sip транка, чтобы выполнить его регистрацию. Редактируем sip.conf, добавляем в самый конец нового пира в соответствии с инструкцией провайдера: [397945] host=sip.zadarma.com insecure=invite,port type=friend fromdomain=sip.zadarma.com disallow=all allow=alaw dtmfmode=auto secret=password defaultuser=397945 trunkname=397945 fromuser=397945 callbackextension=397945 context=call-in qualify=400 directmedia=no nat=force_rport,comedia В данном случае 397945 мой внутренний номер в сервисе, password — пароль. Сохраняем файл и даем команду астеру перечиать его: CLI> sip reload Тут же в консоли, если все в порядке, вы получите сообщение: chan_sip.c:24403 handle_response_peerpoke: Peer '397945' is now Reachable. (55ms / 400ms) Это означает, что наш пир успешно зарегистрировался у провайдера. Проверить это можно с помощью уже известной команды: CLI> sip show peers 397945/397945             185.45.152.161                              Auto (No)  No             5060     OK (54 ms) Все, транк настроили, по сути подключили номер. Но этого не достаточно, чтобы совершать и принимать звонки. Надо отредактировать dialplan. Dial-plan — пример маршрутизации звонков Начало построения диалплана для маршрутизации звонков мы уже положили, когда настраивали внутренние звонки. Теперь нужно дополнить dial-plan для совершения исходящих и приема входящих звонков. Редактируем extensions.conf и приводим его к следующему виду: [general] static=yes writeprotect=no [globals] [default] ;Вешаем трубку [handup-sip] exten => _X!,1,HangUp() ;Исходящие звонки [call-out] ;Звонок на внутренний номер exten => _XXX,1,Dial(SIP/${EXTEN}) ;Звонок на внешний номер exten => _XXX.,1,Dial(SIP/${EXTEN}@397945) include => handup-sip ;Входящие звонки [call-in] exten => 397945,1,Dial(SIP/100) Я выложил полную версию файла, а не только то, что добавил. Добавленные строки выделил цветом. В нашем примере в контекст исходящих звонков мы добавили правило набора любого номера длиннее трех символов через транк 397954. Если в локальных звонках маска экстеншена задается тремя любыми символами, то тут мы в конец добавили точку, которая означает любое количество символов. С таким диалпланом при наборе трехзначного номера вы позвоните на локальный номер, а при наборе любого городского номера сможете позвонить на него без каких-либо добавочных цифр. Сразу набираете номер с 8 и так далее. Контекст [call-in] описывает поведение при входящем звонке. В нашем случае все входящие звонки с транка 397945 будут направляться на номер секретаря 100. К этому контексту мы еще вернемся позже, когда будем настраивать голосовое меню. Сохраняем dial-plan и перезагружаем астериск единой командой reload, либо отдельно перезагружаем sip и dialplan командами: CLI> sip reload CLI> dialplan reload Теперь можно попробовать позвонить, к примеру, на тестовый номер zadarma — 4444 для эхотеста. Если все получилось, значит вы правильно настроили исходящие звонки. Для проверки входящего звонка, позвоните в Москве на номер +7 (495) 777-66-75 и введите свой добавочный номер в виде логина. Звонок должен переключиться на номер 100. Чтобы это произошло, необходимо, чтобы peer с номером 100 был подключен к астериску. Я проверил, без проблем дозвонился и по исходящему номеру, и по входящему. В файле Master.csv появилась информация о совершенных звонках: "","100","4444","call-out","""Number 100"" <100>","SIP/100-00000002","SIP/397945-00000003","Dial","SIP/4444@397945","2016-04-21 14:07:05","2016-04-21 14:07:05","2016-04-21 14:07:34",28,28,"ANSWERED","DOCUMENTATION","1461247625.3","" "","79998056609","397945","call-in","""79998056609"" <79998056609>","SIP/397945-00000004","SIP/100-00000005","Dial","SIP/100","2016-04-21 14:09:32","2016-04-21 14:09:40","2016-04-21 14:09:44",12,4,"ANSWERED","DOCUMENTATION","1461247772.6","" После звонков в консоли астера и в логе /var/log/asterisk/messages вы увидите множество ошибок: res_hep.c: Unable to send packet: Address Family mismatch between source/destination Чтобы их не было, вам нужно на сервере отключить протокол ipv6. В таком виде АТС уже вполне работоспособна, можно пользоваться, но есть ряд неудобств. Например, если позвонить на трехзначный номер, которого не существует, или на номер, который не зарегистрирован в данный момент на устройстве, вы просто получите сброс звонка и не поймете, в чем проблема. Для этих событий нужна отдельная обработка. Чтобы не загружать сразу файл конфигурации длинными и непонятными конструкциями, я рассмотрю этот момент ниже, когда буду рассказывать про голосовую почту. Это не критичная настройка, в таком виде все будет замечательно работать, но не так удобно, как могло бы. Приветствие и голосовое меню (ivr) Основной функционал asterisk реализован. Будем его расширять. Практически на всех АТС присутствует голосовое меню, которое встречает звонящего. Я рассмотрю настройку самого простого варианта голосового меню, как его еще называют ivr. Позвонив, человек услышит какое-то приветствие, далее ему будет предложено ввести внутренний номер абонента, если он его знает, либо дождаться ответа секретаря. Для простоты настройки и отладки, поделюсь способом, который использую я. У проекта zadarma есть клиент под андроид — Zadarma SIP. Скачиваете его на телефон и регистрируете еще одну учетную запись в проекте. Логинитесь под ней в телефоне и можете звонить на свой астериск, просто набирая 6-ти значный номер аккаунта, который используете на сервере. Таким образом вы быстро, удобно и бесплатно эмулируете входящие звонки с внешних линий на свой сервер. Начнем настройку с того, что создадим возможность для записи приветствия. Вы можете записать его где угодно и потом скопировать на сервер astersik. Но можно поступить удобнее — записать прямо с телефонного аппарата приветствие и использовать его в голосовом меню. Чтобы это сделать, необходимо добавить в dialplan в контекст исходящих звонков, в моем примере это [call-out], в самое начало следующую конструкцию: ;Номер для записи звуков, окончание записи # exten => _35X, 1, NoOp() exten => _35X, n, Wait(2) exten => _35X, n, Playback(beep) exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav) exten => _35X, n, Wait(1) exten => _35X, n, Playback(/tmp/music${EXTEN:2}) exten => _35X, n, Wait(2) exten => _35X, n, Hangup() Перезагружаем dialplan: CLI> dialplan reload Теперь при звонке на любой из номеров 350-359 вы услышите бип, после которого начнется запись всего, что сказано в трубку. Чтобы завершить запись, нажмите #. После этого вы прослушаете то, что было записано. Файл с записью будет сохранен в папку /temp. Если вы позвоните на номер 351, то файл будет иметь имя music1.wav, если на 355, то music5.wav. Можно записать до 10-ти разных вариантов и потом из них выбирать. Сохраните подходящую запись с именем ivr-main.wav и разместите его в какой-нибудь папке. Я положил в папку /etc/asterisk/ivr. Добавим пример голосового меню в нашу конфигурацию asterisk. Для этого снова открываем extensions.conf и добавляем в него новый контекст [ivr-main] следующего содержания: [ivr-main] exten => s,1,Answer() ;Проигрываем приветствие exten => s,2,Background(/etc/asterisk/ivr/ivr-main) ;Ждем 5 секунд ввода добавочного номера exten => s,3,WaitExten(5) ;Звоним по введенному добавочному exten => _XXX,1,Dial(SIP/${EXTEN}) ;Если введен не существующий номер, то говорим об этом и отправляем в начало приветствия exten => _XXX,2,Playback(privacy-incorrect) exten => _XXX,3,Goto(ivr-main,s,1) ;Если звонящий ничего не вводит, то звоним секретарю exten => t,1,Dial(SIP/100) В комментариях я сделал все пояснения. Мы создали контекст для ivr. Теперь его надо добавить в контекст входящих звонков. Для этого изменяем существующий контекст [call-in], заменяя в нем единственную строку на новую: exten => 397945,1,Goto(ivr-main,s,1) Перезапускаем диал план и звоним снаружи на внешний номер. Вы должны услышать голосовое приветствие ivr, которое мы только что настроили. После этого этапа ваш файл extensions.conf должен выглядеть примерно так (комментарии вырезал): [general] static=yes writeprotect=no [globals] [default] [handup-sip] exten => _X!,1,HangUp() [call-out] exten => _35X, 1, NoOp() exten => _35X, n, Wait(2) exten => _35X, n, Playback(beep) exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav) exten => _35X, n, Wait(1) exten => _35X, n, Playback(/tmp/music${EXTEN:2}) exten => _35X, n, Wait(2) exten => _35X, n, Hangup() exten => _XXX,1,Dial(SIP/${EXTEN}) exten => _XXX.,1,Dial(SIP/${EXTEN}@397945) include => handup-sip [call-in] exten => 397945,1,Goto(ivr-main,s,1) [ivr-main] exten => s,1,Answer() exten => s,2,Background(/etc/asterisk/ivr/ivr-main) exten => s,3,WaitExten(5) exten => _XXX,1,Dial(SIP/${EXTEN}) exten => _XXX,2,Playback(privacy-incorrect) exten => _XXX,3,Goto(ivr-main,s,1) exten => t,1,Dial(SIP/100) Включаем голосовую почту Продолжаем наращивать функционал voip атс. В данном разделе опишу настройку голосовой почты в asterisk. Для начала пару слов о том, что это такое. Если адресат звонка долго не отвечает, мы можем предложить звонящему оставить для него голосовое сообщение. Когда получатель вернется на место, он сможет прослушать оставленные ему сообщения. При этом, после записи голосового сообщения, будет отправлено письмо с записью этого сообщения на почтовый адрес получателя. На практике я не видел, чтобы голосовую почту активно использовали. Но для полноты картины расскажу про нее, возможно вам она пригодится. Открываем файл voicemail.conf на редактирование. Я не трогал настройки по-умолчанию, просто добавляем в секцию [default] ящики голосовой почты для нужных нам сотрудников в следующем виде: 130 => 1234,Number 130,user130@mail.ru 100 => 1234,Number 100,user100@mail.ru 130 внутренний номер абонента 1234 пароль доступа к ящику голосовой почты user130@mail.ru почтовый адрес, куда будет отправлено записанное голосовое сообщение Для корректной отправки почтовых сообщений сразу на внешние почтовые ящики необходимо правильно настроить локальный почтовый сервер, либо использовать внешний. Я рекомендую использовать отдельный сервер, наверняка он есть в организации, либо на локальном использовать какой-то публичный с авторизацией по smtp. В консоли перезапускаем модуль голосовой почты и проверяем пользователей: CLI> voicemail reload Reloading voicemail configuration... asterisk*CLI> voicemail show users Context Mbox User Zone NewMsg default 130 Number 121 0 default 100 Number 100 0 other 1234 Company2 User 0 3 voicemail users configured. Наши два добавленных пользователя и один тестовый остался из дефолтной конфигурации. Его можно удалить. Их вообще два должно быть. Одного я уже удалил, второго забыл. Это пол дела. Теперь нам нужно добавить голосовую почту в dialplan. Причем в 2 разных места. Я буду использовать номер 500 для звонка в панель управления голосовой почтой. Позвонив на этот номер, пользователь введет свой пароль и сможет управлять голосовыми сообщениями (слушать, удалять, менять настройки). Добавим в контекст для исходящих звонков звонок на этот номер. Добавлять следует сразу за номерами для записи, которые мы ранее создали и перед правилом набора трехзначных номеров. [call-out] ;Номер для записи звуков, окончание записи # exten => _35X, 1, NoOp() exten => _35X, n, Wait(2) exten => _35X, n, Playback(beep) exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav) exten => _35X, n, Wait(1) exten => _35X, n, Playback(/tmp/music${EXTEN:2}) exten => _35X, n, Wait(2) exten => _35X, n, Hangup() ;Управление голосовой почтой exten => 500,1,VoiceMailMain() ;Звонок на внутренний номер exten => _XXX,1,Dial(SIP/${EXTEN},15) ;Звонок на внешний номер exten => _XXX.,1,Dial(SIP/${EXTEN}@397945) Добавленные данные выделил цветом. Обращаю внимание на цифру 15. Ранее этой настройки не было, сейчас я добавил. Она будет означать, что звонок будет длиться 15 секунд. Если за это время никто не ответит, он будет сброшен. До использования голосовой почты, можно было не устанавливать этот параметр, оставить его значение по-умолчанию, оно очень большое, не помню точно сколько по времени. Но сейчас нам нужно при неснятии трубки дольше 15-ти секунд, включать запись голосового сообщения. Конкретно в контексте внутренних звонков этот параметр не принципиален, так как я не добавляю голосовую почту для звонков внутри организации, хотя можно это сделать. Не вижу в этом смысла. Я добавил сюда этот параметр, чтобы время ожидания ответа было одинаково во всех звонках. В следующих изменениях это уже будет играть принципиальное значение. Пока мы просто добавили номер, куда можно позвонить для управления голосовой почтой. Теперь добавим непосредственно возможность записи голосовых сообщений по событиям. Остановимся на этом пункте поподробнее. Для начала уясним, в каких состояниях может пребывать номер: Номера вообще не существует на сервере. В нашем случае, к примеру, это любой номер не из диапазона 100-130. Номер существует, но он не зарегистрирован на АТС, то есть аппарат с этим номером не подключен. Номер существует, зарегистрирован, но при звонке на него никто не отвечает. Номер существует, зарегистрирован, но в данный момент занят. Каждое из этих четырех состояний обрабатывается отдельно. Я считаю, что голосовую почту уместно будет включать по событию номер 3. Но это не обязательно, можно и на занято повесить возможность оставить сообщение. Тут на ваше усмотрение. Я покажу пример, как это делается, а вы сможете настроить так, как вам нужно. Обработка этих событий не такая простая, как кажется на первый взгляд. Я сразу же столкнулся с трудностью следующего характера. С параметром call-limit=1 при звонке на номер, который занят в данный момент, астериск возвращает статус CHANUNAVAIL, что может означать, к примеру, что канал недоступен. На статус занято BUSY это совсем не похоже. Для разрешения этой ситуации я воспользуюсь функцией ChanIsAvail, которая проверяет не статус пира, а статус канала и возвращает значение 2 или 3, когда он занят. Для различения несуществующих и не подключенных пиров я буду использовать функцию SIPPEER. Если она ничего не возвращает, значит номера не существует, если значение UNKNOWN, значит номер не подключен. С отсутствием ответа какое-то время проще всего. Если пир возвращает статус NOANSWER, включаем голосовую почту. Собираем все статусы в одно место и добавляем голосовую почту. Для этого в контекст [ivr-main] добавляем новые параметры и приводим его к следующему виду: [ivr-main] exten => s,1,Answer() exten => s,2,Background(/etc/asterisk/ivr/ivr-main) exten => s,3,WaitExten(5) exten => _XXX,1,Dial(SIP/${EXTEN},15) ;Задаем переменную для передачи в голосовую почту exten => _XXX,n,Set(dstNUM=${EXTEN}) ;Проверяем статус пира, существует или нет exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) ;Проверяем статус пира, подключен или нет exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) ;Проверяем канал на занятость exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) ;Выводим в лог значение функции ChanIsAvail, нужно только для отладки, можно удалить строку exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) ;Если функция возвращает 2 или 3, значит абонент занят exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) ;Обрабатываем остальные статусы exten => _XXX,n,Goto(num-${DIALSTATUS},1) ;Если номера не существует говорим "Ошибочный номер, попробуйте еще раз" exten => num-not-exist,1,Wait(2) exten => num-not-exist,n,Playback(invalid) ;Если номер не подключен, говорим "Набранный вами номер отключен, проверьте номер и повторите попытку exten => num-not-connected,1,Wait(2) exten => num-not-connected,n,Playback(ss-noservice) ;Если номер занят, говорим "Занято" exten => num-BUSY,1,Wait(2) exten => num-BUSY,n,Playback(vm-isonphone) ;Если номер не отвечает, включаем голосовую почту exten => num-NOANSWER,1,Wait(2) exten => num-NOANSWER,n,Voicemail(${dstNUM},u) ;Если еще по какой-то причине будет статус CHANUNAVAIL, говорим, что номер не доступен в данный момент exten => num-CHANUNAVAIL,1,Wait(2) exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) ;Если в голосовом меню не выбрали внутренний номер, адресуем звонок секретарю exten => t,1,Dial(SIP/100,15) Если вам нужна обработка статусов номеров для внутренних звонков, то скопируйте обработку состояний в контекст [call-out], за исключением последней строки, которая отвечает за звонок секретарю. Полностью контекст внутренних звонков будет выглядеть вот так: [call-out] ;Номер для записи звуков, окончание записи # exten => _35X, 1, NoOp() exten => _35X, n, Wait(2) exten => _35X, n, Playback(beep) exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav) exten => _35X, n, Wait(1) exten => _35X, n, Playback(/tmp/music${EXTEN:2}) exten => _35X, n, Wait(2) exten => _35X, n, Hangup() ;Управление голосовой почтой exten => 500,1,VoiceMailMain() ;Звонок на внутренний номер exten => _XXX,1,Dial(SIP/${EXTEN},15) exten => _XXX,n,Set(dstNUM=${EXTEN}) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) exten => _XXX,n,Goto(num-${DIALSTATUS},1) exten => num-not-exist,1,Wait(2) exten => num-not-exist,n,Playback(invalid) exten => num-not-connected,1,Wait(2) exten => num-not-connected,n,Playback(ss-noservice) exten => num-BUSY,1,Wait(2) exten => num-BUSY,n,Playback(vm-isonphone) exten => num-NOANSWER,1,Wait(2) exten => num-NOANSWER,n,Voicemail(${dstNUM},u) exten => num-CHANUNAVAIL,1,Wait(2) exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) ;Звонок на внешний номер exten => _XXX.,1,Dial(SIP/${EXTEN}@397945) include => handup-sip Я во всех звонках установил время ожидания ответа 15 секунд. Если вы считаете, что нужно больше, измените этот параметр. Обращаю ваше внимание, что в контексте голосового меню я не сделал обработку статусов состояния телефона секретаря, хотя это может быть нужно, если у вас будет один секретарь принимать звонки. Ему и голосовая почта может пригодиться. В следующем пункте я расскажу про случай, когда в офисе работают 2 секретаря и обработкой звонков будет заниматься очередь (queue), поэтому статусы в том виде, как они реализованы здесь будут не нужны. Вы можете использовать любую конфигурацию, которая вам подойдет. Например, использовать очередь, но с одним секретарем в ней. Настраивайте по аналогии, я даю базовый функционал. Все возможные случаи разобрать невозможно. Перечитывайте диалплан и тестируйте конфигурацию. При звонке абоненту и его неответе, звонящий услышит в трубке сообщение о том, что номер не отвечает и предложение оставить голосовую почту. Если звонивший оставит сообщение, то получатель получит это сообщение по email и сможет его прослушать там, либо позвонить на номер 500, ввести свой номер и пароль, заданные в voicemail.conf и послушать сообщение по телефону. Я сталкивался с ошибкой, когда у пользователя в настройках отключена голосовая почта, но он все равно получал сообщения. У него мигало оповещение на телефонном аппарате. Нужно было оперативно удалить все оставленные сообщения без прослушивания. Как удалить голосовую почту в астериск я написал в отдельной заметке. На этом настройка голосовой почты окончена. Можно пользоваться, не забывая добавлять новых пользователей в voicemail.conf и перечитывая конфигурацию голосовой почты. Очереди (queues) входящих звонков С помощью очередей в астериске можно управлять потоком входящих звонков, перераспределяя их по определенным правилам. В нашей конфигурации asterisk мы настроим очередь (queue) для направления звонка двум секретарям одновременно. Кто первый ответит, тот и будет разговаривать со звонящим. Если один секретарь уже разговаривает, новый звонок поступит к другому. Если оба секретаря будут заняты, звонящий будет слушать мелодию и ожидать, пока кто-нибудь не освободится. Как только один из секретарей освободится, звонящего из очереди направит на освободившийся номер. Номер первого секретаря — 100, второго — 130. Я настраиваю простейшую конфигурацию очереди в астериск для понимания принципа работы. Более сложный вариант настройки это сделать 3 очереди для каждого отдела и в голосовом меню-приветствии сделать возможность позвонить в конкретный отдел. Эту конфигурацию я рассмотрю в отдельной статье, хотя в нем и нет ничего сложного. Делается по аналогии с приведенным примером. Открываем файл queues.conf и добавляем в самый конец: [secretary] strategy = ringall member => SIP/100 member => SIP/130 Все остальные настройки оставляю по-умолчанию. Параметр strategy может принимать следующие значения: ringall вызываются все доступные участники до тех пор, пока кто-то из них не ответит на вызов (по умолчанию). leastrecent Вызывается первый свободный участник, который меньше всего вызывался из этой очереди. fewestcalls Вызывается первый свободный участник, который обработал наименьшее количество вызовов из данной очереди. random случайным образом вызывается не занятый участник, обрабатывающий очередь. rrmemory циклическое распределение с памятью, запоминается последний участник, ответивший на вызов. Вы можете выбрать наиболее подходящую вам стратегию распределения звонков в очереди. Дальше нужно добавить в extensions.conf в созданный нами ранее контекст с голосовым меню отправку звонка в очередь с секретарями. Для этого меняем строку в [ivr-main]: exten => t,1,Dial(SIP/100,15) на новую: exten => t,1,Queue(secretary,t) Если раньше при звонке на внешний номер, звонящий не набирал внутренний номер абонента, то через 5 секунд он перенаправлялся к секретарю с номером 100. Теперь он будет отправляться в очередь secretary, в которую мы завели 2 номера — 100 и 130. Можно добавить и больше номеров, если есть необходимость. Перечитываем полностью конфигурацию asterisk: CLI> reload Состояние созданной очереди: CLI> queue show secretary secretary has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s Members: SIP/100 (ringinuse enabled) (Not in use) has taken no calls yet SIP/130 (ringinuse enabled) (Not in use) has taken no calls yet No Callers Теперь можете позвонить на внешний номер и дождаться перенаправления на секретаря. Зазвонят оба аппарата. Если оба заняты, звонок будет висеть в очереди и ждать освобождения. После звонка статистика очереди изменится: CLI> queue show secretary secretary has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 2s talktime), W:0, C:1, A:1, SL:0.0% within 0s Members: SIP/100 (ringinuse enabled) (Not in use) has taken 1 calls (last was 63 secs ago) SIP/130 (ringinuse enabled) (Not in use) has taken no calls yet No Callers Вот так легко организовать простую queue (очередь) в asterisk. Более сложные примеры я буду рассматривать в отдельных статьях. Учет и просмотр статистики звонков (cdr viewer) Важной и нужной возможностью современной АТС на базе asterisk является сбор и просмотр статистики звонков. По умолчанию, астериск ведет статистику в файле /var/log/asterisk/cdr-csv/Master.csv. Разобрать этот файл и передать куда-то в обработку не очень сложно, если у вас есть что-то или кто-то, кто способен написать на каком-нибудь языке программирования обработку. Мы будем использовать готовые бесплатные инструменты для просмотра статистики звонков. Все необходимое для этого мы установили в самом начале. Перенесем сбор статистики в mysql базу. Для этого запускаем mariadb сервер, добавляем в автозагрузку и устанавливаем пароль администратора: # systemctl start mariadb # systemctl enable mariadb.service # /usr/bin/mysql_secure_installation Подключаемся к mysql и создаем пользователя и базу данных: # mysql -uroot -p MariaDB [(none)]> create database asterisk; MariaDB [(none)]> use asterisk; MariaDB [asterisk]> CREATE TABLE `cdr` (   `id` int(9) unsigned NOT NULL auto_increment,   `calldate` datetime NOT NULL default '0000-00-00 00:00:00',   `clid` varchar(80) NOT NULL default '',   `src` varchar(80) NOT NULL default '',   `dst` varchar(80) NOT NULL default '',   `dcontext` varchar(80) NOT NULL default '',   `channel` varchar(80) NOT NULL default '',   `dstchannel` varchar(80) NOT NULL default '',   `lastapp` varchar(80) NOT NULL default '',   `lastdata` varchar(80) NOT NULL default '',   `duration` int(11) NOT NULL default '0',   `billsec` int(11) NOT NULL default '0',   `disposition` varchar(45) NOT NULL default '',   `amaflags` int(11) NOT NULL default '0',   `accountcode` varchar(20) NOT NULL default '',   `uniqueid` varchar(32) NOT NULL default '',   `userfield` varchar(255) NOT NULL default '',   PRIMARY KEY  (`id`),   KEY `calldate` (`calldate`),   KEY `accountcode` (`accountcode`),   KEY `uniqueid` (`uniqueid`),   KEY `dst` (`dst`),   KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; MariaDB [asterisk]> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by '12345678'; asterisk имя базы данных asterisk_user пользователь базы данных 12345678 пароль пользователя бд Устанавливаем odbc коннекторы: # yum install -y mysql-connector-odbc.x86_64 unixODBC-devel.x86_64 Редактируем файлы конфигурации. Добавляем в самый конец /etc/asterisk/res_odbc.conf: [asterisk] enabled => yes dsn => MySQL-asterisk username => asterisk_user password => 12345678 В конец файла /etc/asterisk/cdr_adaptive_odbc.conf: [cdr_adaptive_connection] connection=asterisk table=cdr alias start => calldate Создаем файл /etc/odbc.ini следующего содержания: [MySQL-asterisk] Description = MySQL Asterisk database Driver = MySQL Server = localhost User = asterisk_user Password = 12345678 Socket = /var/lib/mysql/mysql.sock Database = asterisk Редактируем файл /etc/odbcinst.ini. Я его не трогал, оставил по-умолчанию, только в самый конец секции [MySQL] добавил две недостающие строки. Я не разбирался нужны они или нет, просто подсмотрел в другой инструкции. Вот как этот файл выглядит у меня: [MySQL] Description = ODBC for MySQL Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/libodbcmyS.so Driver64 = /usr/lib64/libmyodbc5.so Setup64 = /usr/lib64/libodbcmyS.so FileUsage = 1 CPTimeout = CPReuse = Настроим использование нашего часового пояса в записях cdr. По-умолчанию там стоит часовой пояс GTM. Для этого в файле /etc/asterisk/cdr.conf указываем параметр: usegmtime=no После этого перезапускаем астериск: # service asterisk restart Совершаем звонок и проверяем таблицу. Для удобства дальнейшей проверки и настройки, я запустил httpd и настроил phpmyadmin. Они должны были установиться в самом начале. Запускаем httpd и добавляем в автозагрузку: # systemctl start httpd # systemctl enable httpd С phpmyadmin сами разберитесь, в интернете море инструкций, либо воспользуйтесь моей по установке и настройке phpmyadmin. Теперь астериск сохраняет статистику звонков в mysql базу asterisk в таблицу cdr. Дальше нам надо настроить какую-нибудь web панель для просмотра этой статистики. Я решил сразу установить панель, которая позволяет не только смотреть статистику, но прослушивать записанные разговоры. Поэтому дальнейшая настройка панели просмотра статистики переходит в следующий раздел, в котором я расскажу, как записывать звонки. Запись (record) разговоров Запись разговоров в asterisk настраивается относительно не сложно. Буквально нужно добавить несколько строк в dialplan. Но мы сразу сделаем более расширенную настройку. Мы будем не просто записывать все разговоры, но станем хранить информацию о звонках в mysql, чтобы их можно было прослушивать через удобную web панель просмотра статистики. Хранить записи будем в mp3, потому нам понадобится утилита lame, для конвертации файлов из формата wav в mp3. Скачаем ее и установим. # cd /usr/src # wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz # tar zxvf lame-3.* # cd lame-3.* # ./configure # make # make install В качестве web панели я буду использовать Asterisk-CDR-Viewer-Mod. Очень простая и функциональная штука. Настраивается легко, пользоваться удобно. Скачиваем исходники с github: # cd /usr/src # wget https://github.com/prog-it/Asterisk-CDR-Viewer-Mod/tarball/master # tar xzvf master Копируем содержимое папки /usr/src/master в корень web сервера. Если вам нужно, можете в отдельную папку положить. У меня обычно на сервере с астериском больше ничего нет, так что сойдет и корень — /var/www/html В папке docs подробная инструкция по настройке. Все дальнейшие действия делаются в соответствии с ней. Исправляются только некоторые особенности данной версии системы. Нам необходимо добавить дополнительное поле в таблицу cdr для хранения имени файла. Для этого либо в консоли mysql, либо через phpmyadmin выполните код: alter table  `cdr` add column `filename` varchar(120) DEFAULT 'none' after `userfield`; Редактируем файл /etc/asterisk/cdr_mysql.conf, добавляя в самый конец 2 строки: alias realdst => realdst alias filename => filename Дальше редактируем диалплан. Открываем /etc/asterisk/extensions.conf и добавляем в секцию globals переменную, соответствующую папке, где будут храниться записи разговоров. [globals] DIR_RECORDS=/mnt/calls/ Добавляем макрос для записи перед контекстами звонков: [macro-recording] exten => s,1,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2}); exten => s,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3"); exten => s,n,Set(CDR(filename)=${fname}.mp3); exten => s,n,Set(CDR(realdst)=${ARG2}); exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt}); exten => s,n(no),Verbose(Exit record); И редактируем контексты входящих и исходящих разговоров, добавляя туда макрос на запись. Он идет самым первым, перед набором номера. Вот так у меня выглядит контекст локальных звонков и входящих через ivr меню с учетом всех сделанных ранее настроек: [call-out] ;Номер для записи звуков, окончание записи # exten => _35X, 1, NoOp() exten => _35X, n, Wait(2) exten => _35X, n, Playback(beep) exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav) exten => _35X, n, Wait(1) exten => _35X, n, Playback(/tmp/music${EXTEN:2}) exten => _35X, n, Wait(2) exten => _35X, n, Hangup() ;Управление голосовой почтой exten => 500,1,VoiceMailMain() ;Звонок на внутренний номер exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XXX,n,Dial(SIP/${EXTEN},10) exten => _XXX,n,Set(dstNUM=${EXTEN}) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) exten => _XXX,n,Goto(num-${DIALSTATUS},1) exten => num-not-exist,1,Wait(2) exten => num-not-exist,n,Playback(invalid) exten => num-not-connected,1,Wait(2) exten => num-not-connected,n,Playback(ss-noservice) exten => num-BUSY,1,Wait(2) exten => num-BUSY,n,Playback(vm-isonphone) exten => num-NOANSWER,1,Wait(2) exten => num-NOANSWER,n,Voicemail(${dstNUM},u) exten => num-CHANUNAVAIL,1,Wait(2) exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) ;Звонок на внешний номер exten => _XXX.,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XXX.,n,Dial(SIP/${EXTEN}@397945) include => handup-sip [ivr-main] exten => s,1,Answer() exten => s,2,Background(/etc/asterisk/ivr/ivr-main) exten => s,3,WaitExten(5) exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => _XXX,n,Dial(SIP/${EXTEN},10) exten => _XXX,n,Set(dstNUM=${EXTEN}) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1) exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1) exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s) exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1) exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1) exten => _XXX,n,Goto(num-${DIALSTATUS},1) exten => num-not-exist,1,Wait(2) exten => num-not-exist,n,Playback(invalid) exten => num-not-connected,1,Wait(2) exten => num-not-connected,n,Playback(ss-noservice) exten => num-BUSY,1,Wait(2) exten => num-BUSY,n,Playback(vm-isonphone) exten => num-NOANSWER,1,Wait(2) exten => num-NOANSWER,n,Voicemail(${dstNUM},u) exten => num-CHANUNAVAIL,1,Wait(2) exten => num-CHANUNAVAIL,n,Playback(vm-isunavail) exten => t,1,Macro(recording,${CALLERID(num)},${EXTEN}) exten => t,n,Queue(secretary,t) Перезапускаем астериск для применения всех настроек: # service asterisk restart Осталось только указать настройки подключения к базе данных cdr viewer. Эти настройки находятся в файле inc/config.inc.php. Задаем там следующие параметры: Mysql $db_type = 'mysql'; $db_host = 'localhost'; $db_port = '3306'; $db_user = 'asterisk_user'; $db_pass = '12345678'; $db_name = 'asterisk'; $db_table_name = 'cdr'; $system_storage_format = 5; $system_monitor_dir = '/mnt/calls'; Остальные параметры я оставил без изменений. Можно звонить и тестировать запись разговоров, просмотр статистики через Asterisk CDR Viewer Mod. Все записанные файлы складываются в одну папку /mnt/calls. В readme.txt описан пример, как настроить сортировку записей по папкам с датами. Если вам это нужно, сделайте, ничего сложного нет, все рассказано подробно. В web панель можно зайти просто набрав в браузере ip адрес сервера, если скрипты положили в корень веб сервера. Музыка на ожидании (on hold) Вы можете назначить любую мелодию для проигрывания во время нахождения звонка в очереди.  Можете крутить мелодию вместо длинных гудков во время вызова, хотя считаю это лишним. Уместней всего мелодию пускать, как я уже сказал, во время ожидания в очереди и во время удержания звонка по какой-то причине. По-умолчанию в эти моменты проигрывается дефолтная мелодия. За конфигурацию music on hold отвечает соответствующий файл настроек — /etc/asterisk/musiconhold.conf. Изначально он выглядит так: [general] [default] mode=files directory=moh Директория указана как moh, полный ее путь /var/lib/asterisk/moh, мелодии проигрываются отсюда. Я не буду менять настройки по-умолчанию. Добавим еще один класс музыки и укажем его в свойствах очереди, где будем ее проигрывать.   Я привожу пример использования. Если у вас везде будет одна и та же мелодия, то отредактируйте канал default. Так вам не придется каждый раз указывать добавленный канал. Копируем любым способом mp3 файл на сервер в домашнюю директорию root. Создаем директорию /var/lib/asterisk/mohmp3 и кодируем в нее мелодию из mp3 в wav: # mkdir  /var/lib/asterisk/mohmp3 # lame --decode /root/music.mp3 /var/lib/asterisk/mohmp3/music.wav Добавляем новый класс в musiconhold.conf в самый конец: [mp3] mode=files directory=mohmp3 Теперь добавим эту мелодию в свойства очереди. Для этого в описание очереди добавьте новый параметр: [secretary] music = mp3 strategy = ringall member => SIP/100 member => SIP/130 Теперь нужно перечитать настройки очереди и мелодии. Проще перезапустить сам астериск: # service asterisk restart Можно звонить на внешний номер и ждать попадания в очередь. Вы должны услышать добавленную мелодию во время ожидания. Чтобы добавить эту мелодию вместо длинного гудка, необходимо отредактировать dialplan, добавив новый параметр в правило набора. Если добавляете свой класс музыки, то указываете его в свойствах: exten => _XXX,1,Dial(SIP/${EXTEN},15,m(mp3)) Если используете музыку по-умолчанию, то достаточно написать вот так: exten => _XXX,1,Dial(SIP/${EXTEN},15,m) Для отладки музыки на ожидании, я рекомендую добавить в dialplan в контекст локальных звонков такую конструкцию: exten => 336,1,Answer exten => 336,2,MusicOnHold() 336 — любой не занятый реальным пиром номер. При звонке на этот номер, вы услышите заданную дефолтную мелодию в соответствии с настройками в файле musiconhold.conf. Для проигрывания не дефолтного класса, укажите его имя в скобках. Так вы можете прослушать как звучат ваши мелодии, протестировать порядок проигрывания и т.д. Не забывайте перезагружать диалплан после редактирования. На этом настройка music on hold закончена. Можете добавлять разные мелодии и использовать в необходимых местах диалплана или очередях. Настройка конференций Полезным и востребованным функционалом офисной телефонной станции является создание конференций для одновременного разговора нескольких человек. В asterisk конференция настраивается следующим образом. В специальном файле конфигурации задаются параметры комнаты для конференций. В диалплане назначается отдельный номер для комнаты с конференцией. Создаем конфигурацию конференции. Для этого в файл confbridge.conf добавляем в самый конец: [confer] type=bridge max_members=20 mixing_interval=10 internal_sample_rate=auto record_conference=yes В контекст исходящих звонков [call-out] добавляем в самое начало: exten => 999,1,Answer() exten => 999,n,ConfBridge(1,confer) Перезапускаем астериск. Теперь при звонке на номер 999 человек попадает в комнату для конференций. Следующим участникам конференции необходимо будет так же позвонить на номер 999 для участия в совместной конференции. Если вы с кем-то уже разговариваете, хотите создать конференцию и добавить туда еще участников, то необходимо вашего собеседника переадресовать на номер конференции, затем позвонить новому абоненту и его направить туда же. После этого звоните сами на номер конференции и сможете общаться с тремя абонентами одновременно. Как выполнять переводы и переадресации звонков я расскажу ниже. Перевод, перехват, переадресация звонка Рассмотрим несколько необходимых функций и возможностей телефонной станции asterisk. Начнем с перевода звонка. Как перевести звонок на другого абонента? По-умолчанию в астериске для трансфера звонка предусмотрена клавиша #. Посмотреть, так ли это в вашей конфигурации, введите в консоли астера команду: CLI> features show Builtin Feature Default Current --------------- ------- ------- Pickup *8 *8 Blind Transfer # # Attended Transfer One Touch Monitor Disconnect Call * * Park Call Во время разговора нужно нажать # и набрать номер, куда вы хотите перевести звонок. Для того, чтобы трансфер состоялся, он должен быть разрешен в диалплане в команде Dial следующим образом: exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt) T дать возможность звонящему (вызывающему) абоненту совершать перевод звонка на другой номер. t дать возможность вызываемому абоненту сделать перевод звонка на другой номер В предыдущих примерах я не указывал этот параметр. Сейчас пришло время рассказать о нем и добавить во все участки диалплана, если вам необходимо осуществлять перевод звонков в asterisk. Перевод звонка можно сделать с помощью функции самого телефона. Мне еще не попадалось ни одного телефона, который бы не умел переводить звонок. Обычно для этих целей предназначена отдельная клавиша или функция в меню телефона. Для уточнения информации о переводе нужно воспользоваться инструкцией самого телефона. В софтфоне, которым я пользуюсь, есть отдельная клавиша для перевода звонка: С включенным по-умолчанию Blind Transfer есть проблемы. Например, вы перенаправляете звонок на другой номер, а он не ответил или у него занято. Входящий вызов сбрасывается. В астериске есть другой режим перевода звонка, он называется Attended Transfer, по-умолчанию он выключен. Работает он более изящно. Сначала вы звоните тому, куда хотите перевести номер, разговариваете с ним, убеждаетесь, что он доступен и готов принять звонок. Только после этого переводите звонок на этого абонента. Чтобы включить такое перенаправление вызова, нужно раскомментировать в features.conf строку: atxfer => *2 Горячую клавишу можно переназначить на любую другую. На этом о переводе звонка в астериске все. Теперь поговорим о перехвате звонка. Хотя говорить тут особо нечего. В asteerisk перехват работает из коробки и не требует никаких настроек. Для того, чтобы перехватить звонок, нужно снять трубку и нажать комбинацию *8. Комбинация задается в том же файле, что и перехват — features.conf. Перехватывать звонки могут только абоненты в одной группе. Это задается в свойствах пользователя, я об этом рассказывал в самом начале, когда мы создавали sip аккаунты. Напомню, что речь идет о параметрах callgroupи pickupgroup. Разберем теперь переадресацию звонка на какой-то внешний номер, например, мобильный телефон. Многие телефоны имеют встроенный функционал по перенаправлению звонка. Читаете инструкцию к телефону, смотрите, можно ли на нем установить переадресацию и как, и делаете. Работает это только если ваш телефон подключен к АТС. Он принимает звонок и сам его переадресовывает на указанный номер. Это самый простой и быстрый вариант автоматической переадресации звонка на внешний номер. Рассмотрим другой случай переадресации на мобильный телефон. Допустим, у нас есть номер 115, который вообще отсутствует в офисе, у него нет стационарного телефона. Нам нужно, чтобы при звонке на этот номер, вызов переадресовывался на внешний номер, а конкретно на мобильный сотрудника. Для этого в dialplan нужно добавить следующую строку: exten => 115,n,Dial(SIP/89151234567@397945) Если вы хотите, чтобы переадресация работала только при звонках с внутренних номеров офиса, то добавить эту строку нужно в контекст [call-out] перед общим правилом набора на внутренние номера: exten => 115,n,Dial(SIP/89151234567@397945) exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt) Для того, чтобы переадресация на внешний номер работала и для звонков из вне, правило перенаправления на мобильный нужно поставить в контекст с голосовым приветствием [ivr-main]. Ставим туда же, перед строкой набора на внутренние номера: exten => 115,n,Dial(SIP/89151234567@397945) exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt) Вы можете поменять внешний номер для разных контекстов. К примеру, для сотрудников офиса сделать перенаправление на один мобильный, а для звонков клиентов на другой. Защита asterisk с помощью fail2ban Если ваш астериск имеет внешний ip адрес, либо на него сделан проброс портов с внешнего ip, то необходимо обеспечить защиту от перебора учеток и прочих множественных подключений. Организуем защиту с помощью известного и популярного средства fail2ban. Сделать это не сложно, fail2ban поддерживает astersik из коробки. Достаточно просто установить его и активировать некоторые настройки. Устанавливаем fail2ban на сервер с астериском: # yum install -y fail2ban Включаем запись в лог файл событий типа security. Для этого открываем файл /etc/asterisk/logger.conf и раскомментируем строку: security => security Перечитываем настройки хранения логов: # asterisk -x "logger reload" В папке /var/log/asterisk появился новый файл security. Его записи мы будем передавать в fail2ban для анализа. Открываем файл /etc/fail2ban/jail.conf, ищем там секцию [asterisk] и меняем путь к логфайлу и добавляем строку активации джейла: logpath  = /var/log/asterisk/security enabled = true Запускаем fail2ban и добавляем в автозапуск: # systemctl start fail2ban # systemctl enable fail2ban Чтобы fail2ban работал, у вас должен быть запущен и настроен iptables. Отмечу также, что по-умолчанию fail2ban в centos 7 использует команды firewalld. Если вы его отключили и используете голые iptables, то вам необходимо удалить файл /etc/fail2ban/jail.d/00-firewalld.conf и перезапустить fail2ban. Если этого не сделать, работать он не будет. На этом подробная и многофункциональная настройка asterisk закончена. Я рассказал все, что запланировал, выделив наиболее востребованные функции. Заключение Время подвести итог проделанной работы. На всякий случай приведу полный конфиг основного файла, с которым мы работали — extensions.conf. Я писал статью почти 2 месяца, что-то добавляя, проверяя, редактируя. Она актуальна полностью на момент написания. Можно простым копипастом переносить конфигурацию и все заработает. Я проверил перед публикацией. Со временем что-то может измениться, но не думаю, что сильно. Синтаксис конфигурационных файлов почти не меняется в разных версиях астера, это позволяет без проблем переносить настройки между версиями, и тем более между операционными системами. Я планирую раскрыть более широко затронутую тему. У меня есть примеры интересных и полезных конфигураций. По мере возможности буду писать новые статьи по серверу телефонии. На сегодня у меня все, хороших вам настроек    Статья позаимствована с ресурса serveradmin.ru    

k010v

k010v

Установка asterisk и freepbx на CentOS 7

Все большую популярность набирает современная телефонная связь по протоколу ip в офисах сферы малого и среднего бизнеса. Установка asterisk и панели управления freepbx на сервер под управлением CentOS 7 тема моего очередного повествования. Мы последовательно выполним все шаги по конфигурированию и сборке исходных текстов устанавливаемых продуктов. Если вы еще не определились, как вам лучше настраивать и использовать астериск, рекомендую мою статью по базовой настройке asterisk для нужд малого и среднего офиса. Рассмотрен основной функционал, который необходим для эффективной работы. Инструкция подробная, по шагам, от и до: от установки до записи разговоров и статистики звонков. Введение Asterisk — бесплатное решение для организации voip телефонии. Он обладает всеми возможностями обычных АТС, но предоставляет более богатый функционал по управлению звонками. За относительную простоту настройки, по сравнению с цифровыми АТС, бесплатность и широкие возможности он и снискал такую популярность. Freepbx — бесплатный веб интерфейс для управления астериском. Он существенно упрощает работу с конфигурациями, позволяет выполнять некоторые функции людям, вообще далеким от астериска. Например, с его помощью практически любого можно научить управлять учетными записями пользователей. Лично я больше люблю настраивать asterisk с помощью freepbx, нежели ручной правкой конфигов. Их очень много, они объемные, работать с ними не удобно. Это практически единственный софт в линуксе, который я настраиваю через GIU, во всех остальных случаях я предпочитаю консоль. Подготовка системы Прежде чем мы начнем устанавливать asterisk, нам надо выполнить целый ряд подготовительных действий. Первым делом отключаем selinux. Для этого открываем файл: # mcedit /etc/sysconfig/selinux и устанавливаем значение SELINUX=disabled. После этого применяем настройку без перезагрузки сервера: # setenforce 0 Рекомендация по отключению selinux дается в официальной инструкции по установке freepbx, так как это может привести к нарушению процесса инсталляции. Дальше обновляем систему: # yum update # yum groupinstall core base "Development Tools" Устанавливаем необходимые пакеты для работы сервера voip: # yum install lynx mariadb-server mariadb php php-mysql php-mbstring tftp-server httpd ncurses-devel sendmail sendmail-cf sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel sqlite-devel net-tools gnutls-devel php-pear Устанавливаем компонент pear: # pear install Console_Getopt Теперь надо настроить iptabes. Для начала нам нужно открыть 80-й порт, чтобы мы смогли работать с веб интерфейсом: iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT Для полноценной работы астериск, нужно открыть следующие порты: iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 5061 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5060 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5061 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 5038 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT Для работы freepbx необходима mariadb. Это популярный форк mysql, который по-умолчанию предлагается в качестве mysql сервера в CentOS 7. Оба эти сервера имеют полную совместимость и могут в любой момент заменять друг друга. Запустим базу и добавим в автозагрузку: # systemctl enable mariadb.service # systemctl start mariadb При первоначальной конфигурации mariadb рекомендуется запустить скрипт mysql_secure_installation. Сделаем это: # /usr/bin/mysql_secure_installation Подробнее о работе этого скрипта и вообще настройке mariadb можно прочитать в материале на тему web-сервера на centos 7. Важное замечание. На этапе настройки mariadb не указывайте пароль root. Он должен быть пустым. Если его задать, то стандартная установка freepbx закончится ошибкой и сообщением: Error! Invalid Database Permissions. The error was: SQLSTATE[28000] [1045] Access denied for user ‘root’@’localhost’ (using password: NO) Мы же двигаемся дальше. Для работы freepbx необходим веб сервер. В этом качестве у нас будет выступать httpd. Запускаем его: # systemctl start httpd И добавляем в автозагрузку: # systemctl enable httpd Теперь добавим пользователя, под которым будет работать астериск: # adduser asterisk -M -c "User for voip" Установка Asterisk   Приступаем непосредственно к установке asterisk. Она состоит из нескольких этапов. Сначала мы собираем и устанавливаем все, что нужно для полноценной работы астериск, и в конце собираем его. Первым делом скачиваем необходимые компоненты: # cd /usr/src # wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz # wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz # wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz # wget -O jansson.tar.gz https://github.com/akheron/jansson/archive/v2.7.tar.gz # wget http://www.pjsip.org/release/2.4/pjproject-2.4.tar.bz2 Если вы не используете аппаратные платы расширения для сервера asterisk, то вам dahdi и libpri не нужны. Не скачивайте и не собирайте их. Устанавливаем DAHDI — драйверы для плат производства Digium: # tar xvfz dahdi-linux-complete-current.tar.gz # tar xvfz libpri-current.tar.gz # cd dahdi-linux-complete-* # make all Если получаете ошибку: You do not appear to have the sources for the 3.10.0-123.el7.x86_64 kernel installed То тут 2 варианта: Вы сделали обновление системы и не перезагрузили сервер. У вас отличаются значения ядра в выводе команды uname -r и реальным ядром системы в /usr/src/kernels. В таком случае вам нужно просто перезагрузить сервер. Если дело не в обновлении и разных версиях ядра, то сделайте символьную ссылку на kernel в папке с dahdi: # ln -s /usr/src/kernels/3.10.0-123.el7.x86_64 /usr/src/dahdi-linux-complete-2.10.2+2.10.2/build Не забудьте исправить пути на свои, версия dahdi и ядра скорее всего будет другая. Снова запускаете сборку: # make all Если по какой-то причине у вас все равно не собирается dahdi, а текст ошибок не очень информативный и в интернете ничего не получается найти по этой ошибке, попробуйте установить более старую версию, для начала предыдущую. Взять ее можно тут. Я сталкивался с подобной ситуацией и этот путь помог выполнить установку успешно. А с последней версией dahdi не получалось. Если все проходит без ошибок, то продолжаем сборку: # make install # make config Устанавливаем libpri — библиотеку, предназначенную для работы с потоковыми TDM-интерфейсами ISDN: PRI (Primary Rate Interface) и BRI (Basic Rate Interface).: # cd /usr/src/libpri-* # make # make install Выполняем установку pjproject — open source библиотеку для разработки VoIP приложений на различных платформах: # cd /usr/src # tar -xjvf pjproject-2.4.tar.bz2 # cd pjproject-2.4 # CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr --libdir=/usr/lib64 # make dep # make # make install Устанавливаем jansson — библиотеку на С для кодирования и декодирования JSON данных: # cd /usr/src # tar vxfz jansson.tar.gz # cd jansson-* # autoreconf -i # ./configure --libdir=/usr/lib64 # make # make install И наконец компилируем и устанавливаем asterisk: # cd /usr/src # tar xvfz asterisk-13-current.tar.gz # cd asterisk-* # contrib/scripts/install_prereq install # ./configure --libdir=/usr/lib64 # contrib/scripts/get_mp3_source.sh # make menuselect Появляется псевдографическая менюшка с выбором модулей. Все необходимые модули уже включен по-умолчанию. Добавим только поддержку mp3, либо, если вам необходимо app_mysql и cdr_mysql: Нажимаем Save & Exit и продолжаем установку: # make # make install # make config # ldconfig # chkconfig asterisk off Устанавливаем звуки в хорошем качестве. По-умолчанию астериск ставит звуки низкого качества, чтобы система успешно работала на различном оборудовании. К примеру, на Rasberry Pi. Но на полноценный сервер мы можем установить звуки 8khz wav и G722 High Definition Wideband: # cd /var/lib/asterisk/sounds # wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-en-wav-current.tar.gz # wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-wav-current.tar.gz # tar xfz asterisk-core-sounds-en-wav-current.tar.gz # tar xfz asterisk-extra-sounds-en-wav-current.tar.gz # wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-en-g722-current.tar.gz # wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-g722-current.tar.gz # tar xfz asterisk-extra-sounds-en-g722-current.tar.gz # tar xfz asterisk-core-sounds-en-g722-current.tar.gz Выставляем необходимые права на файлы и каталоги: # chown asterisk. /var/run/asterisk # chown -R asterisk. /etc/asterisk # chown -R asterisk. /var/{lib,log,spool}/asterisk # chown -R asterisk. /usr/lib64/asterisk # chown -R asterisk. /var/www/ На этом установка непосредственно астериска закончена. Уже сейчас им можно полноценно пользоваться, настраивая через консоль и файлы конфигурации. Все компоненты для этого собраны, установлены и готовы к работе. Установка Freepbx Приступим к установке web панели управления для астериск — Freepbx. Вначале делаем несколько полезных настроек. Увеличиваем максимальный размер файла для загрузки через web сервер до 120М: # sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini Настраиваем запуск httpd от пользователя asterisk: # sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf Изменяем параметр AllowOverride на All: # sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf Перезапускаем веб сервер: # systemctl restart httpd Скачиваем и устанавливаем freepbx: # cd /usr/src # wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz # tar xfz freepbx-13.0-latest.tgz # cd freepbx # ./start_asterisk start # ./install -n Если все прошло без ошибок, то в завершении установки увидите: На этом установка закончена. Теперь можно зайти браузером на страницу с ip адресом сервера. У меня это http://192.168.0.163 Открывается начальная страница freepbx, где нам предлагается создать нового пользователя: Создаем пользователя и заходим в web интерфейс астериска: Вот и все, дальше можно заниматься конфигурированием. Автозагрузка Freepbx Для того, чтобы панель управления Freepbx автоматически запускалась при загрузке системы, необходимо сделать startup скрипт для systemd. Для этого создаем файл /etc/systemd/system/freepbx.service следующего содержания. # cat /etc/systemd/system/freepbx.service [Unit] Description=FreePBX VoIP Server After=mariadb.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/sbin/fwconsole start -q ExecStop=/usr/sbin/fwconsole stop -q [Install] WantedBy=multi-user.target После этого запускаем freepbx и добавляем в автозагрузку. # systemctl start freepbx.service # systemctl enable freepbx.service Проверяем, запустилась ли панель. Все в порядке. Для полной проверки автозапуска freepbx, рекомендую сразу же перезагрузить сервер, чтобы убедиться в том, что она запускается корректно при старте сервера. Заключение В данной инструкции мы аккуратно собрали все необходимые компоненты для настройки связки asterisk+freepbx на сервере CentOS 7. Скачали последние версии софта, собрали его из исходников и установили. Таким образом мы полностью подготовили сервер к конфигурированию телефонии. Если сервер будет смотреть в интернет, нужно обязательно не забыть аккуратно настроить firewall и хотя бы fail2ban для обеспечения минимальной, хотя в большинстве случаев и вполне достаточной, защиты.     Статья позаимствована с ресурса serveradmin.ru    

k010v

k010v

Выпуск дистрибутива для создания сетевых хранилищ FreeNAS 11.2

Выпуск дистрибутива для создания сетевых хранилищ FreeNAS 11.2 Подготовлен релиз FreeNAS 11.2, дистрибутива для быстрого развёртывания сетевого хранилища (NAS, Network-Attached Storage). Дистрибутив основан на кодовой базе FreeBSD, отличается интегрированной поддержкой ZFS и возможностью управления через веб-интерфейс, построенный с использованием Python-фреймворка Django. Для организации доступа к хранилищу поддерживается FTP, NFS, Samba, AFP, rsync и iSCSI, для повышения надежности хранения может применяться программный RAID (0,1,5), для авторизации клиентов реализована поддержка LDAP/Active Directory. Установочный iso-образ (600 Мб) подготовлен только для архитектуры x86_64. Основные изменения: Задействован по умолчанию новый и существенно переработанный web-интерфейс, построенный с использованием фреймворка Angular. В новом интерфейсе добавлена поддержка тем оформления, переработана система меню (верхнее меню убрано в пользу боковой панели с выпадающими меню). По своей функциональности и доступным настройкам новый интерфейс не отстаёт от старого, в том числе сохранена поддержка всех протоколов и предоставлены возможности по управлению снапшотами и пулами хранилищ. Старый интерфейс остался доступен в форме опции и его можно выбрать на странице входа; Для управления плагинами и преднастроенными jail-окружениями вместо Warden задействован новый интерфейс iocage, в котором расширена функциональность, улучшена интеграция с ZFS и добавлена возможность расширения функциональности самого iocage через плагины. API iocage несовместим со старым менеджером и требует переработки плагинов.В новом интерфейсе показываются только плагины, переведённые на новый API. Ранее установленные плагины и jail после обновления продолжат свою работу, но для управления ими потребуется вход с использованием старого web-интерфейса. Переведённые на новый API плагины: PlexMediaServer, Nextcloud, Syncthing, Deluge radarr. Новые плагины: BackupPC, BRU server, BitTorrent Sync, ClamAV, GitLab, Jenkins, Redmine; Добавлена поддержка самошифруемых SSD-накопителей; Новые REST и WebSocket API, совместимые с Swagger и обеспечивающие обратную совместимость со старым API; Добавлена возможность выбора облачного хранилища для сохранения резервных копий. Поддерживаются такие системы, как Amazon Cloud Drive, Box, Dropbox, Google Drive, Hubic, Mega, Microsoft OneDrive, pCloud и Yandex Disk. Резервные копии теперь могут сохраняться в зашифрованном виде;   Улучшено управление и обработка создания виртуальных машин. При загрузке теперь проверяется наличие в системе необходимых для работы VM ресурсов и при недостатке памяти выводится ошибка; Вместо GRUB задействован штатный загрузчик FreeBSD; Улучшена поддержка файловой системы ZFS, реализация которой обновлена до свежей кодовой базы OpenZFS; Предоставлено несколько встроенных тем оформления, адаптированных для работы со смартфонов и планшетов.      

k010v

k010v

Plex Media Server + Apple TV 3. Домашняя медиатека в обход iTunes

Plex Media Server + Apple TV 3. Домашняя медиатека в обход iTunes Эта инструкция позволит настроить потоковое вещание медиаконтента на вашу приставку Apple – минуя iTunes и домашнюю коллекцию. Будет интересна владельцам NAS, которые готовы создать свою собственную домашнюю экосистему для кино и музыки. Примечание редактора. Сразу предупреждаем, что инструкция по-настоящему хардкорна. С другой стороны, её целевая аудитория примерно соответствует задаче. Если вы что-то не понимаете или не хотите делать – пишите в комментариях об альтернативных методах решения проблемы. Поехали! Шаг первый.  Устанавливаем и настраиваем Plex Media Server По данной ссылке скачиваем и устанавливаем Plex Media Server для вашей настольной системы/сетевого хранилища. Это достаточно продвинутый медиа-сервер позволяющий управлять фото-, видео-, аудио-контентом и не только. Первичные настройки библиотеки просты и интуитивно понятны. Вам надо всего лишь выбрать тип добавляемой библиотеки и место её размещения, после чего сервер её проиндексирует и создаст миниатюры. Далее, необходимо в настройках сети на вашем роутере фиксировать IP-адреса Apple TV и устройства, на котором размещен Plex Media Server.   Также перенаправляем порт 32400 на ваше устройство с установленным сервером Plex.   После этого возвращаемся к Plex Media Server. В настройках удаленного доступа устанавливаем выбранный порт, если он отличен от используемого по умолчанию 32400. Если все установки на роутере сделаны верно, около пункта Remote Access появится зеленая галочка. Шаг второй. Установка PlexConnect Перед переходом ко второму шагу необходимо установить язык программирования Python на ваш новоиспеченный сервер. Не пугайтесь :) Пользователи настольных систем должны выбрать свой вариант дистрибутива по ссылке. Следует особо отметить, что разработчики PlexConnect рекомендуют устанавливаться версию Python 2.7! Владельцы NAS (по крайней мере, от Synology) могут установить его из своих репозиториев: Центр пакетов –> Служебные программы –> Python –> Установить. Далее пользователям настольных систем необходимо скачать отсюда пакет PlexConnect и распаковать архив в любое удобное место. После этого редактируем в файле Settings.py ключи ‘ip_pms’ – указываем ip-адрес устройства, на котором развернут Plex Media Server; ‘port_pms’ – указываем выбранный вами порт, в случае использования порта отличного от стандартного.     Пользователи NAS Synology: должны позволить устанавливать пакеты сторонних разработчиков: Центр пакетов –> Настройки  –> Основное  –> Уровень доверия  –> Любой; добавить репозиторий http://www.brigittehelsen.be/plexconnect/ в Центр пакетов –> Настройки  –> Источники пакетов и установить PlexConnect из  раздела «Сообщество» Центра пакетов. На этом настройка PlexConnect закончена для владельцев NAS Synology, и вы можете пропустить следующий шаг. Шаг третий. Создание сертификата. Для Windows. Пользователям необходимо предварительно скачать и установить OpenSSL Win 32 light и  Visual C++ 2008 Redistributable Package (x86).   Далее запускаете командную строку (cmd.exe) с правами администратора и выполняете следующую команду: C:\OpenSSL-Win32\bin\openssl.exe req -new -nodes -newkey rsa:2048 -out C:\trailers.pem -keyout C:\trailers.key -x509 -days 7300 -subj “/C=US/CN=trailers.apple.com” -config C:\OpenSSL-Win32\bin\openssl.cfg Затем: C:\OpenSSL-Win32\bin\openssl.exe x509 -in C:\trailers.pem -outform der -out C:\trailers.cer И напоследок: type C:\trailers.key >> C:\trailers.pem Для OS X и Linux. Юзеры запускают Terminal и выполняют команды: openssl req -new -nodes -newkey rsa:2048 -out ~/Desktop/trailers.pem -keyout ~/Desktop/trailers.key -x509 -days 7300 -subj “/C=US/CN=trailers.apple.com” Далее: openssl x509 -in ~/Desktop/trailers.pem -outform der -out ~/Desktop/trailers.cer && cat ~/Desktop/trailers.key >> ~/Desktop/trailers.pem Затем перемещаем 3 файла (trailers.pem, trailers.key, и trailers.cer) из корня диска C (для Windows) или с рабочего стола (для MacOS/Linux) в папку \assets\certificates\ каталога PlexConnect. Наконец можно запустить PlexConnect. Пользователи Windows запускают файл PlexConnect.py и разрешают доступ Python.exe в сеть.     Пользователи MacOS выполняют в терминале команду: sudo “/Applications/PlexConnect-master/PlexConnect.py” Пользователи Linux в терминале переходят к каталогу с PlexConnect и выполняют команду: sudo ./PlexConnect.py Теперь можно переходить к следующему шагу. Шаг четвертый. Настройка Apple TV. Открываем на Apple TV Настройки –> Основные  –> Сети. Находим текущее подключение и открываем его параметры. Пункт «Настройка DNS» устанавливаем в значение «Вручную», а в качестве DNS сервера вводим IP-адрес устройства с Plex Media Server:     После применения настроек ваша приставка вновь получит привычный для себя IP. Владельцам сетевых хранилищ я бы также посоветовал выполнить настройку DNS до установки PlexConnect. Теперь отправляемся в Настройки –> Основные, выделяем пункт «Отправлять данные в Apple» и нажимаем кнопку Play/Pause на пульте. Выбираем пункт «Добавить профиль». В поле ввода вносим: http://trailers.apple.com/trailers.cer     После применения настройки профиль добавится к списку сертификатов. Важно! Если при добавлении профиля сертификата у вас возникает какая-либо ошибка (например, код 109), то почти наверняка вам необходимо проверить настройки брандмауера (firewall). Шаг пятый. Все готово! Перезагружаем приставку. Запускаем приложение Trailers на Главном Экране и наблюдаем в нем медиатеку Plex.     Теперь вы можете слушать свою любимую музыку, просматривать фото, смотреть фильмы и полностью управлять их воспроизведением с пульта Apple TV. Дополнительным бонусом станет полная всеядность телевизионной приставки. Plex Media Server обеспечит автоматическое транскодирование* видео всех форматов в приемлемые для Apple TV. *Для сетевых хранилищ могут иметься ограничения из-за установленных в них процессоров.  

k010v

k010v

Установка и настройка Windows Hyper-V Server 2016

Установка и настройка Windows Hyper-V Server 2016 По материалам serveradmin.ru   Не так давно вышла очередная новая версия Windows Server 2016. Вместе с ним обновился и бесплатный гипервизор от Microsoft — Windows Hyper-V Server 2016. Его можно свободно скачать и использовать на свое усмотрение. Как обычно, первоначальная настройка сложна и не очевидна, придется немного повозиться для получения приемлемого функционала.   Ранее я рассказывал об установке и настройке Hyper-V Server 2012 R2, предыдущей версии бесплатного гипервизора. К сожалению, те методы настройки hyper-v в рабочей группе без домена неактуальны в версии 2016. В частности, утилита hvremote не работает на новой версии. Изменились настройки машины для управления. В данном случае в ее качестве будет выступать рабочая станция под управлением Windows 10. Но в общем и целом мне нравится гипервизор hyper-v, поэтому я решил внимательно проработать вопрос установки и первоначальной настройки для дальнейшего использования по мере необходимости. К плюсам hyper-v в целом и бесплатной версии в частности я отношу следующие моменты: Поддержка всех популярных ОС. Нет никаких проблем с совместимостью, нет необходимости отдельно ставить какие-то драйвера или тулсы. Поддержка hyper-v присутствует во всех windows системах, в ядре линукс, не помню точно с какой версии, но все современные системы ее имеют, в ядре freebsd, начиная с 10-й версии. То есть вы просто берете установочный диск и ставите систему на hyper-v, больше от вас ничего не требуется. Много различных способов бэкапа виртуальных машин. Это могут быть простые скрипты, бесплатные программы, либо полноценные платные версии крупных компаний, специализирующихся на программном обеспечении для бэкапа. Стандартная панель управления гипервизором, которую легко установить на компьютер под управлением windows, начиная с win 8.1. В основе Hyper-V Server популярная серверная система, с которой понятно и удобно работать. К примеру, чтобы загрузить или забрать файл с гипервизора, вам достаточно расшарить на нем папку стандартным образом, как вы это делаете в любой windows системе. Это мое личное мнение, основанное на опыте работы с малыми и средними компаниями, где нет каких-то особенных требований к надежности и доступности сервисов. Где используются несколько серверов с виртуальными машинами, не всегда есть домен windows. Конечно, помимо плюсов, есть и минусы. Первый и главный для меня минус — первоначальная настройка. Нельзя просто взять, установить Hyper-V Server и начать им пользоваться. Необходимо производить какие-то непонятные и не очевидные действия на хосте и управляемой машине. Дальше вы поймете, что я имею ввиду. Но преодолев это препятствие, можно спокойно использовать виртуальную инфраструктуру, основанную на бесплатном гипервизоре от microsoft. Установка Hyper-V Server 2016 Скачать бесплатный Hyper-V Server можно с сайта microsoft со специальной страницы с ознакомительными версиями, где в том числе обитают и бесплатные гипервизоры — https://www.microsoft.com/ru-ru/evalcenter/evaluate-windows-server-2016-essentials. К сожалению, требуется регистрация, но это стандартная практика. Если вам не хочется регистрироваться, можете скачать актуальную версию сервера на момент написания статьи с моего яндекс.диска — https://yadi.sk/d/h4AVkIwPzeuaJ. Дальше выполняете установку стандартным способом, как и любую другую систему. Загружаетесь с iso образа и следуете по шагам инсталлятора. Каких-то нюансов или проблем с тем, чтобы установить hyper-v server нет, так что я не буду заострять на этом внимание. Обращу внимание только на самый конец установки. У меня появилось вот такое окно: При этом я не мог ничего сделать или выбрать. Я нажал ctrl+alt+delete и появилось предложение задать пароль администратора. Я сделал это, установка завершилась, загрузилось окно со стандартным интерфейсом управления: Если вы по какой-то причине закроете это окно, вызвать его снова можно в командной строке с помощью команды sconfig.   Настройка Hyper-V Server 2016 Сразу же выполняем первоначальную настройку Hyper-V Server 2016 через стандартную консоль управления: Указываете рабочую группу, если вас не устраивает стандартная. Меняем имя сервера на что-то более осмысленное и понятное. Добавьте еще одного администратора. Это нужно сделать, чтобы иметь еще одну админскую учетную запись, отличную от administrator. В дальнейшем рекомендую все настройки и подключения выполнять под этой учетной записью. Разрешаем удаленное управление, в том числе ping. Автоматическое обновление оставляю на ваше усмотрение. Я обычно отключаю и все делаю вручную. Рекомендую сразу проверить обновления и установить их. Включаем Remote Desktop со всеми версиями клиента. Указываем сетевые настройки. Стандартно стоит dhcp, рекомендую установить адрес статически. Настройте время, если по-умолчанию стоит не правильное. Настройки телеметрии полностью отключить нельзя. Такой вот микрософт. Не приходится удивляться, с учетом нововведений в последних версиях системы. Быстренько пробежались по основным настройкам hyper-v server 2016. Теперь бы сразу начать установку виртуальных машин, но, к сожалению, пока это не получится сделать. Нам надо каким-то образом подключиться к серверу с помощью панели управления. Пока нам доступен только rdp доступ, но этого не достаточно. Удаленное подключение и управление Hyper-V Server 2016 Подключаемся по rdp к серверу, чтобы было удобно копировать и вставлять длинные команды в командную строку. В консоли cmd переходим в powershell, просто введя команду: powershell Вводим команды для настройки разрешений на фаерволе для удаленного управления: Set-NetFirewallRule -DisplayGroup 'Windows Management Instrumentation (WMI)' -Enabled true -PassThru Set-NetFirewallRule -DisplayGroup 'Remote Event Log Management' -Enabled true -PassThru Set-NetFirewallRule -DisplayGroup 'Remote Volume Management' -Enabled true -PassThru Теперь переходим на клиентскую систему. Напоминаю, что в моем случае это Windows 10 Корпоративная. Заходить на нее нужно под учетной записью с теми же параметрами, что создана на гипервизоре. Добавьте такого же пользователя и работайте под ним. Это обязательное условие для подключения к управлению непосредственно сервером, его службам, дисковой подсистемой и т.д. Для подключения только для управления ролью hyper-v иметь одинаковую с сервером учетку не обязательно, в конце я расскажу, как это сделать. Первым делом создадим запись в файле hosts с именем сервера hyperv. В моем случае эта запись выглядит так: 192.168.1.100 hyperv2016 Убедитесь, что с клиентской машины вы пингуете гипервизор по имени. Теперь нам нужно проверить, чтобы в настройках сетевого адаптера текущее сетевое подключение было указано, как подключенное к частной сети. Это нужно для того, чтобы было включено сетевое обнаружение устройств. Речь вот о чем: По-умолчанию этот параметр включен для частных сетей и выключен для общедоступных. Можете либо включить его и для общедоступных, либо поменять параметр сетевого соединения на частную сеть. Сделать это можно в соседнем разделе панели управления: Я не сразу смог найти, где это сделать, поэтому подсказываю вам. Продолжаем настройку хоста для подключения к hyper-v server 2016. Запускаем cmd от администратора и переходим в powershell. Выполняем команду: winrm quickconfig Обязательно жмите Y и продолжайте. Вводим следующую команду, которая разрешает управление удаленными системами: winrm set winrm/config/client '@{TrustedHosts="hyperv2016"}' В данном примере, hyperv2016 — имя моего гипервизора. При копировании приведенной выше команды обратите внимание на одинарные и двойные кавычки. Они могут измениться при копировании/вставке. В итоге вы получите ошибку во время выполнения команды. При необходимости отредактируйте их вручную. Теперь нам нужно изменить еще один параметр. Запускаем оснастку dcomcnfg.exe, выполнив эту команду в cmd. Открывается оснастка управления службой компонентов. Выполняем последовательность действий, указанных на картинке. Дальше надо установить стандартную оснастку для управления hyperv. Для этого идем в Панель управления -> Программы -> Включение или отключение компонентов Windows. Выбираем там Средства управления Hyper-V и устанавливаем их. Дожидаемся окончания установки и пробуем подключиться к удаленному серверу: Если все сделали правильно, вы подключитесь к серверу и у вас появится возможность им управлять. Расскажу еще об одном нюансе. Вы можете подключиться к удаленному hyper-v серверу, даже если работаете не под той учетной записью, что имеет административные права на гипервизоре. При подключении есть возможность ввести параметры другого пользователя. Но чтобы эта возможность заработала, необходимо выполнить ряд действий как на сервере, так и на клиенте. Для начала надо изменить один параметр в локальной политике компьютера. Для этого выполняем в cmd команду gpedit. Откроется оснастка управления локальными политиками компьютера. Идем по пути: Конфигурация компьютера -> Административные шаблоны -> Система -> Передача учетных данных -> Разрешить передачу новых учетных данных с проверкой подлинности сервера «только NTLM». Включаем ее и добавляем запись: wsman/hyperv2016 Далее выполняем команды в powershell. Не забудьте запустить консоль от имени администратора: Set-Item WSMan:\localhost\Client\TrustedHosts -Value "hyperv2016" Enable-WSManCredSSP -Role client -DelegateComputer "hyperv2016" Теперь надо внести некоторые изменения на самом гипервизоре. Подключаемся к нему по rdp, переходим в cmd, запускаем powershell и выполняем команды: Enable-PSRemoting Enable-WSManCredSSP -Role server После этого можете работать под привычным пользователем компьютера, но при этом подключаться к hyper-v server 2016 под другой учетной записью и управлять им. Самое трудное сделали. Теперь мы можем свободно подключаться и управлять гипервизором. Забыл упомянуть о том, как подключиться к управлению самим сервером, то есть как посмотреть список дисков, службы, почитать логи и т.д. Делается это очень просто. Заходите на компьютер под той же учетной записью, что является администратором на гипервизоре. Запускаете стандартную оснастку «Управление компьютером», выбираете локальный компьютер, жмете правой правой кнопкой мыши и выбираете подключиться к другому компьютеру: Пишите имя сервера и подключаетесь к нему. Вам доступны все разделы управления компьютером, кроме диспетчера устройств. К нему почему-то не получается подключиться, возникает ошибка. Я подробно не разбирался в чем дело и как ее исправить. Настройка виртуальных коммутаторов Перед тем, как мы приступим к установке виртуальных машин, подготовим для них сеть. Я не буду подробно рассказывать о нюансах работы сети в hyper-v. Это не тема текущего повествования. Просто создадим сетевой бридж для виртуальных машин. В оснастке управления выбираем справа «Диспетчер виртуальных коммутаторов», выбираем тип «Внешняя». Указываете имя коммутатора. Я рекомендую давать осмысленные названия, чтобы было проще потом управлять. Если это бридж в локальную сеть, то назовите виртуальный коммутатор local. Сохраняйте настройки. Вы увидите предупреждение о том, что сетевые соединения будут сброшены. Все в порядке, соглашайтесь. Будет создан новый виртуальный сетевой интерфейс с теми же настройками, что были у физического. Но здесь есть один важный нюанс. Если ваш сервер получал сетевые настройки по dhcp, то он скорее всего получит новый ip адрес. Имейте это ввиду.   Создание виртуальных машин   Мы почти закончили настройку Windows Hyper-V Server 2016 и готовы приступить к установке виртуальных машин. Надо только загрузить iso образ на гипервизор. Тут все очень просто. Открываем в проводнике на управляющей машине удаленный диск через стандартную возможность windows машин, создаем папку iso и загружаем нужный образ. Так же я рекомендую сразу загрузить какой-нибудь файловый менеджер для удобной навигации по папкам на самом гипервизоре. Лучше использовать портированную версию. Запустить этот менеджер можно будет через командную строку, подключившись по rdp Теперь все готово к созданию виртуальных машин. Сделайте несколько тестовых, а дальше мы научимся их бэкапить. Бэкап виртуальных машин Hyper-V Ранее я уже рассказывал про программу HVBackup для бэкапа виртуальных машин. Она замечательно работает с Windows Hyper-V Server 2016, приведенная статья полностью актуальна. Для работы программы необходимо установить на гипервизоре .Net Framework 3.5 с помощью команды powershell: Install-WindowsFeature NET-Framework-Core А дальше все по приведенной инструкции. Если не хочется возиться с консольной программой, скриптами, планировщиком, но хочется быстро сделать бэкап виртуальной машины hyper-v, можно воспользоваться бесплатной программой Veeam Backup Free Edition. Она позволяет вручную сделать копию виртуальной машины. Основное ограничение бесплатной версии в том, что вы не сможете создавать задания для автоматического бэкапа. Только ручной режим. Это ограничение можно обойти и использовать с помощью скриптов автоматический бэкап в бесплатной veeam, но это тема отдельного разговора. Не хочется рассматривать этот вариант в рамках данной статьи. Подробнее о различиях платной и бесплатной версии можно узнать по ссылке — https://www.veeam.com/pdf/datasheet/veeam_backup_9_5_free_vs_paid_comparison_ru.pdf Программа, конечно, монструозная, весит много, ставится долго, но зато никаких заморочек. Все настраивается легко и понятно через интерфейс программы. После установки запускаете программу. Добавляете новый сервер: Указываете, что это Standalone Hyper-V server, добавляете учетные данные и дожидаетесь окончания установки необходимых компонентов на hyperv сервере. После этого можно создать резервную копию виртуальной машины. Для этого выберите гипервизор, виртуальную машину, которую хотите забэкапить и жмите правой кнопкой мыши по ней. Выбираете VeeamZIP: Дальше указываете место, куда будет сохранен бэкап и все. Запускаете задание и ждете окончания процесса. Бэкапить можно в любое место, куда есть доступ с машины, на которую установлен сам veeam. Можете подключить сетевой диск и бэкапить в него.   Подключение к Hyper-V Server 2016 с Windows 7   Рассмотрим еще один вариант подключения к бесплатному hyper-v, когда у вас в наличие только операционная система Windows 7. Вам нужно создать виртуальную машину, либо изменить настройки существующей, завершить ее работу, или наоборот запустить. Оснастку управления Hyper-V на Windows 7 поставить не получится. На помощь придет программа 5nine Manager Free. Скачать ее можно либо с указанного сайта, но нужна регистрация, после которой на почту придет ссылка для скачивания и файл с лицензией. Для нормальной установки требуется .NET Framework 4.5 или выше. Если в системе он не будет установлен, то инсталлятор просто не начнет установку, даже не сказав почему. Мне пришлось читать руководство, чтобы разобраться, почему на один компьютер у меня нормально ставится программа, а на другой не хочет. После установки запускайте программу и добавляйте hyperv server. Там вы сможете управлять некоторыми настройками гипервизора, добавлять, удалять, запускать, редактировать виртуальные машины. Все сделано достаточно просто и удобно. Если нет стандартной оснастки, эта программа выручает. Сам ей частенько пользуюсь при необходимости.   Заключение Постарался рассмотреть все наиболее значимые аспекты в работе с бесплатным гипервизором от Microsoft. Сам еще не проверял его в работе и особо не интересовался нововведениями, пока не было времени. Смотрел на него только в тестовых стендах. Можете сравнить его с бесплатным гипервизором на kvm — proxmox, который я рассматривал в своей статье установка и настройка proxmox. Самым большим преимуществом последнего является возможность установки на программный рейд. Hyper-V сервер я никогда не пробовал установить на программный рейд, я даже не знаю, возможно ли это. Так что использовать его можно только там, где есть аппаратный рейд, либо в тестовых вариантах. Лично я никогда не ставлю гипервизоры в продакшн на одиночные диски. Все остальное дело привычки и удобства. В proxmox мне нравится управление через web браузер. Не нужно ничего ставить на компьютер. После установки гипервизор сразу готов к работе. В hyper-v удобно, что все системы его поддерживают без проблем. На kvm, к примеру, в proxmox, после установки windows систем в качестве гостевых машин, нужно будет устанавливать драйвера с отдельного диска, либо использовать готовые образы, где они будут уже интегрированы. Мелочь, но все равно не так удобно. Буду рад любым замечаниям по статье, подсказкам или указаниям на ошибки. Так же было бы любопытно узнать, какой гипервизор вы предпочитаете использовать и по какой причине. Какие преимущества по сравнению с остальными гипервизорами вы видите в своем выборе.

k010v

k010v

Установка и обновление SSL-сертификатов Let's encrypt в Centos 7

Настройка Let's Encrypt на CentOS 7

 
0. Установка git и bc если не установлены раннее sudo yum -y install git bc
1. Клонированию проекта letsencrypt из GitHub.
 
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
 
 
2. Получение сертификата
Переходим к проекту Letsencrypt, куда мы клонировали файлы. И запускаем генерацию сертификатов командой letsencrypt-auto certonly, используя плагин webroot.
 
cd /opt/letsencrypt
 
./letsencrypt-auto certonly -a webroot --webroot-path=/web/path -d domen.com -d www.domen.com
 
Если все прошло успешно, тогда в консоли вы должны увидеть примерно это:
 
/etc/letsencrypt/live/domen.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/domen.com/privkey.pem
 
IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to sammy@digitalocean.com
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-15. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
- If like Let's Encrypt, please consider supporting our work by:
 
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
 
Если вы получили ошибки, типа: Failed to connect to host for DVSNI challenge, настройте firewall вашего сервера, что бы TCP трафик проходил по портам 80 и 443.
 
3. Настройка TLS/SSl на веб-сервере Nginx
 
NGINX:
ssl_certificate "/etc/letsencrypt/live/domen.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/domen.com/privkey.pem";
ssl_trusted_certificate "/etc/letsencrypt/live/domen.com/fullchain.pem";
 
APACHE:
SSLCertificateFile /etc/letsencrypt/live/domen.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domen.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/domen.com/chain.pem
 
 
4. Перезапуск Nginx или Apache
 
service nginx restart && service php-fpm restart
 
service httpd restart
 
5. Настройка автопродления
 
Сертификаты действительный 90 дней, но рекомендуется продлевать сертификаты каждые 60 дней. Мы это автоматизируем с помощью cron.
 
Чтобы запустить процесс обновления для всех установленных доменов, выполните следующую команду:
 
/opt/letsencrypt/letsencrypt-auto renew
 
Так как мы недавно установили сертификат, то команда будет проверять только дату истечения срока действия и распечатает сообщение, информирующее о том, что сертификат не нуждается в продлении. Вы увидите примерно следующие в консоли:
 
Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
 
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
 
Обратите внимание, что если вы создали сертификат в комплекте с несколькими доменами, тогда только базовое имя домена будет отображено в консоли, но вы не пугайтесь, продлены будут все домены, включенные в этот сертификат.
 
6. Редактируем crontab, что бы наши сертификаты обновлялись автоматически. Проверку на обновления мы будем делать каждую неделю.
Для редактирования crontab от root пользователя выполните команду:
 
sudo crontab -e
 
Добавим следующие строки:
 
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
35 2 * * 1 /usr/bin/systemctl reload nginx
 
Этак команда создаст cron, который каждый понедельник будет выполнять автоматическое продление letsencrypt сертификатов в 2:30 и перезагружать Nginx в 2:35. Вся информация об обновлении будет логироваться в /var/log/le-renew.log.
 

k010v

k010v

Установка Owncloud X на CentOS 7

Появилась необходимость в своем облачном сервере. Решил развернуть Owncloud X на Centos 7. Есть так же и мобильное приложение, которое можно подключить к вашей облачной среде owncloud. Так же в новой версии появился webdav.
И так приступим. Обновляем систему
yum update -y
Устанавливаем php (необходимо выше версии 5.4)
Для этого необходимо подключить репозиторий epel-release
yum install epel-release
Далее подключаем репозиторий remi
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Проверяем список доступных репозиториев
ls /etc/yum.repos.d/remi* Как видим в списке отображается несколько версий php: Далее есть несколько вариантов, чтобы активировать необходимую версию php:
a) Устанавливаем пакет yum-utils
yum install yum-utils С помощью команды yum-config-manager активируем необходимую версию php
yum-config-manager --enable remi-php72 b) Второй вариант
Открываем файл с необходимой версией php и меняем значение enabled=0 на 1
vi /etc/yum.repos.d/remi-php72.repo После устанавливаем сам php и необходимые компоненты для работы 0wncloud
yum install php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo php-intl php-xmlwriter php-mbstring Проверяем версию php
php -v Устанавливаем сервер базы данных
yum install mariadb mariadb-server
Запускаем и добавляем в автозагрузку
systemctl enable mariadb
systemctl start mariadb При первом подключении к БД у меня не было пароля, чтобы установить пароль на root необходимо выполнить следующую команду
mysqladmin -u root password "newpass" Подключаемся к mysql
mysql -u root -p Создаем новую базу
CREATE DATABASE owncloud;
Теперь создайте пользователя и назначьте его для базы данных owncloud:
GRANT ALL ON owncloud.* to 'owncloud'@'localhost' IDENTIFIED BY 'newpass'; exit Перезапускаем службы
systemctl restart httpd php-fpm mariadb Так же не забываем настроить firewall.
Добавляем следующие правила: firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https Перезапускаем
firewall-cmd --reload Смотрим список правил
firewall-cmd --permanent --list-all Выключаем selinux, для этого открываем файл config, расположенного по пути:
vi /etc/selinux/config и меняем значение SELINUX=enforcing на SELINUX=disabled После проделанных шагов можно пробовать подключиться к owncloud, вводим в браузере
http://ipaddress/owncloud Заполняем поля имя пользователя и пароль и нажимаем на “Хранилище и база данных” После подключения БД и ввода логина с паролем, вы попадаете на сайт owncloud. Если вы будете открывать доступ из интернета, необходимо добавить в config.php
vi /var/www/html/owncloud/config/config.php найти массив array  добавить ваши данные: ‘trusted_domains’ =>
array (
0 => ‘local_ip’,
1 => ‘site.com’,
), Если этого не сделать, то owncloud будет выдавать ошибку и не пустит на сайт!
На этом первоначальная установка с настройкой завершена.  

k010v

k010v

Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 7

Публикация по материалам serveradmin.ru     Я буду настраивать почтовый сервер на ОС linux, а точнее на CentOS 7. За основу будет взят postfix, который присутствует в этой системе из коробки. Инструкция получится универсальной, можно использовать и для других дистрибутивов. Все основные конфиги легко переносятся на разные системы, требуя минимальной правки, в основном путей. Я напишу статью на самом что ни на есть реальном примере, без какой-либо правки доменов, ip и прочего, чтобы не ошибиться и показать максимально возможный реальный пример. У меня есть технический домен zeroxzed.ru. Я буду использовать его в своей работе. Почтовый сервер будет иметь имя mail.zeroxzed.ru. Всю теорию по подготовке dns к установке и настройке почтового сервера я рассказывал в предыдущей статье о почтовом сервере. Не хочу здесь повторяться. Уточню только список действий, которые вам нужно проделать c ДНС: Создаем A запись в DNS — mail.zeroxzed.ru. Добавляем или редактируем MX запись, указывая в качестве почтового сервера mail.zeroxzed.ru. Просим провайдера прописать PTR для внешнего ip адреса, который будет использовать почтовый сервер. В качестве ptr записи просим установить имя нашего сервера — mail.zeroxzed.ru. Я предпочитаю в качестве dns хостинга использовать сервера яндекса, даже если не прикрепляю его почту к домену. На картинке показан минимально необходимый набор записей, кроме PTR. Этими записями управляете не вы, а провайдер, который вам выдает ip. Пока с днс все. Позже мы вернемся к этому вопросу, когда будем добавлять dkim и spf записи. Но обо всем по порядку. Подготовим систему centos к установке и настройке почтового сервера postfix. Если у вас еще нет готовой системы, то рекомендую воспользоваться моими статьями по установке и настройке centos. Отдельно потратьте время на настройку iptables. Я не буду касаться этого вопроса в данной статье, чтобы не раздувать ее второстепенными вещами. Удобнее, когда все по отдельности рассказано и описано с должной глубиной. Сваливать все в одну кучу не хочется. По вступлению вроде все, основное рассказал. Приступим к настройке нашего почтового сервера. Сразу хочу сделать предупреждение. Настройка почтового сервера достаточно трудоемкий процесс, требует определенных навыков, знаний и понимания принципов работы используемых средств. Я не ставлю для себя цель расписать максимально подробно так, чтобы было понятно даже неподготовленному администратору linux. Вы должны быть так или иначе подготовлены, либо запаситесь терпением и разбирайтесь внимательно сами в нюансах. Эта статья на полный копипаст не подходит, что-то остается за кадром для самостоятельного выполнения. Иначе нельзя, получится очень большой и громоздкий материал. Установка postfixadmin Начнем с установки и настройки панели управления почтовым сервером postfix — postfixadmin. Без него начинать что-то делать неудобно, так как управлять пользователями, ящиками, алиасами будет нечем. По своей сути postfixadmin — набор php скриптов для управления записями в mysql базе данных, которую использует сервер postfix во время своей работы. Соответственно, для работы postfixadmin нам нужен web сервер. Подробно о настройке web сервера на centos читайте отдельно. Сейчас же мы быстро установим все необходимое. Привожу только команды, без комментариев. Все подробности по приведенной выше ссылке. # yum install httpd php phpmyadmin mariadb mariadb-server php-imap Этих пакетов со всеми зависимостями будет достаточно для установки всех необходимых компонентов веб сервера. Я специально ставлю phpmyadmin, с ним удобно работать с базой. В нашем случае все пользователи будут храниться в mysql, иногда может понадобиться туда заглянуть. Подробнее с установкой и настройкой phpmyadmin можете ознакомиться отдельно. Запускаем httpd и mariadb и добавляем их в автозагрузку. # systemctl start httpd # systemctl enable httpd # systemctl start mariadb # systemctl enable mariadb Задаем пароль root для mysql. # /usr/bin/mysql_secure_installation Проверяем работу web сервера. Заходим по ip адресу сервера — http://188.35.19.125/, а также проверяем работу phpmyadmin — http://188.35.19.125/phpmyadmin/. Его нужно настроить, об этом рассказано в статье, которую я привел чуть выше. По-умолчанию в phpmyadmin доступ закрыт. Если все сделали правильно, то увидите примерно следующее. Сразу создадим тут пользователя postfix и одноименную базу данных. Запомните учетные данные, они нам далее понадобятся. Веб сервер готов, продолжаем настройку почтового сервера. Скачиваем последнюю версию postfixadmin. # cd /usr/src # wget https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.0.2/postfixadmin-3.0.2.tar.gz Скорее всего во время вашей установки версия postfixadmin изменится и ссылка может быть неактуальной. Но даже если она будет актуальна, возможно выйдет более новая версия. Проверьте ее по ссылке https://sourceforge.net/projects/postfixadmin/ и скачайте самую свежую версию. Распаковываем архив и копируем в директорию веб сервера. # tar -xvzf postfixadmin-* # mv /usr/src/postfixadmin-3.0.2 /var/www/html/postfixadmin Назначаем владельцем пользователя веб сервера: # chown -R apache. /var/www/html/postfixadmin/ Дальше редактируем конфигурационный файл postfixadmin. # mcedit /var/www/html/postfixadmin/config.inc.php Приводим параметры к следующему виду: $CONF['configured'] = true; $CONF['default_language'] = 'ru'; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = '12345678'; $CONF['database_name'] = 'postfix'; $CONF['admin_email'] = 'root@zeroxzed.ru'; $CONF['encrypt'] = 'md5crypt'; $CONF['default_aliases'] = array ( 'abuse' => 'root', 'hostmaster' => 'root', 'postmaster' => 'root', 'webmaster' => 'root' ); $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'YES'; Обращаю внимание на выделенный параметр. Он указывает на то, в каком виде хранить пароли пользователей в базе данных. Конечно, хранить обычным текстом без шифрования это дурной тон и может быть опасно. Я указал хранение в шифрованном виде. Но если мы говорим о небольшой компании без публичного доступа к серверу, можно использовать нешифрованные пароли. Для этого указываем значение параметра cleartext. Я сам так часто делаю просто из соображений удобства. Объясню, в чем удобство. К примеру, у пользователя несколько устройств подключены к почте и он забыл свой пароль. Админ при создании почему-то тоже его никуда не записал, или забыл, или потерял. Вам придется сбросить пароль и перенастроить все устройства. Если же у вас пароль хранится в открытом виде, вы просто смотрите в базу и говорите пользователю пароль. Пароли в открытом виде удобно просто выгрузить дампом из базы, если понадобится кому-то все учетки передать. Но тут как посмотреть  С одной стороны плюс, с другой минус — кто-то очень просто может спереть все ваши пароли. В общем, тут от ситуации зависит, решайте сами, как вам удобнее хранить пароли. У меня распространены ситуации, когда я удаленно администрирую сервера, а на месте эникеи работают с пользователями. Чаще всего это не очень аккуратные и ответственные люди, иначе они бы работали с серверами.  Они часто забывают записать пароль, путают что-то и т.д. В итоге, когда один человек увольняется и приходит другой, оказывается, что найти пароли на некоторые ящики просто невозможно. Тут очень выручает возможность посмотреть пароль в базе. Я новому админу либо пароль говорю, либо весь дамп сразу отдаю, пусть работает. Если вы сами работаете с сервером и все аккуратно ведете, записываете, например, в keepass все пароли от почтовых ящиков, то смело шифруйте все пароли, так будет спокойнее. Последние 2 параметра domain_path и domain_in_mailbox указывайте по своему усмотрению. В файле конфигурации в комментариях расписано, за что они отвечают и в чем отличие. Мне кажется, удобно хранить директории именно в таком виде, как я указал. Получится следующий путь до ящика, если у вас архив почты будет жить, к примеру, в директории /mnt/mail — /mnt/mail/zeroxzed.ru/root@zeroxzed.ru. С параметрами разобрались. Сохраняем конфиг. Идем по адресу http://188.35.19.125/postfixadmin/setup.php и начинаем установку postfixadmin. Первым делом идет проверка всех необходимых для установки и работы компонентов. Для продолжения установки у вас должна быть такая картинка. Если чего-то не хватает, разбирайтесь по месту. Если делаете по моей инструкции, то все должно быть в порядке. Указывайте пароль установки и продолжайте. Вы должны получить строку с хэшем этого пароля. Добавляем полученную строку в файл конфигурации postfixadmin. # mcedit /var/www/html/postfixadmin/config.inc.php $CONF['setup_password'] = '67e46bdcc7aeb431f7af9a6d02f43352:30672e5a9deacaf505d32807b967caf9fd0c32ef'; Используя этот пароль, можно создать учетную запись администратора панели управления. Делаем это, учитывая, что пароль должен содержать не менее двух цифр. Если все сделали правильно, то увидите сообщение. Переходим по ссылке и авторизуемся с помощью учетной записи администратора, которую только что сделали. Вы должны увидеть основную страницу интерфейса postfixadmin. Теперь нам нужно добавить домен в панель управления. Идем в раздел Список доменов -> Новый домен и добавляем свой домен. При создании домена были добавлены стандартные алиасы, получателя для которых мы указали еще в конфиге — ящик root@zeroxzed.ru. Создание таких алиасов требование стандартов, но по факту, кроме спама, вы скорее всего ничего не будете получать по этим адресам. Так что их создание оставляйте на свое усмотрения. Я обычно их не делаю, так как ящик для этих алиасов все равно не читаю. Далее создадим почтовый ящик администратора — root@zeroxzed.ru. Для этого идем в раздел Обзор -> Создать ящик и заполняем поля. Непосредственно ящик на диске создан не будет, так как у нас еще не настроена почтовая система, но запись в базе данных появится. Это можно проверить через phpmyadmin. Как мы видим, пароль указан в зашифрованном виде. На этом установку и настройку postfixadmin завершаем. Интерфейс для управления почтовым сервером мы подготовили. Теперь можно заняться непосредственно настройкой postfix.   Настройка postfix   Сердце нашего почтового сервера на linux — postfix. В дистрибутиве centos он уже установлен, можно сразу переходить к настройке. Рисуем следующий конфиг. # mcedit /etc/postfix/main.cf soft_bounce = no queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix myhostname = mail.zeroxzed.ru mydomain = zeroxzed.ru myorigin = $myhostname inet_interfaces = all inet_protocols = ipv4 mydestination = localhost.$mydomain, localhost unknown_local_recipient_reject_code = 550 mynetworks = 127.0.0.0/8 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases smtpd_banner = $myhostname ESMTP $mail_name debug_peer_level = 2 # Строки с PATH и ddd должны быть с отступом в виде табуляции от начала строки debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.10.1/samples readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf, mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf smtpd_discard_ehlo_keywords = etrn, silent-discard smtpd_forbidden_commands = CONNECT GET POST broken_sasl_auth_clients = yes smtpd_delay_reject = yes smtpd_helo_required = yes smtp_always_send_ehlo = yes disable_vrfy_command = yes smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname smtpd_data_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining, reject_multi_recipient_bounce, smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_multi_recipient_bounce, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache smtpd_tls_key_file = /etc/postfix/certs/key.pem smtpd_tls_cert_file = /etc/postfix/certs/cert.pem tls_random_source = dev:/dev/urandom # Ограничение максимального размера письма в байтах message_size_limit = 20000000 smtpd_soft_error_limit = 10 smtpd_hard_error_limit = 15 smtpd_error_sleep_time = 20 anvil_rate_time_unit = 60s smtpd_client_connection_count_limit = 20 smtpd_client_connection_rate_limit = 30 smtpd_client_message_rate_limit = 30 smtpd_client_event_limit_exceptions = 127.0.0.0/8 smtpd_client_connection_limit_exceptions = 127.0.0.0/8 maximal_queue_lifetime = 1d bounce_queue_lifetime = 1d smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_type = dovecot smtpd_sasl_path = private/dovecot-auth # Директория для хранения почты virtual_mailbox_base = /mnt/mail virtual_minimum_uid = 1000 virtual_uid_maps = static:1000 virtual_gid_maps = static:1000 virtual_transport = dovecot dovecot_destination_recipient_limit = 1 sender_bcc_maps = hash:/etc/postfix/sender_bcc_maps recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_maps Я выделил жирным имя домена и путь для директории с почтовыми ящиками. Не забудьте поменять эти параметры на свои. Сохраняем конфиг и продолжаем настройку. В таком виде сервер еще не готов. Нужно теперь создать все то, что описано в файле конфигурации. Создаем папку для файлов с конфигурацией подключения к mysql и сами файлы подключения. # mkdir /etc/postfix/mysql && cd /etc/postfix/mysql # mcedit relay_domains.cf hosts = localhost user = postfix password = 12345678 dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1' # mcedit  virtual_alias_domain_maps.cf hosts = localhost user = postfix password = 12345678 dbname = postfix query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 # mcedit virtual_alias_maps.cf hosts = localhost user = postfix password = 12345678 dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = '1' # mcedit virtual_mailbox_domains.cf hosts = localhost user = postfix password = 12345678 dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1' # mcedit virtual_mailbox_maps.cf hosts = localhost user = postfix password = 12345678 dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' Редактируем файл /etc/postfix/master.cf. Нам надо добавить строки, касающиеся настройки Submission для того, чтобы почтовый сервер работал на 587 порту. Смартфоны очень часто при настройке используют этот порт по-умолчанию, где-то даже без возможности изменить эту настройку. Приводим секцию, отвечающую за эту работу к следующему виду. submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_wrappermode=no -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ORIGINATING Обращаю внимание на пробел в начале строки, начиная со второй. Его надо обязательно оставить. Добавляем еще настройки для того, чтобы наш сервер поддерживал протокол SSL/TLS и слушал порт 465 smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ORIGINATING В этот же файл добавляем еще одну настройку, которая будет указывать postfix, что доставкой почты у нас будет заниматься dovecot, который мы настроим следом. Добавляем в master.cf в самый конец. dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient} Сгенерируем самоподписанные ssl сертификаты для нашего почтового сервера. Позже отдельным пунктом я расскажу как использовать полноценные сертификаты. Они не всем нужны, поэтому показываю быструю настройку postfix на использование своих сертификатов, которые уже указаны в конфиге postfix. Создаем директорию и сами сертификаты: # mkdir /etc/postfix/certs # openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem Для генерации вам зададут несколько вопросов по поводу данных о сертификате. В принципе, можете там писать все, что угодно. Вот мои данные. Создадим файлы для информации о ящиках, куда будет собираться вся входящая и исходящая почта. # mcedit /etc/postfix/recipient_bcc_maps @zeroxzed.ru all_in@zeroxzed.ru # mcedit /etc/postfix/sender_bcc_maps @zeroxzed.ru all_out@zeroxzed.ru Создаем индексированные базы данных из этих файлов. Это нужно делать каждый раз, после изменения. # postmap /etc/postfix/recipient_bcc_maps /etc/postfix/sender_bcc_maps Теперь создайте два почтовых ящика all_in@zeroxzed.ru и all_out@zeroxzed.ru через postfixadmin. Немного поясню по этим ящикам — для чего они нужны. Изначально я их делал, когда пользователи использовали протокол pop3 без сохранения писем на сервере. Это позволяло организовать бэкап всей переписки. Эти ящики очень быстро заполняются и занимают огромный объем, поэтому их обязательно надо чистить. Я просто скриптами регулярно собирал всю почту в архивы с именами в виде дат. Если нужно было какое-то письмо найти, то просто распаковывал нужный архив. В случае с imap роль бэкапа отпадает, так как вся почта хранится на сервере. Но эти ящики все равно бывают полезны, когда пользователь, к примеру, удалил какое-то важное письмо и потом делает вид, что его и не было. Если это письмо пришло только сегодня и еще не успело улететь в бэкап, то кроме записи в логах об этом письме, вы не увидите само содержимое. А с такими ящиками все сразу будет понятно, и вопросы отпадут. Последнее применение — служба безопасности. Если у вас есть кто-то, кому положено читать всю переписку, то реализовать этот функционал можно таким простым способом. Все основные настройки для postfix мы сделали. Некоторые из них завязаны на работу с dovecot, который мы еще не настроили. Поэтому больше postfix не трогаем, не перезапускаем. Идем настраивать dovecot — imap сервер нашей почтовой системы. Настройка dovecot Займемся настройкой dovecot — сервер доставки почты пользователю по протоколам pop3 и imap. Я не вижу причин использовать pop3. Он неудобен по сравнению с imap. Чаще всего pop3 отключаю вовсе. Но это уже на ваше усмотрение. Приведу пример с настройкой обоих протоколов. Помимо основного функционала по доставке почты, я настрою несколько полезных плагинов. Расскажу о них поподробнее: Sieve — выполняет фильтрацию почты по заданным правилам в момент локальной доставки на почтовом сервере. Удобство такого подхода в том, что вы один раз можете настроить правило сортировки, и оно будет работать во всех клиентах, которыми вы будете получать почту по imap. Правила создаются, хранятся и исполняются на самом сервере. Acl — позволяет пользователям расшаривать папки в своем почтовом ящике и предоставлять доступ к этим папкам другим пользователям. Не часто видел, чтобы этот функционал настраивали и использовали. Думаю, просто по незнанию. По мне так очень удобный и полезный функционал. Часто вижу, что люди настраивают плагин quota, который позволяет ограничивать максимальный размер почтового ящика. Я лично в своей работе его не использую. Возможно, когда у тебя клиентов сотни и тысячи это имеет значение и надо обязательно настроить ограничение. Когда же ящиков меньше, нет смысла напрягать людей постоянной чисткой. Сейчас диски стоят не так дорого. Мне кажется, проще и дешевле увеличить место на сервере, нежели постоянно беспокоить пользователей необходимостью чистки ящика. Лучше ограничить максимальный размер письма, скажем 20-ю мегабайтами. Тогда сильно забить ящик даже при большом желании быстро не получится. А почта все-таки важный инструмент в работе. Мне кажется, ее лучше хранить как можно дольше. Есть еще один полезный плагин expire, который позволяет удалять устаревшие письма в определенных папках. Например, удалять все письма старше 30-ти дней в корзине и папке со спамом. Но реально пользоваться им не получается по простой причине. Разные почтовые клиенты создают различные папки для корзины и спама. Thunderbird создает папки с латинскими именами trash и spam, outlook с русскими, которые на почтовом сервере преобразуются в кодировку UTF7, мобильные клиенты тоже используют разные имена папок. В итоге нет единообразия, плагин полноценно не работает. Я рассказал об этих плагинах для наводки. Сам их не настраиваю, но если вам захочется реализовать описанный функционал, можете сами разобраться и настроить. Небольшую теорию я дал, теперь переходим к практике. Устанавливаем необходимые для dovecot пакеты. # yum install dovecot dovecot-mysql dovecot-pigeonhole Изначально конфиг dovecot разбит на отдельные сегменты и лежат в директории /etc/dovecot/conf.d. Каждый файл — отдельный функционал. Мне не нравится прыгать по файлам, поэтому я храню все в едином общем файле конфигурации /etc/dovecot/dovecot.conf. С ним мы и будем работать. Приводим его к следующему виду. # mcedit /etc/dovecot/dovecot.conf listen = * [::] mail_plugins = mailbox_alias acl protocols = imap pop3 sieve lmtp mail_uid = 1000 mail_gid = 1000 first_valid_uid = 1000 last_valid_uid = 1000 log_path = /var/log/dovecot/main.log info_log_path = /var/log/dovecot/info.log debug_log_path = /var/log/dovecot/debug.log ssl_protocols = !SSLv2 !SSLv3 ssl = required verbose_ssl = no ssl_cert = </etc/postfix/certs/cert.pem ssl_key = </etc/postfix/certs/key.pem ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ssl_dh_parameters_length = 2048 ssl_prefer_server_ciphers = yes disable_plaintext_auth = yes mail_location = maildir:/mnt/mail/%d/%u/ auth_default_realm = zeroxzed.ru auth_mechanisms = PLAIN LOGIN service auth { unix_listener /var/spool/postfix/private/dovecot-auth { user = postfix group = postfix mode = 0666 } unix_listener auth-master { user = vmail group = vmail mode = 0666 } unix_listener auth-userdb { user = vmail group = vmail mode = 0660 } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { user = postfix group = postfix mode = 0600 } inet_listener lmtp { address = 127.0.0.1 port = 24 } } userdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } auth_master_user_separator = * plugin { auth_socket_path = /var/run/dovecot/auth-master acl = vfile acl_shared_dict = file:/mnt/mail/shared-folders/shared-mailboxes.db sieve = /mnt/mail/sieve/%u.sieve mailbox_alias_old = Sent mailbox_alias_new = Sent Messages mailbox_alias_old2 = Sent mailbox_alias_new2 = Sent Items } protocol lda { mail_plugins = $mail_plugins sieve auth_socket_path = /var/run/dovecot/auth-master deliver_log_format = mail from %f: msgid=%m %$ log_path = /var/log/dovecot/lda-errors.log info_log_path = /var/log/dovecot/lda-deliver.log lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes postmaster_address = root } protocol lmtp { info_log_path = /var/log/dovecot/lmtp.log mail_plugins = quota sieve postmaster_address = postmaster lmtp_save_to_detail_mailbox = yes recipient_delimiter = + } protocol imap { mail_plugins = $mail_plugins imap_acl imap_client_workarounds = tb-extra-mailbox-sep mail_max_userip_connections = 30 } protocol pop3 { mail_plugins = $mail_plugins pop3_client_workarounds = outlook-no-nuls oe-ns-eoh pop3_uidl_format = %08Xu%08Xv mail_max_userip_connections = 30 } service imap-login { service_count = 1 process_limit = 500 } service pop3-login { service_count = 1 } service managesieve-login { inet_listener sieve { port = 4190 } } namespace { type = private separator = / prefix = inbox = yes mailbox Sent { auto = subscribe special_use = \Sent } mailbox "Sent Messages" { auto = no special_use = \Sent } mailbox "Sent Items" { auto = no special_use = \Sent } mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Trash { auto = subscribe special_use = \Trash } mailbox "Deleted Messages" { auto = no special_use = \Trash } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Spam { auto = no special_use = \Junk } mailbox "Junk E-mail" { auto = no special_use = \Junk } mailbox Archive { auto = no special_use = \Archive } mailbox Archives { auto = no special_use = \Archive } } namespace { type = shared separator = / prefix = Shared/%%u/ location = maildir:%%h:INDEX=%h/shared/%%u subscriptions = yes list = children } Создаем группу и пользователя с указанными в конфиге uid 1000. # groupadd  -g 1000 vmail # useradd -d /mnt/mail/ -g 1000 -u 1000 vmail # chown vmail. /mnt/mail Создаем конфигурационные файлы для доступа к mysql базе. # mcedit /etc/dovecot/dovecot-mysql.conf driver = mysql default_pass_scheme = CRYPT connect = host=127.0.0.1 dbname=postfix user=postfix password=12345678 user_query = SELECT '/mnt/mail/%d/%u' as home, 'maildir:/mnt/mail/%d/%u' as mail, 1000 AS uid, 1000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1' password_query = SELECT username as user, password, '/mnt/mail/%d/%u' as userdb_home, 'maildir:/mnt/mail/%d/%u' as userdb_mail, 1000 as userdb_uid, 1000 as userdb_gid, concat('*:bytes=', quota) AS userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1' Создадим директорию и файлы для логов. # mkdir /var/log/dovecot # cd /var/log/dovecot && touch main.log info.log debug.log lda-errors.log lda-deliver.log lmtp.log # chown -R vmail:dovecot /var/log/dovecot Создаем пару служебных папок для плагинов sieve и acl. # mkdir /mnt/mail/sieve && mkdir /mnt/mail/shared-folders # chown -R vmail. /mnt/mail И небольшой штрих в завершении настройки. # chown vmail. /var/run/dovecot/auth-master Уже не помню, зачем это было нужно, запись осталась в черновиках. Знаю только, что какая-то ошибка всплывала без этого. На этом основная настройка почтового сервера на базе postfix и dovecot завершена. Можно перезапускать службы и проверять работу системы. # systemctl restart postfix # systemctl start dovecot # systemctl enable dovecot     Проверка работы почтового сервера Самый простой и быстрый способ проверить работу почтового сервера — отправить на него письмо. Я буду отправлять со своего почтового адреса zeroxzed@gmail.com на адрес root@zeroxzed.ru. Вот что должно быть в логе, если у вас все правильно настроено и почтовый сервер нормально работает. # cat /var/log/maillog Mar 10 21:56:27 mail postfix/smtpd[28075]: connect from mail-yw0-f172.google.com[209.85.161.172] Mar 10 21:56:28 mail postfix/smtpd[28075]: Anonymous TLS connection established from mail-yw0-f172.google.com[209.85.161.172]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits) Mar 10 21:56:28 mail postfix/smtpd[28075]: D4263420BB7B: client=mail-yw0-f172.google.com[209.85.161.172] Mar 10 21:56:29 mail postfix/cleanup[28086]: D4263420BB7B: message-id=<CAHWPLcOeqf6uNHRg34+wuppDUGPDLY=fp8s-E=o9fmxYMS48cQ@mail.gmail.com> Mar 10 21:56:29 mail postfix/qmgr[28042]: D4263420BB7B: from=<zeroxzed@gmail.com>, size=2533, nrcpt=2 (queue active) Mar 10 21:56:29 mail postfix/pipe[28089]: D4263420BB7B: to=<all_in@zeroxzed.ru>, relay=dovecot, delay=0.39, delays=0.33/0.02/0/0.05, dsn=2.0.0, status=sent (delivered via dovecot service) Mar 10 21:56:29 mail postfix/pipe[28090]: D4263420BB7B: to=<root@zeroxzed.ru>, relay=dovecot, delay=0.4, delays=0.33/0.03/0/0.04, dsn=2.0.0, status=sent (delivered via dovecot service) Mar 10 21:56:29 mail postfix/qmgr[28042]: D4263420BB7B: removed Mar 10 21:56:29 mail postfix/smtpd[28075]: disconnect from mail-yw0-f172.google.com[209.85.161.172] Пояснять тут нечего, по логу все понятно. Письмо было доставлено в указанный ящик и в общий ящик для сбора всей входящей почты. В директории /mnt/mail была создана директория с именем домена zeroxzed.ru, а в ней созданы 3 папки с именами ящиков: all_in@zeroxzed.ru all_out@zeroxzed.ru root@zeroxzed.ru Директории с почтовыми ящиками создаются в момент получения первого письма в ящик. Непрочитанное письмо помещается в директорию /new в почтовом ящике. После прочтения переносится в /cur. Попробуем теперь подключиться к почтовому ящику по imap, прочитать письмо и отправить ответ. Настроим любой почтовый клиент для проверки работы настроенного почтового сервера. Я для этих целей буду использовать Thunderbird. Из всех почтовых клиентов мне он нравится больше всего. В основном из-за его портированной версии. Указываем следующие настройки. Так как мы используем самоподписанный сертификат ssl, почтовый клиент предупредит нас о том, что серверу нельзя доверять. Нас это не пугает, добавляем сертификат в список доверенных и продолжаем работать. Позже получим и настроим нормальный сертификат. Я подключился к почтовому ящику и увидел тестовые письма. Отвечу на одно из них и посмотрю в логе, как прошла отправка. У меня еще раз выскочило окно с предупреждением о небезопасном сертификате. Еще раз добавляю его в исключения. Это нормально, сертификат проверяется во время получения почты в dovecot, а во время отправки в postfix. Так что нужны 2 подтверждения. Отправляю письмо еще раз и смотрю лог. # cat /var/log/maillog Mar 10 22:10:12 mail postfix/smtpd[28764]: connect from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139] Mar 10 22:10:12 mail postfix/smtpd[28764]: Anonymous TLS connection established from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits) Mar 10 22:10:12 mail postfix/smtpd[28764]: B24C2420BB70: client=broadband-75-37-235-139.moscow.gw.ru[75.37.235.139], sasl_method=PLAIN, sasl_username=root@zeroxzed.ru Mar 10 22:10:12 mail postfix/cleanup[28779]: B24C2420BB70: message-id=<aaac96c3-197e-c6bd-4dfe-85d09bce216a@zeroxzed.ru> Mar 10 22:10:12 mail postfix/qmgr[28042]: B24C2420BB70: from=<root@zeroxzed.ru>, size=955, nrcpt=2 (queue active) Mar 10 22:10:12 mail postfix/smtpd[28764]: disconnect from broadband-75-37-235-139.moscow.gw.ru[75.37.235.139] Mar 10 22:10:12 mail postfix/pipe[28784]: B24C2420BB70: to=<all_out@zeroxzed.ru>, relay=dovecot, delay=0.14, delays=0.07/0.01/0/0.06, dsn=2.0.0, status=sent (delivered via dovecot service) Mar 10 22:10:13 mail postfix/smtp[28783]: B24C2420BB70: to=<zeroxzed@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.163.26]:25, delay=0.62, delays=0.07/0.01/0.28/0.26, dsn=2.0.0, status=sent (250 2.0.0 OK 1489173013 13si2106703ljv.3 - gsmtp) Mar 10 22:10:13 mail postfix/qmgr[28042]: B24C2420BB70: removed Все в порядке. Видно подключение с моего ip, успешную sasl авторизацию, формирование письма на сервере, присваивание ему message-id, отправка копии письма в ящик для сбора исходящей почты и отправка оригинала в ящик получателя. Все этапы прошли без ошибок. Расскажу, куда еще надо смотреть для отладки почтовой системы. Да и не только отладки, во время работы периодически придется разбираться, куда ушло то или иное письмо, кто и когда подключался к ящику. Разные ситуации бывают. В файле /var/log/dovecot/lda-deliver.log содержится информация обо всех пришедших письмах — когда, от кого и в какой ящик было положено. Mar 10 22:25:29 lda(all_in@zeroxzed.ru): Info: mail from zeroxzed@gmail.com: msgid=<CAHWPLcNG=WMOoWW2Y_Lw4qn9+V4TOrbxZpwtA=O+CSEBaiwuBg@mail.gmail.com> saved mail to INBOX Mar 10 22:25:29 lda(root@zeroxzed.ru): Info: mail from zeroxzed@gmail.com: msgid=<CAHWPLcNG=WMOoWW2Y_Lw4qn9+V4TOrbxZpwtA=O+CSEBaiwuBg@mail.gmail.com> saved mail to INBOX Mar 10 22:25:49 lda(all_out@zeroxzed.ru): Info: mail from root@zeroxzed.ru: msgid=<75358e4d-7c8e-24c2-a21f-7ee0df2a4704@zeroxzed.ru> saved mail to INBOX В /var/log/dovecot/info.log информация о подключениях к почтовым ящикам — кто, когда, откуда и каким способом авторизовывался на сервере. Mar 10 22:10:20 imap-login: Info: Login: user=<root@zeroxzed.ru>, method=PLAIN, rip=75.37.235.139, lip=188.35.19.125, mpid=28790, TLS, session=<3tDeHGVKpQBNJeCL> Mar 10 22:19:39 imap-login: Info: Login: user=<root@zeroxzed.ru>, method=PLAIN, rip=75.37.235.139, lip=188.35.19.125, mpid=29248, TLS, session=<7VY8PmVKbwBNJeCL> Остальное уже не так полезно. Сами посмотрите, что собирается в остальных лог файлах. На текущий момент сервер полностью работоспособен. В таком виде им без проблем можно пользоваться. Но функционал полностью не раскрыт. Использовать плагины sieve и acl через удаленные почтовые клиенты неудобно. Проще всего их настроить через web почту roundcube. Установим эту web панель на наш почтовый сервер.   Установка web интерфейса roundcube Установим и настроим самый популярный web интерфейс для postfix — roundcube. Скачиваем исходники. # cd /usr/src # wget https://github.com/roundcube/roundcubemail/releases/download/1.2.9/roundcubemail-1.2.3-complete.tar.gz Не забудьте проверить в момент установки, какая версия является самой свежей на текущий момент. Нет необходимости устанавливать устаревшую версию. Рекомендую ставить самую последнюю на момент настройки. # yum install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-pear-Net-IDNA2 php-pear-Mail-Mime php-pear-Net-Sieve # tar -xzvf roundcubemail-* # mv roundcubemail-1.2.9 /var/www/html/webmail # chown -R apache. /var/www/html/webmail Переходим в браузер по следующей ссылке для установки roundcube — http://188.35.19.125/webmail/installer/. Вы увидите несколько незначительных замечаний. На них можно не обращать внимание, если установщик позволяет нажать кнопку NEXT. Единственное, рекомендую установить правильный часовой пояс в /etc/php.ini и перезапустить после этого httpd. На следующем этапе нам надо указать настройки подключения к mysql базе. Предварительно ее следует создать через phpmyadmin. Я создал пользователя roundcube и такую же базу с полными правами пользователя на нее. Эти параметры указал в настройках. Так же на этой странице нужно будет указать несколько параметров: smtp_server — пусто (ничего не пишем) language — ru_RU Выбираем плагины — managesieve, userinfo, acl. Остальные на свое усмотрение. Жмем CREATE CONFIG. Должны увидеть сообщение: The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation. Жмем CONTINUE. Открывается страница с проверкой настроек. Тут проверять неудобно, можно этого не делать. Зайдем в почтовый ящик и там все проверим. Если что, конфиг потом все равно можно вручную отредактировать. Папку /var/www/html/webmail/installer удаляем. Заходим в почтовый ящик через roundcube — http://188.35.19.125/webmail/ Набирать нужно полное имя ящика и пароль. Если все сделали правильно, должны попасть в свой почтовый ящик. Ну вот и все. Можно пользоваться web интерфейсом для почтового сервера. У меня есть статья по настройке мобильной версии roundcube. Рекомендую ее настроить, если есть необходимость. Тема качественная и добротная. Пользоваться удобно. Дальше рассмотрим настройку и использование плагинов acl и sieve с помощью roundcube.   Настройка фильтра почты sieve Sieve очень удобная штука, но вот хорошего интерфейса для управления через почтовый клиент я не знаю. Существует плагин для thunderbird, который так и называется sieve. Но лично мне он не понравился вообще, так как предлагает писать правила определенным кодом. Для этого надо знать синтаксис, тратить время. Можете сами на него посмотреть — https://github.com/thsmi/sieve. К счастью, есть удобный способ писать правила фильтрации для sieve через roundcube. Там это реализовано отдельным плагином managesieve, который мы активировали во время установки. Для создания правила фильтрации, зайдите в свой почтовый ящик через roundcube. Переходите в раздел Настройки -> Фильтры и создавайте новое правило. После этого письма будут обрабатываться правилом сразу после поступления в почтовый сервер, в независимости от вашего подключения к ящику. В папке /mnt/mail/sieve появилась запись с настроенным правилом. Можете познакомиться с синтаксисом написания правил. Он не сложный. Настройка автоответчика В roundcube есть замечательная возможность настроить автоответчик в почтовом ящике. Это актуально, к примеру, если вы уходите в отпуск. Вы можете сами настроить автоответчик, который будет отправлять письмо с указанной вами информацией всем, от кого будут приходить письма в ваш ящик. Возможность эта реализована на базе того же плагина managesieve. По-умолчанию она отключена. Активировать ее нужно вручную. Для того, чтобы модуль автоответчика заработал, отредактируйте конфигурационный файл плагина. Для этого открываем его в моем случае по следующему адресу: # mcedit /var/www/html/webmail/plugins/managesieve/config.inc.php Изменяем там параметр: $config['managesieve_vacation'] = 1; После этого достаточно просто обновить веб интерфейс roundcube, и появятся новые настройки по адресу Настройки -> Отпуск На вкладке Дополнительные настройки есть возможность настроить различные полезные действия, в том числе пересылку входящей почты вашему заместителю.   Общие папки по imap Рассмотрим настройку необычного и полезного функционала в виде общих папок. С их помощью один пользователь почтового ящика может предоставить другому пользователю доступ к папке внутри своего почтового ящика. Где и как использовать этот функционал, каждый может придумать сам, в зависимости от своих потребностей. Мне кажется это удобным в том случае, когда создан какой-то общий ящик, на который только поступает информация и нет необходимости писать ответ от его имени. То есть по сути работает как обычный почтовый алиас. Но в случае с алиасом и несколькими почтовыми ящиками, письмо падает в каждый ящик. Если таких писем и получателей много, то идет большое дублирование одного и того же письма в рамках почтового сервера. Если сделать ящик и расшарить на нем папку, подключить ее всем пользователям, то дублирования почты не будет. Каждый сможет прочитать письмо, без необходимости его доставки в каждый конкретный ящик. Настроим общую папку imap. Хотя настраивать нам, по сути, нечего. Мы уже все настроили ранее. Добавили соответствующие настройки в dovecot и активировали плагин acl в roundcube. Теперь нужно просто сделать папку и открыть ее для другого пользователя. Для этого идем в раздел Настройки -> Папки. Создаем там любую папку. В моем случае это папка с названием Общая. Добавляем необходимый доступ либо всем ящикам в домене, либо какому-то конкретному. Так же можно указать, какого рода это будет доступ: чтение запись удаление Заходим в ящик, которому добавили общий доступ и проверяем. Все в порядке, общая папка imap настроена и подключена. В папке /mnt/mail/shared-folders появился файл с настроенным выше правилом. На этом настройка пользовательского функционала закончена. В принципе, почтовый сервер полностью готов к работе. Но мы сделаем еще несколько полезных настроек на стороне сервера. Настройка dkim и spf Напишу своими словами как я понимаю работу dkim. С помощью dkim вся исходящая почта сервера подписывается электронной цифровой подписью, связанной с именем домена. Открытый ключ шифрования с помощью DNS публикуется в txt записи. Таким образом, удаленный сервер, при получении письма от вас, сравнивает цифровую подпись с опубликованным в dns открытым ключом вашего домена. Если все в порядке, то считает, что ваше письмо в самом деле пришло от вас, а не от мошенников. То есть с помощью этой технологии можно однозначно идентифицировать отправителя. Некоторые считают, что эта технология помогает бороться со спамом. Не знаю, насколько это верно. Спамеру не составит большого труда настроить на своем сервере dkim и отправлять спам, но подписанный электронной цифровой подписью. Теоретически, dkim помогает защититься от подделки адреса отправителя, когда письмо якобы от вас шлет совсем другой сервер. Но с этим можно бороться и другими способами. В общем, я до конца не понимаю, зачем это надо. Прошу поделиться в комментариях тем, к кого есть бОльший опыт. Я только недавно стал шагать в ногу со временем и настраивать dkim. Раньше всегда без него обходился. Плюс настройки dkim я вижу только в том, что автоматические фильтры определения спама будут добавлять больше траста письмам с корректной dkim подписью. У вас будет больше шанса не попасть в спам при прочих равных условиях. В принципе, ради этого можно немного заморочиться. Для настройки dkim устанавливаем соответствующий пакет: # yum install opendkim Создаем директорию для хранения ключей: # mkdir -p /etc/postfix/dkim && cd /etc/postfix/dkim Генерируем ключи для домена: # opendkim-genkey -D /etc/postfix/dkim/ -d zeroxzed.ru -s mail zeroxzed.ru имя почтового домена mail непосредственно имя сервера На выходе получаете пару файлов — закрытый (приватный) и открытый ключ. Закрытый останется на сервере, открытый будет опубликован в dns. Переименуем их сразу, чтобы не путаться, если у вас будет несколько доменов. Ключи нужно будет делать для каждого домена. # mv mail.private mail.zeroxzed.ru.private # mv mail.txt mail.zeroxzed.ru.txt Создаем файл с таблицей ключей, в которой будут описаны все домены. В данном случае только один. # mcedit keytable mail._domainkey.zeroxzed.ru zeroxzed.ru:mail:/etc/postfix/dkim/mail.zeroxzed.ru.private Тут же создаем еще один файл, в котором будет описано, каким ключом подписывать письма каждого домена. У нас один домен, поэтому только одна запись. # mcedit signingtable *@zeroxzed.ru mail._domainkey.zeroxzed.ru Выставляем права доступа на все файлы: # chown root:opendkim * # chmod u=rw,g=r,o= * Рисуем конфиг службы. # mcedit /etc/opendkim.conf AutoRestart Yes AutoRestartRate 10/1h PidFile /var/run/opendkim/opendkim.pid Mode sv Syslog yes SyslogSuccess yes LogWhy yes UserID opendkim:opendkim Socket inet:8891@localhost Umask 022 Canonicalization relaxed/relaxed Selector default MinimumKeyBits 1024 KeyFile /etc/postfix/dkim/mail.zeroxzed.ru.private KeyTable /etc/postfix/dkim/keytable SigningTable refile:/etc/postfix/dkim/signingtable Добавляем в конфигурационный файл postfix в самый конец следующие параметры: # mcedit /etc/postfix/main.cf smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept milter_protocol = 2 Перезапускаем postfix и dkim, последний добавляем в автозагрузку. # systemctl restart postfix # systemctl restart opendkim.service # systemctl enable opendkim.service Теперь нам надо добавить открытый ключ в dns. Идем в консоль управления dns и добавляем новую txt запись. Ее содержание берем из файла /etc/postfix/dkim/mail.zeroxzed.ru.txt cat /etc/postfix/dkim/mail.zeroxzed.ru.txt mail._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClZX2xWRDISlVLF4b4pUiinY5N9WN7VXEHeyPw8smHTamXh35wJoh+j0+MIQDWG/KtdCcETeawTuypXbvtbneXniYR0iiv6kt754T2WXBjz7O/uHL+vK58LhJsm4TGyhUN6ZBit+w22jG92zdeybSZeU/g7hQdkaAAi0I+0nIkUwIDAQAB" ) ; ----- DKIM key mail for zeroxzed.ru Убираем кавычки, лишние проблемы и вставляем. Должно получиться вот так: Проверяю работу. Отправляю письмо на gmail и смотрю лог почтового сервера: # cat /var/log/maillog Mar 17 17:40:26 mail postfix/smtpd[22352]: connect from localhost[127.0.0.1] Mar 17 17:40:26 mail postfix/smtpd[22352]: BB1794195584: client=localhost[127.0.0.1] Mar 17 17:40:26 mail postfix/cleanup[22364]: BB1794195584: message-id=<baf63dcec016594d49f2d80f815e5d26@zeroxzed.ru> Mar 17 17:40:26 mail opendkim[21744]: BB1794195584: DKIM-Signature field added (s=mail, d=zeroxzed.ru) Mar 17 17:40:26 mail postfix/qmgr[21990]: BB1794195584: from=<root@zeroxzed.ru>, size=593, nrcpt=2 (queue active) Mar 17 17:40:26 mail postfix/pipe[22369]: BB1794195584: to=<all_out@zeroxzed.ru>, relay=dovecot, delay=0.14, delays=0.11/0.02/0/0.02, dsn=2.0.0, status=sent (delivered via dovecot service) Mar 17 17:40:26 mail postfix/smtpd[22352]: disconnect from localhost[127.0.0.1] Mar 17 17:40:27 mail postfix/smtp[22370]: BB1794195584: to=<zeroxzed@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.163.26]:25, delay=0.84, delays=0.11/0.02/0.31/0.4, dsn=2.0.0, status=sent (250 2.0.0 OK 1489761627 185si4568435lfa.398 - gsmtp) Все в порядке, электронная цифровая подпись установлена. Проверим, как гугл отреагировал на нашу подпись: Тоже все в порядке. Подпись выполнена корректно, проверку прошла. Дополнительно, проверить корректность dkim записи в dns можно онлайн сервисом — http://dkimcore.org/c/keycheck. Настроим еще одно средство для повышения доверия к нашей почте со стороны других серверов — spf. Расскажу опять своими словами для чего это нужно. Spf запись добавляется в виде txt записи в dns вашего домена. С помощью этой записи вы указываете, какие ip адреса имеют право отправлять почту от вашего имени. Если кто-то из спамеров будет использовать ваше имя домена при рассылке спама, он не пройдет проверку по spf и скорее всего будет идентифицирован как спам. Можно указать конкретные ip адреса в записи, а можно сказать, чтобы ip адреса проверялись по спискам A и MX записей. У нас простой случай и только 1 сервер с одним ip, поэтому укажем конкретно этот ip адрес. Идем в панель управления dns и добавляем новую txt запись. zeroxzed.ru. TXT v=spf1 ip4:188.35.19.125 ~all Больше ничего делать не надо. Снова отправляем письмо на gmail и смотрим логи. Обращаю внимание на прошлый скрин, когда мы проверяли dkim и еще не настроили spf, и этот. Видно, что запись работает, гугл определил наш ip, как доверенный для отправки писем с этого домена.   Дополнительный функционал почтового сервера postfix Я рассмотрел и настроил наиболее актуальный с моей точки зрения функционал почтового сервера. В статье я основывался исключительно на своем опыте работы с почтой в малых и средних организациях, поэтому не претендую на истину в последней инстанции. Рекомендую осмысленно подходить к настройке своего сервера и решать, что нужно именно вам. Будет хорошо, если кто-то укажет на мои ошибки или подскажет какие-то более удобные и эффективные приемы для решения затронутых задач. В данном виде почтовый сервер представляет собой готовое и законченное решение, но есть еще несколько вещей, которые ему бы не помешали. Я их сейчас перечислю, а затем постараюсь постепенно писать статьи на указанные темы и ставить на них ссылки в этой теме. Вот список того, что по моему мнению нужно еще настроить на почтовом сервере: Защиту от подбора паролей с помощью fail2ban. Мониторинг почтового сервера postfix с помощью zabbix. Сбор статистики с помощью pflogsumm или чего-то подобного. Просмотр и анализ логов с помощью webmin. Использование бесплатных сертификатов let’s encrypt. Регулярную очистку служебных почтовых ящиков. Бэкап всей почтовой базы. Расскажу еще почему я не настраиваю некоторые популярные программы, которые использую на почтовых серверах: Clamav — известный антивирус. Считаю, что сейчас он не актуален, так как вирусов, от которых он способен защитить, я уже давно не видел. Сейчас вирусная эпидемия шифровальщиков. От них он не защищает. Spamassasin — популярный бесплатный антиспам фильтр. Скажу честно, работал с ним очень мало и могу быть не объективен. Насколько я видел его настройку и работу — он требует к себе некоторого внимания, калибровки, особенно на начальном этапе. Мне обычно не хочется этим заниматься. Graylist — эффективное средство борьбы со спамом. Я уже подробно его рассматривал, когда писал про iredmail, так что не буду повторяться. Скажу лишь, что режет спам очень эффективно и бесплатно, но есть существенные неудобства, которые по моему мнению не перекрывают плюсы. Поэтому я не использую. В качестве антиспама я предпочитаю коммерческое решение — Kaspersky Anti-Spam. Я знаю этот продукт уже лет 8. Он действительно отлично фильтрует спам. Ложных срабатываний вообще не припоминаю, 95% спама фильтрует, может больше. С ним вопрос спама отпадает вообще. Стоит он недорого, можно купить лицензию на меньшее количество ящиков, чем реально используется в системе. Этот вопрос никак не отслеживается и на качество работы не влияет. Но нужно понимать, что это уже нарушение лицензионного соглашения. Но можно всякие хитрости придумать, чтобы и фильтровать и не нарушать.   Борьба со спамом средствами postfix Сначала хотел сразу все настройки postfix разместить в соответствующем разделе в едином конфиге, но потом передумал и решил все же вынести этот вопрос на отдельное рассмотрение. Возможно, не каждому захочется сразу в эту тему углубляться. Все, что рассказано выше, позволит настроить полноценный почтовый сервер, который будет успешно принимать почту и доставлять ее пользователям. Но в таком виде он будет принимать слишком много спама, но зато не будет проблем с тем, что от кого-то что-то не придет. Как ни крути, но все средства борьбы со спамом так или иначе несут накладные расходы в виде ложных срабатываний с той или иной вероятностью. Если вы решите не заморачиваться и купить Kaspersky Anti-Spam, можете этот раздел не читать. Он сам реализует все те проверки, что мы будем делать. Если же хотите своими силами бороться со спамом средствами postfix, то давайте дальше разбираться. Я буду использовать штатные возможности postfix, позволяющие отсеять спам по тем или иным параметрам еще до получения письма. Это очень эффективный способ с точки зрения производительности. Благодаря этому, правильно настроенный на отсев спама postfix часто ставят перед exchange, чтобы снизить на него нагрузку. Сразу дам ссылки на официальную документацию с описанием параметров, которые я буду использовать: smtpd_helo_restrictions smtpd_sender_restrictions smtpd_recipient_restrictions smtpd_data_restrictions smtpd_client_restrictions Есть еще парочка — smtpd_etrn_restrictions и smtpd_end_of_data_restrictions, но я ими не пользуюсь.   Обращаю внимание на то, что нужно очень аккуратно работать с настройками, о которых пойдет речь. Нужно четко понимать как, зачем и что вы делаете. Неверные настройки могут нарушить нормальное хождение почты. Нужно уметь анализировать лог файл почтового сервера и понимать, что там происходит. Долго думал, как лучше всего представить информацию по этому разделу. В итоге решил просто написать часть конфига, которая отвечает за restrictions с комментариями. Более подробную информацию по каждой настройке вы можете найти в официальной документации postfix, ссылки я привел выше, либо в гугле. Данные настройки это моя многолетняя калькуляция различных параметров, собранных из черновиков и рабочих серверов. Не везде все было настроено именно в таком виде, так как ситуации бывают разные. Сейчас я постарался все собрать в одном месте и аккуратно описать. Те проверки в борьбе со спамом, что вам не нужны, просто закомментируйте. В конце я еще пройдусь по некоторым из них и поделюсь своим опытом. #Описание списков исключений smtpd_restriction_classes = white_client_ip, black_client_ip, block_dsl, white_client, white_helo, black_client, mx_access # IP адреса, которые нужно пропускать всегда white_client_ip = check_client_access hash:/etc/postfix/lists/white_client_ip # IP адреса, которые нужно блокировать всегда black_client_ip = check_client_access hash:/etc/postfix/lists/black_client_ip # E-mail, которые нужно пропускать всегда white_client = check_sender_access hash:/etc/postfix/lists/white_client # E-mail, которые нужно блокировать всегда black_client = check_sender_access hash:/etc/postfix/lists/black_client # Неправильные значения HELO, которые мы тем не менее принимаем white_helo = check_sender_access hash:/etc/postfix/lists/white_helo # Правила для блокировки различных динамических ip. block_dsl = check_client_access regexp:/etc/postfix/lists/block_dsl # Список приватных сетей, которые не могут быть использованы в качестве IP для MX записей mx_access = check_sender_mx_access cidr:/etc/postfix/lists/mx_access # Проверки на основе данных, переданных в HELO/EHLO hostname smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, white_client_ip, white_helo, black_client_ip, block_dsl, # Отказываем серверам, у которых в HELO несуществующий или не FQDN адрес reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, # Запрещаем приём писем от серверов, представляющихся адресом, для которого не существует A или MX записи. reject_unknown_helo_hostname # Проверки клиентского компьютера или другого почтового сервера, который соединяется с сервером postfix для отправки письма smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, # Отвергает запрос, когда клиент отправляет команды SMTP раньше времени, еще не зная, поддерживает ли Postfix конвейерную обработку команд ESMTP reject_unauth_pipelining, # Блокируем клиентов с адресами from, домены которых не имеют A/MX записей reject_unknown_address, reject_unknown_client_hostname # Проверки исходящей или пересылаемой через нас почты на основе данных MAIL FROM smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, white_client, black_client, # Запрет отправки писем, когда адрес MAIL FROM не совпадает с логином пользователя reject_authenticated_sender_login_mismatch, # Отклоняем письма от несуществующих доменов reject_unknown_sender_domain, # Отклоняем письма от доменов в не FQDN формате reject_non_fqdn_sender, # Отклонение писем с несуществующим адресом отправителя reject_unlisted_sender, reject_unauth_destination, # Отклонять сообщения от отправителей, ящики которых не существуют, использовать аккуратно #reject_unverified_sender, mx_access # Правила приема почты нашим сервером на основе данных RCPT TO smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, # Отклоняет всю почту, что адресована не для наших доменов reject_unauth_destination, # Отклонение писем с несуществующим адресом получателя reject_unlisted_recipient, # Отклоняет сообщения на несуществующие домены reject_unknown_recipient_domain, # Отклоняет сообщения если получатель не в формате FQDN reject_non_fqdn_recipient, # Отклоняем прием от отправителя с пустым адресом письма, предназначенным нескольким получателям. reject_multi_recipient_bounce У меня во всех ограничениях первыми правилами стоят разрешения для mynetworks и авторизовавшихся пользователей. Важно понимать, что это значит и для чего сделано. Ограничения читаются последовательно в порядке их перечисления. Таким образом, мы своих пользователей пускаем мимо ограничений, а для всех остальных выполняются проверки. Теперь важные комментарии по указанным параметрам. Если бы все почтовые сервера всех системных администраторов были настроены по правилам, то эти комментарии не были бы нужны. Пройдемся по некоторым ограничениям, которые нужно включать осторожно: reject_invalid_helo_hostname и reject_unknown_helo_hostname — под эти правила иногда попадают почтовые серверы клиентов, которые не очень хорошо настроены. У них бывают неправильные адреса, кривые записи dns, отсутствие обратных зон и т.д. Их не много, но попадаются. Это не страшно, если вы регулярно следите за сервером. Отправитель получит сразу сообщение о том, что его письмо не дошло до вас. Если он как-то сообщит вам о проблеме, вы легко добавите его в белый список и все будет нормально. Если вам не хочется следить за сервером, лучше не указывайте эти ограничения. Но спам они отсекают не плохо. Сюда попадают все завирусованные компьютеры и сервера без нормальных настроек dns (а их чаще всего и нет). reject_unverified_sender — специально его закомментировал. Я тестировал этот параметр. В принципе, работает нормально, но есть, как обычно, нюансы. Поясню, что делает этот параметр. Когда вам кто-то шлет письмо, ваш сервер обращается к серверу отправителю и спрашивает его стандатрной командой, есть ли на сервере такой отправитель. Если удаленный сервер отвечает, что есть, то никаких проблем — письмо принимается. Если удаленный сервер не отвечает или говорит, что такого адресата нет — письмо отклоняем. Очевидно, что такие проверки создают дополнительную постоянную нагрузку. Это нужно учитывать. К тому же, у вас почтовый лог постоянно будет забит этими проверками, особенно, если вам приходит много спама. На каждое спамовое письмо будет идти проверка, а сервера отправителя скорее всего либо нет, либо он неправильный, либо не отвечает и т.д. Все это будет постоянно проверяться и фиксироваться. В общем, я не использую. На время отладки ограничений, рекомендую пользоваться параметром: soft_bounce = yes Когда он включен, все ответы сервера с кодами ошибок 5XX, заменяются на 4ХХ. То есть постоянная ошибка, которая сразу отклоняет письмо, заменяется на временную, которая предлагает повторить отправку позже. Таким образом, вы увидите работу всех ограничений, но письма не будут отклонены навсегда. Сервер отправителя через некоторое время снова придет к вам с новой попыткой доставки почты. Письмо безвозвратно не отклоняется. Вы можете проанализировать работу фильтра и решить, ставить его на постоянную работу или с ним что-то не так. Создадим теперь файлы с белыми и черными списками. cd /etc/postfix/lists && touch white_client_ip black_client_ip white_client black_client white_helo block_dsl mx_access Ниже пример содержания этих файлов. Вы можете менять по своему усмотрению. # cat white_client_ip 195.28.34.162 OK 141.197.4.160 OK # cat black_client_ip 205.201.130.163 REJECT You IP are blacklisted! 198.2.129.162 REJECT You IP are blacklisted! # cat white_client # Принимать всю почту с домена яндекс yandex.ru OK # Разрешить конкретный ящик spammer@mail.ru OK # cat black_client # Блокировать всю почту с домена mail.ru mail.ru REJECT You domain are blacklisted! # Блокировать конкретный ящик spam@rambler.ru REJECT You e-mail are blacklisted! # cat white_helo # Могут попадаться вот такие адреса, которые не пройдут наши проверки ka-s-ex01.itk.local     OK exchange.elcom.local    OK # cat block_dsl /^dsl.*\..*\..*/i 553 AUTO_DSL spam /dsl.*\..*\..*/i 553 AUTO_DSL1 spam /[ax]dsl.*\..*\..*/i 553 AUTO_XDSL spam /client.*\..*\..*/i 553 AUTO_CLIENT spam /cable.*\..*\..*/i 553 AUTO_CABLE spam /pool.*\..*\..*/i 553 AUTO_POOL spam /dial.*\..*\..*/i 553 AUTO_DIAL spam /ppp.*\..*\..*/i 553 AUTO_PPP spam /dslam.*\..*\..*/i 553 AUTO_DSLAM spam /node.*\..*\..*/i 553 AUTO_NODE spam /([0-9]*-){3}[0-9]*(\..*){2,}/i 553 SPAM_ip-add-rr-ess_networks /([0-9]*\.){4}(.*\.){3,}.*/i 553 SPAM_ip-add-rr-ess_networks /.*\.pppool\..*/i 553 SPAM_POOL /[0-9]*-[0-9]*-[0-9]*-[0-9]*-tami\.tami\.pl/i 553 SPAM_POOL /pool-[0-9]*-[0-9]*-[0-9]*-[0-9]*\..*/i 553 SPAM_POOL /.*-[0-9]*-[0-9]*-[0-9]*-[0-9]*\.gtel.net.mx/i 553 SPAM_POOL /dhcp.*\..*\..*/i 553 SPAM_DHCP # cat mx_access 127.0.0.1 DUNNO 127.0.0.2 550 Domains not registered properly 0.0.0.0/8 REJECT Domain MX in broadcast network 10.0.0.0/8 REJECT Domain MX in RFC 1918 private network 127.0.0.0/8 REJECT Domain MX in loopback network 169.254.0.0/16 REJECT Domain MX in link local network 172.16.0.0/12 REJECT Domain MX in RFC 1918 private network 192.0.2.0/24 REJECT Domain MX in TEST-NET network 192.168.0.0/16 REJECT Domain MX in RFC 1918 private network 224.0.0.0/4 REJECT Domain MX in class D multicast network 240.0.0.0/5 REJECT Domain MX in class E reserved network 248.0.0.0/5 REJECT Domain MX in reserved network По сути файлы белых и черных списков не отличаются друг от друга. Можно использовать только один файл и в нем в каждой отдельной строке указывать либо запрет, либо разрешение. Я разделил просто для удобства восприятия и редактирования. Возможно вам будет удобнее с одним файлом. После редактирования файлов обязательно выполняем команду на перестроение базы данных. Я перестрою сразу все файлы: cd /etc/postfix/lists && postmap white_client_ip black_client_ip white_client black_client white_helo block_dsl mx_access Еще упомяну о таком популярном явлении в спамерских письмах, как подделка адреса отправителя. Причем не просто подделка на абы кого, а именно на ваше имя домена. Пользователь получает спам письмо и в почтовом клиенте видит, что оно отправлено с вашего домена. Только по заголовкам можно определить реального отправителя. Такой подход позволяет обходить некоторые антиспам системы, которые не фильтруют письма внутреннего домена. Бороться с подменой адреса отправителя в нашем случае очень просто. Для этого в black_client добавим следующую запись: zeroxzed.ru 554 Stop spam from my name Отправка с нашего домена осуществляется только с SASL авторизацией, а она во всех ограничениях стоит первой, поэтому письма реальных пользователей без проблем будут уходить. А всех тех, кто только притворяется нашим доменом, мы будет отфильтровывать этим правилом. Приведу в завершении описания методов борьбы со спамом простой пример. Добавим в black_client почтовый адрес и отправим с него письмо. # cat black_client zeroxzed@gmail.com REJECT Your e-mail was banned! # postmap black_client Отправляем сообщение и проверяем почтовый лог. # cat /var/log/maillog Mar 20 02:21:34 mail postfix/smtpd[10816]: connect from mail-yw0-f177.google.com[209.85.161.177] Mar 20 02:21:35 mail postfix/smtpd[10816]: Anonymous TLS connection established from mail-yw0-f177.google.com[209.85.161.177]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits) Mar 20 02:21:35 mail postfix/smtpd[10816]: NOQUEUE: reject: RCPT from mail-yw0-f177.google.com[209.85.161.177]: 554 5.7.1 <zeroxzed@gmail.com>: Sender address rejected: Your e-mail was banned!; from=<zeroxzed@gmail.com> to=<root@zeroxzed.ru> proto=ESMTP helo= Mar 20 02:21:35 mail postfix/smtpd[10816]: disconnect from mail-yw0-f177.google.com[209.85.161.177] Вот и результат. На этом по борьбе со спамом все.   Заключение Проверить настроенный почтовый сервер можно с помощью онлайн сервиса https://www.mail-tester.com. Не факт, что получите максимальный бал, но все недочеты будут указаны. Критичное нужно исправить (например, если обратная зона неправильная), некритичное можно пропустить (если dkim, к примеру, не настраивали). Кажется все написал, что знал по поводу почтового сервера на linux в небольших и средних организациях. У некоторых может возникнуть вопрос, а зачем свой почтовый сервер? Почему бы не воспользоваться средствами корпоративной почты, которую представляют популярные почтовые сервисы бесплатно? Я планирую написать по этому поводу отдельную заметку (в итоге написал — выбор почтового сервера). У меня тоже есть определенный опыт на этот счет. И если некоторое время назад я считал, что свои почтовые серверы в небольших организациях уже не актуальны, то сейчас я так не думаю, поэтому и появилась эта статья. Буду рад замечаниям по делу и советам в комментариях.   Статья позаимствована с ресурса serveradmin.ru    

k010v

k010v

 

Бесплатный домен для сайта — где можно получить и как зарегистрировать доменное имя бесплатно на Freenom

Здравствуйте, уважаемые читатели блога itishnik.info. Не так давно я довольно подробно писал про то, что из себя представляют домены, какие они бывают и как их получают (регистрируют). Основная проблема тут состоит в том, что регистрация доменного имени второго уровня (типа itishnik.info) является в большинстве своем платной и каждый год вам его придется продлевать (оплачивать его аренду еще на год). Зато, оплатив его у официального регистратора, вы можете считать себя его полноценным владельцем, и если вы будете исправно его продлевать, то никто его у вас не отберет. Однако, бывают задачи, когда домен нужен, но покупать его особого желания нет. В этом случае можно рискнуть и попробовать получить доменное имя второго уровня бесплатно. Правда, домен будет не в зоне .ru, .com или .ua. Увы и ах, но бесплатно они раздают только в зонах .TK, .ML, .GA, .CF и .GQ. Вам это надо? Если да, то читайте как сие дело можно зарегистрировать. Плюсом тут может служить не только бесплатность, но и возможность получить короткое и звучное доменное имя (типа dima.ml). Минус — это несколько прохладное отношение поисковиков к сайтам на бесплатных доменах, ну и большая вероятность его потерять, ибо бесплатный сыр предполагает некоторую рисковую нагрузку.   Стоит ли использовать бесплатный домен для сайт Freenom — это один из самых популярных официальных регистраторов бесплатных доменов. Зоны, где можно выбрать имя для сайта — .TK, .ML, .GA, .CF и .GQ. Здесь вполне можно подобрать что-нибудь красивое и звучное, но... Если почитаете отзывы о сервисе, то имеет место быть мнение, что делать что-то серьезное на бесплатных доменах все же не стоит, ибо ваши права на него никак толком не оформлены. Согласитесь, что обидно потерять посещаемый сайт, в который вы вложили много труда и денег. Поэтому так: Если сайт делаете с перспективой на будущее развитие, то забудьте о бесплатных доменах и «разоритесь» таки на небольшую ежегодную оплату обычного домена второго уровня в доменной зоне вашего региона или какой-нибудь общей зоне. Да, подобрать там звучное имя уже будет намного сложнее, но все равно реально.
  Введите имя домена:
Примеры: google, google.com Например, в приведенную выше форму вы можете вбить желаемое имя для сайта и узнать в каких зонах оно свободно. Если нашли подходящий вариант, то не тяните с регистрацией, ибо вас могут опередить (ежеминутно регистрируются сотни доменных имен). Если же вы хотите просто попробовать, потестировать или, что называется, отточить перо, то в этом случае «Free domain» придется к месту. Он, кстати, станет отличным дополнением к бесплатно полученному хостингу, выбор которых еще более велик (в приведенной по ссылке статье я описал их пару десятков). Если нужны домены в большом количестве на непродолжительный срок (например, лендинги, «прокладки» и т.п.), то описанный ниже вариант поможет существенно сэкономить. Это получается что-то вроде временной электронной почты, которая тоже используется по похожему принципу. Если «Free domain» предлагает ваш хостер в качестве бонуса при оплате тарифного плана, то можно воспользоваться этим подарком, но опять же нужно убедиться, что он будет вашей собственностью, а не собственностью хостера. Если по каким-либо причинам вы все же делаете сайт с перспективой развития на бесплатном домене (лично я тоже так начинал и изначально создал этот блог на халявном домене третьего уровня, полученном от владельца бесплатного хостинга — я экономный!), то при первых признаках успеха немедленно покупайте у официального регистратора (например, в популярном рег.ру или еще где) domеn второго уровня в нужной зоне и переносите на него сайт (с помощью 301 редиректов, а так же панелей управления Яндекса и Google Search Console). Freenom — регистрация бесплатного доменного имени Итак, сайт регистратора Freenom имеет русскоязычный интерфейс (если по умолчанию не включился, то выберите язык в верхнем правом углу окна). После того, как вы зарегистрируетесь и авторизуетесь (для входа можно использовать аккуанты соцсетей при желании), можно будет приступать к проверке доступности желаемого имени для сайта: После нажатия на кнопку «Проверить доступность» вы увидите, в каких доменных зонах данное имя доступно для регистрации (как бесплатно, так и платно), и при желании сможете начать процесс его получения в свое распоряжение нажав на кнопку «Получить домен сейчас» напротив нужной зоны: Таким образом вы помещаете Free domain в корзину. Если готовы оформить заказ, то кликните по появившейся вверху кнопке оформления и вы увидите такую вот картину: Тут надо будет либо указать адрес сайта, на который будет осуществляться редирект (пересылка) с вашего нового домена, либо указать DNS записи вашего хостинга, где будет размещен сайт с таким именем. Так же из выпадающего списка в самом конце вы сможете выбрать срок, на который это имя будет зарегистрировано за вами (по окончании этого срока домен нужно будет продлить). При бесплатной регистрации допустимый максимум — 1 год. Нажав на кнопку «Далее» вам будет предложено сообщить о себе всю необходимую регистрации информацию. Этого требуют правила регистрации. Стоит знать, что информация о вашем домене будет доступна в Whois сервисах. В принципе, Freenom в этом плане лоялен — поля «О себе» вообще можно не заполнять и просто нажать кнопку продолжения. Все ваши зарегистрированные бесплатные (и платные, если пожелаете) доменные имена вы найдете на странице «Мои домены». Обратите внимание на кнопку с шестеренкой, которая позволит вам поменять при необходимости NS сервера хостинга или же изменить Урл перенаправления. Кстати, по умолчанию используется для перенаправления не 301 редирект, что чревато дублями контента, поэтому не примените зайти в эти настройки и поменять:   Бесплатный домен в подарок от хостера Не могу не сказать про еще один способ получить доменное имя для сайта (второго уровня в нужной зоне) бесплатно — некоторые хостинг-провайдеры предоставляют такую возможность, чтобы повысить привлекательность своей услуги. Но тут могут быть подводные камни: Поменяв хостинг вы можете потерять этот Free domain Продление доменного имени (через год) уже может быть платным и по не очень привлекательной цене (выясняйте этот вопрос заранее) Официальным владельцем такого домена может быть хостер со всеми вытекающими из этого рисками вплоть до потери своего сайта, если хостер «не чист на руку» В общем, бесплатность — это не всегда одни плюсы. Главное, чтобы экономия не вышла бы боком... Удачи вам! До скорых встреч на страницах блога itishnik.info

k010v

k010v

WOL: Приключения «Волшебного Пакета»

1. Вы с утра выбежали из дома забыв включить компьютер, что бы поддерживать Torrent рейтинг?
2. Вы в очередной раз выбежали из дома, а придя на работу вспомнили что на домашнем ПК остались нужные файлы? или наоборот.
3. У вас отключили свет и ПК, Сервер, etc… отключились? но вам нужны они в рабочем состоянии?
4. Любой другой критический случай настигший вас в дороге.
В этой статье пойдет речь о том, как при помощи Wake On LAN, которая присутствует практически во всех BIOS с 2002 года, включит ваш компьютер по сети или через интернет.
С другого ПК, или мобильного устройства.

  Что нужно иметь   ATX материнскую плату с WOL коннектором; Сетевую карту с поддержкой WOL; BIOS с поддержкой WOL, также WOL должен быть включен;
А также, 
Magic Packet от AMD, для Windows;
PocketLAN для Windows Mobile;
Wake On Lan для Android;
Maemowol для Nokia N800/900 Maemo;

Power On или (NetScan спасибо Tuxozaur) для iPhone/iPod Touch;

  Конфигурация Сетевой Карты
Для работы WOL, необходимо что бы после выключения ПК, сетевая карта находилась в режиме "Standby", о чем свидетельствуют мигающие лампочки на сетевой карте. Если у вас с этим все в порядке, дальнейший текст можно пропустить.

Если лампочки не горят необходимо сделать следующее:
Пуск — Панель Управления — Сетевые подключения, Выбрать активную сетевую карту, зайти в ее свойства, затем "Настроить".
— Если есть пункт Версия NDIS, — Выбрать «NDIS X» (по умолчанию может быть Авто), где X это версия Интерфейса Сетевых Драйверов, соответсвуюший вашей операционной системе;
— Здесь же включить Wake on Magic Packet (Пробуждение Особым Пакетом Magic)

Сохранить изменения, перезагрузить ПК, затем выключить и проверить горят ли лампочки на Сетевой карте.
  Удаленная работа с ПК
Для того, что бы включить и работать удаленно с ПК, вам нужно знать IP и MAC адрес. В этом вам поможет командная строка: ipconfig.exe /all
Также можно попробовать найти МАС с другого компьютера если в находитесь в локальной сети, запустив команду «ping» и затем вывести таблицу ARP (где будут отображены соответствия между IP и MAC):
ping.exe IP_address
arp.exe -a

Если вы используете маршрутизатор необходимо настроить перенаправление широковещательных сообщений на каком-либо порту, на ваш компьютер. 

Если маршрутизатор вы не используете, то достаточно знать ваш внешний (выделенный IP), в фаерволе открыть 9 порт. и пользоваться WOL c любого устройства, например с iPhone, предварительно указав данные включаемого ПК.

k010v

k010v



  • Блоги

    • CentOS

      • 13
        записей
      • 1257
        комментариев
      • 17364
        просмотра
    • web-администрирование

      • 3
        записи
      • 0
        комментариев
      • 257
        просмотров
    • Mikrotik

      • 11
        записей
      • 225
        комментариев
      • 21972
        просмотра
    • LAN

      • 5
        записей
      • 0
        комментариев
      • 1168
        просмотров
    • Windows

      • 17
        записей
      • 12
        комментариев
      • 962
        просмотра
    • Asterisk

      • 2
        записи
      • 0
        комментариев
      • 91
        просмотр
    • Разное

      • 1
        запись
      • 0
        комментариев
      • 331
        просмотр
    • 1C

      • 1
        запись
      • 0
        комментариев
      • 240
        просмотров
    • Linux

      • 2
        записи
      • 0
        комментариев
      • 263
        просмотра
    • iOS

      • 1
        запись
      • 0
        комментариев
      • 273
        просмотра
×