Архив рубрики: Публикации

Большой почтовый сервер на Ubuntu Server

В данной инструкции выполнена настройка полноценного почтового сервера на Linux Ubuntu Server (протестирована на версии 20.04). Список всех особенностей и возможностей:




  • Поддержка шифрования;
  • Хранение почты на сервере;
  • Защита от СПАМа и вирусов;
  • Почтовая система на базе Postfix;
  • Поддержка виртуальных доменов;
  • Хранение части настроек в MariaDB;
  • Доступ к почте с помощью веб-интерфейса (Roundcube);
  • Подключение к почтовым ящикам по POP3 и IMAP (Dovecot);
  • Возможность управления почтовыми ящиками с помощью PostfixAdmin.







1. Подготовка системы




И так, данная инструкция написана под систему Linux Ubuntu Server. Предварительно, выполним следующие действия.




Общие настройки




Обновляем систему:




apt-get update && apt-get upgrade




Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа:




hostnamectl set-hostname relay.dmosk.ru




* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.dmosk.ru.




Устанавливаем пакет для синхронизации времени:




apt-get install chrony




Задаем временную зону (в данном примере московское время):




timedatectl set-timezone Europe/Moscow




* чтобы получить список всех возможных зон, вводим timedatectl list-timezones.




Разрешаем сервис для обновления времени:




systemctl enable chrony




Настройка безопасности




Заранее открываем порты на брандмауэре с помощью iptables:




iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995 -j ACCEPT




iptables -I INPUT 1 -p tcp --match multiport --dports 80,443 -j ACCEPT




* где мы откроем следующие порты:




  • 25 — стандартный SMTP через STARTTLS;
  • 110 — стандартный POP3 через STARTTLS;
  • 143 — стандартный IMAP через STARTTLS;
  • 465 — защищенный SMTP через SSL/TLS;
  • 587 — защищенный SMTP через STARTTLS;
  • 993 — защищенный IMAP через SSL/TLS;
  • 995 — защищенный POP3 через SSL/TLS.
  • 80 — HTTP для порталов Postfixadmin и Roundcube;
  • 443 — защищенный HTTPS для порталов Postfixadmin и Roundcube;




Для сохранения правил установим пакет:




apt-get install iptables-persistent




И выполняем команду:




netfilter-persistent save




2. Настройка веб-сервера: NGINX + PHP + MariaDB




Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB.




Установка NGINX




Устанавливаем nginx командой:




apt-get install nginx




Разрешаем автозапуск сервиса:




systemctl enable nginx




Проверяем работоспособность веб-сервера, обратившись к нему в браузере по адресу http://<IP-адрес сервера>. Если видим заголовок «Welcome to nginx!», NGINX настроен верно.







PHP + PHP-FPM + NGINX




Устанавливаем php и php-fpm:




apt-get install php php-fpm




Настраиваем NGINX:




vi /etc/nginx/sites-enabled/default




В разделах http — server указываем, чтобы первым индексным файлом был index.php, а также добавляем настройку для обработки запросов php (location):




server {

        listen 80 default_server;

        listen [::]:80 default_server;

        ...



        index index.php ...

        ...



        location ~ .php$ {

            set $root_path /var/www/html;

            fastcgi_pass unix:/run/php/php7.4-fpm.sock;

            fastcgi_index index.php;

            fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;

            include fastcgi_params;

            fastcgi_param DOCUMENT_ROOT $root_path;

        }

}




* где /var/www/html — каталог для размещения данных nginx по умолчанию; /run/php/php7.4-fpm.sock — путь до сокет-файла php-fpm (обратите внимание, что точное значение зависит от используемой вервии php).




Разрешаем автозапуск php-fpm:




systemctl enable php7.4-fpm




* где php7.4-fpm зависит от используемой версии php, которую можно посмотреть командой php -v.




Перезапускаем nginx: 




systemctl restart nginx




Для проверки, создаем индексный файл в директории сайта со следующим содержимым:




vi /var/www/html/index.php




<?php phpinfo(); ?>




Открываем сайт в браузере по его IP-адресу. На открывшейся странице мы должны увидеть подробную информацию по php:







MariaDB




Устанавливаем сервер баз данных следующей командой:




apt-get install mariadb-server




Включаем автозапуск сервиса баз данных:




systemctl enable mariadb




Задаем пароль для пользователя sql root:




mysqladmin -u root password




3. Установка и настройка PostfixAdmin




Устанавливаем дополнительные компоненты для PHP:




apt-get install php-mysql php-mbstring php-imap




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




systemctl restart php7.4-fpm




Скачиваем PostfixAdmin:




wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz




В директории сайтов nginx создаем каталог для postfixadmin и распаковываем в него архив:




mkdir /var/www/html/postfixadmin




tar -C /var/www/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1




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




mkdir /var/www/html/postfixadmin/templates_c




* в противном случае, при попытке зайти в панель управления после ее установки мы получим ошибку ERROR: the templates_c directory doesn’t exist or isn’t writeable for the webserver.




Задаем права на каталог:




chown -R www-data:www-data /var/www/html/postfixadmin




* несмотря на то, что мы используем веб-сервер nginx, php-fpm по умолчанию, запускается от пользователя www-data.




Создаем базу данных 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 /var/www/html/postfixadmin/config.local.php




* в предыдущих версиях использовался файл config.inc.php. В новых версиях его не рекомендуется править, а использовать config.local.php, который переопределяет настройки.




И добавляем следующее:




<?php



$CONF['configured'] = true;

$CONF['default_language'] = 'ru';

$CONF['database_password'] = 'postfix123';

$CONF['emailcheck_resolve_domain']='NO';



?>




* где configured говорит приложению, что администратор закончил его конфигурирование; default_language — используемый язык по умолчанию; database_password — пароль для базы данных, который мы задали на предыдущем шаге; emailcheck_resolve_domain — задает необходимость проверки домена при создании ящиков и псевдонимов.




Запускаем браузер и вводим адрес http://<IP-адрес сервера>/postfixadmin/public/setup.php — откроется страница для установки PostfixAdmin. 




Задаем дважды пароль установки и генерируем хэш, кликнув по Generate setup_password hash:







После копируем хэш, который появится под кнопкой:







Открываем конфигурационный файл:




vi /var/www/html/postfixadmin/config.local.php




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




...

$CONF['setup_password'] = '$2y$10$D...R32';




* где ‘$2y$10$D…R32’ — скопированный хэш.




Перезагружаем страницу http://<IP-адрес сервера>/postfixadmin/public/setup.php — теперь у нас появится форма для ввода нашего пароля, созданного на предыдущем этапе. Вводим его и кликаем по Login with setup_password:







Будет выполнена установка PostfixAdmin.




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




После установки в нижней части страницы должна быть форма добавления суперпользователя — вводим данные:







* где Setup password — пароль, который мы ввели на предыдущей странице; Админ — учетная запись для входа в панель управления PostfixAdmin; Пароль — новый пароль для создаваемой учетной записи.




Установка завершена. Переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/public/login.php




Вводим логин и пароль для созданного пользователя. Мы должны войти в postfix.admin.




Однако, конкретно, в моем случае, пользователь не создавался при установке системы и необходимо было создать администратора вручную. Если это потребуется, в консоли сервера подключаемся к СУБД:




mysql -uroot -p




Переходим к использованию базы postfix:




> use postfix




Добавляем администратора запросом:




> INSERT INTO admin (`username`, `password`, `superadmin`, `active`) VALUES ('root@dmosk.ru', '$1$1b7ff416$/KKYqdyAd3viA3.PNu5hh/', '1', '1');




Выходим из sql-оболочки:




> quit




Теперь переходим на страницу http://<IP-адрес сервера>/postfixadmin/public/login.php вводим логин root@dmosk.ru и пароль qwe12345 — мы должны оказаться в системе управления почтой. Первым делом, переходим в Список админов — Новый админ:







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




4. Установка и настройка Postfix




Установка Postfix в Ubuntu выполняется командой:




apt-get install postfix postfix-mysql




* помимо самого postfix, мы также установим postfix-mysql для возможности работы с СУБД.




В процессе установки должно появиться окно «Postfix Configuration» — оставляем Internet Site:







В следующем окне оставляем имя сервера и нажимаем Enter.




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




groupadd -g 1024 vmail




useradd -d /home/mail -g 1024 -u 1024 vmail -m




* сначала мы создаем группу vmail и guid 1024, после — пользователя vmail с uid 1024 и домашней директорией /home/mail — в ней у нас будет храниться почта. Обратите внимание, что в некоторых системах идентификатор группы и пользователя 1024 может быть занят. В таком случае необходимо создать другой, а в данной инструкции ниже заменить все 1024 на альтернативный.




Если директория для почты ранее уже была создана, то необходимо задать в качестве владельца нашего созданного пользователя:




chown vmail:vmail /home/mail




Теперь открываем на редактирование конфигурационный файл почтового сервера:




vi /etc/postfix/main.cf




И редактируем следующие строки:




mydestination = localhost.$mydomain, localhost, localhost.localdomain

...

inet_protocols = ipv4

...

smtpd_tls_cert_file = /etc/ssl/mail/public.pem

smtpd_tls_key_file = /etc/ssl/mail/private.key




* где:




  • mydestination — указываем, для каких доменов принимаем входящую почту.
  • inet_protocols — данный параметр задаст протокол для работы postfix. В данном примере на ipv4 — если в нашей системе не используется IPv6, могут возникнуть проблемы при маршрутизации почты. Также можно задать значения all или ipv6.
  • smtpd_tls_cert_file — полный путь до публичного сертификата.
  • smtpd_tls_key_file — полный путь до приватного сертификата.




Если имя сервера отличается от имени, по которому сервер будет зарегистрирован в DNS, задаем опцию:




myhostname = mx01.dmosk.ru




Теперь в конец конфигурационного файла допишем следующее:




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



smtp_use_tls = yes

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 (по умолчанию /var/spool/postfix). Итого, полный путь — /var/spool/postfix/private/auth.
  • smtp_use_tls — по возможности, использовать шифрованное соединение для подключение к другому серверу SMTP при отправке письма.
  • 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/lib/dovecot/deliver -d ${recipient}




* необходимо убедиться, что в содержимом файла нет других раскомментированных опций для submission, smtps и dovecot (по умолчанию, их нет). В данном случае, мы настроили работу postfix на портах 25, 465 и 587. В файле master.cf мы настраиваем работу вспомогательных сервисов для Postfix. Описание каждого сервиса начинается с новой строки без отступа. Затем идут настройки для сервиса и параметры запуска. Для примера, рассмотрим первую добавленную строку — 
submission   inet  n  —  n  —  —  smtpd:




  • submission — имя сервиса. Возможно использование заранее определенных в postfix служб или создание своих. В данном примере submission для подключения MUA по порту 587 при отправке почты.
  • inet — тип обслуживания. Возможны варианты inet (сокет TCP/IP), unix (потоковый сокет), unix-dgram (сокет дейтаграммы), fifo (именованный канал очереди), pass (потоковый сокет UNIX-домена).
  • первый «n» — является ли сервис частным и должен быть ограниченным. Возможны варианты y или n. Для типа обслуживания inet может быть только n.
  • первый «-« — работает ли служба с правами root. Возможны варианты yn и . Прочерк означает неприменимость данного параметра к конкретному сервису.
  • второй «n» — должна ли служба работать в окружении chroot. Возможны варианты y или n.
  • второй «-« — через какое время в секундах пробудить службу, если она неактивна.
  • третий «-» — максимальное количество одновременно выполняемых процессов, которые может запустить данный сервис.
  • smtpd — выполняемая команда.




* после команды идут аргументы ее запуска. Они могут переопределять параметры, заданные в main.cf. Каждый аргумент записывается с новой строки и начинается с двух пробелов. В данном примере мы используем следующие аргументы:




  • smtpd_tls_security_level — задает уровень безопасности с применением TLS. В данном примере may говорит о возможности его использования.
  • smtpd_sasl_auth_enable — разрешает sasl аутентификацию.
  • smtpd_sasl_type — указывает тип аутентификации.
  • smtpd_sasl_path — путь до временных файлов обмена информацией с сервером хранения почты (в нашем случае Dovecot). Указывается либо абсолютный путь, либо относительный queue_directory.
  • smtpd_sasl_security_options — дополнительные опции настройки sasl.
  • smtpd_sasl_local_domain — добавить домен для пользователей, которые проходят smtp-аутентификацию.
  • syslog_name — префикс названия службы при занесении ее в системный журнал.
  • smtpd_tls_wrappermode — запускать ли службу в нестандартном режиме (для поддержки TLS).
  • smtpd_client_restrictions — настройки ограничения клиентских соединений. В данном примере разрешить только авторизованных.




Генерируем сертификаты безопасности. Для этого создаем каталог, в котором их разместим:




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 необходимо указать в соответствии с именем сервера, по которому мы будем подключаться к почте.
* если мы хотим использовать сертификат, который будет проходить все проверки безопасности, его нужно купить или запросить у Let’s Encrypt.




Разрешаем запуск postfix:




systemctl enable postfix




Перезапускаем его:




systemctl restart postfix




5. Настройка Dovecot




Устанавливаем Dovecot с компонентом для работы с СУБД:




apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql




Настраиваем способ хранения сообщений:




vi /etc/dovecot/conf.d/10-mail.conf




mail_location = maildir:/home/mail/%d/%u/




* в данном примере сообщения будут храниться в продвинутом формате maildir в каталоге /home/mail/<почтовый домен>/<логин пользователя>. 




Настраиваем слушателя для аутентификации:




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 — для возможности постфиксом использовать авторизацию через Dovecot (обращаем внимание, что /var/spool/postfix/private/auth — это тот же private/auth, который был прописан нами в postfix); auth-userdb — сокет для авторизации через dovecot-lda. Опция mode задает права на сокет, например, 666 позволит любому пользователю к нему подключиться; user и group задает пользователя и группу владельцев на сокет.




А также в этом файле добавим строки:




service stats {

    unix_listener stats-reader {

        user = vmail

        group = vmail

        mode = 0660

    }

    unix_listener stats-writer {

        user = vmail

        group = vmail

        mode = 0660

    }

}




* в противном случае, мы увидим в логе ошибку error net_connect_unix(/var/run/dovecot/stats-writer) failed permission denied, так как у пользователя vmail не будет прав.




Настраиваем аутентификацию в 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




ssl = required укажет dovecot требовать от клиентов использования шифрования; ssl_cert — путь до открытого сертификата (также нами указывался в postfix); ssl_key — путь к закрытому ключу.




Настроим автоматическое создание каталогов при первом подключении пользователя к ящику:




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/dovecot-sql.conf.ext

}

userdb {

  …

  args = /etc/dovecot/dovecot-sql.conf.ext

}




* в данном примере мы указали на файл, в котором будут находиться настройки для получения пользователей и паролей из базы данных. Данная настройка является настройкой по умолчанию и, в большинстве случаев, ее не нужно менять без необходимости указать свой путь.




Откроем на редактирование файл с настройками работы с mysql:




vi /etc/dovecot/dovecot-sql.conf.ext




В самый низ добавим: 




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'




* в данном примере мы настроили запрос на получение данных из базы mysql (mariadb). password_query — запрос на получение пароля из таблицы mailbox; user_query — запрос на получение данных пользователя (домашняя почтовая директория, идентификатор 1024 (идентификатор созданного нами ранее пользователя vmail).




И, напоследок, настраиваем интерфейс, на котором будет слушать dovecot:




vi /etc/dovecot/dovecot.conf




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




Разрешаем запуск dovecot:




systemctl enable dovecot




Перезапускаем dovecot:




systemctl restart dovecot




6. Создаем первый почтовый ящик и проверяем работу сервера




В браузере вводим в адресной строке путь до Postfixadmin — http://<IP-адрес сервера>/postfixadmin/public/.




Вводим логин и пароль от административной учетной записи, которую мы создали на шаге 3. Перед нами появится страница управления учетными записями.




Переходим в Список доменов — Новый домен:







Заполняем формы и нажимаем по Добавить домен:







Теперь переходим в Обзор — Создать ящик:







Вводим данные нового пользователя и нажимаем по Создать ящик:







Теперь можно подключиться к серверу с помощью любой почтовой программы, например, Mozilla Thunderbird.




Параметры для подключения:




  • Сервер: имя сервера или его IP-адрес (не желательно, так как сертификат выдается по доменному имени).
  • IMAP: 143 STARTTLS или 993 SSL/TLS
  • POP3: 110 STARTTLS или 995 SSL/TLS
  • SMTP: 25 STARTTLS или 465 SSL/TLS или 587 STARTTLS




* для корректной работы сервера на портах 993, 995, 465 (SSL/TLS) необходим правильный сертификат (для нашего домена и выпущенный доверенным центром сертификации).




7. Устанавливаем и настраиваем Roundcube Webmail




В данной инструкции мы разберем использование веб-клиента Roundcube. При необходимости, можно установить другой, например, WebMail Lite или несколько одновременно.




На официальном сайте заходим на страницу загрузки Roundcube. Смотрим ссылку на версию продукта с длительной поддержкой (LTS):







Используем ссылку, чтобы загрузить архив программы:




wget https://github.com/roundcube/roundcubemail/releases/download/1.2.11/roundcubemail-1.2.11-complete.tar.gz




Создаем каталог, где будут размещаться файлы портала:




mkdir /var/www/html/webmail




И распаковываем скачанный архив:




tar -C /var/www/html/webmail -xvf roundcubemail-*.tar.gz --strip-components 1




Копируем шаблон конфига:




cp /var/www/html/webmail/config/config.inc.php.sample /var/www/html/webmail/config/config.inc.php




И открываем его на редактирование:




vi /var/www/html/webmail/config/config.inc.php




$config['db_dsnw'] = 'mysql://roundcube:roundcube123@localhost/roundcubemail';

$config['enable_installer'] = true;




* первую строку мы редактируем, а вторую добавляем. В первой строке roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных. Вторая строка разрешает установку портала.




Также дописываем в конфигурационный файл следующее:




$config['drafts_mbox'] = 'Drafts';

$config['junk_mbox'] = 'Junk';

$config['sent_mbox'] = 'Sent';

$config['trash_mbox'] = 'Trash';

$config['create_default_folders'] = true;




* настройка $config[‘create_default_folders’] = true создает папки по умолчанию, если их нет:




  • Drafts — Черновики.
  • Junk — СПАМ.
  • Sent — Отправленные.
  • Trash — Корзина.




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




Задаем владельца apache на папку портала:




chown -R www-data:www-data /var/www/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 < /var/www/html/webmail/SQL/mysql.initial.sql




Устанавливаем компоненты, необходимые для работы Roundcube:




apt-get install php-pear php-intl php-ldap php-net-smtp php-gd php-imagick php-zip




В Ubuntu нет возможности установить компонент mcrypt из репозитория — для начала установим пакеты, необходимые для сборки его их исходников:




apt-get install php-dev libmcrypt-dev




Выполняем команды:




pecl channel-update pecl.php.net




pecl install mcrypt-1.0.4




Создадим файл с настройкой нового модуля:




vi /etc/php/7.4/fpm/conf.d/99-mcrypt.ini




extension=mcrypt.so




Настроим php:




vi /etc/php/7.4/fpm/php.ini




date.timezone = "Europe/Moscow"

...

post_max_size = 30M

...

upload_max_filesize = 30M




* в данном примере мы задаем московское время и возможность загружать файл размером в 30 Мб (это будет максимальным объемом вложений, которые можно отправлять через веб-интерфейс).




Перезагружаем php-fpm:




systemctl restart php7.4-fpm




Настроим nginx:




vi /etc/nginx/nginx.conf




Добавим строку в раздел http:




http {

    ...

    client_max_body_size 30M;

    ...




* данной настройкой мы также разрешим загрузку файлов размером 30 Мб.




Перезапустим nginx для применения настройки:




systemctl restart nginx




Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).




На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.




Открываем конфигурационный файл roundcube:




vi /var/www/html/webmail/config/config.inc.php




Запрещаем установку портала:




$config['enable_installer'] = false;




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




rm -R /var/www/html/webmail/installer




И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/. Вводим в качестве логина адрес почты созданного пользователя и его пароль.




8. Защищаемся от вирусов и СПАМа




Антивирус требует много ресурсов. Будьте готовы, что после его запуска сервер начнет работать медленнее и понадобится добавить ресурсы.




Установка и настройка Clamav + Amavisd




Устанавливаем необходимые для работы антивируса и антиспама компоненты:




apt-get install amavisd-new clamav clamav-daemon spamassassin




Добавляем пользователя clamav в группу amavis:




usermod -a -G amavis clamav




Открываем конфигурационный файл amavis:




vi /etc/amavis/conf.d/15-content_filter_mode




Снимаем комментарии для строк:




...

@bypass_virus_checks_maps = (

   %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);

...

@bypass_spam_checks_maps = (

   %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re);

...




* по умолчанию amavis не выполняем никаких проверок — для включения сканирования на вирусы снимаем комментарий с bypass_virus_checks_maps, а для сканирования на СПАМ — bypass_spam_checks_maps.




Затем открываем на редактирование:




vi /etc/amavis/conf.d/50-user




Добавим строки:




$allowed_header_tests{'multiple'} = 0;

$allowed_header_tests{'missing'} = 0;




* данные опции позволят программе Outlook без ошибок отправлять тестовое сообщение.




Разрешаем запуск антивируса и amavis:




systemctl enable clamav-daemon clamav-freshclam amavis




Перезапускаем сервисы:




systemctl restart amavis clamav-daemon clamav-freshclam




Настройка Postfix




Добавляем в postfix:




vi /etc/postfix/main.cf




content_filter = scan:[127.0.0.1]:10024




* где content_filter указывает на приложение, которое будет сканировать сообщения;




Теперь редактируем 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:10025   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




* итак, данной настройкой мы создадим два вспомогательных сервиса scan и 127.0.0.1:10025 (сервис без имени, он просто будет слушать на порту 10025 — это порт по умолчанию, на который отправляет сообщение amavis после выполнения проверки). Также, мы используем следующие опции:




  • smtp_send_xforward_command — передавать ли в сканирование сообщение с исходными именем клиента и IP-адресом. В данном примере, да.
  • smtp_enforce_tls — требовать ли TLS.
  • content_filter — приложение для сканирования. В данном примере сканирование отключено.
  • receive_override_options переопределяет опции в main.cf. В нашем случае, no_unknown_recipient_checks отключает попытки выяснить, является ли получатель неизвестным; no_header_body_checks отключает проверки заголовков и тала писем.
  • пустые значения для smtpd_helo_restrictionssmtpd_client_restrictionssmtpd_sender_restrictions отключают ограничения для данных опций.
  • smtpd_recipient_restrictions — контролирует ответ Postfix на SMTP-команду RCPT TO. Здесь мы разрешаем только соединения от узлов, перечисленных в mynetworks.
  • mynetworks_style=host указывает postfix, что он должен пересылать почту только с локального компьютера.
  • smtpd_authorized_xforward_hosts укажет, какие удаленные клиенты могут использовать XFORWARD. В данном случае локальный компьютер.




Перезапускаем postfix:




systemctl restart postfix




Настройка обновлений антиспама




Для обновления базы антиспама выполняем команду:




sa-update --nogpg --verbose




Для настройки автоматического обновления, редактируем cron:




crontab -e




30 3 * * * /usr/bin/sa-update




* в данном примере, каждый день в 03:30 будет запускаться процесс обновления антиспама.




Проверка




Для проверки антивируса отправляем сообщение со следующим содержимым:




X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*




Большинство почтовых систем экранинуют вирусную последовательность и письмо нормально пройдет мимо нашего антивируса. Чтобы сделать корректный тест, необходимо отправить письмо SMTP-командами.




Письмо не должно дойти, а в логе (/var/log/maillog) мы увидим строку:




... amavis[17688]: (17688-04) Blocked INFECTED (Eicar-Signature) {DiscardedOutbound,Quarantined}, MYNETS LOCAL ...

... relay=127.0.0.1[127.0.0.1]:10024, delay=0.25, delays=0.19/0/0/0.06, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=17688-04 - INFECTED: Eicar-Signature)




Для проверки работы контентного антиспама, отправляем письмо со следующим содержимым:




XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X




В итоге, письмо не должно прийти, а в логах мы увидим:




... amavis[17689]: (17689-04) Blocked SPAM {DiscardedOutbound,Quarantined}, MYNETS LOCAL ...

... status=sent (250 2.7.0 Ok, discarded, id=17689-04 - spam)




Пересылка СПАМа и вирусов на другой ящик




Все письма со спамом и вирусами будут перемещаться в карантин. Если мы хотим перенаправлять все подобные сообщения на специальный ящик, то необходимо настроить amavis.




Открываем конфигурационный файл:




vi /etc/amavis/conf.d/50-user




Добавляем такие опции:




$spam_quarantine_to = "spam@dmosk.ru";

$virus_quarantine_to = "virus@dmosk.ru";




* где $spam_quarantine_to указываем на адрес для перенаправления СПАМ-писем; $virus_quarantine_to — почта для писем с обнаруженными вирусами.




После перезагрузим amavis:




systemctl restart amavis




Пробуем отправить сообщения с тестовыми сигнатурами на СПАМ и вирус — письма должны быть перенаправлены на указанные адреса.




Антиспам средствами Postfix




В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 7 секций, обработка которых выполняется в следующем порядке:




client -> helo -> sender -> relay -> recipient -> data -> end_of_data




Чтобы лучше понять принцип, мы должны знать SMTP-команды при выполнении отправки почты. И так, порядок, следующий:




  1. Соединение с сервером.
  2. Команда HELO. Приветствие, в котором отправитель называет свое имя, по которому можно проверить, соответствует ли оно правилам именования и своему IP-адресу.
  3. MAIL FROM — указывает адрес отправителя. Выполняется для sender и relay.
  4. RCPT TO — кому отправляем письмо.
  5. DATA — команда сообщает о готовности отправить письмо с заголовками и текстом.
  6. END-OF-DATA — отправка письма.




И так, для настройки антиспама открываем конфигурационный файл main.cf:




vi /etc/postfix/main.cf




Комментируем строку:




#smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination




И добавляем:




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_mynetworks

        permit_sasl_authenticated

        defer_unauth_destination



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




* где параметры:




  1. smtpd_client_restrictions — настройки ограничений при осуществлении клиентских соединений с почтовым сервером.
  2. smtpd_helo_restrictions — ограничения в контексте клиентской команды HELO.
  3. smtpd_sender_restrictions — ограничения будут применяться во время выполнения клиентской команды MAIL FROM.
  4. smtpd_relay_restrictions — ограничения пересылки почты в контексте клиентской команды RCPT TO.
  5. smtpd_recipient_restrictions — ограничения в контексте клиентской команды RCPT TO после пересылки (smtpd_relay_restrictions).
  6. smtpd_data_restrictions — ограничения будут применяться во время выполнения команды DATA.
  7. smtpd_end_of_data_restrictions — ограничения во вреся выполнения команды END-OF-DATA.




… и значения для них:




  • permit_mynetworks — разрешает все адреса, перечисленные в настройке mynetworks.
  • permit_sasl_authenticated — разрешает запросы всех успешно авторизованных клиентов.
  • reject_unauth_pipelining — запрещает отправку писем, которые отправляются заранее (пропуская правильную цепочку сессии SMTP).
  • reject_non_fqdn_sender — отклонить соединение, если адрес отправителя указан неправильно (согласно RFC).
  • reject_unknown_sender_domain — запрещает запрос, если Postfix не является конечным пунктом назначения для адреса отправителя, а домен MAIL FROM не имеет 1) DNS-записи MX и DNS-записи A или 2) искаженной MX-записи, такой как запись с MX-именем хоста нулевой длины.
  • reject_non_fqdn_recipient — запретить соединение, если адрес получателя указан неправильно (согласно RFC).
  • reject_unauth_destination — отклонить соединение, если письмо не пересылается согласно правилу relay_domains или сервер не является адресом назначения. Другими словами, запрещает использование нашего сервера в качестве open relay.
  • reject_unknown_recipient_domain — отклонить запрос, если Postfix не является конечным пунктом назначения для домена получателя, а домен RCPT TO не имеет 1) DNS-записи MX и DNS-записи A или 2) неверно сформированной MX-записи, такой как запись с именем хоста MX нулевой длины.
  • reject_unverified_recipient — отклонить запрос, если известно, что почта на адрес RCPT TO отклоняется или когда адрес получателя не доступен. 
  • 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.org/postconf.5.html.




После внесения всех правок, необходима перезагрузка Postfix:




systemctl restart postfix




Обучение антиспама




Мы установили amavis, который проверяет почту на СПАМ средствами spamassassin. Последний без обучения, практически, бесполезен. Синтаксис команды для обучения следующий:




sa-learn --spam <папка с нежелательными письмами>




sa-learn --ham <папка письмами, которые ошибочно определены как СПАМ>




Таким образом, первая команда укажет spamassassin какие письма являются нежелательными, а вторая — не несущими рекламный характер.




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




sa-learn --spam /home/mail/dmosk.local/*/{.&BCEEPwQwBDw-,.Spam,.Junk E-mail,.Junk}/cur




* в данном примере мы сказали spamassassin найти в каталогах пользователей папки Спам, Spam, Junk, Junk E-mail (данные каталоги являются типичными для помещения СПАМа) и провести обучение. 




Чтобы минимизировать количество ложных срабатываний, необходимо проводить обучение с ключом —ham. В нашем примере мы отправляем все нежелательные письма на ящик spam. В таком случае, необходимо вручную находить ложные срабатывания и переносить их в специальную папку, например Ham. Тогда команда для обучения будет такой:




sa-learn --ham /home/mail/dmosk.local/spam@dmosk.local/.Ham/cur




Статистику обучения можно посмотреть командой:




sa-learn --dump magic




9. Отправка почты наружу




Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.




Настройки DNS для сервера




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




1. rDNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.




И так, для создания записи в обратной зоне, необходимо написать письмо Интернет провайдеру, к сети которого подключен сервер или хостеру, если почтовый сервер настроен на VPS. IP-адрес нашего сервера должен вести на имя, которым приветствуется наш postfix — можно посмотреть командой:




postconf -n smtpd_banner




Если мы получим пустой ответ, то вводим:




postconf -n myhostname




Если и в этот вариант не вернет ответ, вводим:




hostname




2. А-запись. Также необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.




Для этого заходим в консоль управления зоной нашего домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.




Настройки DNS для домена




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




  1. SPF.
  2. DMARC.
  3. DKIM




Для проверки корректности настройки сервера, воспользуемся ресурсами:







10. Настройка DKIM




Подпись писем не является обязательной, но помогает не попадать в СПАМ. DKIM настраивается для каждого домена, а также должна создаваться специальная запись в DNS. Рассмотрим создание и настройку DKIM в amavisd.




Создаем каталог для хранения ключей:




mkdir -p /var/lib/dkim




Генерируем последовательность для нашего домена:




amavisd-new genrsa /var/lib/dkim/dmosk.ru.pem 1024




* где dmosk.ru — домен, для которого мы сгенерируем подпись dkim.




Задаем права на созданный файл:




chown amavis:amavis /var/lib/dkim/*.pem




chmod 0400 /var/lib/dkim/*.pem




Открываем конфигурационный файл amavisd:




vi /etc/amavis/conf.d/20-debian_defaults




Редактируем запись:




#$inet_socket_port = 10024;

$inet_socket_port = [10024,10026];




* в данном примере мы закомментировали первую строку и раскомментировали вторую. Это укажет amavis, что он должен запускаться и работать на двух портах.




А также добавим:




$forward_method = 'smtp:[127.0.0.1]:10025';

$notify_method = $forward_method;

$interface_policy{'10026'} = 'ORIGINATING';

$policy_bank{'ORIGINATING'} = {

    originating => 1,

    smtpd_discard_ehlo_keywords => ['8BITMIME'],

    os_fingerprint_method => undef,

    bypass_banned_checks_maps => [1],

    bypass_header_checks_maps => [1],

    bypass_banned_checks_maps => [1],

    virus_admin_maps => ["virusalert@$mydomain"],

};




Открываем файл:




vi /etc/amavis/conf.d/50-user




Добавляем записи:




$enable_dkim_verification = 1;

$enable_dkim_signing = 1;



dkim_key('dmosk.ru', "dkim", "/var/lib/dkim/dmosk.ru.pem");



@dkim_signature_options_bysender_maps = ( {

   "dmosk.ru" => { d => "dmosk.ru", a => 'rsa-sha256', ttl => 10*24*3600 },

});




* где dmosk.ru — домен, для которого мы настраиваем dkim; /var/lib/dkim/dmosk.ru.pem — путь до сгенерированного файла с последовательностью.




Перезапускаем amavis:




systemctl restart amavis




Посмотреть DKIM последовательность для нового домена можно командой:




amavisd-new showkeys




Мы должны увидеть что-то на подобие:




; key#1 1024 bits, i=dkim, d=dmosk.ru, /var/lib/dkim/dmosk.ru.pem

dkim._domainkey.dmosk.ru.        3600 TXT (

  "v=DKIM1; p="

  "MIGfMA0SDFqGSIb3DQEBAQUAA4GNADCBiQKBgQC44iOK+99mYBxsnIl1Co8n/Oeg"

  "4+x90sxqWzoGW42d/GCP4wiYqVqncc37a2S5Berv0OdoCGcmkDkKWh4CHhFD4blk"

  "x6eMYXsp1unAdo2mk/OVK7M2ApraIkh1jVbGBZrREVZYTE+uPOwtAbXEeRLG/Vz5"

  "zyQuIpwY2Nx3IgEMgwIDAQAB")




Теперь нам нужно на основе данного вывода создать в DNS запись TXT. В данном примере, нужно создать запись c именем dkim._domainkey в зоне dmosk.ru и значением «v=DKIM1; p=MIGfMA0SD…wIDAQAB».




Проверить корректность настройки DKIM можно командой:




amavisd-new testkeys




Переходим к настройке Postfix. Мы должны добавить отправку всех исходящих писем на проверку в amavis на порт 10026 и принимать обратно письма на порт 10027.




Открываем файл:




vi /etc/postfix/master.cf




Отредактируем submission и smtps, добавив content_filter:




smtp      inet  n       -       y       -       -       smtpd

  -o content_filter=scan:[127.0.0.1]:10026

  ...



submission   inet  n  -  n  -  -  smtpd

  -o content_filter=scan:[127.0.0.1]:10026

  ...



smtps   inet  n  -  n  -  -  smtpd

  -o content_filter=scan:[127.0.0.1]:10026

  ...




И добавим:




127.0.0.1:10027   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




Настраиваем Roundcube:




vi /var/www/html/webmail/config/config.inc.php




Находим строки:




$config['smtp_server'] = '';

...

$config['smtp_port'] = 25;




… и меняем ее на:




$config['smtp_server'] = 'tls://localhost';

...

$config['smtp_port'] = 587;




* в данном примере мы указали, что соединение для отправки почты должно быть защищенным. Это важно для нашей настройки DKIM.




Пробуем отправить письмо — в заголовках мы должны увидеть:




dkim=pass header.d=dmosk.ru 




11. Настройка квот




В PostfixAdmin у нас есть возможность задать квоты на почтовые ящики, но они работать не будут, так как о них ничего не знает Dovecot.




Процесс настройки не сложен и описан отдельно в статье Настройка квот в Dovecot + PostfixAdmin.




После применения квот мы сможем наблюдать в почтовом клиенте Roundcube информацию об оставшемся дисковом пространстве:







… или в Webmail Lite:







12. Автоматическая настройка почтовых клиентов




Для автоматического конфигурирования почтовых клиентов необходимо настроить сервис autodiscover. Для этого настраиваем веб-сервер, который будет возвращать почтовые настройки для домена.




Подробнее процесс настройки описан в статье Настройка Autodiscover для своего почтового сервера.




13. Папки на русском в Outlook




По умолчанию, все почтовые клиенты, кроме Outlook распознают служебные папки IMAP:




  • Drafts — черновики.
  • Junk — СПАМ.
  • Sent — отправленные.
  • Trash — удаленные.




Данные каталоги переводятся на русский язык и корректно отображаются в клиенте. В Outlook эти папки отображаются как есть — на английском языке.




Для решения проблемы мы должны открыть файл:




vi /etc/dovecot/conf.d/15-mailboxes.conf




Найти блок настроек namespace inbox. Для каждого из служебного каталога настроить следующее:




namespace inbox {

  ...

  mailbox Черновики {

    auto = subscribe

    special_use = Drafts

  }

  mailbox Drafts {

    auto = no

    special_use = Drafts

  }



  mailbox Спам {

    auto = subscribe

    special_use = Junk

  }

  mailbox Junk {

    auto = no

    special_use = Junk

  }

  mailbox Spam {

    auto = no

    special_use = Junk

  }

  mailbox "Junk E-mail" {

    auto = no

    special_use = Junk

  }



  mailbox Удаленные {

    auto = subscribe

    special_use = Trash

  }

  mailbox Trash {

    auto = no

    special_use = Trash

  }

  mailbox "Deleted Messages" {

    auto = no

    special_use = Trash

  }



  mailbox Отправленные {

    auto = subscribe

    special_use = Sent

  }

  mailbox Sent {

    auto = no

    special_use = Sent

  }

  mailbox "Sent Messages" {

    auto = no

    special_use = Sent

  }

  mailbox "Sent Items" {

    auto = no

    special_use = Sent

  }

  ..

}




* и так, мы задали несколько вариантов служебных каталогов:




  • Черновики — на сервере могут быть папки Черновики и Drafts. По умолчанию отображается и создается Черновики.
  • Спам — на сервере Спам, Junk, Spam, Junk E-mail.
  • Удаленные — на сервере Удаленные, Trash, Deleted Messages.
  • Отправленные — на сервере Отправленные, Sent, Sent Messages, Sent Items.




Для применения настроек перезапускаем dovecot:




systemctl restart dovecot




14. Разное




Рассмотрим дополнительные настройки для нашего сервера.




Настройка ограничений




Также важно настроить некоторые ограничения, например:




  • максимальный размер вложения.
  • количество сообщений, которое можно отправить за определенный период времени.
  • настройка очереди (время хранения писем).
  • таймауты отправки.




Подробнее, информацию можно найти в статье Лимиты в Postfix.




Смена email адреса




Предположим, мы сделали ошибку в написании адреса электронной почты, но не хотим удалять учетную запись и создавать ее по новой. Рассмотрим смену email-адреса на примере sekretar@dmosk.ru -> secretar@dmosk.ru.




Нам нужно внести изменения в базу данных — для этого заходим в оболочку sql:




mysql -uroot -p




Вводим пароль, который создавали после установки СУБД.




Используем базу postfix:




> use postfix




Редактируем алиасы командой:




> UPDATE alias SET `address`='secretar@dmosk.ru', `goto`=REPLACE(`goto`, 'sekretar@dmosk.ru', 'secretar@dmosk.ru') WHERE `address`='sekretar@dmosk.ru';




Редактируем почтовый ящик:




> UPDATE mailbox SET `username`='secretar@dmosk.ru', `local_part`='secretar', `maildir`=REPLACE(`maildir`, '/sekretar/', '/secretar/') WHERE `username`='sekretar@dmosk.ru';




И квоту:




> UPDATE quota2 SET `username`='secretar@dmosk.ru' WHERE `username`='sekretar@dmosk.ru';




С базой данных закончили — выходим из sql:




> quit




Переходим в каталог с почтовыми ящиками пользователей для нашего домена:




cd /home/mail/dmosk.ru/




Перемещаем папку с почтой старого ящика в новый:




mv sekretar@dmosk.ru secretar@dmosk.ru




Проверяем работу через веб-интерфейс. Если используем почтовый клиент, меняем настройки для использования нового email-адреса.




Источник: https://www.dmosk.ru/instruktions.php?object=mailserver-ubuntu



2021-06-15T23:34:09
Software

Установка веб-инструмента GitLab на Linux Ubuntu Server

Рассмотрим процесс установки и настройки веб-инструмента жизненного цикла DevOps на Linux Ubuntu Server на примере версий 18.04 и 20.04. За основу взята официальная инструкция с сайта GitLab. В нашей инструкции приведен пример установки как платной. так и бесплатной версий программы.







Подготовка сервера




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




1. Обновление списков пакетов




Выполняем команду:




apt-get update




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




apt-get upgrade




2. Время




Установим часовой пояс:




timedatectl set-timezone Europe/Moscow




* данная команда задаст настройки для московского времени. Все файлы с временными зонами находятся в каталоге /usr/share/zoneinfo.




Для автоматической синхронизации времени ставим пакет:




apt-get install chrony




И разрешаем автозапуск сервиса:




systemctl enable chrony




3. Настройка брандмауэра




По умолчанию, в Ubuntu брандмауэр настроен на то, чтобы принимать любые пакеты. Но если у нас он настроен на блокировку, нужно добавить порты 80 и 443.




iptables -A INPUT -p tcp --dport 80 -j ACCEPT




iptables -A INPUT -p tcp --dport 443 -j ACCEPT 




И чтобы сохранить правила, устанавливаем iptables-persistent:




apt-get install iptables-persistent




… и выполняем команду: 




netfilter-persistent save




Установка GitLab




Установку выполним в два шага — установка необходимых компонентов и, собственно, установка GitLab.




1. Необходимые компоненты




apt-get install curl openssh-server ca-certificates




Для отправки уведомлений, установим также postfix:




apt-get install postfix




При запросе типа конфигурации, выбираем Internet Site (если уведомления должны отправляться наружу) или Local only (уведомления в пределах сервера):







* при получении других запросов во время установки postfix можно ответить по умолчанию, нажимая Enter.




2. Установка GitLab




Установим репозиторий.




а) для платной версии:




curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash




б) для бесплатной:




curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash




После установки репозитория, устанавливаем сам GitLab.




а) платную версию:




apt-get install gitlab-ee




б) бесплатную:




apt-get install gitlab-ce




Если установка прошла успешно, мы должны увидеть:




It looks like GitLab has not been configured yet; skipping the upgrade script.
       *.                  *.

      ***                 ***

     *****               *****

    .******             *******

    ********            ********

   ,,,,,,,,,***********,,,,,,,,,

  ,,,,,,,,,,,*********,,,,,,,,,,,

  .,,,,,,,,,,,*******,,,,,,,,,,,,

      ,,,,,,,,,*****,,,,,,,,,.

         ,,,,,,,****,,,,,,

            .,,,***,,,,

                ,*,.

  



     _______ __  __          __

    / ____(_) /_/ /   ____ _/ /_

   / / __/ / __/ /   / __ `/ __ 

  / /_/ / / /_/ /___/ /_/ / /_/ /

  ____/_/__/_____/__,_/_.___/

  
Thank you for installing GitLab!




3. Конфигурируем веб-адрес




Для запуска и корректной работы портала мы должны задать external_url. Для этого открываем файл:




vi /etc/gitlab/gitlab.rb




Нам нужно только изменить параметр external_url:




external_url 'http://gitlab.dmosk.ru'




* данная настройка говорит, что наш веб-инструмент будет отвечать на запросы, которые пришли на узел gitlab.dmosk.ru — это значит, что данное имя должно быть зарегистрирована в DNS или прописано в локальный файл hosts.




Выполняем конфигурирование:




gitlab-ctl reconfigure




Данная операция займет какое-то время.




Вход в веб-интерфейс




Открываем браузер и вводим наш адрес, который мы указали в настройках в опции external_url — в данном примере, http://gitlab.dmosk.ru. Мы должны увидеть страницу авторизации, на которой нас запросят сменить пароль для администратора. Вводим его дважды:







После система попросит ввести логин и пароль — вводим логин root и пароль, который только-что придумали.




Настройка GitLab




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




Русский интерфейс




По умолчанию, портал устанавливается с интерфейсом на английском. Для смены языка, кликаем по иконке в правом верхнем углу и выбираем Settings:







В меню слева нажимаем по Preferences:







В подразделе Localization выбираем нужный нам язык и первый день недели:







Сохранияем настройки и перезапускаем страницу для применения нового языка.




Создание репозитория и подключение к нему




Попробуем создать проект и подключиться к нему из Linux. Также для теста мы создадим файл и закинем его в наш репозиторий.




В веб-интерфейсе GitLab создаем новый проект:







Задаем имя проекта, оставляем или редактируем URL, выбираем уровень доступа. После кликаем по кнопке Создать проект:







* в данном примере мы создаем проект с названием Test, url до него будет http://gitlab.dmosk.ru/root/test. Уровень доступа мы задаем «Приватный» — доступ к репозиторию будет только у авторизованного пользователя.




Для примера попробуем подключиться с компьютера Linux к нашему репозиторию и закинуть на него тестовый файл.




Для начала установим git на компьютер с Linux:




а) Если используем CentOS / Red Hat:




yum install git-core




б) Если используем Ubuntu / Debian:




apt-get install git




Создаем папку для тестового проекта:




mkdir -p /projects/test




Переходим в нее:




cd /projects/test




Создаем репозиторий:




git init




Создаем файл:




vi testfile.txt




Добавляем в него все файлы (то есть, наш единственный файл):




git add .




Делаем коммит:




git commit -m "Очередное изменение проекта" -a




Подключаемся к созданному репозиторию:




git remote add origin http://gitlab.dmosk.ru/root/test.git




Заливаем в него закоммиченный файл:




git push origin master




Переходим на веб-страницу нашего проекта — мы должны увидеть наш файл:







Настройка SSL




В данном примере мы сконфигурируем наш сервер для возможности работы по https и получения сертификата от Let’s Encrypt. Все настройки выполняются в конфигурационном файле:




vi /etc/gitlab/gitlab.rb




Меняем настройку:




external_url 'http://gitlab.dmosk.ru'




* где gitlab.dmosk.ru — url для нашего портала, который мы задали при первом конфигурировании.




на:




external_url 'https://gitlab.dmosk.ru'




* мы просто добавили s к http.




Также настраиваем получение сертификата от Let’s Encrypt:




letsencrypt['enable'] = true




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




letsencrypt['auto_renew'] = true

letsencrypt['auto_renew_hour'] = "22"

letsencrypt['auto_renew_minute'] = "50"

letsencrypt['auto_renew_day_of_month'] = "*/7"




* где:




  • auto_renew — разрешает автоматическое обновление.
  • auto_renew_hour — время в часах, когда нужно запускать задание на обновление сертификата.
  • auto_renew_minute — время в минутах, когда нужно запускать задание на обновление сертификата.
  • auto_renew_day_of_month — день месяца. В данном примере, раз в 7 дней.




Применяем новую конфигурацию:




gitlab-ctl reconfigure




В процессе переконфигурирования мы можем получить ошибку получения сертификата. Пробуем запустить команду:




gitlab-ctl renew-le-certs




Сброс пароля root




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




Подключаемся к консоли управления gitlab с помощью команды:




gitlab-rails console -e production




Создаем переменную, которая будет вести на ссылку с учетной записью root (идентификатор 1):




user = User.where(id: 1).first




Задаем пароль для пользователя root дважды:




user.password = 'password123'

user.password_confirmation = 'password123'




где password123 — созданный для пользователя root новый пароль.




Созраняем изменения для пользователя:




user.save!




Готово.




Источник: https://www.dmosk.ru/miniinstruktions.php?mini=gitlab-ubuntu



2021-06-15T22:56:12
Software

Как запустить Java из командной строки в Linux

Java — популярная в мире платформа для разработки программного обеспечения, которую разрабатывает Джеймс Гослинг. Он разработан для поддержки нескольких платформ, таких как Linux, macOS и Windows. Мобильные и настольные приложения также могут быть разработаны с использованием языка Java.

Язык Java — один из самых популярных объектно-ориентированных языков программирования высокого уровня. Он имеет простой синтаксис и легко понятен новичкам, так как он очень безопасен и экономичен в использовании. Java — это программное обеспечение, не зависящее от платформы, и оно также предоставляет средство автоматической сборки мусора.

 

Как запустить Java из командной строки

Чтобы запустить java-программу в Linux, нам нужно проверить, доступен ли Java Development Kit (JDK) в системе и его версию.

Чтобы подтвердить это, введите следующую команду:

$ javac -version

 

( Инструмент командной строки Javac используется для компиляции программ Java)

Инструмент командной строки Javac недоступен в моей системе. У нас есть несколько команд для его загрузки, как указано на изображении выше.

Давайте воспользуемся командой default-jdk, чтобы получить это:

$ sudo apt install default-jdk

 

Чтобы проверить установку javac , введите:

$ javac -version

 

Теперь напишите программу на Java в текстовом файле и сохраните ее с расширением .java .

Предположим, я создал файл с именем « testing.java » и написал в нем простую программу:

testing.java



class testing {

public static void main(String args[]) {

System. out. println("Привет! Добро пожаловать в блог AndreyEx");

}

}

(Имейте в виду, что имя вашего класса должно совпадать с именем файла)

Скомпилируйте файл testing.java на терминале с помощью команды javac :

$ javac testing.java

 

Теперь запустите программу Java, вызвав ее имя класса в терминале:

$ java testing

 

Заключение

Java — это язык высокого уровня современной эпохи, поддерживаемый Java Development Kit (JDK). JDK — это пакет, который помогает запускать java и используется для разработки пакетов программного обеспечения.

Язык Java имеет простой синтаксис, который легко освоить новичкам, и это один из наиболее используемых объектно-ориентированных языков программирования.

В этой статье мы видели, как устанавливать и запускать Java-приложения на терминале.



2021-06-15T22:53:13
Java

Программирование сокетов Python

Программирование сокетов — это метод, позволяющий двум узлам в сети взаимодействовать друг с другом. Один сокет (узел) читает с определенного порта по IP-адресу. Между тем, первое с ним связано. Клиент подключается к серверу, и сервер создает сокет аудитора. Это настоящие основы онлайн-серфинга.

Проще говоря, сервер действительно существует, а также клиент. Интеграция пакета сокетов и создание базового сокета — это первые шаги в программировании сокетов. На момент написания этой статьи мы использовали систему Ubuntu 20.04 Linux. Вот несколько примеров программирования сокетов в Python.

 

Пример 01: подключение Socket к Google

В нашем первом примере будет использоваться сокет для подключения к Google. Поэтому перейдите в область приложения и найдите «terminal» в строке поиска, чтобы открыть. Если вам трудно открыть, просто нажмите клавишу «Ctrl + Alt + T», и терминал откроется.

Теперь после открытия терминала нам нужно создать новый файл с поддержкой Python, чтобы добавить в него скрипт Python для программирования сокетов. Следовательно, мы создали файл « test.py » с помощью следующей команды touch:

$ touch test.py

 

Давайте перейдем к домашнему каталогу нашей системы, чтобы открыть только что созданный файл. После того, как вы открыли файл, добавьте в него приведенный ниже скрипт python для подключения сокета к Google. Сначала мы добавили поддержку Python в этот файл. Затем мы импортировали в нее системную библиотеку «sys» и библиотеку «socket». После этого мы использовали оператор try для создания сокета. В 5-й строке мы создали объект для класса сокета, который используется для создания сокета с потоком. Если созданный сокет завершится, он выведет сообщение об успешном завершении. В противном случае будет выполнен оператор except, показывающий сообщение об ошибке создания сокета.

После этого мы создали переменную «port», чтобы присвоить ей значение «80». Другой оператор try использовался для получения IP-адреса хоста, с которым мы подключаем наш сокет, например Google, в нашем случае. Оператор try получает IP-адрес через функцию класса сокета «gethostbyname». Если получение IP-адреса прошло успешно, управление будет передано оператору печати, расположенному за пределами тела try-except, и сообщение об успешном завершении будет отображаться на терминале. С другой стороны, если получение IP-адреса окажется неудачным, он напечатает сообщение об ошибке и завершит процесс. Сохраните файл и оставьте его, чтобы перейти к терминалу.

test.

#!/usr/bin/python3

import socket

import sys

try:

s = socket.socket(socket.AF_INET, socket. SOCK_STREAM) 

print("Сокет успешно создан")

except socket.error as err:

print("создание сокета не удалось с ошибкой %s" %(err))

port = 80

try:

host_ip = socket.gethostbyname('www.google.com')

except socket.gaierror:

print("произошла ошибка при разрешении хоста")

sys.exit()

s.connect((host_ip, port))

print("Сокет успешно подключился к Google")

Давайте запустим этот файл через поддержку python3 в оболочке, как показано ниже. Вы можете видеть, что сокет был успешно подключен к Google, поскольку отображаются сообщения об успешном завершении.

$ python3 test.py

Пример 02: Простое соединение сервер-клиент

Давайте рассмотрим еще один простой пример соединения сервера и клиента друг с другом через программирование сокетов. Давайте сначала создадим новый файл « Server.py » с расширением python в вашем домашнем каталоге с помощью представленной ниже команды.

$ touch Server.py

 

Откройте файл и вставьте в него приведенный ниже код. Этот код сначала импортирует библиотеку сокетов, а затем создает сокет с помощью объекта « s », за которым следует сообщение об успешном завершении. Затем мы упомянули переменную « порт », чтобы добавить номер порта и связать этот номер порта с нашим объектом сокета « s », за которым следует сообщение об успешном связывании. Мы перевели наш сокет в режим прослушивания методом listen . Затем мы создали вечный цикл while, чтобы установить соединение с клиентом с помощью метода accept (), пока мы не прервем его или не произойдет какая-либо ошибка.

Переменная « addr » представляет адрес клиента. Мы объявили переменную « var » с некоторым сообщением для отправки клиенту. Но перед этим мы должны закодировать байтовые символы. Следовательно, мы использовали для этого метод encode (). Мы использовали метод send (), чтобы отправить сообщение клиенту и закрыть соединение. Сохраните файл и нажмите крестик, чтобы выйти из него.

*Server.py

#!/usr/bin/python3

import sockets = socket. socket()

print("Сокет успешно создан")

port = 12345

s.bind(('', port))

print("гнездо, привязанное к %s" %(port))

s. listen(5)

print("сокет слушает")

while True:

c.addr = s.accept()

print('Получил связь от", addr )

var = "Спасибо за подключение"

new = var.encode("ascii")

c.send(new)

c.close()




Проверьте, правильно ли работает и активен наш сервер. Для этого вы запустите файл «Server.py» в терминале командной оболочки следующим образом:

$ python3 Server.py

 

Он успешно создал сокет и правильно его слушает. Теперь, чтобы проверить, работает он или нет, нам нужно подключить его к другому хосту. Следовательно, мы собираемся использовать для этого «telnet».

Откройте другое окно терминала и напишите в нем запрос ниже. Вы увидите, что он подключится к телнету, одновременно показывая вам сообщение «Спасибо за подключение». Это означает, что наш сервер исправен.

$ telnet localhost 12345

 

Вернитесь к серверному терминалу. Вы можете видеть, что это показывает, что ваш сервер получил соединение с какого-то IP-адреса.

Создадим еще один файл для программирования сокетов на стороне клиента, например Client.py, следующим образом:

$ touch Client.py

 

Быстро откройте файл из домашнего каталога и напишите в нем приведенный ниже код без каких-либо различий. Мы импортировали библиотеку сокетов и создали сокет с помощью метода «socket». Порт был упомянут в переменной «порт», и соединение было установлено через объект «s» и метод «connect с указанным портом». Метод recv использовался для получения данных с сервера и их печати с последующим закрытием соединения.

*Client.py

#!/usr/bin/python3

import sockets = socket.socket()

port = 12345

s.connect(('127.0.0.1', port))

print(s.recv(1024))

s.close()




Давайте сначала создадим серверный сокет, и он откроет режим прослушивания сервера следующим образом:

$ python Sevrer.py

 

Теперь запустите файл Client.py, используя запрос ниже. Вы можете видеть, что он выведет сообщение с хоста сервера «Спасибо за подключение».

$ python3 Client.py

 

Вернемся к серверной части. Вы можете видеть, что это показывает, что сервер имеет соединение от клиента.

 

Заключение:

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



2021-06-15T12:06:17
Python

Как настроить быстрый доступ в Windows 10

Все хотят быстро освоить операционную систему. В Windows 10 Microsoft предоставила панель быстрой навигации, а также специальную панель инструментов. Вы можете найти эти элементы быстрого действия в проводнике.

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

Панель быстрого доступа и панель инструментов в Windows 10

Большинство пользователей Windows 10 наверняка знакомы с панелью быстрого доступа. Проводник по умолчанию открывает этот раздел. Кроме того, он также отображается на панели навигации в левой части проводника. Панель навигации быстрого доступа можно увидеть здесь.

Панель навигации проводника Windows позволяет пользователям закреплять папки и другие параметры для быстрого доступа в любом месте проводника. Кроме того, в этом разделе отображаются часто посещаемые папки, а также недавно использованные файлы и папки.

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

Здесь мы обсудим, как настроить панель быстрого доступа, а затем мы также обсудим, как настроить панель инструментов.

Как настроить панель навигации быстрого доступа в Windows 10

Первое, что нужно понять, это то, что панель быстрого доступа не может использоваться для закрепления команд. Это можно сделать только на панели инструментов. Однако панель можно использовать для быстрого доступа к папкам одним щелчком мыши. Давайте продолжим смотреть, как решать различные задачи при настройке панели быстрого доступа.

Закрепить папку на панели быстрого доступа

Чтобы закрепить папку на панели быстрого доступа, просто щелкните правой кнопкой мыши папку, которую вы хотите закрепить, и выберите «Закрепить в быстром доступе» в контекстном меню.

Кроме того, вы также можете перетащить папку прямо в панель навигации слева и предоставить доступ к папке вручную. Прикрепленные папки — это те, перед которыми отображается значок булавки.

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

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

Отображать только закрепленные папки на панели быстрого доступа

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

Нажмите «Просмотр» на ленте меню, а затем нажмите «Параметры».

В окне «Параметры папки» на вкладке «Общие» снимите флажки рядом с «Показывать недавно использованные файлы в быстром доступе» и «Показывать часто используемые папки в быстром доступе». По завершении нажмите «Применить» и «ОК».

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

Как настроить панель быстрого доступа в Windows 10

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

Добавить команду на панель быстрого доступа

Чтобы добавить параметр или команду на панель быстрого доступа в верхней части проводника, просто щелкните правой кнопкой мыши команду, которую вы хотите добавить, а затем выберите « Добавить на панель быстрого доступа» в контекстном меню. вот пример:

Меню «Сортировать по» теперь можно увидеть как раскрывающееся меню на панели быстрого доступа, к которому можно получить доступ из любого места в проводнике.

Это может работать с любыми командами ленты. Он также включает команды, которые находятся в раскрывающемся меню.

Удалить команду с панели быстрого доступа

Вы также можете удалить команду с панели инструментов. Для этого щелкните правой кнопкой мыши ярлык, который вы хотите удалить с панели инструментов быстрого доступа, и выберите « Удаленный с панели быстрого доступа» в контекстном меню.

Переместить панель быстрого доступа

Вы также можете переместить панель быстрого доступа в более удобное место, которое вам больше подходит. Однако есть только 2 варианта его размещения:

  1. Над лентой заголовка
  2. Под лентой заголовка

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

Панель быстрого доступа к резервному копированию

У каждого человека есть свои предпочтительные конфигурации. Эти настройки могут быть потеряны в мгновение ока, когда что-то пойдет не так. Поэтому люди, как правило, имеют резервные копии и точки восстановления, которые они могут использовать, если что-то пойдет не так. Точно так же вы также можете сделать резервную копию настроек панели быстрого доступа на всякий случай.

Для резервного копирования кнопок панели инструментов требуется доступ к системным реестрам. Мы рекомендуем вам создать точку восстановления системы, прежде чем продолжить, чтобы вы могли вернуться к точке восстановления в случае, если что-то пойдет не так.

Запустите редактор реестра, введя regedit в Run, затем вставьте следующее в адресную строку вверху для быстрой навигации:

ComputerHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerRibbon

Теперь щелкните правой кнопкой мыши клавишу « Лента» и выберите « Экспорт» в контекстном меню.

Во всплывающем окне введите имя и место для сохранения файла .REG, а затем сохраните его.

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

Сбросить панель быстрого доступа

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

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

Откройте редактор реестра, введя regedit в поле «Выполнить», а затем вставьте следующую строку в адресную строку вверху для быстрой навигации.

ComputerHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerRibbon

Оттуда щелкните правой кнопкой мыши DWORD «Qatitems» на правой панели и выберите «Удалить» в контекстном меню, чтобы удалить запись.

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

Кроме того, вы также можете вставить следующее в текстовый файл, чтобы создать файл .REG и запустить его. Эта команда автоматически удалит системный реестр Qatitems .

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerRibbon]

"QatItems"=-

При вставке в текстовый файл сохраните файл под любым именем и добавьте к нему суффикс «.reg», чтобы создать файл реестра.

Теперь просто запустите файл .REG и перезагрузите компьютер, чтобы сбросить панель инструментов.

Заключительные слова

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

Мы также хотели бы добавить, что удаление панели быстрого доступа с панели навигации в левой части проводника — это то, чего хотят некоторые пользователи Windows 10. Однако мы обнаружили, что это часто приводит к повреждению процесса explorer.exe. Поэтому мы не рекомендуем вам пробовать и выполнять это в данный момент.

https://www.youtube.com/watch?v=IfqSccFVT8w



2021-06-15T09:56:10
Вопросы читателей

Как удалить папку с подпапками с помощью командной строки в Windows 10

Вы можете удалить папку с вложенными папками и файлами с помощью команд, но вам нужно знать правильный инструмент, который будет выполнять эту работу. В Windows 10 , когда вам нужно удалить файл или папку с помощью командного терминала, первое, что приходит на ум, — это команда del, но вы быстро обнаружите, что удалить папки и подпапки не получится, потому что инструмент не работает. предназначен только для работы с файлами.

Если вы хотите удалить папки с содержимым, инструмент командной строки будет зависеть от используемого вами терминала. Если вы используете командную строку, rmdir (удалить каталог) — это инструмент, который вы хотите использовать. С другой стороны, если вы используете PowerShell, вы хотите использовать именно этот командлет Remove-Item.

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

Удалите папки с подпапками с помощью командной строки

Чтобы удалить папку с подпапками с помощью командной строки, выполните следующие действия:

Откройте Пуск в Windows 10.

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

Введите следующую команду, чтобы удалить пустую папку, и нажмите Enter :

rmdir ПУТЬКИМЯ-ПАПКИ

В команде замените PATHTOFOLDER-NAME на путь к папке и имя папки, которую вы хотите удалить.

В этом примере удаляется папка «files»:

rmdir C:files

Введите следующую команду, чтобы удалить папку и подпапки с содержимым, и нажмите Enter:

rmdir /s PATHTOFOLDER-NAME

В этом примере удаляются папка, подпапки и файлы «files»:

rmdir /s C:files

Введите следующую команду, чтобы удалить папку с содержимым рекурсивно без запроса подтверждения, и нажмите Enter.

rmdir /s /q PATHTOFOLDER-NAME

В этом примере удаляются папка, подпапки и файлы «files» без запроса подтверждения:

rmdir /s /q C:files

После того, как вы выполните эти шаги, папка и ее содержимое будут удалены из Windows 10.

Параметр /s удаляет папку и ее содержимое в приведенной выше команде, но запрашивает у пользователя подтверждение. Параметр /q игнорирует приглашение и рекурсивно удаляет папку.

Удалите папки с подпапками с помощью PowerShell

Чтобы рекурсивно удалить всю папку с помощью команды PowerShell, выполните следующие действия:

Откройте Пуск.

Найдите PowerShell, щелкните правой кнопкой мыши верхний результат и выберите параметр «Запуск от имени администратора».

Введите следующую команду, чтобы удалить пустую папку, и нажмите Enter :

Remove-Item PATHTOFOLDER-NAME

В команде замените PATHTOFOLDER-NAME на путь к папке и имя папки, которую вы хотите удалить.

В этом примере удаляется папка «files»:

Remove-Item -Recurse -Force PATHTOFOLDER-NAME

Введите следующую команду, чтобы удалить пустую папку, и нажмите Enter :

Remove-Item -Recurse -Force C:files

В этом примере удаляется папка «files»:

Remove-Item -Recurse -Force C:files

После того, как вы выполните эти шаги, папка, подпапки и файлы будут удалены с компьютера с запросом или без него, в зависимости от используемой вами команды.

Эта опция -Recurse сообщает команде, что вы хотите удалить папку и ее содержимое без подтверждения. Опция -Force не требуется, но он позволяет удалить из специальных предметов, в том числе только для чтения или скрытых файлов.



2021-06-15T09:40:47
Вопросы читателей