0  /  16

Linux. Сетевое администрирование

Конфигурация сетевых интерфейсов

Конфигурация сетевых интерфейсов

NetworkManager — популярный инструмент управления сетевыми подключениями в Linux, имеет удобный графический интерфейс как для Gnome, так и для KDE, но в этой инструкции будет рассмотрена настройка Network Manager в консоли с помощью утилиты nmcli (command-line tool for controlling NetworkManager)

В общем виде синтаксис выглядит так:

nmcli <options> <section> <action>
  • options — это параметры, которые определяют тонкости работы nmcli,
  • section (секция) — определяет, какими возможностями утилиты пользоваться,
  • action (действие) — позволяет указать, что, собственно, нужно сделать.

Настройка интерфейса

  • con  сокращенно от connection (можно писать сокращенно или полностью)
  • mod — сокращенно от modify (можно писать сокращенно или полностью)
  • dev — сокращенно от device (можно писать сокращенно или полностью)
  • ens33 — имя интерфейса
  • ipv4.addresses — семейство протокола ipv4

Переименовать имя соединения:

 nmcli con mod  "Wired connection 1" con-name "lan"

Установка адреса в ручном режиме:

nmcli con mod ens33 ipv4.method manual

Получить IP адрес автоматически через DHCP:

nmcli con mod ens33 ipv4.method auto

Установить IP адрес:

nmcli con mod ens33 ipv4.addresses 192.168.100.25/24

Удалить IP адрес:

nmcli con mod ens33 ipv4.addresses ""

Установить шлюз по умолчанию:

nmcli con mod ens33 ipv4.gateway  20.20.20.1

Удалить шлюз по умолчанию:

nmcli con mod ens33 ipv4.gateway ""

Установить DNS:

nmcli con mod ens33 ipv4.dns 8.8.8.8

Удалить DNS адрес:

nmcli con mod ens33 ipv4.dns ""

Включить интерфейс:

nmcli con up ens33

Выключить интерфейс:

nmcli con down ens33

Добавить дополнительный IP адрес:

nmcli con mod ens33 +ipv4.addresses "192.168.180.189/24"

Удалить IP адрес (второй вариант):

nmcli con mod ens33 -ipv4.addresses "192.168.8.189/24"

Добавить VLAN c тегом 21 на физический интерфейс ens33 (InterVLAN):

nmcli con add type vlan con-name VLAN21 ifname VLAN21 dev ens33 id 21

Установить IP адрес VLAN интерфейсу:

nmcli con mod VLAN21 ipv4.addresses 172.10.10.11/24

Команды диагностики

Cостояние всех интерфейсов:

nmcli dev status

Краткое состоянии всех интерфейсов:

nmcli -t dev

Cостояние физических интерфейсов и их UUID:

nmcli con show

Информация о конкретном интерфейсе:

nmcli dev show ens33

Информация о соединении интерфейса:

nmcli con show ens33

Временная маршрутизация

Посмотреть таблицу маршрутизации:

ip route

Добавить временный маршрут на сеть 192.168.2.0/24 через 192.168.100.1:

ip route add 192.168.2.0/24 via 192.168.100.1

Изменить временный маршрут:

ip route change 192.168.2.0/24 via 192.168.8.10

Добавить второй временный шлюз для сети 192.168.2.0/24 (балансировка маршрута):

ip route append 192.168.2.0/24 via 192.168.8.11

Удалить временный маршрут на сеть 192.168.2.0/24 через 192.168.8.12:

ip route del 192.168.2.0/24 via 192.168.8.11

Удалить временный маршрут на сеть 192.168.2.0/24 :

ip route del 192.168.2.0/24

Постоянная маршрутизация

Добавить маршрут на сеть 192.168.2.0/24 через 192.168.8.2 на интерфейсе ens33:

nmcli con mod ens33 +ipv4.routes "192.168.2.0/24 192.168.8.54" 
nmcli con up ens33 

Удалить маршрут на сеть 192.168.2.0/24 через 192.168.8.2 на интерфейсе ens33:

nmcli con mod ens33 -ipv4.routes "192.168.2.0/24 192.168.8.54" 
nmcli con up ens33 

Изменить метрику на интерфейсе:

nmcli con mod ens33 ipv4.route-metric 400
nmcli con up ens33

Изменить mtu на интерфейсе:

nmcli con mod ens33  ethernet.mtu 1600
nmcli con up ens33


Конфигурация NTP сервера

Конфигурация NTP сервера

Вывести на экран настройки часового пояса:

timedatectl

Список временных зон:

timedatectl list-timezones

Установить временную зону «Ташкент UTC/GMT +05 UTC»:

timedatectl set-timezone Asia/Tashkent

Установка NTP

sudo apt install ntp -y

Статус службы:

systemctl status ntp

Параметры конфигурации /etc/ntp.conf

По умолчанию NTP сервер уже пред-настроен на глобально публичные сервера и можно ничего не трогать, но если вы хотите настроить его под себя и указать внутренние сервера то, необходимо закомментировать строки — 23-26 там где pool 0,1,2,3 и вписать свой сервер:

sudo nano /etc/ntp.conf



где:
  • pool — указывает на выполнение синхронизации с пулом серверов
  • server — указывает на выполнение синхронизации с сервером
  • iburst — отправлять несколько пакетов (повышает точность)

Сохраняем настройки и перезагружаем службу:

sudo systemctl restart ntp

Проверка синхронизации с указанными серверами:

ntpq -p


где:
  • remote — адрес сервера времени, с которым синхронизируется наш сервер
    • * — с этим сервером синхронизирует время наш ntpd;
    • + — сервер можно использовать для сверки часов;
    • — — не рекомендован для синхронизации;
    • x — не доступен.
  • refid — вышестоящий сервер (с которым сервер из графы выше получает время);
  • st — уровень stratum. От 0 (нам недоступно) до 16 (нам не желательно);
  • — тип сервера
    • u — unicast или manycast
    • b — broadcast или multicast
    • l — local reference clock
    • s — симметричный узел
    • A — manycast сервер
    • B — broadcast server
    • M — multicast сервер
  • when — когда последний раз сверялось время;
  • pool — частота опроса ( в секундах ) ;
  • reach —состояние работоспособности. Если удалось произвести синхронизации восемь раз подряд становится равным 377;
    • значения — 1, 3, 7, 17, 37, 77, 177, 377
  • delay — время задержки;
  • offset — разница между нашим временем и временем на сервере
    • положительное — наши часы спешат;
    • отрицательное — отстают ;
  • jitter — смещение времени на удаленном сервере;

Для ограничение круга клиентов можно (разрешить синхронизацию для узлов в сети 192.168.1.0/24):

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

где опции:

  • nomodify — предотвращает любые изменения конфигурации.
  • notrap — предотвращает ловушки протокола управляющих сообщений ntpdc
  • nopeer — предотвращает формирование одноранговой ассоциации.
  • noquery — предотвращает ответы на запросы ntpq и ntpdc, но не запросы времени.

Диагностика

NTP использует — протокол UDP порт 123

Если у вас не установлена утилита tcpdump то:

sudo apt install tcpdump -y

Далее мониторим UDP порт 123 на входящем интерфейсе (со стороны NTP клиентов):

sudo tcpdump -i eth0 -p udp  port 123

Конфигурация DNS сервера

Конфигурация DNS сервера

Подробный мануал

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

sudo apt install bind9 dnsutils -y

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

systemctl status bind9

Файлы конфигурации расположены в директории /etc/bind:

cd /etc/bind/



Master Server

Server IP: 192.168.100.174

1) Редактируем файл общих опций:

sudo nano named.conf.options

содержимое:

options {
        directory "/var/cache/bind";
        listen-on port 53 { 192.168.100.174; 127.0.0.1; };
        recursion yes;
        allow-query { any; };
        allow-transfer { 192.168.100.175;};

};

2) Редактируем файл опций локальной зоны:

sudo nano named.conf.local

содержимое:

zone "mic" in {
               type master; 
               file "/etc/bind/db.mic";
               };

zone "100.168.192.in-addr.arpa" in {
               type master;
               file "/etc/bind/db.mic.arpa";
               };

3) Создадим файл зоны прямого преобразования:

sudo touch db.mic
sudo nano db.mic

содержимое:

$TTL 34600
@  IN   SOA  server. root.server. (
                                   2021092001 ; Серийный номер зоны    
                                           2H ; Синхронизация каждые
                                          30M ; Повтор синхронизации
                                           1W ; Период повтора
                                           1D ; Кэш НЕ правильных запросов
                                   )  

@  IN   NS   server.
server       IN      A       192.168.100.183
khasan       IN      CNAME   server
hurshid      IN      A       192.168.100.20
ramil        IN      A       192.168.100.21
bekzod       IN      A       192.168.100.22

4) Создадим файл зоны обратного преобразования:

sudo touch db.mic.arpa
sudo nano db.mic.arpa 

Содержимое:

$TTL 34600
@  IN   SOA  server. root.server. (
                                   2021092001 ; Серийный номер зоны
                                           2H ; Синхронизация каждые
                                          30M ; Повтор синхронизации
                                           1W ; Период повтора
                                           1D ; Кэш НЕ правильных запросов
                                   )

@  IN   NS   server.
server       IN      A       192.168.100.183
183          IN      PTR     server.mic.
20           IN      PTR     hurshid.mic.
21           IN      PTR     ramil.mic.
22           IN      PTR     bekzod.mic.

5) Для применений изменений в конфигурационных файлах, перезапустим службу:

sudo systemctl restart bind9



6) Для того чтоб мы могли проверить работоспособность наших настроек, необходимо сменить адрес DNS сервера (временно):
echo "nameserver 127.0.0.1" |sudo tee  /etc/resolv.conf

проверяем прямую зону:

nslookup khasan.mic

Проверяем обратную зону:
nslookup 192.168.100.21



Slave Server

Server IP: 192.168.100.175

1) Редактируем файл общих опций:

sudo nano named.conf.options

содержимое:

options {
        directory "/var/cache/bind";
        listen-on port 53 { 192.168.8.229.175; 127.0.0.1; };
        recursion yes;
        allow-query { any; };

};

2) Редактируем файл опций локальной зоны:

sudo nano named.conf.local

содержимое:

zone "mic" in {
               type slave;
               masters {192.168.100.174;};
               file "/var/cache/bind/db.mic";
              };

zone "100.168.192.in-addr.arpa" in {
               type slave; 
               masters {192.168.100.174;};
               file "/var/cache/bind/db.mic.arpa";
              };

3) Для применений изменений в конфигурационных файлах, перезапустим службу:

sudo systemctl restart bind9

если все прошло без ошибок, то вы должны увидеть два новых файла в директории /var/cache/bind/:




4) Для того чтоб мы могли проверить работоспособность наших настроек, необходимо сменить адрес DNS сервера (временно):
echo "nameserver 127.0.0.1" |sudo tee  /etc/resolv.conf

проверяем прямую зону:

nslookup ramil.mic 


Проверяем обратную зону:
nslookup 192.168.100.22


Диагностика

DNS использует — протокол TCP порт 53 и протокол UDP порт 53

Если у вас не установлена утилита tcpdump то:

sudo apt install tcpdump -y
  • мониторим TCP порт 53 на входящем интерфейсе (со стороны DNS клиентов):
sudo tcpdump -i eth0 -p tcp  port 53
  • мониторим UDP порт 53 на входящем интерфейсе (со стороны DNS клиентов):
sudo tcpdump -i eth0 -p udp  port 53

Конфигурация DHCP сервера

Конфигурация DHCP сервера

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

sudo apt install isc-dhcp-server

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

sudo systemctl status isc-dhcp-server.service

1) Первом делом необходимо указать имя интерфейса с чей стороны у нас находиться LAN (интерфейс в сторону DHCP клиентов):

sudo nano /etc/default/isc-dhcp-server
INTERFACESv4="eth0"  
#INTERFACESv6=""   <----- Закомментируем

2) Сделаем копию (backup) конфигурационного файла (На тот случай если понадобиться документация):

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.ORIG

3) Опустошим все содержимое:

echo "" |sudo tee /etc/dhcp/dhcpd.conf

4) Откроем файл и приведем его в такой вид:

sudo nano /etc/dhcp/dhcpd.conf 

содержимое:

option domain-name "mic";
option domain-name-servers 8.8.8.8, 77.88.8.8;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.230 192.168.100.240;
    option broadcast-address 192.168.100.255;
    option routers 192.168.100.254;
    }


5) Запуск и проверка в логах:

sudo systemctl restart isc-dhcp-server.service

Для диагностики можем наблюдать лог файл:

sudo tail -f /var/log/syslog

При необходимости можем добавить статических клиентов (привязка IP адреса к MAC адресу) в конфигурационном файле /etc/dhcp/dhcpd.conf :

host stud1 {
     hardware ethernet 00:0c:29:c1:7d:a9;
     fixed-address 192.168.100.170;
}


Конфигурация NFS сервера

Конфигурация NFS сервера

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

sudo apt install nfs-kernel-server

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

systemctl status nfs-kernel-server.service

1) Создаем папки для шаринга:

sudo mkdir /PublicNFS_r
sudo mkdir /PublicNFS_rw
sudo mkdir /PublicNFS_no_squash

2) Меняем хозяина для шаринг папок (id nobody)

sudo chown nobody:nogroup /PublicNFS*
ls -ld /PublicNFS*

3) Редактируем конфигурационный файл:

sudo nano /etc/exports

добавляем содержание:

/PublicNFS_r   *(ro,all_squash,root_squash)
/PublicNFS_rw  *(rw,all_squash,root_squash)
/PublicNFS_no_squash *(rw,no_all_squash,no_root_squash)

где:

  • ro- только для чтения
  • rw — читать и писать
  • squash — анонимный вход
  • no_squash — не анонимный вход

4) Применяем настройки конфигурационного файла:

sudo exportfs -arv

Монтирование/Размонтирование (на стороне клиента)

Проверка на доступность:

sudo showmount -e 192.168.19.223

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

sudo mkdir /mnt/folder_ro
sudo mkdir /mnt/folder_rw
sudo mkdir /mnt/folder_no_sqush_rw

Монтирования:

sudo mount 192.168.19.223:/PublicNFS_r /mnt/folder_ro
sudo mount 192.168.19.223:/PublicNFS_rw /mnt/folder_rw
sudo mount 192.168.19.223:/PublicNFS_no_squash /mnt/folder_no_sqush_rw

Вывести список примонтированных устройств:

df -hT

Размонтировать:

sudo umount /mnt/folder_ro
sudo umount /mnt/folder_rw
sudo umount /mnt/folder_no_sqush_rw


Конфигурация SAMBA сервера

Конфигурация SAMBA сервера

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

sudo apt install samba

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

 systemctl status smbd.service 

1) Создам группу для пользователей самбы:

sudo groupadd sambausers 

2) Создам пользователя pupkin без права на авторизацию через терминал и добавлю его в группу для самбы:

sudo useradd -s /sbin/nologin -g sambausers pupkin

3) Создам пароль для самба пользователя:

sudo smbpasswd -a pupkin

4) Создам ресурс для шаринга:

sudo mkdir -p /network/samba_share
sudo chown -R root:sambausers /network/samba_share
sudo chmod 2775 /network/samba_share

5) Настраиваю конфиг файл:

sudo nano /etc/samba/smb.conf

Добавляю содержимое:

[nix]
  comment = sambausers test     
  path = /network/samba_share     
  read only = no       
  valid users = @sambausers 

Где:

  • [nix] — имя ресурса, обязательно в квадратных скобках
  • comment — краткий комментарий, описывающий ресурс
  • path — абсолютный путь до расшареной папки
  • read only — работать только в режиме только чтение
  • valid users — какие пользователи будут иметь доступ (после знака @ указывается имя группы)

6) Для применение настроек, перезапускаю службу:

sudo systemctl restart smbd

Порты

SMB может работать на верхнем слое сетевой сессии (или ниже) несколькими путями:

  • Напрямую через TCP, порт 445;
  • Через NetBIOS API, который в свою очередь может работать несколькими способами:
    • Через UDP, порты 137,138 и TCP, порты 137, 139;
    • С помощью устаревших протоколах, таких как NBF, IPX/SPX;

Конфигурация FTP сервера

Конфигурация FTP сервера

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

sudo apt install vsftpd

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

systemctl status vsftpd.service

1) Создаем директорию для шаринга:

sudo mkdir /var/ftp/

2) Создаем пользователя и расположим домашнюю директорию в /var/ftp:

sudo useradd ramil -m -d /var/ftp/ramil -s /sbin/nologin

3) Пароль для пользователя:

sudo passwd ramil

4) В добавок к правам пользования сервисом пользователя, но без авторизации через терминал, необходимо добавить строку в файл:

echo "/sbin/nologin" |sudo tee -a /etc/shells

Далее все опционально, в конфигурационном файле сервиса /etc/vsftpd.conf

  • Для того чтоб пользователи не могли выходить за пределы своих директорий:
chroot_local_user=YES
allow_writeable_chroot=YES
  • Права на запись:
write_enable=YES

Включаем явное SSL шифрование (Explicit SSL)

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

sudo mkdir /etc/ssl/private

Генерация SSL ключа и сертификата:

sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/vsftpd.key -x509 -days 365 -out /etc/ssl/private/vsftpd.crt

Добавляем строки в конфигурационный файл /etc/vsftpd/vsftpd.conf:

rsa_cert_file=/etc/ssl/private/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Перезапускаем службу:

sudo systemctl restart vsftpd 

Включаем НЕ явное шифрование (Implict SSL)

Добавляем строки в конфигурационный файл /etc/vsftpd/vsftpd.conf:

implicit_ssl=YES
listen_port=990

Перезапускаем службу:

sudo systemctl restart vsftpd 


Фаервол в Linux

Фаервол в Linux

iptables, firewalld, ufw, nft — это только интерфейс (фреймворк) для управления фаерволом в Linux, там где мы можем писать команды, а он уже интерпретирует самому фаерволу который работает на уровне ядра.

  • iptables — старейший дед с мощными возможностями интерфейса, для управления фаерволом (авторитетный среди линуксоидов)
  • firewalld — неудачная попытка замены iptables, так и не успела получить авторитет, документация скудная (большинства админов удаляли его и ставили обратно iptables )
  • ufw — слабак по сравнению с гигантами iptables и firewalld, выполняет только простые операции (открыть, закрыть порт)
  • nft — родной интерфейс для нового фаервола nftables, так же мощный/удобный как и iptables (давно знаком среди администраторов ArchLinux и по этому достаточно большая документаций)

netfilter, nftables — это уже сам фаервол работающий на базе ядра Linux

  • netfilter — межсетевой экран (брандмауэр, фаервол),  был основан в 1998. В марте 2000 г. был включен в  ядро начиная с версии 2.3


  • nftables — межсетевой экран (брандмауэр, фаервол). Включена в ядро Linux, начиная с версии 3.13, выпущенной 19 января 2014 года, служит заменой устаревшей netfilter, принцип прохождения цепочек аналогичен предшественнику только объединяет возможности для ipv4, ipv6, arp

В Debian 11 по умолчанию работают iptables и nft, из за большого объёма информации первый разберу только в данном мануале, в учебном центре будем рассматривать второй, и то он займет два занятия хотя при этом рассмотрим только 50% возможности, остальные уже требуют глубоких знаний у слушателей и выходит за рамки учебного материала (если начну рассматривать то для большинства студентов микроса буду звучать как на французском, а для продвинутых не составит труда самостоятельно разобрать по мануалом )

Синтаксис iptables

Синтаксис iptables

iptables — работает в режиме совместимости и ссылается на утилиту iptables-nft, а значит в бэкграунде работает nft

  • filter — предназначен для фильтрации трафика, состоит из трех компонентов:
    • INPUT — для входящих пакетов, адресованных непосредственно локальному серверу
    • FORWARD — для перенаправления (транзитного) трафика между разными сетями или сетевыми интерфейсами
    • OUTPUT — для исходящих пакетов, генерируемых локальным сервером.
  • nat — предназначен для замены/подмены IP адресов, состоит из трех компонентов:
    • POSTROUTING — для обработки исходящих (транзитных) пакетов (SNAT, MASQUERADE)
    • PREROUTING — для обработки входящих пакетов (DNAT,REDIRECT)
    • OUTPUT — для исходящих пакетов, генерируемых локальным сервером
  • mangle — предназначен для модификации заголовок IP пакетов (TTL,TOS,MARK), редко необходим и может быть опасен для не опытных, состоит из пяти компонентов:
    • INPUT
    • FORWARD
    • OUTPUT
    • POSTROUTING
    • PREROUTING
  • raw — предназначен для маркировки пакетов, которые НЕ должны обрабатываться системой, редко необходим, состоит из двух компонентов:
    • PREROUTING
    • OUTPUT

P.S. Компоненты с одинаковым названием, но в разных таблицах — совершенно независимые объекты

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

 sudo iptables -L

Таблица filter (INPUT)

  • Разрешить входящий трафик с сети 192.168.19.0/24
iptables -A INPUT -s 192.168.19.0/24 -j ACCEPT
  • Запретить входящий трафик с сети 192.168.19.0/24
iptables -A INPUT -s 192.168.19.0/24 -j DROP
  • Запретить входящий трафик с хоста
iptables -A INPUT -s 192.168.19.224/32  -j DROP
  • Открыть порт 80 для всех входящих
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • Разрешить только с одного хоста
iptables -A INPUT -s 192.168.19.224/32 -p tcp --dport ssh -j ACCEPT
  • Разрешить весь входящий трафик для интерфейса
iptables -A INPUT -i ens32  -j ACCEPT
  • Разрешить весь входящий трафик для интерфейса с определенной сети
iptables -A INPUT -i ens32 -s 192.168.19.0/24 -j ACCEPT
  • Разрешить весь входящий трафик для интерфейса кроме определенной сети
iptables -A INPUT -i ens32 ! -s 192.168.19.0/24 -j ACCEPT
  • Разрешить для интерфейса входящий трафик с хоста по протоколу и порту
iptables -A INPUT -i ens32 -s 192.168.19.224/32  -p tcp --dport 80 -j ACCEPT
  • Несколько портов в одном правиле
iptables -A INPUT -i ens32 -s 192.168.19.0/24  -p tcp -m multiport --dports 80,81,443,53 -j ACCEPT
  • привязка по MAC адресу
iptables -A INPUT -i ens32 -s 192.168.19.224/32 -m mac --mac-source a0:8c:fd:a3:ed:a4 -p icmp -j ACCEPT
  • По времени
iptables -A INPUT -i ens32 -m mac --mac-source a0:8c:fd:a3:ed:a4  -m time --timestart 12:03 --timestop 16:04 -j ACCEPT
  • Ограничения по количеству пакетов
iptables -A INPUT -p icmp -m limit --limit 10/m -j ACCEPT
  • Ограничения по размеру
iptables -A INPUT -p icmp --icmp-type echo-request -m length  --length 93:0xffff -j DROP
  • логирование
iptables -A INPUT -p icmp -j LOG --log-prefix "ICMP_TRACE"
  • Разрешить вход тех пакетов которые сервер сам запросил, а так же уже установленные сессии
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Таблица filter (FORWARD)

  • Разрешить передачу трафика от сетевой карточки ens32 к другой сетевой карточки ens33
iptables -A FORWARD -i ens32 -o ens33
  • Разрешить передачу трафика от сетевой карточки ens33 к другой сетевой карточки ens32
iptables -A FORWARD -i ens33 -o ens32 
  • от сети 192.168.19.0/24 к сети 192.168.100.0/24
iptables -A FORWARD -s 192.168.19.0/24 -d 192.168.100.0/24 -j ACCEPT
  • от сети 192.168.100.0/24 к сети 192.168.19.0/24
iptables -A FORWARD -s 192.168.100.0.24 -d 192.168.100.0/24 -j ACCEPT

Таблица filter (OUTPUT)

Как правило исходящий трафик со стороны сервера не запрещают, но бывают некоторые исключения, например если на сервер установили «крякнутый» софт, который будет требовать лицензию, и появилось необходимость заблокировать попытку обращения на официальный ресурс

iptables -A OUTPUT -d 192.168.0.50 -j DROP

Таблица nat (POSTROUTING)

  • MASQUERADE — Для исходящих пакетов заменяет IP-адрес источника на адрес интерфейса, с которого уходит пакет
iptables -t nat -A POSTROUTING -s 192.168.19.0/24 -o ens33 -j MASQUERADE
  • SNAT — Аналогично MASQUERADE, но с указанием конкретного адреса, чей адрес будет использоваться для подмены
iptables -t nat -A POSTROUTING -s 192.168.19.0/24 -o ens33 -j SNAT --to-source 1.1.1.1

Таблица nat (PREROUTING)

  • Пробросить порт 8000/tcp на другой сервер с адресом 10.7.0.169 (DNAT)
iptables -t nat -A PREROUTING  -p tcp --dport 8000 -j DNAT --to-destination 10.7.0.169
  • Пробросить порт 8080/tcp на порт 80 (REDIRECT)
iptables -t nat -A PREROUTING  -p tcp --dport 8080 -j REDIRECT --to-port 80

Важный момент

  • Порядок действий происходит сверху вниз, важно понимать если вы сначала напишите разрешить а следующим правилом запретить то будет выполняться первое правила а на второе не будет доходить
  • Даже в случае пинга внешних хостов, нужно не только отправить пакеты к ним, но и получить ответ. При работе с iptables важно помнить, что многие протоколы передачи данных требуют двусторонней коммуникации. Поэтому нужно настраивать правила соответствующим образом — случаи, когда новички забывают разрешить работу с сервером по SSH случаются очень часто.


Синтаксис nft

Синтаксис nft

На протяжении многих лет, соединения Linux систем защищает netfilter. К сожалению, по мере развития этот пакетный фильтр обрастал серьезными проблемами на функциональном уровне и в дизайне. Взвесив все за и против, разработчики решили отказаться от метода костылей и создали новый файер, имя которому nftables. Пакетный фильтр Nftables примечателен унификацией интерфейсов фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов.

nft является родным интерфейсом управления для nftables

Посмотреть список всех правил во всех таблицах:

sudo nft list ruleset

Посмотреть список всех правил во всех таблицах в реальном времени c интервалом 1s:

sudo watch -n 1 nft list ruleset

Полностью очистить набор активных правил можно командой:

nft flush ruleset

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

nft add rule [<family>] <table> <chain> <matches> <statements>

nft insert rule [<family>] <table> <chain> [position <position>] <matches> <statements>

nft replace rule [<family>] <table> <chain> [handle <handle>] <matches> <statements>

nft replace rule [<family>] <table> <chain> [handle <handle>] <matches> <statements>

nft delete rule [<family>] <table> <chain> [handle <handle>]

Перед тем как создавать правило, необходимо создать таблицу с ее «блокпостами» (правильно конечно называть цепочки, блокпост это уже мое восприятие на картинку в целом)

Таблица filter

Создать таблицу фильтр:

nft add table ip filter 

Создать блокпост INPUT с разрешающими правилами по умолчанию:

nft add chain ip filter INPUT { type filter hook input priority 0 \; policy accept \;   }
  • Параметр приоритет задаётся названием приоритета или его значением
  • Цепочки с более низкими значениями обрабатываются раньше.
  • Значение приоритета может быть отрицательным

Создать блокпост FORWARD с разрешающими правилами по умолчанию:

nft add chain ip filter FORWARD { type filter hook forward priority 0 \; policy accept \;   }

Создать блокпост OUTPUT с разрешающими правилами по умолчанию:

nft add chain ip filter OUTPUT { type filter hook output priority 0 \; policy accept \;   }

INPUT

  • Разрешить входящий трафик с сети 192.168.19.0/24
nft add rule ip filter INPUT ip saddr 192.168.19.0/24 counter accept
  • Запретить входящий трафик с сети 192.168.19.0/24
nft add rule ip filter INPUT ip saddr 192.168.19.0/24 counter drop
  • Запретить входящий трафик с хоста 192.168.19.224/32
nft add rule ip filter INPUT ip saddr 192.168.19.224 counter drop
  • Запретить входящий трафик с диапазона хостов 192.168.19.224-228
nft add rule ip filter INPUT ip saddr 192.168.19.224-192.168.19.228 counter drop
  • Запретить входящий трафик с хостов 192.168.5.1, 192.168.5.5, 192.168.5.8
nft add rule ip filter INPUT ip saddr { 192.168.5.1, 192.168.5.5, 192.168.5.8 } counter drop
  • Открыть порт 80 для всех входящих
nft add rule ip filter INPUT tcp dport 80 counter accept
  • Разрешить ssh только с одного хоста
nft add rule ip filter INPUT ip saddr 192.168.19.224 tcp dport 22 counter accept
  • Несколько портов в одном правиле, разрешить входящий трафик на порты протокола TCP 80, 81, 443, 53
nft add rule ip filter INPUT iifname "ens32" ip protocol tcp  tcp dport { 80,81,443,53} counter accept
  • Разрешить весь входящий трафик для интерфейса
nft add rule ip filter INPUT iifname "ens32" counter accept
  • Разрешить весь входящий трафик для интерфейса с определенной сети
nft add rule ip filter INPUT iifname "ens32" ip saddr 192.168.19.0/24 counter accept
  • Разрешить весь входящий трафик для интерфейса кроме определенной сети
nft add rule ip filter INPUT iifname "ens32" ip saddr != 192.168.19.0/24 counter accept
  • Разрешить для интерфейса входящий трафик с хоста по протоколу и порту
nft add rule ip filter INPUT iifname "ens32" ip saddr 192.168.19.224 tcp dport 80 counter accept
  • Несколько портов в одном правиле, разрешить входящий трафик на порты протокола TCP 80, 81, 443, 53 с входящего интерфейса ens32
nft add rule ip filter INPUT iifname "ens32" ip protocol tcp ip saddr 192.168.19.0/24 tcp dport { 80,81,443,53} counter accept
  • Разрешить ICMP пакеты с хоста 192.168.19.224 у которого мак адрес a0:8c:fd:a3:ed:a4 со стороны интерфейса ens32
nft add rule ip filter INPUT iifname "ens32" ip protocol icmp ip saddr 192.168.19.224 ether saddr a0:8c:fd:a3:ed:a4 counter accept
  • Ограничения по количеству пакетов
nft add rule ip filter INPUT ip protocol icmp limit rate 10/minute burst 5 packets counter accept
  • Ограничения по размеру (+29)
nft add rule ip filter INPUT icmp type echo-request meta length 93-65535 counter drop
  • логирование
nft add rule ip filter INPUT ip protocol icmp counter log prefix \"ICMP_TRACE\"
  • Разрешить вход тех пакетов которые сервер сам запросил, а так же уже установленные ссесии
nft add rule ip filter INPUT ct state related,established  counter accept


FORWARD

  • Разрешить передачу трафика от сетевого интерфейса ens32 к другому сетевому интерфейсу ens33
nft add rule ip filter FORWARD iifname "ens32" oifname "ens33" counter  accept
  • Разрешить передачу трафика от сетевого интерфейса ens33 к другому сетевому интерфейсу ens32
nft add rule ip filter FORWARD iifname "ens33" oifname "ens32" counter  accept
  • от сети 192.168.19.0/24 к сети 192.168.100.0/24
nft add rule ip filter FORWARD ip saddr 192.168.19.0/24 ip daddr 192.168.100.0/24 counter accept 
  • от сети 192.168.100.0/24 к сети 192.168.19.0/24
nft add rule ip filter FORWARD ip saddr 192.168.100.0/24 ip daddr 192.168.100.0/24 counter accept

Остальное все по тому же правилу что и в INPUT, но только не нарушайте логических правил

OUTPUT

Как правило исходящий трафик со стороны сервера не запрещают, но бывают некоторые исключения, например если на сервер установили «крякнутый» софт, который будет требовать лицензию, и появилось необходимость заблокировать попытку обращения на официальный ресурс

nft add rule ip filter OUTPUT ip daddr 192.168.0.50 counter drop

Остальное все по тому же правилу что и в INPUT, но только не нарушайте логических правил


Таблица NAT

Создать таблицу NAT

nft add table ip nat

Создать блокпост POSTROUTING с разрешающими правилами по умолчанию

nft add chain nat postrouting { type nat hook postrouting priority 0 \; policy accept \; }

Создать блокпост PREROUTING с разрешающими правилами по умолчанию

nft add chain nat prerouting  { type nat hook prerouting priority 0 \; policy accept \; }

POSTROUTING

  • Замена SRC адреса из сети 192.168.19.0/24 на адрес 1.1.1.1 при выходе с интерфейса ens33 (SNAT)
nft add rule ip nat POSTROUTING oifname "ens33" ip saddr 192.168.19.0/24 counter snat to 1.1.1.1
  • Замена SRC адреса из сети 192.168.19.0/24 на адрес интерфейса ens33 при выходе с интерфейса ens33 (MASQUARADE)
nft add rule ip nat POSTROUTING oifname "ens33" ip saddr 192.168.19.0/24 counter masquerade

PREROUTING

  • Пробросить порт 8000/tcp на другой сервер с адресом 10.7.0.169 (DNAT)
nft add rule ip nat PREROUTING tcp dport 8000 counter dnat to 10.7.0.169
  • Пробросить порт 8000/tcp на другой порт 80 сервера с адресом 10.7.0.169
nft add rule ip nat PREROUTING tcp dport 8000 counter dnat to 10.7.0.169:80
  • Пробросить порт 8080/tcp на порт 80 (REDIRECT)
nft add rule ip nat PREROUTING tcp dport 8080 counter redirect to :80
  • Пробросить порт 8080/tcp из входящего интерфейса eth0 на порт 80
nft add rule ip nat PREROUTING iifname "eth0" tcp dport 8080 counter redirect to :80

Сохраняем правила

чтобы текущие активные правила nftables попали в стартовую конфигурацию nftables:

echo '#!/usr/sbin/nft -f' > /etc/nftables.conf
echo 'flush ruleset' >> /etc/nftables.conf
nft list ruleset >> /etc/nftables.conf

Смотрите также

Трансляция синтаксиса правил с iptables в nft:

 iptables-translate <правила iptables>

Важный момент

  • Порядок действий происходит сверху вниз, важно понимать если вы сначала напишите разрешить а следующим правилом запретить то будет выполняться первое правила а на второе не будет доходить
  • Даже в случае пинга внешних хостов, нужно не только отправить пакеты к ним, но и получить ответ. При работе с iptables важно помнить, что многие протоколы передачи данных требуют двусторонней коммуникации. Поэтому нужно настраивать правила соответствующим образом — случаи, когда новички забывают разрешить работу с сервером по SSH случаются очень часто.

Конфигурация GRE

GRE

Generic Routing Encapsulation – простой протокол туннелирования. Это означает, что берутся ваши изначальные данные вместе со служебными заголовками, упаковываются в пакет и передаются по публичной сети.

Конфигурация GRE

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




Изначальные данные

  • VPN Server 1 c IP адресом 20.20.20.2 через публичную сеть видит VPN Server 2 с IP адресом 40.40.40.2:


  • Компьютер из локальной сети 192.168.1.0/24 с адресом 192.168.1.2 не видит компьютер из локальной сети 172.16.0.0/24 с адресом 172.16.0.2:


VPN Server 1

  • Поднимаем интерфейс tun0:
nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name tun0 ifname tun0 remote 40.40.40.2 local 20.20.20.2
nmcli connection modify tun0 ipv4.addresses '1.1.1.1/30'
nmcli connection modify tun0 ipv4.method manual
nmcli connection modify tun0 +ipv4.routes "172.16.0.0/24 1.1.1.2"
nmcli connection up tun0
  • Разрешаем транзитный трафик, для этого нужно раскомментировать строку net.ipv4.ip_forward=1 в файле /etc/sysctl.conf:

  • Сохраняем и применяем командой:
sysctl -p

В результате:

  • Появился интерфейс tun0:


  • Появился маршрут на сеть 172.16.0.0/24:


VPN Server 2

  • Поднимаем интерфейс tun0:
nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name tun0 ifname tun0 remote 20.20.20.2 local 40.40.40.2
nmcli connection modify tun0 ipv4.addresses '1.1.1.2/30'
nmcli connection modify tun0 ipv4.method manual
nmcli connection modify tun0 +ipv4.routes "192.168.1.0/24 1.1.1.1"
nmcli connection up tun0
  • Разрешаем транзитный трафик, для этого нужно раскомментировать строку net.ipv4.ip_forward=1 в файле /etc/sysctl.conf:


  • Сохраняем и применяем командой:
sysctl -p

В результате:

  • Появился интерфейс tun0:


  • Появился маршрут на сеть 192.168.1.1/24:

  •  Компьютер из локальной сети 192.168.1.0/24 с адресом 192.168.1.2 видит компьютер из локальной сети 172.16.0.0/24 с адресом 172.16.0.2:


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



  • Так же для анализа предоставляю файл в формате понятный для wireshark
  • Скачать актуальный wireshark для вашей системы можно по ссылке

Для остановки туннеля можно дать команду:

nmcli connection down tun0

После можно уже удалить туннель если он вам больше не нужен:

nmcli connection del tun0

Конфигурация IPSec

IPSec

IPSEC, сокращенный IP Security, представляет собой набор протоколов, стандартов и алгоритмов для защиты трафика по ненадежной сети, такой как Интернет. IPseс поддерживается всеми дистрибутивами Linux и позволяет обезопасить данные в сети. 

Конфигурация IPSec

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




Phase 1
  • Метод аутентификации
    • PSK
    • PKI
  • Алгоритмы аутентификации и шифрования
    • ikev1
    • ikev2
  • Метод безопасного обмена крипто ключами
    • DH Group 2
    • DH Group 5
    • DH Group 7
    • DH Group 12
    • DH Group 14
  • Метод шифрования
    • DES
    • 3DES
    • AES128
    • AES256
  • Метод хеширования
    • MD5
    • sha1
    • sha2
    • sha128
    • sha256

Phase 2

  • Протокол
    • ESP
    • AH
  • Метод инкапсуляции
    • Tunnel
    • Transport
  • Метод шифрования
    • DES
    • 3DES
    • AES
    • AES128
    • AES256
  • Метод хеширования
    • MD5
    • sha1
    • sha2
    • sha128
    • sha256


Изначальные данные

  • VPN Server 1 c IP адресом 20.20.20.2 через публичную сеть видит VPN Server 2 с IP адресом 40.40.40.2:


  • Компьютер из локальной сети 192.168.1.0/24 с адресом 192.168.1.2 не видит компьютер из локальной сети 172.16.0.0/24 с адресом 172.16.0.2:


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

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

sudo apt install strongswan

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

systemctl status ipsec.service

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

sudo cp /etc/ipsec.conf /etc/ipsec.conf.ORIG

VPN Server 1

1) Редактируем конфигурационный файл:

sudo nano /etc/ipsec.conf 

содержимое:

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no

conn %default
        type=tunnel
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        # Phase 1
        keyexchange=ikev2
        authby=psk
        ike=aes256-sha2_256-modp2048!
        ikelifetime=86400s
        # Phase 2
        esp=aes256-sha2_256-modp2048!
        lifetime=3600s
        auto=start
#------------------------------------
conn vpnServer2
        left=20.20.20.2 
        leftsubnet=192.168.1.0/24
        right=40.40.40.2    
        rightsubnet=172.16.0.0/24

2) Добавляем строку для обмена Preshared keys:

 sudo nano /etc/ipsec.secrets

содержимое:

20.20.20.2 40.40.40.2 : PSK '#Micros@123'

3) Запуск тунеля:

sudo ipsec start

Диагностика

Статус активных туннелей можно посмотреть с помощью команды:

sudo ipsec statusall


Таблицу маршрутизации IPSec туннелей можно посмотреть с помощью команды:
sudo ip xfrm policy

Информация про первую фазу:

sudo ip xfrm state

VPN Server 2

1) Редактируем конфигурационный файл:

sudo nano /etc/ipsec.conf 

содержимое:

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no

conn %default
        type=tunnel
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        # Phase 1
        keyexchange=ikev2
        authby=psk
        ike=aes256-sha2_256-modp2048!
        ikelifetime=86400s
        # Phase 2
        esp=aes256-sha2_256-modp2048!
        lifetime=3600s
        auto=start
#------------------------------------
conn vpnServer1
        left=40.40.40.2
        leftsubnet=172.16.0.0/24
        right=20.20.20.2    
        rightsubnet=192.168.1.0/24

2) Добавляем строку для обмена Preshared keys:

 sudo nano /etc/ipsec.secrets

содержимое:

40.40.40.2 20.20.20.2 : PSK '#Micros@123'

3) Запуск тунеля:

sudo ipsec start

Диагностика

Статус активных туннелей можно посмотреть с помощью команды:

sudo ipsec statusall


Таблицу маршрутизации IPSec туннелей можно посмотреть с помощью команды:
sudo ip xfrm policy

Информация про первую фазу:

sudo ip xfrm state

Результат:

  • Компьютер из локальной сети 192.168.1.0/24 с адресом 192.168.1.2 видит компьютер из локальной сети 172.16.0.0/24 с адресом 172.16.0.2:


  • Компьютер из локальной сети 172.16.0.0/24 с адресом 172.16.0.1 видит компьютер из локальной сети 192.168.1.0/24 с адресом 192.168.1.1:


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



  • Так же для анализа предоставляю файл в формате понятный для wireshark
  • Скачать актуальный wireshark для вашей системы можно по ссылке

Конфигурация SQUID

Proxy Server

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

Такие посредники довольно многофункциональны и используются в локальных сетях при сценариях:

  1. Для повышения уровня безопасности при выходе в сеть. Базовые атаки будут направлены именно на прокси.
  2. Чтобы ускорить доступ к некоторым ресурсам в интернете за счет кэширования трафика.
  3. Для мониторинга использования ресурса
  4. Собирать статистику часто посещаемых ресурсов
  5. Ну и для того, чтобы контролировать использования трафика, блокировка определенного контента (сайтов, мессенджеров, ограничение на типы файлов при закачке).

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

Подробный мануал

Конфигурация SQUID

Рассмотрим пример конфигурации по топологии:



Задача: Выпустить в интернет три локальной сети, общая скорость интернета 30 Мб/ceк, каждой сети выделить по 10 Mb/sec ширины канала, заблокировать социальные сети ( ok.ru, odnoklassniki.ru, vk.com, facebook.com ), ограничения действительны в рабочее время с 9:00 до 18:00 так же по рабочим дням (пяти дневка), работать в интернете разрешена только по портам: 80, 443, 8080, 110 и 25

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

sudo apt install squid

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

systemctl status squid

Первым делом сделаем бэкап конфигурационного файла:

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.ORIG

Обнуляем содержимое (только в учебном процессе):

echo "" |sudo tee /etc/squid/squid.conf

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

sudo nano /etc/squid/squid.conf

Содержимое:

visible_hostname Proxy
http_port 3128

acl lan1 src 192.168.1.0/24
acl lan2 src 192.168.2.0/24
acl lan3 src 192.168.3.0/24

acl lan src 192.168.0.0/16

acl safe_ports  port 80 443 8080 110 25 53
acl block_url dstdomain "/etc/squid/block_url.txt"
acl WorkTime  time MTWHF  09:00-18:00

delay_pools 3

delay_class 1 1
delay_access 1 allow lan1
delay_parameters 1 1280000/1280000

delay_class 2 1
delay_access 2 allow lan2
delay_parameters 2 1280000/1280000

delay_class 3 1
delay_access 3 allow lan3
delay_parameters 3 1280000/1280000

http_access deny lan block_url
http_access allow lan safe_ports WorkTime
http_access deny all

Создаем файл для блокировки заданных url:

sudo nano /etc/squid/block_url.txt 

содержимое:

ok.ru
odnoklassniki.ru
vk.com
facebook.com

Перечитать конфиг файл (не перезапуская тем самым не тратя время на остановку):

sudo squid -k reconfigure

Минус ограничение скорости в squid — это то, что пользователей Вы можете ограничить только по HTTP/S трафику. Все, что проходит мимо Squid — не ограничивается.

Конфигурация Apache

Apache

Apache является кроссплатформенным ПО, поддерживает операционные системы Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.

Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентификации пользователей, модифицировать сообщения об ошибках и т. д.

Документации Apache, + еще один полезный гайд

Конфигурация Apache

Первое, что необходимо сделать — это в DNS сервере, отвечаю- щем за зону .vcom, определить запись А, cвязывающую имя машины www с IP адресом Вашего WEB сервера.

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

sudo apt install apache2 -y

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

systemctl status apache2.service

Файлы конфигурации расположены в директории /etc/apache2/

Задача: Настроить и запустить web сервер apache с четырьмя виртуальными доменами, которые будут прослушивать 80 порт

1) Создадим директории в которых будут храниться начинка доменов:

sudo mkdir /var/www/tashkent
sudo mkdir /var/www/buhara
sudo mkdir /var/www/samarkand
sudo mkdir /var/www/fergana

2) В каждой директории создадим index.html файл с наполнением:

tashkent

<html>
    <body bgcolor='#005555' text='yellow'>
       <H1 align="center"> Web server for TASHKENT
       <H2 align="center"> Web server for TASHKENT
       <H3 align="center"> Web server for TASHKENT
       <H4 align="center"> Web server for TASHKENT
       <H5 align="center"> Web server for TASHKENT
       <H6 align="center"> Web server for TASHKENT
    </body>
</html>

buhara

<html>
   <body bgcolor='#005555' text='yellow'>
      <H1 align="center"> Web server for BUHARA
      <H2 align="center"> Web server for BUHARA
      <H3 align="center"> Web server for BUHARA
      <H4 align="center"> Web server for BUHARA
      <H5 align="center"> Web server for BUHARA
      <H6 align="center"> Web server for BUHARA
   </body>
</html>

samarkand

<html>
   <body bgcolor='#005555' text='yellow'>
      <H1 align="center"> Web server for SAMARKAND
      <H2 align="center"> Web server for SAMARKAND
      <H3 align="center"> Web server for SAMARKAND
      <H4 align="center"> Web server for SAMARKAND
      <H5 align="center"> Web server for SAMARKAND
      <H6 align="center"> Web server for SAMARKAND
   </body>
</html>

fergana

<html>
   <body bgcolor='#005555' text='yellow'>
      <H1 align="center"> Web server for FERGANA
      <H2 align="center"> Web server for FERGANA
      <H3 align="center"> Web server for FERGANA
      <H4 align="center"> Web server for FERGANA
      <H5 align="center"> Web server for FERGANA
      <H6 align="center"> Web server for FERGANA
   </body>
</html>

3) В директории /etc/apache2/sites-available создадим каждому домену конфигурационный файл:

tashkent.conf

<VirtualHost *:80>
  ServerName tashkent.vcom
  ServerAdmin root@tashkent.vcom
  DocumentRoot /var/www/tashkent/
</VirtualHost>

fergana.conf

<VirtualHost *:80>
  ServerName buhara.vcom
  ServerAdmin root@buhara.vcom
  DocumentRoot /var/www/buhara/
</VirtualHost>

samarkand.conf

<VirtualHost *:80>
  ServerName samarkand.vcom
  ServerAdmin root@samarkand.vcom
  DocumentRoot /var/www/samarkand/
</VirtualHost>

buhara.conf

<VirtualHost *:80>
  ServerName fergana.vcom
  ServerAdmin root@fergana.vcom
  DocumentRoot /var/www/fergana/
</VirtualHost>

4) Создадим мягкие ссылки с каждого конфигурационного файла из директории /etc/apache2/sites-available в директорию /etc/apache2/sites-enabled/

sudo ln -s /etc/apache2/sites-available/tashkent.conf /etc/apache2/sites-enabled/
sudo ln -s /etc/apache2/sites-available/buhara.conf /etc/apache2/sites-enabled/
sudo ln -s /etc/apache2/sites-available/fergana.conf /etc/apache2/sites-enabled/
sudo ln -s /etc/apache2/sites-available/samarkand.conf /etc/apache2/sites-enabled/

5) Перезапускаем службу:

sudo systemctl restart apache2.service 


Конфигурация Nginx

Nginx

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

Официальная документация, + неплохая книга

Apache и Nginx не живут на одном сервере так как оба выполняют схожие функции, для того чтоб не было конфликтов, остановим службу (только в том случаи если он запущен):

sudo systemctl stop apache2

Далее, замаскируем службу и защитим от случайного запуска:

sudo systemctl mask apache2

Конфигурация Nginx

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

sudo apt install nginx -y

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

systemctl status nginx.service 

1) Создадим директорию для домена:

sudo mkdir /var/www/uzbekistan

2) В созданной директории создадим index.html файл с наполнением:

<html>
    <body bgcolor='#005555' text='yellow'>
         <H1 align="center"> Web server for UZBEKISTAN
         <H2 align="center"> Web server for UZBEKISTAN
         <H3 align="center"> Web server for UZBEKISTAN
         <H4 align="center"> Web server for UZBEKISTAN
         <H5 align="center"> Web server for UZBEKISTAN
         <H6 align="center"> Web server for UZBEKISTAN
    </body>
 </html>

3) Создадим конфигурационный файл uzbekistan в директории /etc/nginx/sites-available/ с наполнением:

server {
        listen 80;
        server_name uzbekistan.vcom;
        root  /var/www/uzbekistan/;
        location / {
                   }
        }

4) Создадим мягкую ссылку на файл из директории sites-available в директорию sites-enabled:

sudo ln -s /etc/nginx/sites-available/uzbekistan /etc/nginx/sites-enabled/ 

5) Когда nginx запущен, им можно управлять, вызывая исполняемый файл с параметром -s, перечитаем конфигурационный файл:

sudo nginx -s reload
  • nginx — запуск
  • nginx -s reload — перечитать конфиг
  • nginx -s stop — Быстрое завершение
  • nginx -s quir — плавное завершение
  • nginx -s reopen — переоткрытие лог-файлов

location — перехватчик запросов

  • совпадения префикса ( url: /tash /tashkent /tashentik )
server {
        listen       80 ;
        server_nameuzbekistanvcom;
        root         /var/www/uzbekistan/;
        location /tash {
		         return 200 'Hello from tash location block';
                        }
        }
  • метод полное совпадения
server {
        listen       80 ;
        server_nameuzbekistanvcom;
        root         /var/www/uzbekistan/;
        location = /tash {
		         return 200 'Hello from tash location block';
                        }
        }


  • метод с регулярными выражениями
server {
        listen       80 ;
        server_nameuzbekistanvcom;
        root         /var/www/uzbekistan/;
        location ~ /tash {
		         return 200 'Hello from tash location block';
                        }
        }


  • прокси метод
server {
      listen 80 ;
      server_name search.vcom;
      location / {
                  proxy_pass http://www.yahoo.com;
                  }
        }


Конфигурация почтового-сервера

Конфигурация почтового-сервера POSTFIX

P.S. Предварительно нужно добавить MX запись в DNS сервер, либо в качестве учебного теста добавить домер в /etc/hosts файл:

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

sudo apt install postfix dovecot-imapd dovecot-pop3d -y

P.S. Во время установки может потребоваться предварительная настройка, выберите «интернет-сайт» а затем просто впишите свое доменное имя

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

deb http://http.us.debian.org/debian/ bullseye main contrib non-free

Статус службы можно посмотреть с помощью команды:

systemctl status postfix