Первой установкой Fedora была Fedora 19, кодовое имя «Schrödinger’s Cat», названное в честь квантово-механического мысленного эксперимента с котом Шредингера. В то время версии Fedora выпускались с числовой версией и кодовым именем до того, как было отменено соглашение об именах: «Какой облом!».
Тем не менее, с тех пор мы ни разу не оглядывались назад, а перенесся в 2021 год, и Fedora 34 уже на подходе. Мы в восторге от последней версии Fedora 34, ее последних функций, обновленных наборов инструментов и GNOME 40.
В новой Fedora 34 появятся новые номера, вызывающие волнение; Gnome 40, Ruby 3.0, OpenSSL3.0 и многие новые числа и функции, освещенные в этой статье.
Дата выпуска Fedora 34
Бета-версия Fedora 34 доступна для загрузки, что означает, что следующим шагом Fedora Project станет выпуск Fedora Linux 34. Выпуск Fedora Linux 34 запланирован на конец апреля. Неофициальная дата выпуска — 20 апреля 2021 года. Эта дата не может наступить раньше для энтузиастов Fedora или для тех, кто хотел бы протестировать или перейти на Fedora.
Представляем новые функции Fedora 34
Окружение рабочего стола — GNOME 40
Fedora Linux 34 Workstation включает GNOME 40, новейшую версию среды рабочего стола GNOME. Fedora 34 — первый официальный дистрибутив Linux, предлагающий GNOME 40 по умолчанию с новой установкой.
Так что нового в GNOME 40 на Fedora 34? Макеты изменились с вертикальной на горизонтальную, но большинство функций верхней панели остались без изменений. Он имеет черточку внизу, а рабочие области расположены в виде горизонтальной полосы. Вы можете легко переключаться между рабочими областями и запускать приложения. Fedora 34 предлагает лучший пользовательский интерфейс, перетаскивая его, когда эскизы рабочей области появляются над измельчением приложения.
Интересный факт:
С этого момента GNOME меняет свое соглашение об именах и схемах для новых выпусков. Четные числа, используемые в серии GNOME 3.x, например 3.34, 3.36, 3.38, будут заменены схемой основных чисел. GNOME 40, GNOME 41, GNOME 42 и т. д. Станут новыми схемами. Намного проще!
Ключевые изменения в GNOME 40
Метки с многострочными значками
При наведении указателя мыши на сетку оболочки GNOME вы увидите многострочные метки значков с полным текстом имени приложения.
Горизонтальная прокрутка для сетки приложения
Сетка приложений в версиях GNOME до 40 прокручивается по вертикали, но в Fedora Linux 34 есть сетка приложений, которая прокручивается по горизонтали с индикаторами страниц внизу. Вы можете легко искать и запускать установленные приложения в вашей системе. Новая функция хорошо сочетается с сенсорными устройствами и может показаться странной с прокруткой колесика мыши.
Улучшения приложения для файлов
Приложение для работы с файлами может оказаться самым большим бенефициаром в новом выпуске GNOME 40. К новым функциям можно отнести:
Простой, чистый и лучший диалог предпочтений.
Теперь вы можете отсортировать файлы по дате их создания.
Текущие файловые операции позволяют лучше и точнее оценивать время.
Вы можете запускать исполняемые текстовые файлы прямо из приложения «Файлы».
Календарь GNOME
В приложении-календаре есть 15-минутное напоминание.
Окружение рабочего стола — KDE Plasma 5.21
Если вы предпочитаете KDE в качестве среды рабочего стола, Fedora Linux 34 включает в себя KDE Plasma 5.21, который использует готовый сервер отображения Wayland. Он использует Systemd при запуске, что сокращает время запуска. Сервер отображения имеет ускоренную трехмерную графику, поддержку безголового дисплея и графические процессоры NVIDIA. Архитектура aarch64 поставляется с Fedora KDE Plasma Desktop Spin и доступна для установки.
LXQt 0,16
Проект Fedora обновил базу LXQt до последней версии в Fedora 34.
Xfce 4.16
Xfce — это легкая среда рабочего стола, доступная для дистрибутивов Linux. Последняя среда рабочего стола Xfce, Xfce 4.16, использует GTK3, имеет новые значки и множество новых функций, доступных в Fedora Linux 34.
PipeWire для PulseAudio
В Fedora Linux 34 в качестве звукового демона по умолчанию используется PipeWire для управления и микширования аудиопотоков. Вы получите большую гибкость и лучшее качество звука с PipeWire. PipeWire был интегрирован в Fedora Linux 34 для создания единой звуковой инфраструктуры для работы с контейнерами, профессионального микширования и использования на рабочем столе. В целом, PipeWire более безопасен и предлагает лучшее качество звука в Fedora 34, чем со звуковым демоном PulseAudio, который использовался по умолчанию в предыдущих выпусках Fedora. Я надеюсь, что мы увидим конец многих проблем, с которыми пользователи Fedora столкнулись с PulseAudio.
Представляем прозрачное сжатие BTRFS
BTRFS была файловой системой по умолчанию для рабочих станций Fedora со времен Fedora Linux 33, но команда проекта Fedora сделала лучше в Fedora 34. Fedora 34 добавила прозрачное сжатие в BTRFS, сэкономив больше дискового пространства и увеличив срок службы твердотельных накопителей. Команда проекта Fedora закладывает основу для будущего улучшения сжатия, но с Fedora 34 мы уже можем наблюдать улучшение производительности чтения и записи. Будущее выглядит безоблачным, и функции могут стать лучше с новыми выпусками Fedora.
i3 тайловый оконный менеджер
Тайловый оконный менеджер i3 для x11 обеспечивает скорость и переносимость в Fedora 34. Тайловые оконные менеджеры могут устрашать неопытных пользователей, поскольку они полностью отличаются от KDE и GNOME, которые управляются с помощью меню. Официальный оконный менеджер i3, доступный в Fedora 34, быстр и полностью настроен. Диспетчер окон i3 отличается небольшим объемом памяти и памяти, что может быть привлекательно для существующих и новых пользователей Fedora.
Systemd-oomd
Systemd-oomd обеспечивает лучший пользовательский опыт в ситуациях нехватки памяти. Systemd-oomd по умолчанию доступен в некоторых спинах Fedora. В Fedora 34 в качестве демона по умолчанию для всех спинов и вариантов используется System-oomd. System-oomd позволит Fedora 34 быстро выйти из ситуаций, связанных с нехваткой ресурсов. System-oomd использует информацию о сбоях в работе Linux для принятия решений, которые помогут восстановить систему после проблем с зависанием раньше, чем позже.
Новые возможности для разработчиков программного обеспечения
Fedora считается лучшей операционной системой для разработки программного обеспечения, которая у нас есть, если вы спросите любого разработчика программного обеспечения. Fedora Linux 34 включает в себя почти все инструменты разработки, которые вам когда-либо понадобятся в репозиториях, а весь набор инструментов и пакеты Fedora Linux 34 были обновлены.
Ящик для инструментов
Fedora 34 имеет набор инструментов, который дает разработчикам лучший опыт разработки и отладки контейнерных приложений. Разработчики могут безопасно устанавливать инструменты разработки, запускать различные конфигурации, опробовать свои приложения, сохраняя при этом стабильность своей операционной системы Fedora. Вы можете легко настроить контейнеры RHEL в наборе инструментов и разрабатывать приложения в RHEL.
Пакеты и инструментальные средства
Ruby 3.0. Ruby 3.0 включает новые функции, такие как RBS, Ractor и планировщик, что упрощает и ускоряет разработку приложений в Fedora 34.
Binutils 2.35. Fedora 34 включает более новую версию Binutils 2.35, которая была перебазирована с Binutils 2.34, и поставляется с поддержкой DWARF-5 и множеством исправлений ошибок для улучшения взаимодействия с пользователем.
Golang 1.16. Новый пакет Golang обеспечивает надежную среду разработки для проектов, написанных на Fedora 34.
IBus 1.5.24
LLVM 12
BIND 9.16
MariaDB 10.5
Ruby on Rails 6.1
OpenSSL3.0
GCC 11
glibc 2.33
Лучшее будущее!
Fedora 34 обеспечивает более удобное взаимодействие с пользователем, особенно с GNOME 40. Fedora Linux 34 — это устаревший дистрибутив общего назначения, а новые наборы инструментов и обновления идеально подходят для разработки. Fedora 34 приносит свободу, друзей, функции и является первым крупным дистрибутивом Linux, предлагающим GNOME 40 «из коробки».
Готовые кластеры в облаке, например AWS, Google Cloud, Yandex Cloud и так далее.
Использовать одну из готовых реализаций — быстрый и надежный способ развертывания системы оркестрации контейнеров Docker. Однако, мы рассмотрим ручное создание кластера Kubernetes из 3-х нод — один мастер (управление) и две рабочие ноды (запуск контейнеров).
Подготовка системы
Данные действия выполняем на всех узлах будущего кластера. Это необходимо, чтобы удовлетворить программные системные требования для нашего кластера.
Настройка системы
1. Задаем имена узлам. Для этого выполняем команды на соответствующих серверах:
hostnamectl set-hostname k8s-master1.dmosk.local
hostnamectl set-hostname k8s-worker1.dmosk.local
hostnamectl set-hostname k8s-worker2.dmosk.local
* в данном примере мы зададим имя k8s-master1 для мастера и, соответственно, k8s-worker1 и k8s-worker2 — для первого и второго рабочих нод. Каждая команда выполняется на своем сервере.
Необходимо, чтобы наши серверы были доступны по заданным именам. Для этого необходимо на сервере DNS добавить соответствующие А-записи. Или на каждом сервере открываем hosts:
* net.bridge.bridge-nf-call-iptables контролирует возможность обработки трафика через bridge в netfilter. В нашем примере мы разрешаем данную обработку для IPv4 и IPv6.
Применяем параметры командой:
sysctl --system
Брандмауэр
Для мастер-ноды и рабочей создаем разные наборы правил.
По умолчанию, в Ubuntu брандмауэр настроен на разрешение любого трафика. Если мы настраиваем наш кластер в тестовой среде, настройка брандмауэра не обязательна.
* для нас является важной настройкой cgroupdriver — она должна быть выставлена в значение systemd. В противном случае, при создании кластера Kubernetes выдаст предупреждение. Хоть на возможность работы последнего это не влияет, но мы постараемся выполнить развертывание без ошибок и предупреждений со стороны системы.
И перезапускаем docker:
systemctl restart docker
Установка Kubernetes
Установку необходимых компонентов выполним из репозитория. Добавим его ключ для цифровой подписи:
deb https://apt.kubernetes.io/ kubernetes-xenial main
Обновим список пакетов:
apt-get update
Устанавливаем пакеты:
apt-get install kubelet kubeadm kubectl
* где:
kubelet — сервис, который запускается и работает на каждом узле кластера. Следит за работоспособностью подов.
kubeadm — утилита для управления кластером Kubernetes.
kubectl — утилита для отправки команд кластеру Kubernetes.
Нормальная работа кластера сильно зависит от версии установленных пакетов. Поэтому бесконтрольное их обновление может привести к потере работоспособности всей системы. Чтобы этого не произошло, запрещаем обновление установленных компонентов:
По-отдельности, рассмотрим процесс настройки мастер ноды (control-plane) и присоединения к ней двух рабочих нод (worker).
Настройка control-plane (мастер ноды)
Выполняем команду на мастер ноде:
kubeadm init --pod-network-cidr=10.244.0.0/16
* данная команда выполнит начальную настройку и подготовку основного узла кластера. Ключ —pod-network-cidr задает адрес внутренней подсети для нашего кластера.
Выполнение займет несколько минут, после чего мы увидим что-то на подобие:
...
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.15:6443 --token f7sihu.wmgzwxkvbr8500al
--discovery-token-ca-cert-hash sha256:6746f66b2197ef496192c9e240b31275747734cf74057e04409c33b1ad280321
* данную команду нужно вводить на worker нодах, чтобы присоединить их к нашему кластеру. Можно ее скопировать, но позже мы будем генерировать данную команду по новой.
В окружении пользователя создаем переменную KUBECONFIG, с помощью которой будет указан путь до файла конфигурации kubernetes:
export KUBECONFIG=/etc/kubernetes/admin.conf
Чтобы каждый раз при входе в систему не приходилось повторять данную команду, открываем файл:
vi /etc/environment
И добавляем в него строку:
export KUBECONFIG=/etc/kubernetes/admin.conf
Посмотреть список узлов кластера можно командой:
kubectl get nodes
На данном этапе мы должны увидеть только мастер ноду:
NAME STATUS ROLES AGE VERSION
k8s-master.dmosk.local NotReady <none> 10m v1.20.2
Чтобы завершить настройку, необходимо установить CNI (Container Networking Interface) — в моем примере это flannel:
Копируем его и используем на двух наших узлах. После завершения работы команды, мы должны увидеть:
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
На мастер ноде вводим:
kubectl get nodes
Мы должны увидеть:
NAME STATUS ROLES AGE VERSION
k8s-master1.dmosk.local Ready control-plane,master 18m v1.20.2
k8s-worker1.dmosk.local Ready <none> 79s v1.20.2
k8s-worker2.dmosk.local Ready <none> 77s v1.20.2
Наш кластер готов к работе. Теперь можно создавать поды, развертывания и службы. Рассмотрим эти процессы подробнее.
Pods
Поды — неделимая сущность объекта в Kubernetes. Каждый Pod может включать в себя несколько контейнеров (минимум, 1). Рассмотрим несколько примеров, как работать с подами. Все команды выполняем на мастере.
Создание
Поды создаются командой kubectl, например:
kubectl run nginx --image=nginx:latest --port=80
* в данном примере мы создаем под с названием nginx, который в качестве образа Docker будет использовать nginx (последнюю версию); также наш под будет слушать запросы на порту 80.
Чтобы получить сетевой доступ к созданному поду, создаем port-forward следующей командой:
* в данном примере запросы к кластеру kubernetes на порт 8888 будут вести на порт 80 (который мы использовали для нашего пода).
Команда kubectl port-forward является интерактивной. Ее мы используем только для тестирования. Чтобы пробросить нужные порты в Kubernetes используются Services — об этом будет сказано ниже.
Можно открыть браузер и ввести адрес http://<IP-адрес мастера>:8888 — должна открыться страница приветствия для NGINX.
Просмотр
Получить список всех подов в кластере можно командой:
kubectl get pods
Например, в нашем примере мы должны увидеть что-то на подобие:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 3m26s
Посмотреть подробную информацию о конкретном поде можно командой:
kubectl describe pods nginx
Запуск команд внутри контейнера
Мы можем запустить одну команду в контейнере, например, такой командой:
kubectl exec nginx -- date
* в данном примере будет запущена команда date внутри контейнера nginx.
Также мы можем подключиться к командной строке контейнера командой:
kubectl exec --tty --stdin nginx -- /bin/bash
Удаление
Для удаления пода вводим:
kubectl delete pods nginx
Использование манифестов
В продуктивной среде управление подами выполняется с помощью специальных файлов с описанием того, как должен создаваться и настраиваться под — манифестов. Рассмотрим пример создания и применения такого манифеста.
* в данном примере будет создан под с названием web-srv; в данном поде будет развернуто 3 контейнера — nginx, php-fpm и mariadb на основе одноименных образов.
Для объектов Kubernetes очень важное значение имеют метки или labels. Необходимо всегда их описывать. Далее, данные метки могут использоваться для настройки сервисов и развертываний.
Чтобы применить манифест выполняем команду:
kubectl apply -f manifest_pod.yaml
Мы должны увидеть ответ:
pod/web-srv created
Смотрим поды командой:
kubectl get pods
Мы должны увидеть:
NAME READY STATUS RESTARTS AGE
web-srv 3/3 Ready 0 3m11s
* для Ready мы можем увидеть 0/3 или 1/3 — это значит, что контейнеры внутри пода еще создаются и нужно подождать.
Deployments
Развертывания позволяют управлять экземплярами подов. С их помощью контролируется их восстановление, а также балансировка нагрузки. Рассмотрим пример использования Deployments в Kubernetes.
Создание
Deployment создаем командой со следующим синтаксисом:
kubectl create deploy <название для развертывания> --image <образ, который должен использоваться>
В данном примере Kubernetes будет создавать от 5 до 10 экземпляров контейнеров — добавление нового экземпляра будет происходить при превышении нагрузки на процессор до 75% и более.
Посмотреть созданные параметры балансировки можно командой:
kubectl get hpa
Редактирование
Для нашего развертывания мы можем изменить используемый образ, например:
kubectl set image deploy/web-set nginx=httpd:latest --record
* данной командой для deployment web-set мы заменим образ nginx на httpd; ключ record позволит нам записать действие в историю изменений.
Если мы использовали ключ record, то историю изменений можно посмотреть командой:
kubectl rollout history deploy/web-set
Перезапустить deployment можно командой:
kubectl rollout restart deploy web-set
Манифест
Как в случае с подами, для создания развертываний мы можем использовать манифесты. Попробуем рассмотреть конкретный пример.
* в данном манифесте мы создадим deployment и autoscaling. Итого, мы получим 5 экземпляров подов для развертывания web-deploy, которые могут быть расширены до 10 экземпляров. Добавление нового будет происходить при превышении нагрузки на процессор более чем на 75% или потреблением оперативной памяти более чем на 80%.
Чтобы создать объекты с помощью нашего манифеста вводим:
kubectl apply -f manifest_deploy.yaml
Мы должны увидеть:
deployment.apps/web-deploy created
horizontalpodautoscaler.autoscaling/web-deploy-autoscaling created
Объекты web-deploy и web-deploy-autoscaling созданы.
Удаление
Для удаления конкретного развертывания используем команду:
kubectl delete deploy web-set
Для удаления всех развертываний вместо названия deployment указываем ключ —all:
kubectl delete deploy --all
Удалить критерии autoscaling для конкретного развертывания можно командой:
kubectl delete hpa web-set
Удалить все критерии autoscaling можно командой:
kubectl delete hpa --all
Удалить объекты, созданные с помощью манифеста можно командой:
kubectl delete -f manifest_deploy.yaml
Services
Службы позволяют обеспечить сетевую доступность для развертываний. Существует несколько типов сервисов:
ClusterIP — сопоставление адреса с deployments для подключений внутри кластера Kubernetes.
NodePort — для внешней публикации развертывания.
LoadBalancer — сопоставление через внешний балансировщик.
ExternalName — сопоставляет службу по имени (возвращает значение записи CNAME).
Мы рассмотрим первые два варианта.
Привязка к Deployments
Попробуем создать сопоставления для ранее созданного развертывания:
* где web-deploy — deployment, который мы развернули с помощью манифеста. Публикация ресурса происходит на внутреннем порту 80. Обращаться к контейнерам можно внутри кластера Kubernetes.
Для создания сопоставления, с помощью которого можно будет подключиться к контейнерам из внешней сети выполняется командой:
* данная команда отличается от команды выше только типом NodePort — для данному deployment будет сопоставлен порт для внешнего подключения, который будет вести на внутренний (в нашем примере, 80).
Просмотр
Чтобы посмотреть созданные нами службы, вводим:
kubectl get services
Мы можем увидеть что-то на подобие:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web-deploy NodePort 10.111.229.132 <none> 80:30929/TCP 21s
* в данном примере указано, что у нас есть служба типа NodePort, а к сервису можно подключиться по порту 30929.
Можно попробовать открыть браузер и ввести http://<IP-адрес мастера>:30929 — мы должны увидеть нужную нам страницу (в наших примерах, либо NGINX, либо Apache).
Посмотреть список сервисов с указанием селектором можно командой:
kubectl get services -o wide
Удаление
Удаляем созданную службу командой:
kubectl delete services web-deploy
* в данном примере будет удалена служба для развертывания web-deploy.
Удалить все службы можно командой:
kubectl delete services --all
Манифест
Как в случае с подами и развертываниями, мы можем использовать манифест-файлы. Рассмотрим небольшой пример.
* в данном примере мы создадим службу, которая будем связываться с развертыванием по лейболу project: myweb.
Ingress Controller
В данной инструкции не будет рассказано о работе с Ingress Controller. Оставляем данный пункт для самостоятельного изучения.
Данное приложение позволяет создать балансировщик, распределяющий сетевые запросы между нашими сервисами. Порядок обработки сетевого трафика определяем с помощью Ingress Rules.
Существует не маленькое количество реализаций Ingress Controller — их сравнение можно найти в документе по ссылке в Google Docs.
Для установки Ingress Controller Contour (среди множества контроллеров, он легко устанавливается и на момент обновления данной инструкции полностью поддерживает последнюю версию кластера Kubernetes) вводим:
Веб-интерфейс позволяет получить информацию о работе кластера в удобном для просмотра виде.
В большинстве инструкций рассказано, как получить доступ к веб-интерфейсу с того же компьютера, на котором находится кластер (по адресу 127.0.0.1 или localhost). Но мы рассмотрим настройку для удаленного подключения, так как это более актуально для серверной инфраструктуры.
Переходим на страницу веб-интерфейса в GitHub и копируем ссылку на последнюю версию файла yaml:
* на момент обновления инструкции, последняя версия интерфейса была 2.1.0.
* где https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml — ссылка, которую мы скопировали на портале GitHub.
Открываем на редактирование скачанный файл:
vi recommended.yaml
Комментируем строки для kind: Namespace и kind: Secret (в файле несколько блоков с kind: Secret — нам нужен тот, что с name: kubernetes-dashboard-certs):
* нам необходимо закомментировать эти блоки, так как данные настройки в Kubernetes мы должны будем сделать вручную.
Теперь в том же файле находим kind: Service (который с name: kubernetes-dashboard) и добавляем строки type: NodePort и nodePort: 30001 (выделены красным):
* таким образом, мы публикуем наш сервис на внешнем адресе и порту 30001.
Для подключения к веб-интерфейсу не через локальный адрес, начиная с версии 1.17, обязательно необходимо использовать зашифрованное подключение (https). Для этого нужен сертификат. В данной инструкции мы сгенерируем самоподписанный сертификат — данный подход удобен для тестовой среды, но в продуктивной среде необходимо купить сертификат или получить его бесплатно в Let’s Encrypt.
И так, создаем каталог, куда разместим наши сертификаты:
* можно не менять параметры команды, а так их и оставить. Браузер все-равно будет выдавать предупреждение о неправильном сертификате, так как он самоподписанный.
Создаем namespace:
kubectl create namespace kubernetes-dashboard
* это та первая настройка, которую мы комментировали в скачанном файле recommended.yaml.
Теперь создаем настройку для secret с использованием наших сертификатов:
* собственно, мы не использовали настройку в скачанном файле, так как создаем ее с включением в параметры пути до созданных нами сертификатов.
Теперь создаем остальные настройки с помощью скачанного файла:
kubectl create -f recommended.yaml
Мы увидим что-то на подобие:
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
Теперь открываем браузер и переходим по ссылке https://<IP-адрес мастера>:30001 — браузер покажет ошибку сертификата (если мы настраиваем по инструкции и сгенерировали самоподписанный сертификат). Игнорируем ошибку и продолжаем загрузку.
Kubernetes Dashboard потребует пройти проверку подлинности. Для этого можно использовать токен или конфигурационный файл:
На сервере вводим команду для создания сервисной учетной записи:
* где nextcloud.dmosk.ru — домен, на котором будет работать сервис; /etc/nginx/ssl — каталог, в котором будут храниться сертификаты; /var/www/nextcloud— каталог с порталом.
Создаем каталог для хранения сертификатов и переходим в него:
Открываем браузер и переходим по адресу https://nextcloud.dmosk.ru, где nextcloud.dmosk.ru — адрес облачного сервиса.
Задаем логин и пароль для администратора. В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим в качестве логина, пароля и базы nextcloud.
* где admin — учетная запись пользователя, чей пароль хотим сбросить.
Подключение папки nextcloud по webdav
Мы можем подключить пользовательские данные nextcloud в качестве сетевого диска или раздела. Рассмотрим процесс для Windows и Linux.
Windows
Для начала необходимо включить службу «Веб-клиент». Для этого открываем от администратора командную строку и вводим команды:
sc config webclient start= auto
net start webclient
* первая команда включит автозапуск службы; вторая — запустит ее.
После открываем командную строку от пользователя и создаем сетевой диск командой:
net use <Буква диска>: https://<путь до nextcloud>/remote.php/webdav /user:user password
Например, для нашей настройки:
net use N: https://nextcloud.dmosk.ru/remote.php/webdav /user:admin password
* где N — буква сетевого диска; nextcloud.dmosk.ru — адрес нашего сервера; admin — учетная запись, которая была создана при установке системы; password — пароль от пользователя admin.
Ограничение на копирование файла с webdav
В Windows при попытке скопировать большой файл с папки webdav, мы можем получить ошибку «Ошибка 0x800700DF: Размер файла превышает установленное ограничение, сохранение файла невозможно.»:
Для решения проблемы необходимо на клиенте разрешить больший объем для загрузки файлов. Это делается в реестре — ветка HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWebClientParameters, параметр FileSizeLimitInBytes. Для примера, если задать значение 4294967295 (максимально возможное), то мы получим ограничение в 4 Гб.
В данной инструкции выполнена настройка полноценного почтового сервера на 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:
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
Для применения установленных пакетов, перезапускаем обработчик скриптов:
В директории сайтов 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.
* несмотря на то, что мы используем веб-сервер 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, который переопределяет настройки.
* где 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.
Однако, конкретно, в моем случае, пользователь не создавался при установке системы и необходимо было создать администратора вручную. Если это потребуется, в консоли сервера подключаемся к СУБД:
Теперь переходим на страницу 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
Теперь открываем на редактирование конфигурационный файл почтового сервера:
mydestination — указываем, для каких доменов принимаем входящую почту.
inet_protocols — данный параметр задаст протокол для работы postfix. В данном примере на ipv4 — если в нашей системе не используется IPv6, могут возникнуть проблемы при маршрутизации почты. Также можно задать значения all или ipv6.
smtpd_tls_cert_file — полный путь до публичного сертификата.
smtpd_tls_key_file — полный путь до приватного сертификата.
Если имя сервера отличается от имени, по которому сервер будет зарегистрирован в DNS, задаем опцию:
myhostname = mx01.dmosk.ru
Теперь в конец конфигурационного файла допишем следующее:
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. Возможны варианты y, n и —. Прочерк означает неприменимость данного параметра к конкретному сервису.
второй «n» — должна ли служба работать в окружении chroot. Возможны варианты y или n.
второй «-« — через какое время в секундах пробудить службу, если она неактивна.
третий «-» — максимальное количество одновременно выполняемых процессов, которые может запустить данный сервис.
smtpd — выполняемая команда.
* после команды идут аргументы ее запуска. Они могут переопределять параметры, заданные в main.cf. Каждый аргумент записывается с новой строки и начинается с двух пробелов. В данном примере мы используем следующие аргументы:
smtpd_tls_security_level — задает уровень безопасности с применением TLS. В данном примере may говорит о возможности его использования.
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 — настройки ограничения клиентских соединений. В данном примере разрешить только авторизованных.
Генерируем сертификаты безопасности. Для этого создаем каталог, в котором их разместим:
* сертификат сгенерирован на 1461 день, ключи subj могут быть произвольными, CN необходимо указать в соответствии с именем сервера, по которому мы будем подключаться к почте. * если мы хотим использовать сертификат, который будет проходить все проверки безопасности, его нужно купить или запросить у Let’s Encrypt.
Разрешаем запуск postfix:
systemctl enable postfix
Перезапускаем его:
systemctl restart postfix
5. Настройка Dovecot
Устанавливаем Dovecot с компонентом для работы с СУБД:
* в данном примере сообщения будут храниться в продвинутом формате 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 не будет прав.
* ssl = required укажет dovecot требовать от клиентов использования шифрования; ssl_cert — путь до открытого сертификата (также нами указывался в postfix); ssl_key — путь к закрытому ключу.
Настроим автоматическое создание каталогов при первом подключении пользователя к ящику:
* в данном примере мы указали на файл, в котором будут находиться настройки для получения пользователей и паролей из базы данных. Данная настройка является настройкой по умолчанию и, в большинстве случаев, ее не нужно менять без необходимости указать свой путь.
Откроем на редактирование файл с настройками работы с 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):
Используем ссылку, чтобы загрузить архив программы:
* первую строку мы редактируем, а вторую добавляем. В первой строке roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных. Вторая строка разрешает установку портала.
Также дописываем в конфигурационный файл следующее:
* в данном примере мы задаем московское время и возможность загружать файл размером в 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
Устанавливаем необходимые для работы антивируса и антиспама компоненты:
* по умолчанию amavis не выполняем никаких проверок — для включения сканирования на вирусы снимаем комментарий с bypass_virus_checks_maps, а для сканирования на СПАМ — bypass_spam_checks_maps.
* итак, данной настройкой мы создадим два вспомогательных сервиса 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_restrictions, smtpd_client_restrictions, smtpd_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 будет запускаться процесс обновления антиспама.
Проверка
Для проверки антивируса отправляем сообщение со следующим содержимым:
Большинство почтовых систем экранинуют вирусную последовательность и письмо нормально пройдет мимо нашего антивируса. Чтобы сделать корректный тест, необходимо отправить письмо SMTP-командами.
Письмо не должно дойти, а в логе (/var/log/maillog) мы увидим строку:
Все письма со спамом и вирусами будут перемещаться в карантин. Если мы хотим перенаправлять все подобные сообщения на специальный ящик, то необходимо настроить amavis.
* где $spam_quarantine_to указываем на адрес для перенаправления СПАМ-писем; $virus_quarantine_to — почта для писем с обнаруженными вирусами.
После перезагрузим amavis:
systemctl restart amavis
Пробуем отправить сообщения с тестовыми сигнатурами на СПАМ и вирус — письма должны быть перенаправлены на указанные адреса.
Антиспам средствами Postfix
В MTA Postfix встроен свой механизм проверки заголовков входящих сообщений. Правила размещаются в 7 секций, обработка которых выполняется в следующем порядке:
Чтобы лучше понять принцип, мы должны знать SMTP-команды при выполнении отправки почты. И так, порядок, следующий:
Соединение с сервером.
Команда HELO. Приветствие, в котором отправитель называет свое имя, по которому можно проверить, соответствует ли оно правилам именования и своему IP-адресу.
MAIL FROM — указывает адрес отправителя. Выполняется для sender и relay.
RCPT TO — кому отправляем письмо.
DATA — команда сообщает о готовности отправить письмо с заголовками и текстом.
END-OF-DATA — отправка письма.
И так, для настройки антиспама открываем конфигурационный файл main.cf:
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 — разрешает соединение. Ставим в конец каждого блока ограничений (если ограничения не сработали, то разрешаем).
* это более или менее мягкие правила. Их можно использовать первое время, пока тестируем сервер.
После внесения всех правок, необходима перезагрузка Postfix:
systemctl restart postfix
Обучение антиспама
Мы установили amavis, который проверяет почту на СПАМ средствами spamassassin. Последний без обучения, практически, бесполезен. Синтаксис команды для обучения следующий:
sa-learn --spam <папка с нежелательными письмами>
sa-learn --ham <папка письмами, которые ошибочно определены как СПАМ>
Таким образом, первая команда укажет spamassassin какие письма являются нежелательными, а вторая — не несущими рекламный характер.
Хорошей практикой будет договориться с пользователями о ручном помещении нежелательной почты из входящих в папку СПАМ. Тогда мы сможем пройтись скриптом по всем ящикам на сервере и обучать антиспам. Например, такой командой:
* в данном примере мы сказали spamassassin найти в каталогах пользователей папки Спам, Spam, Junk, Junk E-mail (данные каталоги являются типичными для помещения СПАМа) и провести обучение.
Чтобы минимизировать количество ложных срабатываний, необходимо проводить обучение с ключом —ham. В нашем примере мы отправляем все нежелательные письма на ящик spam. В таком случае, необходимо вручную находить ложные срабатывания и переносить их в специальную папку, например Ham. Тогда команда для обучения будет такой:
Для отправки почты на другие почтовые серверы необходимо правильно сконфигурировать сервер, чтобы письма не попадали в СПАМ. Чтобы это сделать, выполняем инструкции ниже.
Настройки DNS для сервера
Многие почтовые серверы делают запросы в систему доменных имен для проверки легитимности почтового сервера, отправляющего почту. При настройке MTA очень важно правильно добавить необходимые записи в DNS.
1. rDNS. Обратная зона используется для проверки соответствия имени сервера в приветствии с именем, которое возвращает NS сервер при запросе по PTR-записи.
И так, для создания записи в обратной зоне, необходимо написать письмо Интернет провайдеру, к сети которого подключен сервер или хостеру, если почтовый сервер настроен на VPS. IP-адрес нашего сервера должен вести на имя, которым приветствуется наш postfix — можно посмотреть командой:
postconf -n smtpd_banner
Если мы получим пустой ответ, то вводим:
postconf -n myhostname
Если и в этот вариант не вернет ответ, вводим:
hostname
2. А-запись. Также необходимо, чтобы имя сервера, которым представляется почтовый сервер разрешалось в IP-адрес.
Для этого заходим в консоль управления зоной нашего домена и создаем запись типа А для сопоставления имени сервера с IP-адресом, на котором слушает запросы данный сервер.
Настройки DNS для домена
Для каждого домена, для которого будем отправлять почту создаем записи:
Подпись писем не является обязательной, но помогает не попадать в СПАМ. DKIM настраивается для каждого домена, а также должна создаваться специальная запись в DNS. Рассмотрим создание и настройку DKIM в amavisd.
* в данном примере мы закомментировали первую строку и раскомментировали вторую. Это укажет amavis, что он должен запускаться и работать на двух портах.
Теперь нам нужно на основе данного вывода создать в 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
...
После применения квот мы сможем наблюдать в почтовом клиенте Roundcube информацию об оставшемся дисковом пространстве:
… или в Webmail Lite:
12. Автоматическая настройка почтовых клиентов
Для автоматического конфигурирования почтовых клиентов необходимо настроить сервис autodiscover. Для этого настраиваем веб-сервер, который будет возвращать почтовые настройки для домена.
Предположим, мы сделали ошибку в написании адреса электронной почты, но не хотим удалять учетную запись и создавать ее по новой. Рассмотрим смену 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-адреса.
Рассмотрим процесс установки и настройки веб-инструмента жизненного цикла 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.
После установки репозитория, устанавливаем сам 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
Добавляем в него все файлы (то есть, наш единственный файл):
Переходим на веб-страницу нашего проекта — мы должны увидеть наш файл:
Настройка 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
И задаем опции для автоматического обновления сертификата:
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-приложения на терминале.