---
# System prepended metadata

title: Test B

---

# Test B

# Instalace DNS

VM, který má nastavené:
- Karta 1 - NAT
- Karta 2 - Síť pouze s hostem -> bez DHCP

## Pro přehlednost <small>optional</small>

```
hostname dns
```

## Nastavení sítě

Soubor `/etc/network/interfaces` nastavím na
```bash
# The loopback network interface
auto lo
iface lo inet loopback

# Karta 1 - NAT
auto enp0s3
iface enp0s3 inet dhcp

# Karta 2 - Host
auto enp0s8
iface enp0s8 inet static
  address 192.168.68.10
  netmask 255.255.255.0
```

Restartujeme -> `service networking restart`

## Dependencies
```bash
apt update
apt install bind9 bind9utils bind9-dnsutils
```

## Postup

Vytvořím si zone konfig pro mojí doménu `cenda.cz`: `/etc/bind/named.conf.local`
```yml
zone "cenda.cz" {
    type master;
    file "/etc/bind/zones/cenda.cz.db";
};
```

Definuji DNS nastavení: `/etc/bind/named.conf.options`
```yml
options {
    directory "/var/cache/bind";

    forwarders {
        158.196.0.53;   # Školní DNS
        # 8.8.8.8;      # V případě domácí sítě
    };

    listen-on { 127.0.0.1; 192.168.68.10; };  # Druhá IP je od tvé DNS
    listen-on-v6 { none; };

    allow-query { any; };

    recursion yes;
    allow-recursion { any; };
    dnssec-validation no;
};
```

Vytvoříme zones složku: `mkdir /etc/bind/zones -p`

Nastavíme záznamy v naši DNS `/etc/bind/zones/cenda.cz.db`
```
$TTL 3h                                                                 ;doba expirace všech záznamů
@       IN      SOA     ns1.cenda.cz. spravce.cenda.cz. (               ; autoritativní DNS server + email správce bez @
                         2025111901                                     ; seriové číslo, často ve formě data
                         4h                                             ; jak často si stahuje data sekundární server
                         2h                                             ; za jak dlouho se má sek.server pokusit stáhnout data při neúspěchu
                         2w                                             ; kdy platnost dat v sek.serveru vyprší
                         1h )                                           ; jak dlouho si mají data pamatovat cache servery
;
@               IN      NS      ns1.cenda.cz.                           ; autoritativní servery pro doménu, musí mít i A záznamy

; Name server
ns1             IN      A       192.168.68.10                           ; IP našeho serveru

; Mail server
cenda.cz.       IN      MX      10      smtp.cenda.cz.                  ; primární emailový server
smtp            IN      A       192.168.68.20

; Domena
cenda.cz.       IN      A       192.168.68.30                           ; primární záznamy
www             IN      A       192.168.68.30
wiki            IN      CNAME   cenda.cz.                               ; www -> cenda.cz -> 192.168.68.30.
mail            IN      CNAME   cenda.cz.

; Servicy
_http._tcp      IN      SRV     1 2 80  www                            ; _http sluzba, _tcp protokol, 1 priorita, 2 váha
_smtp._tcp      IN      SRV     1 2 25  smtp.cenda.cz.
_imap._tcp      IN      SRV     1 2 143 smtp.cenda.cz.

*._tcp          IN      SRV     0 0 0   .                               ; ostatní služby nejsou podporovány
```

Restartujeme `service named restart`

> [!Note] Druhy DNS záznamů
> | Typ záznamu | vysvětlení                                                                 |
> |-------------|----------------------------------------------------------------------------|
> | A           | ipv4 záznam (překlad z domény na ipv4 adresu serveru)                      |
> | AAAA        | ipv6 záznam (překlad z domény na ipv6 adresu serveru)                      |
> | MX          | mail server záznam (mail exchange), kdo je zodpovědný za správu emailu na doméně |
> | CNAME       | kanonické jméno ukazující z jedné domény na druhou (nikdy neukazuje na IP), slouží pro aliasy na A záznamy |
> | SRV         | service record - Specifikuje servisu na doméně pod hostnamem a portem (play.tvoje_mama.cz -> 192.168.0.1:25555) |
> | PTR         | pointer record - Slouží pro obrácené mapování DNS, IP addresa na hostname, často in-adda.arpa. (Dokážu si tak ověřovat doménu. z > > jiné DNS jsem dostal, že google je 6.6.6.6, ale já mám pod 6.6.6.6 pornhub) |
> | NS          | name server, jaké DNS servery jsou autorativní pro doménu  |
> | SOA         | root config té dns zóny (Start Of Authority) informace o DNS zoně, email na správce a její konfiguraci |

## Test
Pro oveření funkčnosti si vytvořím další VM s NAT kartou. Sekundarní karta není potřebná.
1. Nastavím DNS v `/etc/resolv.conf`
```
domain vsb.cz
search vsb.cz
# nameserver 10.0.2.3 <- Defaultní školní, zakomentuju
nameserver 192.168.68.10 # <- Můj nový
``` 
2. Pak zkusím:
```
dig @<ip dns serveru> cenda.cz
ping cenda.cz
```
- Dig command je z *bind9-dnsutils*
- Pokud funguje, řekne ti to IP kam pinguje a dig najde server

---
# Instalace Email serverů (Postfix)

VM, který má nastavené:
- Karta 1 - NAT
- Karta 2 - Síť pouze s hostem -> bez DHCP

## Pro přehlednost <small>optional</small>

```
hostname smtp
```

## Nastavení sítě

Nastavím karty v `/etc/network/interfaces`:
```bash
# The loopback network interface
auto lo
iface lo inet loopback

# Karta 1 - NAT
auto enp0s3
iface enp0s3 inet dhcp

# Karta 2 - Host
auto enp0s8
iface enp0s8 inet static
  address 192.168.68.20
  netmask 255.255.255.0
```

Nastavím taky DNS v `/etc/resolv.conf`:
```
domain vsb.cz
search vsb.cz
# nameserver 10.0.2.3 <- Defaultní školní
nameserver 192.168.68.10 # <- Moje DNS
```

Restartujeme -> `service networking restart`

## Dependencies
```
apt install postfix
```
-> Internet Site -> cenda.cz

## Postup

Nastavím konfigurace postfix v `/etc/postfix/main.cf`
```c
# Optional
relayhost = smtp.vsb.cz        # -> Přeposílání emailu na VŠB, pokud končí @vsb.cz

# Change
myorigin = smtp.cenda.cz
mydestination = smtp.cenda.cz, localhost.cenda.cz, cenda.cz, localhost
myhostname = smtp.cenda.cz

# New
home_mailbox = Maildir/
```

Vytvořím si jednoho, nebo více uživatelů pro posílání emailu na
```bash
useradd -m jozko
mkdir /home/jozko/Maildir/{new,tmp,cur} -p
chown jozko:jozko -R /home/jozko/
```

Na testovacím VM otestuji `telnet smtp.cenda.cz 25`

```bash
HELO cenda
MAIL FROM: root@cenda.cz    # (je to fuk od koho)
RCPT TO: jozko@cenda.cz     # (client co jsme si udělali)
DATA
Něco si tu napiš            
.                           # Musí končit newline tečka newline
```

Na mail serveru zkontroluji, že email přišel: `cat /home/jozko/Maildir/new/...` (nech si doplnit)
Příklad výpisu:
```
Return-Path: <root@cenda.cz>
X-Original-To: jozko@cenda.cz
Delivered-To: jozko@cenda.cz
Received: from cenda (unknown [192.168.68.1])
        by smtp.cenda.cz (Postfix) with SMTP id 3B27B1FF084
        for <jozko@cenda.cz>; Sat, 29 Nov 2025 12:06:06 -0600 (CST)

Něco si tu napiš
```

Pokud jsem dostal errory, najdu si log v journalu -> `journalctl -u postfix`

### Aliasy v mailu

Alias - přesměruje příjemce (jen příchozí, ne odchozí), nesahá na hlavičku.
(např. `rektor@vsb.cz`, skupinové jako "rektor: pepa@cenda.cz, karel@cenda.cz, lojza@cenda.cz")

V `/etc/aliases` vytvořím aliasy:
```
rektor: jozko@cenda.cz  # rektor@cenda.cz -> jozko@cenda.cz
admin: root, jozko      # Funguje i bez @... využívá pak default doménu
```

Potvrzení -> `newaliases`

### Kanonické mapování

Upravuje přímo hlavičku; oddělí login od adresy, takže je bezpečnější.
Uživatel je skrytý za stringem, který jen mail server ví. 

Pošlu email na jozka.ponozka.st@cenda.cz, reálně přijde na jozko@cenda.cz, `jozko` je vytvořený uživatel v systému díky čemuž nikdo nikdy neví, jak se přihlásit na můj email. pokud neví můj login `jozko`

V `/etc/postfix/main.cf` přidám
```
sender_canonical_maps = hash:/etc/postfix/sender_canonical
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
```

Překlad odesílatele v */etc/postfix/sender_canonical*, odešlu pošlu z **jozko@cenda.cz** ale, dané adrese přijde, že jsem poslal z **jozko.ponozka.st@cenda.cz**
```
jozko@cenda.cz          jozko.ponozka.st@cenda.cz
```

Překlad posílatele v */etc/postfix/recipient_canonical*, pokud mi přijde na **jozko.ponozka.st@cenda.cz**, tak to najde správně přijemce **jozko@cenda.cz**
```
jozko.ponozka.st@cenda.cz       jozko@cenda.cz
```

Vytvořím DB files pomocí `postmap /etc/postfix/sender_canonical && postmap /etc/postfix/recipient_canonical`

Vyzkouším `postmap -q "jozko.ponozka.st@cenda.cz" hash:/etc/postfix/recipient_canonical`
Měl bych dostat překlad na `jozko@cenda.cz`, pokud prohodím soubory. Mám to naopak.

### Instalace IMAP (dovecot)

Na serveru si nainstaluji package:
```bash
apt update
apt install dovecot-imapd dovecot-core
```

Upravím si konfiguraci, tak aby používala **Maildir** místo **mbox** v `/etc/dovecot/conf.d/10-mail.conf`
```c
 mail_driver = maildir
 mail_path = ~/Maildir
 #mail_inbox_path = ~/Maildir/.INBOX
 
 #mail_driver = mbox
 #mail_home = /home/%{user | username}
 #mail_path = %{home}/mail
 #mail_inbox_path = /var/mail/%{user}
```

Odkomentuji v `/etc/dovecot/conf.d/10-auth.conf`, abych se mohl přihlásit heslem v plainu:
```
auth_allow_cleartext = yes
auth_mechanisms = plain login
```

Odkomenuji port v `/etc/dovecot/conf.d/10-master.conf`, jinak IMAP neposlouchá defaultně:
```
service imap-login {
  inet_listener imap {
    port = 143
  }
  ...
}
```

Restartuji service `systemctl restart dovecot`

Zkontoluji zda IMAP běží `ss -tuln | grep 143` -> očekávaný výstup:
```
tcp   LISTEN 0      100          0.0.0.0:143       0.0.0.0:*   
tcp   LISTEN 0      100             [::]:143          [::]:*
```

Jelikož jsem vytvořil uživatele bez hesla, nastavím mu ho `passwd jozko` -> heslo: jozko

Na testovacím klientovi otestuji čtení pošty, použiju: `telnet smtp.cenda.cz 143`
```
a login jozko jozko        # Přihlasím se
a select INBOX             # Zvolím inbox 
a fetch 1:* body[]         # Přečtu první zprávu -> Pokud vidím že poštu mám, jinak háže error

a logout                   # Odpojím se
```

---
# Instalace LAMP serveru (Linux Apache Mysql Php)

VM, který má nastavené:
- Karta 1 - NAT
- Karta 2 - Síť pouze s hostem -> bez DHCP

## Pro přehlednost <small>optional</small>

```
hostname lamp
```

## Nastavení sítě

`/etc/network/interfaces`
```bash
# The loopback network interface
auto lo
iface lo inet loopback

# Karta 1 - NAT
auto enp0s3
iface enp0s3 inet dhcp

# Karta 2 - Host
auto enp0s8
iface enp0s8 inet static
  address 192.168.68.30
  netmask 255.255.255.0
```

Restartujeme -> `service networking restart`

## Dependencies
`apt install apache2 mariadb-server mariadb-client libapache2-mod-php`

Vyzkouším otevřít odkaz 192.168.68.30 -> Ukáže se mi default page apache.

### Instalace Roundcube
`apt install roundcube roundcube-plugins roundcube-mysql`
-> ano -> heslo *roundcube*

Vytvořím virtual host v `/etc/apache2/sites-available/mail.cenda.cz.conf`
```xml
<VirtualHost *:80>
    ServerName mail.cenda.cz

    DocumentRoot /var/lib/roundcube

    <Directory /var/lib/roundcube>
        Options -Indexes
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/mail_error.log
    CustomLog ${APACHE_LOG_DIR}/mail_access.log combined
</VirtualHost>
```

Aktivujeme hosta a restartujeme apache2:
```
a2ensite mail.cenda.cz
systemctl reload apache2
```

Zkontroluji config databáze v `/etc/roundcube/debian-db.php`
```c
$dbuser='roundcube';
$dbpass='roundcube';
$basepath='';
$dbname='roundcube';
$dbserver='localhost';
$dbport='3306';
$dbtype='mysql';
```

Upravím roundcube config v `/etc/roundcube/config.inc.php`
```c
$config['imap_host'] = ["smtp.cenda.cz:143"];
$config['smtp_host'] = 'smtp.cenda.cz:25';
$config['smtp_user'] = '';
$config['smtp_pass'] = '';
```

Pokud je něco špatně najdu to v `/var/log/apache2/mail_error.log`

### Instalace MediaWiki
```bash
apt install php php-mysql php-intl php-xml php-mbstring php-gd php-curl php-apcu mariadb-client
```

Vytvořím databázového uživatele pro mediawiki:
```bash
mariadb
CREATE USER 'wikiuser'@'localhost' IDENTIFIED BY 'silne_heslo';
GRANT ALL PRIVILEGES ON *.* TO 'wikiuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

> Uživatel si sám vytvoří svojí databázi, proto mu musím dát `*.*`, jinak pičus křičí. 🤬

Stažení wiki:
```bash
cd /tmp
wget https://releases.wikimedia.org/mediawiki/1.44/mediawiki-1.44.2.tar.gz
tar -xzf mediawiki-1.44.2.tar.gz

mkdir -p /var/www/wiki
mv mediawiki-1.44.2/* /var/www/wiki/
```

Vytvořím virtual host v `/etc/apache2/sites-available/wiki.cenda.cz.conf`
```xml
<VirtualHost *:80>
    ServerName wiki.cenda.cz
    DocumentRoot /var/www/wiki

    <Directory /var/www/wiki>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/wiki_error.log
    CustomLog ${APACHE_LOG_DIR}/wiki_access.log combined
</VirtualHost>
```

Aktivujeme hosta a restartujeme apache2
```bash
a2ensite wiki.cenda.cz
a2enmod rewrite            # Povolení rewrite modulu (přesměrování)
systemctl reload apache2
```

Jdeme na naši wiki stránku a požádáme kouzelníka o instalaci.

Po úspěšné instalaci pomocí kouzelníka, tak uložím stažený soubor do `/var/www/wiki/LocalSettings.php`
Refresh stránky a jsem happy jak dva grepy.

