Compare commits

..

6 Commits
v2 ... main

@ -0,0 +1,34 @@
Задания
https://git.ai.ssau.ru/myoffice/linux_tasks/
|Фамилия |Логин |IP для tabularasaX /24|IP для studX /24|соответствующие белые адреса для studX на которые проброшены порты: 22, 25, 80, 110, 143, 443, 465, 587, 993, 995|доменные имена для studX|IP для examX /24|IP для gwX /24|IP для keepalived /24|IP для proxmox n1 /24|IP для proxmox n2 /24|IP для exam2_X /24|
|---------------|------|----------------------|----------------|-----------------------------------------------------------------------------------------------------------------|------------------------|----------------|--------------|---------------------|---------------------|---------------------|------------------|
| |stud1 |10.160.179.31 |10.160.179.11 |193.32.63.171 |stud1.myoffice.ru |10.160.179.121 |10.160.179.61 |10.160.179.141 |10.160.179.161 |10.160.179.162 |10.160.179.201 |
| |stud2 |10.160.179.32 |10.160.179.12 |193.32.63.172 |stud2.myoffice.ru |10.160.179.122 |10.160.179.62 |10.160.179.142 |10.160.179.163 |10.160.179.164 |10.160.179.202 |
| |stud3 |10.160.179.33 |10.160.179.13 |193.32.63.173 |stud3.myoffice.ru |10.160.179.123 |10.160.179.63 |10.160.179.143 |10.160.179.165 |10.160.179.166 |10.160.179.203 |
| |stud4 |10.160.179.34 |10.160.179.14 |193.32.63.174 |stud4.myoffice.ru |10.160.179.124 |10.160.179.64 |10.160.179.144 |10.160.179.167 |10.160.179.168 |10.160.179.204 |
| |stud5 |10.160.179.35 |10.160.179.15 |193.32.63.175 |stud5.myoffice.ru |10.160.179.125 |10.160.179.65 |10.160.179.145 |10.160.179.169 |10.160.179.170 |10.160.179.205 |
| |stud6 |10.160.179.36 |10.160.179.16 |193.32.63.176 |stud6.myoffice.ru |10.160.179.126 |10.160.179.66 |10.160.179.146 |10.160.179.171 |10.160.179.172 |10.160.179.206 |
| |stud7 |10.160.179.37 |10.160.179.17 |193.32.63.177 |stud7.myoffice.ru |10.160.179.127 |10.160.179.67 |10.160.179.147 |10.160.179.173 |10.160.179.174 |10.160.179.207 |
| |stud8 |10.160.179.38 |10.160.179.18 |193.32.63.178 |stud8.myoffice.ru |10.160.179.128 |10.160.179.68 |10.160.179.148 |10.160.179.175 |10.160.179.176 |10.160.179.208 |
| |stud9 |10.160.179.39 |10.160.179.19 |193.32.63.179 |stud9.myoffice.ru |10.160.179.129 |10.160.179.69 |10.160.179.149 |10.160.179.177 |10.160.179.178 |10.160.179.209 |
| |stud10|10.160.179.40 |10.160.179.20 |193.32.63.180 |stud10.myoffice.ru |10.160.179.130 |10.160.179.70 |10.160.179.150 |10.160.179.179 |10.160.179.180 |10.160.179.210 |
| |stud11|10.160.179.41 |10.160.179.21 |193.32.63.181 |stud11.myoffice.ru |10.160.179.131 |10.160.179.71 |10.160.179.151 |10.160.179.181 |10.160.179.182 |10.160.179.211 |
| |stud12|10.160.179.42 |10.160.179.22 |193.32.63.182 |stud12.myoffice.ru |10.160.179.132 |10.160.179.72 |10.160.179.152 |10.160.179.183 |10.160.179.184 |10.160.179.212 |
| |stud13|10.160.179.43 |10.160.179.23 |193.32.63.183 |stud13.myoffice.ru |10.160.179.133 |10.160.179.73 |10.160.179.153 |10.160.179.185 |10.160.179.186 |10.160.179.213 |
| |stud14|10.160.179.44 |10.160.179.24 |193.32.63.184 |stud14.myoffice.ru |10.160.179.134 |10.160.179.74 |10.160.179.154 |10.160.179.187 |10.160.179.188 |10.160.179.214 |
|Тестовая машина|stud15|10.160.179.45 |10.160.179.25 |193.32.63.185 |stud15.myoffice.ru |10.160.179.135 |10.160.179.75 |10.160.179.155 |10.160.179.189 |10.160.179.190 |10.160.179.215 |
Proxmox координаты для подключения к виртуальным машинам
URL: https://193.32.63.170:8006
Realm: Proxmox ...
Логин: studX
Пароль: ****************
Виртуальные машины stud1 - stud12 по ssh
Host: 193.32.63.170
Port: 22
Логин: stud
Пароль: ****************
Команда ssh 193.32.63.17X -p 22 -l stud

@ -166,4 +166,5 @@ Amoeba — амбициозная распределенная система,
- Петцольд, Чарльз. Код. Тайный язык информатики - Петцольд, Чарльз. Код. Тайный язык информатики
- https://elektronika.su/ - https://elektronika.su/
- https://yandex.ru/museum/ - https://yandex.ru/museum/
- https://computerhistory.org/ - https://computerhistory.org/
- https://siliconfolklore.com/scale/

File diff suppressed because it is too large Load Diff

@ -133,4 +133,7 @@ done
Напишите команду, которая рекурсивно находит все HTML-файлы в папке и упаковывает их в `tar.gz` архив. Используйте `find` и `xargs`. Ваша команда должна работать, даже если в файлах есть пробелы (подсказка: используйте `null` разделитель). Напишите команду, которая рекурсивно находит все HTML-файлы в папке и упаковывает их в `tar.gz` архив. Используйте `find` и `xargs`. Ваша команда должна работать, даже если в файлах есть пробелы (подсказка: используйте `null` разделитель).
## 20 ## 20
(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности? (*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности?
TODO install command

@ -551,4 +551,5 @@ DHCP состоит из двух компонентов: протокола д
Источники: Источники:
- Michael Lucas. Networking for System Administrator - Michael Lucas. Networking for System Administrator
- https://www.youtube.com/playlist?list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW - https://www.youtube.com/playlist?list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW
- https://www.brendangregg.com/linuxperf.html - https://www.brendangregg.com/linuxperf.html
- https://habr.com/ru/articles/307252/

@ -94,4 +94,6 @@ verify(данные, подпись: массив<байт>, открытый к
Релевантные ссылки: Релевантные ссылки:
- https://missing.csail.mit.edu/2020/security/ - https://missing.csail.mit.edu/2020/security/
- https://letsencrypt.org/how-it-works/ - https://letsencrypt.org/how-it-works/
TODO https://www.golinuxcloud.com/generate-ssh-key-linux/

@ -3,13 +3,13 @@
Для проверки расписания вы можете использовать сайт https://crontab.guru/, https://cronheatmap.com и аналоги. Для проверки расписания вы можете использовать сайт https://crontab.guru/, https://cronheatmap.com и аналоги.
### 0. ### 0.
Проверьте наличие команд cron и at в системе. Установите их в случае отсутствия. Проверьте наличие команд `cron` и `at` в системе. Установите их в случае отсутствия.
### 1. ### 1.
Выведите документацию crontab и cron. Выведите документацию `crontab` и `cron`.
### 2. ### 2.
Создайте cron расписание для выполнения скрипта или к: Создайте cron расписание для выполнения скрипта или команды:
1. дважды в день: в 5 утра и в 5 вечера, 1. дважды в день: в 5 утра и в 5 вечера,
2. в 3:15 каждый день, 2. в 3:15 каждый день,
3. в 8 вечера каждую неделю, 3. в 8 вечера каждую неделю,
@ -38,20 +38,25 @@
Создайте задание в котором отчёты cron будут отправляться вам на внешний почтовый ящик. Создайте задание в котором отчёты cron будут отправляться вам на внешний почтовый ящик.
### 4. ### 4.
Установите пользовательский сrontab. Установите пользовательский `сrontab`.
### 5. ### 5.
Настройте выполнение исполняемого файла script.sh из `/usr/sbin/` каждую среду, модифицировав `PATH` в cron задании. Настройте выполнение исполняемого файла `script.sh` из `/usr/sbin/` каждую среду, модифицировав `PATH` в cron задании.
### 6. ### 6.
Пользуясь полномочиями суперпользователя, запретите пользователю mike выполнять команду at. Пользуясь полномочиями суперпользователя, запретите пользователю `mike` выполнять команду `at`.
### 7. ### 7.
Запланируйте командой at: Запланируйте командой `at`:
1. выполнение скрипта сегодня в 9 часов, 1. выполнение скрипта сегодня в 9 часов,
2. перезагрузку через 2 часа, 2. перезагрузку через 2 часа,
3. выполнение команды через 100 лет. 3. выполнение команды через 100 лет.
### 8.
Создайте расписания из пункта 2 используя systemd timer.
### 9.
Запланируйте разовое выполнение команд из пункта 7 используя systemd timer.
# Справка # Справка
@ -67,6 +72,8 @@
- /etc/at.deny - /etc/at.deny
Релевантные команды: Релевантные команды:
- cron - `cron`
- at - `at`
- crontab - `crontab`
- `man systemd.timer`
- `man systemd.time`

@ -9,9 +9,13 @@
## Теория ## Теория
Формально мы можем рассматривать процесс устранения неполадок как применение гипотетико-дедуктивного метода: учитывая набор наблюдений за системой и теоретическую основу для понимания поведения системы, мы итеративно выдвигаем гипотезы о потенциальных причинах сбоя и пытаемся проверить эти гипотезы. Формально мы можем рассматривать процесс устранения неполадок как применение гипотетико-дедуктивного метода: учитывая набор наблюдений за системой и теоретическую основу для понимания поведения системы, мы итеративно выдвигаем гипотезы о потенциальных причинах сбоя и пытаемся проверить эти гипотезы.
В идеализированной модели, мы бы начали с отчета о проблеме, сообщающего нам, что с системой что-то не так. Затем мы можем просмотреть данные телеметрии и журналы системы, чтобы понять ее текущее состояние. Эта информация в сочетании с нашими знаниями о том, как устроена система, как она должна работать, и о режимах ее сбоев, позволяет нам выявить некоторые возможные причины. В идеализированной модели, мы бы начали с отчета о проблеме, сообщающего нам, что с системой что-то не так. Затем мы можем просмотреть данные телеметрии и журналы системы, чтобы понять ее текущее состояние. Эта информация в сочетании с нашими знаниями о том, как устроена система, как она должна работать, и о режимах ее сбоев, позволяет нам выявить некоторые возможные причины.
Затем мы можем проверить наши гипотезы одним из двух способов. Мы можем сравнить наблюдаемое состояние системы с нашими теориями, чтобы найти подтверждающие или опровергающие доказательства. Или, в некоторых случаях, мы можем активно «лечить» систему, то есть изменять систему контролируемым образом, и наблюдать за результатами. Этот второй подход уточняет наше понимание состояния системы и возможных причин сообщаемых проблем. Используя любую из этих стратегий, мы неоднократно тестируем до тех пор, пока не будет определена основная причина, после чего мы можем предпринять корректирующие действия, чтобы предотвратить повторение, и написать postmortem. Конечно, для устранения непосредственной причины (причин) не всегда нужно ждать первопричины или postmortem заключения. Затем мы можем проверить наши гипотезы одним из двух способов. Мы можем сравнить наблюдаемое состояние системы с нашими теориями, чтобы найти подтверждающие или опровергающие доказательства. Или, в некоторых случаях, мы можем активно «лечить» систему, то есть изменять систему контролируемым образом, и наблюдать за результатами. Этот второй подход уточняет наше понимание состояния системы и возможных причин сообщаемых проблем. Используя любую из этих стратегий, мы неоднократно тестируем до тех пор, пока не будет определена основная причина, после чего мы можем предпринять корректирующие действия, чтобы предотвратить повторение, и написать postmortem. Конечно, для устранения непосредственной причины (причин) не всегда нужно ждать первопричины или postmortem заключения.
Пример postmortem https://sre.google/sre-book/example-postmortem/.
## Практика ## Практика
Практический совет - в случае проблемы ищите руководства по устранению неполадок (имя технологии troubleshooting guide в google) для вашего программного обеспечения. Практический совет - в случае проблемы ищите руководства по устранению неполадок (имя технологии troubleshooting guide в google) для вашего программного обеспечения.
@ -39,28 +43,31 @@
#### Поиск синтаксических ошибок или предупреждений в конфигурации #### Поиск синтаксических ошибок или предупреждений в конфигурации
С помощью простой команды вы можете проверить состояние файла конфигурации Nginx: $ sudo systemctl config nginx В выводе будет показано, правильный ли файл конфигурации, или, если это не так, он покажет файл и строку, в которой возникла проблема. С помощью простой команды вы можете проверить состояние файла конфигурации Nginx:
```
$ sudo systemctl config nginx
```
В выводе будет показано, правильный ли файл конфигурации, или, если это не так, он покажет файл и строку, в которой возникла проблема.
``` ```
$ sudo systemctl config nginx $ sudo systemctl config nginx
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful nginx: configuration file /etc/nginx/nginx.conf test is successful
``` ```
Зайдите в файл /etc/nginx/nginx.conf и переместите директиву worker_connections внутрь блока http Зайдите в файл `/etc/nginx/nginx.conf` и переместите директиву `worker_connections` внутрь блока `http`
``` ```
$ sudo systemctl config nginx $ sudo systemctl config nginx
"worker_connections" directive is not allowed here in /etc/nginx/nginx.conf:12 "worker_connections" directive is not allowed here in /etc/nginx/nginx.conf:12
nginx: configuration file /etc/nginx/nginx.conf test failed nginx: configuration file /etc/nginx/nginx.conf test failed
``` ```
Если в вашей системе nginx не сконфигурирован как сервис systemd, вы можете использовать параметр -t, который также проверяет файл конфигурации на правильность синтаксиса, а затем пытается открыть файлы, указанные в конфигурации. Если в вашей системе nginx не сконфигурирован как сервис `systemd`, вы можете использовать параметр `-t`, который также проверяет файл конфигурации на правильность синтаксиса, а затем пытается открыть файлы, указанные в конфигурации.
``` ```
$ sudo nginx -t $ sudo nginx -t
``` ```
Убедитесь, что Nginx работает Убедитесь, что Nginx работает. Проверить статус службы Nginx, вы можете использовать следующую команду:
Проверить статус службы Nginx, вы можете использовать следующую команду:
``` ```
$ sudo systemctl status nginx $ sudo systemctl status nginx
``` ```
@ -70,14 +77,14 @@ $ sudo systemctl status nginx
$ sudo /etc/init.d/nginx status $ sudo /etc/init.d/nginx status
``` ```
Или найти nginx среди процессов: Или найти `nginx` среди процессов:
``` ```
ps uax | grep nginx ps uax | grep nginx
``` ```
Убедитесь, что порты открыты и служба их слушает Убедитесь, что порты открыты и служба их слушает
Убедитесь, что у вас открыты необходимые порты, и чтобы убедиться, что служба Nginx прослушивает их, вы можете использовать команду lsof, в идеале с портами по умолчанию 80 и 443. Убедитесь, что у вас открыты необходимые порты, и чтобы убедиться, что служба Nginx прослушивает их, вы можете использовать команду `lsof`, в идеале с портами по умолчанию `80` и `443`.
``` ```
$ sudo lsof -i :80 -s TCP:LISTEN $ sudo lsof -i :80 -s TCP:LISTEN
nginx 1305 nginx 6u IPv4 1613873 0t0 TCP *:http (LISTEN) nginx 1305 nginx 6u IPv4 1613873 0t0 TCP *:http (LISTEN)
@ -88,7 +95,7 @@ nginx 1306 nginx 7u IPv6 1613874 0t0 TCP *:http (LISTEN)
Проверить, обрабатывает ли Nginx запросы Проверить, обрабатывает ли Nginx запросы
Если Nginx действительно прослушивает соответствующие порты, следующим шагом будет проверка обработки запросов, что можно сделать с помощью инструмента curl с использованием IP-адреса, URL-адреса или локального хоста, если ваша установка прослушивает локальный хост: Если Nginx действительно прослушивает соответствующие порты, следующим шагом будет проверка обработки запросов, что можно сделать с помощью инструмента `curl` с использованием IP-адреса, URL-адреса или локального хоста, если ваша установка прослушивает локальный хост:
``` ```
$ curl -i http://127.0.0.1/nginx_status $ curl -i http://127.0.0.1/nginx_status
HTTP/1.1 200 OK HTTP/1.1 200 OK
@ -106,7 +113,10 @@ Reading: 0 Writing: 1 Waiting: 0
#### Проверьте журналы #### Проверьте журналы
Проверьте последние журналы службы Nginx. $ sudo tail -f /var/log/nginx/access.log /var/log/nginx/error.log Проверьте последние журналы службы Nginx.
```
$ sudo tail -f /var/log/nginx/access.log /var/log/nginx/error.log
```
#### Проверить разрешения #### Проверить разрешения
@ -136,28 +146,28 @@ $ sudo systemctl restart nginx
#### Включите режим отладки #### Включите режим отладки
В конфигурационном файле (обычно /etc/nginx/nginx.conf) измените уровень логирования директивой error_log: В конфигурационном файле (обычно `/etc/nginx/nginx.conf`) измените уровень логирования директивой `error_log`:
``` ```
server { server {
# stuff # stuff
error_log /var/logs/nginx/error.log debug; error_log /var/logs/nginx/error.log debug;
# stuff # stuff
} }
``` ```
Вы можете включить правило перезаписи журнала, чтобы увидеть результаты обработки в журнале ошибок: Вы можете включить правило перезаписи журнала, чтобы увидеть результаты обработки в журнале ошибок:
``` ```
server { server {
# stuff # stuff
error_log /var/logs/nginx/error.log notice; error_log /var/logs/nginx/error.log notice;
rewrite_log on; rewrite_log on;
# stuff # stuff
} }
``` ```
#### Проверьте разрешение имён DNS #### Проверьте разрешение имён DNS
Правила в /etc/hosts имеют приоритет над разрешениями DNS. Вы можете проверить записи DNS с помощью: Правила в `/etc/hosts` имеют приоритет над разрешениями DNS. Вы можете проверить записи DNS с помощью:
``` ```
$ host -t Веб-сайт.com $ host -t Веб-сайт.com
``` ```

@ -15,4 +15,4 @@ ssh-copy-id stud@192.168.0.106
После логина стрелки не работают и выводят странные символы. Исправьте проблему. После логина стрелки не работают и выводят странные символы. Исправьте проблему.
#### studX-troublesome-8 #### studX-troublesome-8
Залогиньтесь сначала в `stud` потом в `root`. Посмотрите логи командой `journalctl -o short-iso`. В чём заключается проблема настройки машины? Исправьте её. Залогиньтесь сначала в `stud` потом в `root`. Попробуйте обновить `apt` базу данных командой `apt update`. Посмотрите логи командой `journalctl -o short-iso`. В чём заключается проблема настройки машины? Исправьте её.

@ -31,7 +31,7 @@
Создайте vlan с доступом в интернет. Например, `bond0.499` и мост `vmbr499` с параметрами: Создайте vlan с доступом в интернет. Например, `bond0.499` и мост `vmbr499` с параметрами:
- Bridge ports: `bond0.499`, - Bridge ports: `bond0.499`,
- VLAN aware: `false`, - VLAN aware: `false`,
- IPv4/CIDR: `10.160.179.254/24`, - IPv4/CIDR: `10.160.179.254/24`,
- Gateway (IPv4): `10.160.179.1`. - Gateway (IPv4): `10.160.179.1`.
До начала занятий создайте N виртуальных машин со следующими характеристиками: До начала занятий создайте N виртуальных машин со следующими характеристиками:
@ -80,6 +80,7 @@ apt remove ifupdown
Создайте `N` виртуальных машин `studX-net1` и `N` виртуальных машин `studX-net2` для `vmbrX`. Удалите пакет `ifupdown`. Создайте `N` виртуальных машин `studX-net1` и `N` виртуальных машин `studX-net2` для `vmbrX`. Удалите пакет `ifupdown`.
## 4. Подготовка виртуальной машины к занятиям `12`. ## 4. Подготовка виртуальной машины к занятиям `12`.
# TODO АВТОМАТИЗИРОВАТЬ
Данные виртуальные Данные виртуальные
@ -135,8 +136,8 @@ networkctl reload
# task 5 # task 5
# ping gateway # ping gateway
ping 192.168.0.1 -c 1 2> /dev/null 1> /dev/null ping 192.168.0.1 -c 1 2> /dev/null 1> /dev/null
gateway_mac=$(arp -n | grep 192.168.0.1 | awk '{ print $3 }') gateway_mac=$(arp -n | egrep '^192.168.0.1\s' | awk '{ print $3 }')
ip link set address "$(gateway_mac)" dev ens18 ip link set address "${gateway_mac}" dev ens18
``` ```
Активируйте следующий сервис: Активируйте следующий сервис:

@ -123,4 +123,7 @@ PXE — это протокол, используемый для загрузк
1. Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Macking. Unix Handbook. 2 Chapter. (117 page ebook). 1. Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Macking. Unix Handbook. 2 Chapter. (117 page ebook).
2. Raphael Hertzog, Roland Mas. The Debian Administrators's Handbook. 9 Chapter (233 page ebook). 2. Raphael Hertzog, Roland Mas. The Debian Administrators's Handbook. 9 Chapter (233 page ebook).
3. Michael W. Lucas. Absolute FreeBSD. 4 chapter (103 page ebook) 3. Michael W. Lucas. Absolute FreeBSD. 4 chapter (103 page ebook)
TODO stress distinction of primary bootloader and secondary bootloader (comments for tasks, or separate tasks)

@ -0,0 +1,32 @@
# Репликация и бэкапы
Репликация это процесс в пространстве, backup это процесс во времени.
Репликация спасает от выхода из строя физического элемента хранения. Например, выход из строя диска/сервера/стойки/датацентра. RAID массивы на основе физических контроллеров и `mdadm` обеспечивают репликацию, которая спасает от выхода из строя диска на узле.
Backup спасает от выхода из строя элемента данных. Например, 09.12.2023 было выложено в ветку автоматических обновлений пакет обновления ядра, который приводил к повреждению данных при записи в Ext4 https://www.debian.org/News/2023/2023120902. При работе репликации в данном случае будут реплицированы повреждённые данные. Бэкапам также требуется репликация. Самая надежная, но наименее гибкая - репликация на разные несколько типов носителей: диски, флешки, оптические диски, ленты.
**Таблица 0. Минимально необходимая схема резервирования данных data(t,n)**
|| Устройство хранения n=1 | Устройство хранения n=2 |
|--|-|-|
|вчерашние данные t=0 | data(0,0) | data(0,1) |
|текущие данные t=1 | data(1,0) | data(1,1) |
### Таблица 1. Типы RAID массивов
|Тип| Описание| Количество дисков | Выдерживает потерю |
|---|---------|-----------| ------ |
| RAID0 | Дисковый массив из двух или более жёстких дисков без резервирования (striping — «чередование»). | от 2 | 0 дисков |
| RAID1 | Массив из двух дисков являющихся полными копиями друг друга (mirroring — «зеркалирование»). | от 2 | N-1 дисков |
| RAID2 | Данные распределяются по дискам, предназначенным для хранения информации, так же, как и в RAID 0, но требуются выделенные диски в массиве для хранения кодов Хэмминга для коррекции ошибок. | от 3 | 1 диска |
| RAID3 | В массиве RAID 3 из N дисков данные разбиваются на куски размером меньше сектора и распределяются по N-1 дискам. Ещё один диск используется для хранения блоков чётности. Коррекция ошибок проще, чем в RAID 2, коды коррекции занимают 1 диск, вместо log2(N) дисков. | от 4 | 1 диска |
| RAID4 | RAID 4 похож на RAID 3, но отличается от него тем, что данные разбиваются на блоки, а не на байты. Отчасти это решает проблему низкой скорости чтения данных небольшого объёма. | от 4 | 1 диска |
| RAID5 | Основным недостатком уровней RAID от 2-го до 4-го является невозможность производить параллельные операции записи, так как для хранения информации о чётности используется отдельный контрольный диск. RAID 5 не имеет этого недостатка. Дисковый массив с чередует блоки данных и блоки контроля чётности. | от 3 | 1 диска |
| RAID6 | Массив из четырёх или более дисков с проверкой чётности `P+Q` (двумя томами чётности) или `DP` (разработанный для защиты от потери данных при выходе из строя сразу двух жестких дисков в массиве). | от 4 | 2 дисков |
| RAID01 | Массив типа RAID 1, состоящий из двух вложенных массивов типа RAID 0. | от 4, чётное | от 1 до N/2 дисков |
| RAID10 | Массив типа RAID 0, составленный из двух и более RAID 1 (зеркалированных пар). | от 4, чётное | от 1 до N/2 дисков |
| RAID51 | Массив типа RAID 1, зеркалирующий два RAID 5. | от 6, чётное | 2 до N/2+1 дисков |
https://ru.wikipedia.org/wiki/RAID

@ -14,21 +14,7 @@
### Таблица 1. Типы RAID массивов
|Тип| Описание| Количество дисков | Выдерживает потерю |
|---|---------|-----------| ------ |
| RAID0 | Дисковый массив из двух или более жёстких дисков без резервирования (striping — «чередование»). | от 2 | 0 дисков |
| RAID1 | Массив из двух дисков являющихся полными копиями друг друга (mirroring — «зеркалирование»). | от 2 | N-1 дисков |
| RAID2 | Данные распределяются по дискам, предназначенным для хранения информации, так же, как и в RAID 0, но требуются выделенные диски в массиве для хранения кодов Хэмминга для коррекции ошибок. | от 3 | 1 диска |
| RAID3 | В массиве RAID 3 из N дисков данные разбиваются на куски размером меньше сектора и распределяются по N-1 дискам. Ещё один диск используется для хранения блоков чётности. Коррекция ошибок проще, чем в RAID 2, коды коррекции занимают 1 диск, вместо log2(N) дисков. | от 4 | 1 диска |
| RAID4 | RAID 4 похож на RAID 3, но отличается от него тем, что данные разбиваются на блоки, а не на байты. Отчасти это решает проблему низкой скорости чтения данных небольшого объёма. | от 4 | 1 диска |
| RAID5 | Основным недостатком уровней RAID от 2-го до 4-го является невозможность производить параллельные операции записи, так как для хранения информации о чётности используется отдельный контрольный диск. RAID 5 не имеет этого недостатка. Дисковый массив с чередует блоки данных и блоки контроля чётности. | от 3 | 1 диска |
| RAID6 | Массив из четырёх или более дисков с проверкой чётности `P+Q` (двумя томами чётности) или `DP` (разработанный для защиты от потери данных при выходе из строя сразу двух жестких дисков в массиве). | от 4 | 2 дисков |
| RAID01 | Массив типа RAID 1, состоящий из двух вложенных массивов типа RAID 0. | от 4, чётное | от 1 до N/2 дисков |
| RAID10 | Массив типа RAID 0, составленный из двух и более RAID 1 (зеркалированных пар). | от 4, чётное | от 1 до N/2 дисков |
| RAID51 | Массив типа RAID 1, зеркалирующий два RAID 5. | от 6, чётное | 2 до N/2+1 дисков |
https://ru.wikipedia.org/wiki/RAID
## 1. Программный RAID `mdadm` ## 1. Программный RAID `mdadm`

@ -1,10 +1,150 @@
# Почтовая система Postfix + Dovecot # Почтовая система Postfix + Dovecot
Возможные структуры почтовой системы: Рассматрим структуру почтовой системы, в которой Postfix и Dovecot имеют доступ к списку пользователей и работают параллельно, разделяя доступ к почтовым ящикам пользователей.
1. Postfix, Dovecot имеют доступ к списку пользователей и работают параллельно, разделяя доступ к почтовым ящикам пользователей.
2. Dovecot является «бэкендом» для доступа к почтовым ящикам пользователей. При этом подходе, расположение почтовых ящиков, список пользователей, известен только Dovecot.
Далее будет рассмотрен первый вариант. Но в начале следует углубиться в теорию для понимания механизмов работы Postfix. Рассмотрим что такое классы адресов и какие бывают типы доменов. Затем рассмотрим классы адресов с точки зрения менеджмента почтовых ящиков. В конце разберёмся какие проблемы есть у почтовых серверов из-за спама, и как повысить надежность доставки писем вашим почтовым сервером. В начале следует углубиться в теорию для понимания механизмов работы Postfix. Рассмотрим архитектуру Postfix, что такое классы адресов и какие бывают типы доменов. Затем рассмотрим классы адресов с точки зрения менеджмента почтовых ящиков. В конце разберёмся какие проблемы есть у почтовых серверов из-за спама, и как повысить надежность доставки писем вашим почтовым сервером.
## Архитектура Postfix
### Как Postfix получает почту
```
trivial-rewrite(8)
Network ───► smtpd(8) ──┐ │
│ ▼
Network ───► qmqpd(8) ──┼───► cleanup(8) ───► incoming
maildrop ──► pickup(8) ─┘
postdrop(1)
sendmail(1)
Local
```
Когда сообщение попадает в почтовую систему Postfix, первой остановкой внутри неё является очередь входящих сообщений `incoming`. На рисунке показаны основные процессы, связанные с новой почтой. Имена, за которыми следует цифра, представляют собой команды или программы сервера Postfix, а непронумерованные имена - очереди Postfix.
#### smtpd(8), qmqpd(8), pickup(8)
Почта из сети поступает в Postfix через сервисы `smtpd(8)` или `qmqpd(8)`. Эти сервисы удаляют инкапсуляцию протокола SMTP или QMQP, выполняют некоторые проверки на корректность для защиты Postfix и передают отправителя, получателей и содержимое сообщения сервис `cleanup(8)`. Сервис `smtpd(8)` может быть настроен на блокировку нежелательной почты, как описано в документе [SMTPD_ACCESS_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/SMTPD_ACCESS_README).
Локальные отправки принимаются с помощью команды Postfix `sendmail(1)` и помещаются в очередь `maildrop` с помощью привилегированной команды `postdrop(1)`. Эта схема работает даже тогда, когда почтовая система Postfix не работает. Локальный сервис `pickup(8)` собирает локальные отправленные сообщения, выполняет некоторые проверки работоспособности для защиты Postfix и передает отправителя, получателей и содержимое сообщения на сервису `cleanup(8)`.
#### cleanup(8)
Почта из внутренних источников передается непосредственно сервису `cleanup(8)`. Эти источники не показаны на рисунке и включают в себя: почту, пересылаемую агентом доставки `local(8)`, сообщения, возвращаемые отправителю сервером `bounce(8)`, и уведомления почтмейстера о проблемах с Postfix.
Сервер `cleanup(8)` реализует финальную стадию обработки перед постановкой почты в очередь. Он добавляет недостающие заголовки `From:` и другие сообщения, а также преобразует адреса, как описано в документе [ADDRESS_REWRITING_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/ADDRESS_REWRITING_README). При желании сервер `cleanup(8)` можно настроить для облегченной проверки содержимого с помощью регулярных выражений, как описано в документе BUILTIN_FILTER_README. Сервер `cleanup(8)` помещает результат в виде одного файла во входящую очередь `incoming` и уведомляет менеджер очередей `qmgr(8)` о прибытии новой почты.
#### trivial-rewrite(8)
Сервис `trivial-rewrite(8)` перезаписывает адреса в стандартную форму «user@complete.qualified.domain», как описано в документе [ADDRESS_REWRITING_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/ADDRESS_REWRITING_README). В настоящее время Postfix не реализует язык перезаписи, но многое можно сделать с помощью поиска по таблицам и, при необходимости, регулярных выражений.
Конфигурация сервисов участвующих в приёме почты в файле `master.cf`:
```
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
#628 inet n - y - - qmqpd
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
rewrite unix - - y - - trivial-rewrite
```
### Как Postfix отправляет почту
```
incoming trivial-rewrite(8) ┌─ smtp(8) ────► Network
│ ▲ │
│ │ ├─ lmtp(8) ────► Network
▼ ▼ │
active ─────────► qmgr(8) ───────┼─ local(8) ───► File, command
▲ │
│ ├─ virtual(8) ─► File
▼ │
deferred └─ pipe(8) ────► Command
```
Как только сообщение достигнет входящей очереди, следующим шагом будет его доставка. На рисунке показаны основные компоненты доставки почты Postfix. Имена, за которыми следует номер, представляют собой команды Postfix или сервисы, а ненумерованные имена представляют очереди Postfix.
#### qmgr(8)
Менеджер очередей (серверный процесс `qmgr(8)` на рисунке) — это сердце доставки почты Postfix. Он связывается с агентами доставки `smtp(8)`, `lmtp(8)`, `local(8)`, `virtual(8)`, `pipe(8)`, `discard(8)` или `error(8)` и отправляет запрос на доставку одному или нескольким получателям. Агенты доставки `discard(8)` и `error(8)` являются особенными: они отбрасывают или возвращают всю почту и не показаны на рисунке выше.
Диспетчер очередей поддерживает небольшую активную очередь `active` с сообщениями, которые он открыл для доставки. Активная очередь действует как ограниченное окно для потенциально больших входящих `incoming` или отложенных `deferred` очередей. Ограниченная активная очередь не позволяет диспетчеру очередей исчерпать память при большой нагрузке.
Диспетчер очередей поддерживает отдельную отложенную очередь `deferred` для почты, которая не может быть доставлена, чтобы большой объем невыполненной почты не замедлял нормальный доступ к очереди. Стратегия администратора очередей в отношении отложенных попыток доставки почты описана в документах [QSHAPE_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/QSHAPE_README) и [TUNING_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/TUNING_README).
#### trivial-rewrite(8)
Сервер `trivial-rewrite(8)` разрешает каждый адрес получателя в соответствии с его локальным или удаленным классом адреса, как определено в документе [ADDRESS_CLASS_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/ADDRESS_CLASS_README). Дополнительную информацию о маршрутизации можно указать с помощью дополнительной таблицы `transport(5)`. Сервер `trivial-rewrite(8)` дополнительно запрашивает таблицу `relocated(5)` о получателях, чей адрес изменился; Для таких получателей письмо возвращается отправителю с объяснением.
#### smtp(8)
Клиент `smtp(8)` просматривает список почтовых обменников для хоста назначения, сортирует список по предпочтениям и пробует по очереди каждый сервер, пока не найдет сервер, который отвечает. Затем он инкапсулирует отправителя, получателя и содержимое сообщения в соответствии с требованиями протокола SMTP; это включает преобразование 8-битного MIME в 7-битное кодирование.
#### lmtp(8)
Клиент `lmtp(8)` использует протокол, аналогичный SMTP, который оптимизирован для доставки на серверы почтовых ящиков, такие как Cyrus. Преимущество этой настройки состоит в том, что одна машина Postfix может обслуживать несколько серверов почтовых ящиков через LMTP. Верно и обратное: один сервер почтовых ящиков может подключаться по LMTP к нескольким машинам Postfix.
#### local(8)
Агент доставки `local(8)` понимает почтовые ящики в стиле UNIX, qmail-совместимые файлы maildir, общесистемные базы данных `aliases(5)` в стиле Sendmail и файлы `.forward` для каждого пользователя в стиле Sendmail. Несколько локальных агентов доставки могут работать параллельно, но параллельная доставка одному и тому же пользователю обычно ограничена.
Агент доставки `local(8)` имеет несолько альтернативных формы локальной доставки. Вы можете настроить его:
- доставлять почту в файлы почтовых ящиков в домашних каталогах пользователей,
- делегировать доставку в почтовый ящик внешней команде, такой как `procmail`,
- делегировать доставку другому агенту доставки Postfix.
#### virtual(8)
Агент доставки `virtual(8)` — это простой агент доставки, который доставляет только в файлы почтового ящика в стиле UNIX или в файлы maildir в стиле qmail. Этот агент доставки может доставлять почту для нескольких доменов, что делает его особенно подходящим для размещения множества небольших доменов на одном компьютере. Подробнее описано в документе [VIRTUAL_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/VIRTUAL_README).
#### pipe(8)
Почтовая программа `pipe(8)` — это исходящий интерфейс к другим системам обработки почты (входящим интерфейсом является команда Postfix `sendmail(1)`. Интерфейс совместим с UNIX: он предоставляет информацию в командной строке и стандартном потоке ввода, а также ожидает код состояния завершения процесса, определенный в `<sysexits.h>`. Примеры доставки через почтовую программу `pipe(8)` находятся в документах [MAILDROP_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/MAILDROP_README) и [UUCP_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/UUCP_README).
Конфигурация сервисов участвующих в отправке почты в файле `master.cf`:
```
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
qmgr unix n - n 300 1 qmgr
error unix - - y - - error
discard unix - - y - - discard
rewrite unix - - y - - trivial-rewrite
smtp unix - - y - - smtp
lmtp unix - - y - - lmtp
local unix - n n - - local
virtual unix - n n - - virtual
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
```
Объединённая схема:
```
trivial-rewrite(8)
Network ───► smtpd(8) ──┐ │
│ ▼
Network ───► qmqpd(8) ──┼───► cleanup(8) ───► incoming trivial-rewrite(8) ┌─ smtp(8) ────► Network
│ │ ▲ │
maildrop ──► pickup(8) ─┘ │ │ ├─ lmtp(8) ────► Network
▲ ▼ ▼ │
│ active ──────────► qmgr(8) ───────┼─ local(8) ───► File, command
postdrop(1) ▲ │
▲ │ ├─ virtual(8) ─► File
│ ▼ │
sendmail(1) deferred └─ pipe(8) ────► Command
Local
```
## Какое нам дело до классов адресов? ## Какое нам дело до классов адресов?
@ -57,7 +197,7 @@ AGENTS = service names ∈ /etc/postfix/master.cf
``` ```
### 3. virtual alias domain class (виртуальные псевдонимы) ### 3. virtual alias domain class (виртуальные псевдонимы)
Назначение: хостинговые домены, в которых каждый адрес получателя псевдонимом привязан к учётной записи локальной UNIX-системы или к удаленному адресу. Пример виртуального псевдонима приведен в файле VIRTUAL_README. Назначение: хостинговые домены, в которых каждый адрес получателя псевдонимом привязан к учётной записи локальной UNIX-системы или к удаленному адресу. Пример виртуального псевдонима приведен в файле [VIRTUAL_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/VIRTUAL_README).
Доменные имена перечисляются в virtual_alias_domains. Для совместимости с Postfix 1.1 по умолчанию используется значение $virtual_alias_maps. Доменные имена перечисляются в virtual_alias_domains. Для совместимости с Postfix 1.1 по умолчанию используется значение $virtual_alias_maps.
@ -73,7 +213,7 @@ AGENTS = {}
``` ```
### 4. relay domain class (адреса доменов-ретранляторов) ### 4. relay domain class (адреса доменов-ретранляторов)
Назначение: переадресация почты на удаленные адреса, в которых ваша система указана в качестве основного или резервного MX-хоста. Для обсуждения основных деталей конфигурации см. документ BASIC_CONFIGURATION_README. Обсуждение различий между каноническими доменами, размещенными доменами и другими доменами см. в файле VIRTUAL_README. Назначение: переадресация почты на удаленные адреса, в которых ваша система указана в качестве основного или резервного MX-хоста. Для обсуждения основных деталей конфигурации см. документ [BASIC_CONFIGURATION_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/BASIC_CONFIGURATION_README). Обсуждение различий между каноническими доменами, размещенными доменами и другими доменами см. в файле [VIRTUAL_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/VIRTUAL_README).
Доменные имена перечисляются с помощью параметра relay_domains. Доменные имена перечисляются с помощью параметра relay_domains.
@ -90,7 +230,7 @@ AGENTS = service names ∈ /etc/postfix/master.cf
### 5. default domain class (адреса по умолчанию) ### 5. default domain class (адреса по умолчанию)
Назначение: пересылка почты в Интернет от имени авторизованных клиентов. Для обсуждения основных деталей конфигурации см. файл BASIC_CONFIGURATION_README. О различиях между каноническими доменами, размещенными доменами и другими доменами см. файл VIRTUAL_README. Назначение: пересылка почты в Интернет от имени авторизованных клиентов. Для обсуждения основных деталей конфигурации см. файл [BASIC_CONFIGURATION_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/BASIC_CONFIGURATION_README). О различиях между каноническими доменами, размещенными доменами и другими доменами см. файл [VIRTUAL_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/VIRTUAL_README).
У этого класса нет таблицы доменов назначения. У этого класса нет таблицы доменов назначения.
@ -106,13 +246,13 @@ AGENTS = service names ∈ /etc/postfix/master.cf
## Типы доменов ## Типы доменов
Большинство систем Postfix являются конечным пунктом назначения только для нескольких доменных имен. К ним относятся имена хостов и [IP-адреса] машин, на которых работает Postfix, а иногда и родительский домен имени хоста. Эти домены называются каноническими ( `canonical` ) доменами. Обычно они реализуются с помощью класса адресов локального домена Postfix, как определено в файле ADDRESS_CLASS_README. Большинство систем Postfix являются конечным пунктом назначения только для нескольких доменных имен. К ним относятся имена хостов и [IP-адреса] машин, на которых работает Postfix, а иногда и родительский домен имени хоста. Эти домены называются каноническими ( `canonical` ) доменами. Обычно они реализуются с помощью класса адресов локального домена Postfix, как определено в файле [ADDRESS_CLASS_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/ADDRESS_CLASS_README).
Помимо канонических доменов, Postfix может быть настроен на то, чтобы быть конечным адресатом для любого количества дополнительных доменов. Такие домены называются размещенными ( `hosted` ), поскольку они не связаны непосредственно с именем самой машины. Размещенные домены обычно реализуются с помощью класса виртуального псевдонима домена и/или виртуального домена почтовых ящиков. Помимо канонических доменов, Postfix может быть настроен на то, чтобы быть конечным адресатом для любого количества дополнительных доменов. Такие домены называются размещенными ( `hosted` ), поскольку они не связаны непосредственно с именем самой машины. Размещенные домены обычно реализуются с помощью класса виртуального псевдонима домена и/или виртуального домена почтовых ящиков.
Но подождите! Это еще не все. Postfix может быть настроен как резервный MX-хост для других доменов. В этом случае Postfix не будет являться резервным хостом MX для этих доменов. Он просто ставит почту в очередь, когда основной MX-хост работает, и пересылает почту, когда основной MX-хост не работает. Эта функция реализуется с помощью класса адресов доменов-ретрансляторов, как определено в файле ADDRESS_CLASS_README. Но подождите! Это еще не все. Postfix может быть настроен как резервный MX-хост для других доменов. В этом случае Postfix не будет являться резервным хостом MX для этих доменов. Он просто ставит почту в очередь, когда основной MX-хост работает, и пересылает почту, когда основной MX-хост не работает. Эта функция реализуется с помощью класса адресов доменов-ретрансляторов, как определено в файле [ADDRESS_CLASS_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/ADDRESS_CLASS_README).
Наконец, Postfix может быть настроен как транзитный хост для отправки почты через Интернет. Очевидно, что Postfix не является конечным адресатом такой почты. Эта функция доступна только для авторизованных клиентов и/или пользователей и реализуется классом доменных адресов по умолчанию, как определено в параметре ADDRESS_CLASS_README. Наконец, Postfix может быть настроен как транзитный хост для отправки почты через Интернет. Очевидно, что Postfix не является конечным адресатом такой почты. Эта функция доступна только для авторизованных клиентов и/или пользователей и реализуется классом доменных адресов по умолчанию, как определено в параметре [ADDRESS_CLASS_README](https://github.com/vdukhovni/postfix/blob/master/postfix/README_FILES/ADDRESS_CLASS_README).
**Таблица. 1 Сводная таблица классов почтовых адресов** **Таблица. 1 Сводная таблица классов почтовых адресов**
|| 1. Локальные почтовые ящики | 2. Виртуальные почтовые ящики | 3. Виртуальные псевдонимы | 4. Адреса доменов-ретранляторов | 5. Класс доменных адресов по умолчанию | || 1. Локальные почтовые ящики | 2. Виртуальные почтовые ящики | 3. Виртуальные псевдонимы | 4. Адреса доменов-ретранляторов | 5. Класс доменных адресов по умолчанию |
@ -123,6 +263,7 @@ AGENTS = service names ∈ /etc/postfix/master.cf
|AGENTS|/etc/postfix/master.cf|/etc/postfix/master.cf|/etc/postfix/master.cf|/etc/postfix/master.cf|/etc/postfix/master.cf| |AGENTS|/etc/postfix/master.cf|/etc/postfix/master.cf|/etc/postfix/master.cf|/etc/postfix/master.cf|/etc/postfix/master.cf|
# Первая настройка # Первая настройка
Первые параметры, представляющие интерес, определяют идентификацию и роль машины в сети. Заполним таблицу: Первые параметры, представляющие интерес, определяют идентификацию и роль машины в сети. Заполним таблицу:
@ -131,14 +272,15 @@ AGENTS = service names ∈ /etc/postfix/master.cf
|Вопрос|Ответ|Параметр| |Вопрос|Ответ|Параметр|
|-|-|-| |-|-|-|
| Какое доменное имя у машины с Postfix | stud12.myoffice.ru | myhostname | | Куда указывает MX запись? | mail.stud12.myoffice.ru | MX запись DNS |
| Какой домен является родительским | myoffice.ru | mydomain | | Какое доменное имя у машины с Postfix? | mail.stud12.myoffice.ru | `myhostname` |
| Какие адреса принадлежат доверенной сети от клиентов в которой будут пересылаться письма другим почтовым серверам | 127.0.0.0/8 | mynetworks | | Какой домен является родительским? | stud12.myoffice.ru | `mydomain` |
| Какое доменное имя использовать в исходящей почте | stud12.myoffice.ru или myoffice.ru | myorigin = myhostname или mydomain | | Письма из которой сети будут приниматься без авторизации? | 127.0.0.0/8 | `mynetworks` |
| Для каких доменов принимать почту и доставлять локально | stud12.myoffice.ru или myoffice.ru | mydestination = $myhostname localhost.$mydomain localhost | | Какое доменное имя использовать в исходящей почте? | stud12.myoffice.ru | `myorigin` = `myhostname` или `mydomain` |
| С каких клиентов передавать почту | | | | Для каких доменов принимать почту и доставлять локально? | stud12.myoffice.ru | `mydestination = $myhostname localhost.$mydomain localhost` |
| В какие пункты назначения передавать почту | | | | С каких клиентов передавать почту? | | |
| Какой метод доставки: прямой или непрямой | прямой | relay or proxy not used? | | В какие пункты назначения передавать почту? | | |
| Какой метод доставки использовать: прямой или непрямой? | прямой | relay or proxy not used? |
Параметр `mydomain` задает родительский домен `myhostname`. По умолчанию он получается из `myhostname` путем удаления первой части (за исключением случаев, когда в результате не будет получен домен верхнего уровня ). И наоборот, если вы укажете `mydomain` в файле `main.cf`, то Postfix будет использовать его значение для генерации полностью определенного значения по умолчанию для параметра `myhostname`. Параметр `mydomain` задает родительский домен `myhostname`. По умолчанию он получается из `myhostname` путем удаления первой части (за исключением случаев, когда в результате не будет получен домен верхнего уровня ). И наоборот, если вы укажете `mydomain` в файле `main.cf`, то Postfix будет использовать его значение для генерации полностью определенного значения по умолчанию для параметра `myhostname`.
@ -166,35 +308,35 @@ AGENTS = service names ∈ /etc/postfix/master.cf
Самый простой способ размещения дополнительного домена - это добавить имя домена к доменам, перечисленным в конфигурационном параметре Postfix `mydestination`, и добавить имена пользователей в файл паролей UNIX `/etc/passwd`. При таком подходе не делается различий между каноническими ( `canonical` ) и размещенными ( `hosted` ) доменами. Каждое имя пользователя может получать почту в каждом домене. Самый простой способ размещения дополнительного домена - это добавить имя домена к доменам, перечисленным в конфигурационном параметре Postfix `mydestination`, и добавить имена пользователей в файл паролей UNIX `/etc/passwd`. При таком подходе не делается различий между каноническими ( `canonical` ) и размещенными ( `hosted` ) доменами. Каждое имя пользователя может получать почту в каждом домене.
``` ```
myhostname = stud12.myoffice.ru myhostname = stud12.myoffice.ru
mydomain = myoffice.ru mydomain = stud12.myoffice.ru
mydestination = myoffice.space $myhostname localhost.$mydomain mydestination = stud12.myoffice.space $myhostname localhost.$mydomain
``` ```
Ограничениями данного подхода являются: Ограничениями данного подхода являются:
* Полное отсутствие разделения: почта для info@stud12.myoffice.ru доставляется на ту же системную учетную запись UNIX, что и почта для info@myoffice.space. * Полное отсутствие разделения: почта для info@stud12.myoffice.ru доставляется на ту же системную учетную запись UNIX, что и почта для info@stud12.myoffice.space.
* При наличии пользователей в файле паролей UNIX администрирование большого числа пользователей становится неудобным. * При наличии пользователей в файле паролей UNIX администрирование большого числа пользователей становится неудобным.
### Виртуальные псевдонимы ### Виртуальные псевдонимы
При использовании подхода, описанного в данном разделе, каждый размещаемый домен может иметь свой собственный адрес электронной почты `info@stud12.myoffice.ru` и `info@myoffice.space`. Однако при этом по-прежнему используются системные учетные записи UNIX для доставки локальных почтовых ящиков. При использовании подхода, описанного в данном разделе, каждый размещаемый домен может иметь свой собственный адрес электронной почты `info@stud12.myoffice.ru` и `info@stud12.myoffice.space`. Однако при этом по-прежнему используются системные учетные записи UNIX для доставки локальных почтовых ящиков.
При использовании виртуальных доменов-псевдонимов каждый размещаемый адрес привязывается к локальной учетной записи UNIX-системы или к удаленному адресу. Они не обязательно должны ссылаться на системные учетные записи UNIX на вашей машине. В приведенном ниже примере показано, как использовать этот механизм для домена myoffice.space. При использовании виртуальных доменов-псевдонимов каждый размещаемый адрес привязывается к локальной учетной записи UNIX-системы или к удаленному адресу. Они не обязательно должны ссылаться на системные учетные записи UNIX на вашей машине. В приведенном ниже примере показано, как использовать этот механизм для домена stud12.myoffice.space.
``` ```
1 /etc/postfix/main.cf: 1 /etc/postfix/main.cf:
2 virtual_alias_domains = myoffice.space ...other hosted domains... 2 virtual_alias_domains = stud12.myoffice.space ...other hosted domains...
3 virtual_alias_maps = hash:/etc/postfix/virtual 3 virtual_alias_maps = hash:/etc/postfix/virtual
``` ```
``` ```
5 /etc/postfix/virtual: 5 /etc/postfix/virtual:
6 postmaster@myoffice.space postmaster 6 postmaster@stud12.myoffice.space postmaster
7 info@myoffice.space joe 7 info@stud12.myoffice.space joe
8 sales@myoffice.space jane 8 sales@stud12.myoffice.space jane
9 # Uncomment entry below to implement a catch-all address 9 # Uncomment entry below to implement a catch-all address
10 # @myoffice.space jim 10 # @stud12.myoffice.space jim
11 ...virtual aliases for more domains... 11 ...virtual aliases for more domains...
``` ```
Виртуальные псевдонимы решает одну проблему: он позволяет каждому домену иметь свой собственный почтовый адрес. Например это даёт возможность работать с ящиками `info@stud12.myoffice.ru` и `info@myoffice.space` разным пользователям. Виртуальные псевдонимы решает одну проблему: он позволяет каждому домену иметь свой собственный почтовый адрес. Например это даёт возможность работать с ящиками `info@stud12.myoffice.ru` и `info@stud12.myoffice.space` разным пользователям.
Но при этом остается один недостаток: каждый виртуальный адрес привязывается к системной учетной записи UNIX. При добавлении большего количества виртуальных адресов увеличивается и количество системных учетных записей UNIX. В следующем разделе эта проблема будет устранена. Но при этом остается один недостаток: каждый виртуальный адрес привязывается к системной учетной записи UNIX. При добавлении большего количества виртуальных адресов увеличивается и количество системных учетных записей UNIX. В следующем разделе эта проблема будет устранена.
@ -260,6 +402,7 @@ mydestination = myoffice.space $myhostname localhost.$mydomain
| Вопрос | Ответ | | Вопрос | Ответ |
|-|-| |-|-|
| 0. Внесена PTR запись на стороне провайдера | _______ |
| 1. Внесена MX запись на стороне DNS | _______ | | 1. Внесена MX запись на стороне DNS | _______ |
| 2. Настроен SPF на стороне почтового сервера и на стороне DNS | _______ | | 2. Настроен SPF на стороне почтового сервера и на стороне DNS | _______ |
| 3. Настроен DKIM на стороне почтового сервера и на стороне DNS | _______ | | 3. Настроен DKIM на стороне почтового сервера и на стороне DNS | _______ |
@ -277,6 +420,7 @@ mydestination = myoffice.space $myhostname localhost.$mydomain
Б: Могу без шифрования Б: Могу без шифрования
А: Договорились А: Договорились
``` ```
Но в настройках вы всё-таки можете запретить обмен по не зашифрованному каналу, указав для `smtpd_tls_security_level` значение `encrypt` вместо `may`.
# Dovecot # Dovecot
@ -285,4 +429,5 @@ mydestination = myoffice.space $myhostname localhost.$mydomain
Источники: Источники:
1. https://habr.com/ru/articles/258279/ 1. https://habr.com/ru/articles/258279/
2. https://github.com/vdukhovni/postfix/tree/master/postfix/README_FILES 2. https://github.com/vdukhovni/postfix/tree/master/postfix/README_FILES
3. https://github.com/vdukhovni/postfix

@ -179,7 +179,7 @@ $ ansible cluster -m apt -a "name=htop state=present"
#### 1.2.6 Эскалация прав доступа #### 1.2.6 Эскалация прав доступа
Для повышения прав доступа до суперпользователя на управляемых машинах используется ключ `--become` или сокращенный вариант `-b`. Если вы не настроили sudo без запроса пароля на управялемых машинах, вы можете добавить ключ `--ask-become-pass` или сокращенный вариант `-K` для запроса пароля. По умолчанию `--become-user` равен `root`. Для повышения прав доступа до суперпользователя на управляемых машинах используется ключ `--become` или сокращенный вариант `-b`. Если вы не настроили sudo без запроса пароля на управляемых машинах, вы можете добавить ключ `--ask-become-pass` или сокращенный вариант `-K` для запроса пароля. По умолчанию `--become-user` равен `root`.
``` ```
$ ansible cluster -m apt -a "name=htop state=present" --become --ask-become-pass $ ansible cluster -m apt -a "name=htop state=present" --become --ask-become-pass
``` ```

@ -97,7 +97,7 @@
Если мы аггрегируем эту метрику с помощью суммы по метке `le`(собственно значения той оси гистограммы, которые показывают время обработки запроса), \ Если мы аггрегируем эту метрику с помощью суммы по метке `le`(собственно значения той оси гистограммы, которые показывают время обработки запроса), \
то к полученному результату мы можем применить функции PromQL, работающие с гистограммами, например `histogram_quantile`. то к полученному результату мы можем применить функции PromQL, работающие с гистограммами, например `histogram_quantile`.
Функция `histogram_quantile` поможет посчитать время обработки запроса по заданному квантилю. Так, если первым параметром ей передать число 0.5,\ Функцию `histogram_quantile` поможет посчитать время обработки запроса по заданному квантилю. Так, если первым параметром ей передать число 0.5,\
то мы можем оценить примерное медианное время обработки запроса(половина запросов отрабатывает быстрее, половина медленнее). то мы можем оценить примерное медианное время обработки запроса(половина запросов отрабатывает быстрее, половина медленнее).
Выведите медианное время обработки запроса за последние 5 минут. Выведите медианное время обработки запроса за последние 5 минут.

@ -1,12 +1,18 @@
# Портфолио # Портфолио
## 1. proxmox ## 1. proxmox
Web интерфейс созданного в задании Proxmox доступен по адресу https://proxmox.studX.myoffice.ru/.
Выполните задания по настройке Proxmox на виртуальных машинах и предоставьте доступ к веб-интерфейсу по адресу `https://proxmox.studX.myoffice.ru/`. Заведите тестового пользователя, который обладает правами на:
- запуск/выключение созданной для него виртуальной машины,
- может создавать диски,
- может изменять конфигурацию оборудования виртуальной машины,
- может сохранять бекапы и делать снепшоты системы.
## 2. nginx_ha ## 2. nginx_ha
Cайты доступены по адресу https://ha1.studX.myoffice.ru/ и https://ha2.studX.myoffice.ru/. При остановке активной машины сайт должен обслуживаться резервным сервером. Cайты доступены по адресу https://ha1.studX.myoffice.ru/ и https://ha2.studX.myoffice.ru/. При остановке активной машины сайт должен обслуживаться резервным сервером.
## 3. docker ## 3. docker
Выполните контейнеризацию приложения `todo_app` и предоставьте доступ к веб-интерфейсу по адресу https://docker.studX.myoffice.ru/. Выполните контейнеризацию приложения `todo_app` и предоставьте доступ к веб-интерфейсу по адресу https://docker.studX.myoffice.ru/.
## 4. monitoring ## 4. monitoring

@ -1,20 +1,32 @@
# Экзаменационное задание # Экзаменационное задание
# 1. ## 1. Подготовка экзаменационной машины к удалённой конфигурации
Создайте виртуальную машину для настройки из `debian-template`. Подключите к `vmbr15+X` и настройте ip адрес. К машине должна быть возможность подключиться по ssh с узла `studX`. Добавьте два жестких диска в конфигурацию оборудования размером 0.5 ГБ. Создайте снепшот. Создайте виртуальную машину `studX-exam2` для настройки из `exam2-template`. Пароль от `root` и `stud` стандартные.
# 2. Подключите её к `vmbr499`, настройте доступ в сеть интернет. Используйте ip адреса из колонки `exam2_X`.
Напишите Ansible Playbook, который на созданной виртуальной машине: Настройте ssh подключение с узла `studX`. После настройки доступ по паролю к `studX-exam2` должен быть закрыт.
Настройте `sudo` доступ для пользователя `stud`.
Добавьте два жестких диска в конфигурацию оборудования размером 0.5 ГБ.
Создайте снепшот `studX-exam2`, предварительно выключив машину.
## 2. Конфигурирование экзаменационной машины по сети с помощью Ansible
Установите ansible на `studX`, если он ещё не установлен. Добавьте экзаменационную машину `studX-exam2` в инвентарь.
Напишите Ansible Playbook, который на созданной виртуальной машине `studX-exam2`:
- устанавливает время таймаута меню загрузки равным 1 секунде, - устанавливает время таймаута меню загрузки равным 1 секунде,
- устанавливает selinux и активирует его в режиме `permissive`,
- создаёт и монтирует на постоянной основе raid1 в `/var/lib/postgresql/` с помощью пакета `mdadm`, - создаёт и монтирует на постоянной основе raid1 в `/var/lib/postgresql/` с помощью пакета `mdadm`,
- устанавливает в систему PostgreSQL данные которой будут храниться на raid1. - устанавливает в систему PostgreSQL данные которой будут храниться на raid1,
- устанавливает selinux и активирует его в режиме `permissive`,
- перезагружает машину.
Playbook должен выполнять все пункты конфигурации машины для состояния зафиксированного снепшотом. Playbook должен выполнять все пункты конфигурации машины для состояния зафиксированного снепшотом. Playbook должен выполняться от имени `stud`.
# 3. ## 3. Проверка работоспособности установленного ПО
Зайдите в сконфигурированную машину под пользователем `postgres`. Импортируйте данные в БД, запустив скрипт `weather.sql` из задания `05_sql_postgresql`. Зайдите в сконфигурированную машину под пользователем `postgres`. Импортируйте данные в БД, запустив скрипт `weather.sql` из задания `05_sql_postgresql`.
@ -23,9 +35,9 @@ Playbook должен выполнять все пункты конфигура
### Оценка ### Оценка
За каждый пункт будет засчитывать балл. За каждый пункт засчитывается балл:
1. Настроено время таймаута меню загрузки в 1 секунду. 1. Настроено время таймаута меню загрузки в 1 секунду.
2. Установлен и активирован selinux в режиме Permissive. 2. Установлен и активирован selinux в режиме Permissive.
3. Создан и примонтирован mdadm raid1 в `/var/lib/postgresql/`. 3. Создан и примонтирован mdadm raid1 в `/var/lib/postgresql/`.
4. Установлен PostgreSQL, данные хранятся в raid1, выполняется написанный вами sql запрос из секции задания 3. 4. Установлен PostgreSQL, данные хранятся в raid1, выполняется написанный вами sql запрос из секции задания 3.
5. Написан Ansible Playbook, который настраивает машину из состояния снепшота, как описано в секции ззадания 2. 5. Написан Ansible Playbook, который настраивает машину из состояния снепшота, как описано в секции задания 2.
Loading…
Cancel
Save