Linux
  • << DEBIAN >>

  •   Сървър на отделни хостове
  •     DNS Сървър
  •     SQL Сървър
  •     WEB Сървър
  •     Пощенски Сървър
  •   PXE Server
  •   PXE UEFI Server - TFTP
  •   Debian 9
  •     Инсталиране на Debian 9
  •     Първоначални настройки (мрежа, VIM, Кирилизация)
  •     Инсталиране и настройка на SSH
  •     Инсталиране и настройка на DNS
  •     Инсталиране и настройка на NTP
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на MySQL (MariaDB)
  •     Инсталиране и настройка на PHPMyAdmin
  •     Инсталиране и настройка на собствен облак
  •     Инсталиране и настройка на SAMBA
  •     Инсталиране и настройка на FTP сървър
  •     Инсталиране и настройка на OSCAM
  •     Инсталиране и настройка на Mail server
  •       Първоначално конфигуриране на базата данни
  •       Инсталиране и конфигуриране на PostFix
  •       Инсталиране и конфигуриране на Dovecot
  •       PostFix дефинира Dovecot да удостоверява
  •       RoundCube
  •       Тестване доставката на поща
  •       Създаване на TLS криптиран ключ и сертификат
  •       WEB администриране
  •       Антиспам със SpamAssassin
  •       Антиспам с RSpmad
  •   Debian 11
  •     Как зарежда Linux
  •     Разпределение на диска при BIOS и UEFI
  •     Debian 11 на BIOS върху LVM и RAID
  •     Инсталиране на Debian 11 на BIOS и ZFS
  •     Инсталиране на Debian 11 на BIOS и ZFS-1
  •     Инсталиране на Debian 11 на UEFI и ZFS
  •     ZFS Замяна на развален огледален диск
  •     Ремонт на GRUB и INITRAMFS
  •   Debian 12
  •     Първоначални настройки
  •     DNS Сървър
  •     Добавяне на втори диск
  •     Файлов сървър + WEBMIN
  •     SAMBA
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на Nginx
  •     MySQL и PHPMyAdmin
  •     Елементарен MAIL сървър
  •       Подобрение SSL/TLS, Maildir, LMTP
  •       Подобрение ВИРТУАЛИЗАЦИЯ без MySQL
  •       Подобрение ВИРТУАЛИЗАЦИЯ и MySQL
  •       Подобрение Антиспам - SpamAssasin
  •       Подобрение Антиспам - RSpamd
  •       Защита - SPF, DKIM и DMARK
  •       Подобрение Антивирус
  •     Пълноценен MAIL сървър
  •     Пощенски сървър с iRedMail и PHPMyAdmin
  •       DKIM, SPF и DMARK
  •     MAIL сървър за вътрешна мрежа
  •     NextCloud
  •     Сървър за отдалечен достъп - RustDESK
  • << UBUNTU >>
  •   Ubuntu SERVER 22.04
  •     Инсталиране на Ubuntu 22.04 Server
  •     Първоначални настройки на Ubuntu 22.04 Server
  •     DNS в Ubuntu 22.04 Server
  •     MySQL Apache PHPMyAdmin
  •     Пощенски сървър
  •       Пощенски сървър в опростен вариант
  •       PostFix, Dovecot по-подробно
  •   Ubuntu mini
  • << RAID >>
  •     BIOS RAID1+MSDOS
  •     BIOS RAID1+MSDOS+LVM
  •     UEFI RAID1
  • << BTRFS >>
  •     BTRFS - създаване монтиране fstab размер
  •     BTRFS - RAID
  •     BTRFS - subvolume и snapshot
  • << КОНТЕЙНЕРИ >>
  •     Инсталиране на LXC/LXD
  •     Образи (image) в LXC/LXD
  •     Контейнери в LXC/LXD
  •     Команди в LXC/LXD
  • << ОТСТРАНЯВАНЕ НА ГРЕШКИ >>
  •     SWAP
  •     InitRAMFs
  • DNS в Ubuntu Server 22.04

    Започвам с едно леко отклонение. Има един много по-лесен начин. Графично нареден, прегледен. Най-вече безплатен. Можете да се регистрирате на: https://dns.he.net и да управлявате до 50 домейна. И да се върнем на идеята. Тук ще се помъчим да усвоим принципа на DNS услугата с използване на BIND 9 В условието имаме: - наличие на два хоста, на единия ще имаме DNS сървър на главните зони, на другия ще имаме DNS сървър с под зони, - DNS сървър с главни зони с публично IP: 109.160.80.230, - DNS сървър с под зони с публично IP: 185.163.245.186, - локално IP на двата сървъра: 192.168.11.5, защото са зад рутер на който е присвоено публичното IP, - на главния DNS сървър ще създадем зоната tlan.net, също ще делегираме под зоната my.tlan.net, - за да облекчим административното натоварване ще делегираме отговорността за администриране на под домейна на my.tlan.net За да работи правилно един DNS сървър трябва да се пренасочи порт 53 от рутера към хоста(сървъра), като протокола да е UDP. Следващото нещо е да се инсталира и самата услуга, като за начало обновяваме Debian.

    sudo apt update sudo apt upgrade sudo apt install bind9 bind9utils dnsutils -y


    Проверяваме версията на Bind 9

    sudo named -v BIND 9.18.24-1-Debian (Extended Support Version)


    С инсталиране на пакета bind9utils получихме отдалечен named контролер с наименование rndc. Чрез този контролер може да се презарежда/стопира и контролира част от BIND услугата. rndc комуникира с BIND по TCP на порт 953. Да проверим статуса на rndc.

    sudo rndc status version: BIND 9.16.48-Debian (Extended Support Version) running on post: Linux x86_64 5.10.0-28-amd64 #1 SMP Debian 5.10.209-2 (2024-01-31) boot time: Thu, 28 Mar 2024 19:25:10 GMT last configured: Thu, 28 Mar 2024 19:25:14 GMT configuration file: /etc/bind/named.conf CPUs found: 4 worker threads: 4 UDP listeners per interface: 4 number of zones: 103 (97 automatic) debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/900/1000 tcp clients: 0/150 TCP high-water: 0 server is up and running


    Стартираме услугата named

    sudo systemctl start named sudo systemctl enable named

    Проверяваме как работи услугата.

    sudo systemctl status named

    Горните команди могат да се изпълнят и с:

    sudo service named start sudo service named restart sudo service named reload


    DNS сървър с главни зони

    Започваме с една уговорка. Ако ползвате само IPv4 то тогава:

    sudo nano /etc/default/named OPTIONS="-u bind -4"

    Конфигурационните файлове на BIND се намират в /etc/bind. След като сме инсталирали услугата ще трябва да я конфигурираме. И ще започнем с конфигурационните файлове които дойдоха с инсталацията. Първия файл за редакция е: /etc/bind/named.conf.options. Той трябва да изглежда така:

    sudo nano /etc/bind/named.conf.options options { directory "/var/cache/bind"; allow-query { any; }; version "DNS TLan.NET"; };

    allow-query { any; }; - разрешава заявки отвсякъде към DNS сървъра version "DNS TLan.NET"; - даваме име DNS TLan.NET на DNS сървъра recursion yes; - позволяваме рекурсивните заявки (име към IP), ако беше no, то тогава се изпълняват само интерактивни заявки (IP към име) И заговорихме за зоновия файл да го създадем.

    sudo nano /etc/bind/named.conf.local zone "tachko.com" { type master; file "/etc/bind/tachko.com.db"; }; zone "tlan.net" { type master; file "/etc/bind/tlan.net.db"; };

    Стигнахме и до дефиниране на самите зонови файлове. Започваме със зоната на tachko.com.

    sudo nano /etc/bind/tachko.com.db $TTL 3600 @ IN SOA mail.tachko.com. root.tachko.com. ( 2016042401 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum ; Define Name Server IN NS mail.tachko.com. IN NS 1234567890.sn.mynetname.net. ; Define Mail Exchanger IN MX 10 mail.tachko.com. IN MX 20 post.tachko.com. ; Define name server's IP address IN A 109.160.80.230 ; Define IP address of a hostname mail IN A 109.160.80.230 post IN A 185.163.245.186 ceno IN A 82.137.80.140 ; Aliases www IN CNAME mail mikrotik IN CNAME 1234567890.sn.mynetname.net. ; Делегираме под-домейн my.tachko.com към друг хост $ORIGIN my.tachko.com. @ IN NS ns1.my.tachko.com. ns1 IN A 185.163.245.186

    Интересната част тук е делегирането на поддомейна към друг хост. За целта е необходимо да се дефенира именен сървър за поддомейна и на кой IP адрес ще е хоста за поддомейна. Описваме и зоната tlan.net. Забележете синтаксиса е по-различен но същността е еднаква.

    sudo nano /etc/bind/tlan.net.db $TTL 3600 @ IN SOA mail.tlan.net. root.tlan.net. ( 2016042401 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum ; Define Name Server IN NS mail.tlan.net. IN NS 1234567890.sn.mynetname.net. ; Define Mail Exchanger IN MX 10 mail.tlan.net. IN MX 20 post.tlan.net. ; Define name server's IP address IN A 109.160.80.230 ; Define IP address of a hostname mail IN A 109.160.80.230 post IN A 185.163.245.186 ceno IN A 82.137.80.140 ; Aliases www IN CNAME mail mikrotik IN CNAME 1234567890.sn.mynetname.net. ; Делегираме под-домейн my.tlan.net към друг хост $ORIGIN my.tlan.net. @ IN NS ns1.my.tlan.net. ns1 IN A 185.163.245.186

    DNS сървър с делегирани под зони

    Публичното IP на този сървър е: 185.163.245.186. Тук ще дефинираме под зоната my.tlan.net. За този сървър тя ще е главна зона, но беше определена от главния сървър с публично IP:109.160.80.230. Тук ще покажа съдържанието на конфигуриращите файлове. Няма да демонстрираме пак как се инсталира и т.н. Конфигурация отнасяща се за всички зони:

    sudo nano /etc/bind/named.conf.options options { allow-query { any; }; version "DNS Tlan.NET"; };

    Файл отговарящ за дефиниране на зоните.

    sudo nano /etc/bind/named.conf.local zone "my.tachko.com" { type master; file "/etc/bind/my.tachko.com.db"; }; zone "my.tlan.net" { type master; file "/etc/bind/my.tlan.net.db"; }; // Локална зона, не се вижда в Интернет, за сега няма да се разглежда. zone "my.lan" { type master; file "/etc/bind/my.lan.db"; allow-update {none;}; };

    Конфигуращ файл описващ зоната my.tachko.com.

    sudo nano /etc/bind/my.tachko.com.db $TTL 600 @ IN SOA ns1.my.tachko.com. root.my.tachko.com. ( 2024040101 ; Serial 3600 ; Refresh 900 ; Retry 360000 ; Expire 3600 ) ; Minimum Negative Cache TTL IN NS ns1.my.tachko.com. IN MX 10 ns1.my.tachko.com. IN A 185.163.245.186 ns1 IN A 185.163.245.186 mail IN A 185.163.245.186 www IN A 185.163.245.186

    Конфигуращ файл описващ зоната my.tlan.net.

    sudo nano /etc/bind/my.tlan.net.db $TTL 600 @ IN SOA ns1.my.tlan.net. root.my.tlan.net. ( 2024040101 ; Serial 3600 ; Refresh 900 ; Retry 360000 ; Expire 3600 ) ; Minimum Negative Cache TTL IN NS ns1.my.tlan.net. IN MX 10 ns1.my.tlan.net. IN A 185.163.245.186 ns1 IN A 185.163.245.186 mail IN A 185.163.245.186 www IN A 185.163.245.186

    С това завършваме. При така направени настройки ще имаме работеща зона my.tlan.net.

    sudo service named restart sudo service named status

    Тестване на сървърите

    На практика си свършихме работата, но да проверим до колко е вярна. Рестартираме услугата DNS.

    sudo service named restart

    Проверяваме конфигурационните файлове за синтетични грешки. Първо на DNS сървър с главни зони:

    sudo named-checkconf

    Не връща никакъв резултат, значи всичко е наред. По същия начин проверяваме конфигурационните файлове на DNS сървъра с под зони. Синтаксиса е същия затова няма да го показвам. Проверяваме зоните tachko.com и tlan.net за грешки. Първо на DNS сървър с главни зони:

    sudo named-checkzone tachko.com /etc/bind/tachko.com.db zone tachko.com/IN: loaded serial 2024040201 OK

    Зоната е наред и заредена. Проверяваме и зоната tlan.net:

    sudo named-checkzone tlan.net /etc/bind/tlan.net.db zone tlan.net/IN: loaded serial 2024040201 OK

    Отново всичко е наред. Прехвърляме се на DNS сървъра с под зони. Тестваме my.tlan.net.

    sudo named-checkzone my.tlan.net /etc/bind/my.tlan.net.db zone my.tlan.net/IN: loaded serial 2024040101 OK

    И тук зоната е описана правилно и няма грешки. Също е заредена правилно. Сега да проверим правилно ли работят зоните. За целта се връщаме на DNS сървъра с главни зони. И за да е правилен теста ще редактираме файла /etc/resolv.conf

    sudo nano /etc/resolv.conf nameserver 127.0.0.1

    Изтрихме всички редове, и създадохме нов. Така машина ще резолва от себе си. С една дума ще ползваме DNS сървъра който създадохме и настроихме. За целта използваме nslookkup.

    sudo nslookup > server 8.8.8.8 Default server: 8.8.8.8 Address: 8.8.8.8#53 > my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: my.tlan.net Address: 185.163.245.186 > set q=soq > my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: my.tlan.net origin = ns1.my.tlan.net mail addr = root.my.tlan.net serial = 2024040101 refresh = 3600 retry = 900 expire = 360000 minimum = 3600 Authoritative answers can be found from: > set q=ns > my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: my.tlan.net nameserver = ns1.my.tlan.net. Authoritative answers can be found from: > set q=mx >my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: my.tlan.net mail exchanger = 10 ns1.my.tlan.net. Authoritative answers can be found from: > set q=a > my.tlan.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: my.tlan.net Address: 185.163.245.186

    Да проверим сървърите им за имена:

    sudo nslookup -type=ns tachko.com Server: 127.0.0.1 Address: 127.0.0.1#53 tachko.com nameserver = mail.tachko.com. tachko.com nameserver = post.tachko.com. tachko.com nameserver = a974098f269e.sn.mynetname.net. sudo nslookup -type=ns tlan.net Server: 127.0.0.1 Address: 127.0.0.1#53 tlan.net nameserver = mail.tlan.net. tlan.net nameserver = post.tlan.net. tlan.net nameserver = a974098f269e.sn.mynetname.net.

    Да проверим записите на пощенските сървъри

    sudo nslookup -q=mx tachko.com Server: 127.0.0.1 Address: 127.0.0.1#53 tachko.com mail exchanger = 20 post.tachko.com. tachko.com mail exchanger = 10 mail.tachko.com. sudo nslookup -q=mx tlan.net Server: 127.0.0.1 Address: 127.0.0.1#53 tlan.net mail exchanger = 10 mail.tlan.net. tlan.net mail exchanger = 20 post.tlan.net.

    По същия начин може да се проверят и А записите. Освен това може да се проверят и CNAME, PTR, NS, ANY, само се променя -q=a или -q=PTR и т.н. Забележете, NS може да се провери и по този начин. Резултата ще е същия. С това тестовете приключват. Следващата тема ще е за защита и ограничения при DNS сървърите.

    Ограничения и защита

    До тук всичко е идеално работещо с изключение при големи натоварвания и хакерски атаки. За тези цели се ползват определени ограничения. Ограниченията биват общи (отнасящи се за всички) и такива отнасящи се за определена зона. По-надолу няма да показвам разни примери, а ще има обяснение за всяка команда за какво се ползва.

    Общи ограничения

    Към общите ограничения: recursion no; - Сървърът ще предоставя интеративно поведение на заявките към клиента - IP адрес към име. По-подразбиране е в състояние yes (сървърът предоставя поведение на рекурсивна заявка от клиента - име към IP адрес), allow-recursion { none; }; - Изключваме рекурсивните заявки, защото намаляват скоростта на работа. Вместо none може да се посочи списък от IP адреси или определен адрес. Рекурсивните запитвания към DNS сървъра са с пълното име на домейна и чака да му върната прилежащото IP. При това сървъра може да запита други DNS сървъри. Обратното запитване е изпращане на IP и чака връщане на име. Произволен DNS сървър е длъжен да отговори интерактивно, version "DNS Tachko. COM"; - Наименование на сървъра, allow-query { any; }; — Сървъра приема заяки от всички. По-подразбиране са разрешени само локални обръщения към DNS-a. Понякога обаче може вместо any да се опише определен IP адрес или няколко IP адреса, allow-transfer { none; } - По подразбиране зоните не могат да се прехвърлят на никого. Това е най-вече полезно за зони, за които този сървър е подчинен сървър за имена. Ако сървъра е master, то тогава се описва IP или масив от IP адреси отговарящи на secondaty-сървъра, allow-update {none;} — Забранява обновяването на всички зони. После в определената зона или ще разрешим обновяването и или ще забраним. Също ако разрешим обновяването ще укажем към кое IP да се обнови,- listen-on port 53 { IP; IP; }; - адреси на които DNS-a ще приема заявки за IPv4 на порт 53 (може да е различен); listen-on-v6 port 53 { none; }; - адреси на които DNS-a ще приема заявки за IPv6 на порт 53 (може да е различен), в случая е забранено ползването на IPv6; notify no; - По подразбиране промените в зоните няма се уведомяват към подчинените сървъри. Това е най-вече полезно за зони, за които този сървър е главен сървър за имена. Може да се сложи notify yes; при самата зона, forward first; - указваме DNS сървъра да се насочва към DNS-ите указани в forwarders {8.8.8.8; 1.1.1.1;}; forwarders {8.8.8.8; 1.1.1.1;}; - казваме заявките към DNS-a първо да се обръщат към DNS-и с IP адреси 8.8.8.8 и 1.1.1.1

    Ограничения по зони

    Ограничения в самите зони се прилагат при условие, че искам да получим даден резултат само за определена зона, а за другите да не се отнаса. По-надолу ще покажа някои неща необходими за тази цел: allow-transfer { 212.220.110.32;; } - Разрешава предаване на зоната на подчинените DNS сървъри, в случая с IP: 212.220.110.32, allow-update {212.220.110.32;} — разрешава обновяване на зоната към IP: 212.220.110.32, notify yes; - По подразбиране промените в зоната ще бъдат уведомени към подчинените сървъри. Това е най-вече полезно за зони, за които този сървър е главен сървър за имена.жЗа зони, за които този сървър е подчинен сървър за имена, трябва да отменим тази директива, като поставим "notify no;" в раздела "зона",