💾

Završni praktični zadatak – Modul 18 – Linux mreže

Cilj

Samostalno postaviti bezbedan Ubuntu Server sa statičkom mrežnom konfiguracijom, SSH pristupom preko ključa, UFW firewall-om i funkcionalnim veb servisom, uz sistematsku dijagnostiku namerno unetog problema — objedinjujući sve veštine ovog modula bez oslanjanja na prethodne primere.

Scenario

Firma „Kaskada Solutions" postavlja novi Ubuntu Server koji će hostovati internu aplikaciju dostupnu preko HTTP-a, sa zahtevom da administratori pristupaju serveru isključivo preko bezbednog SSH-a, i da firewall dozvoljava samo neophodan saobraćaj.

Zahtevi zadatka

  1. Instalirajte Ubuntu Server VM i konfigurišite statičku IP adresu preko Netplan-a, testiranu sa netplan try pre konačne primene.
  2. Instalirajte SSH server i konfigurišite autentifikaciju isključivo preko ključa (bez lozinke), testirajući da ključ radi pre onemogućavanja lozinke.
  3. Prenesite najmanje jedan fajl na server preko SCP-a.
  4. Instalirajte jednostavan veb server (npr. nginx ili Apache) i potvrdite da lokalno sluša na portu 80 preko ss -tulpn.
  5. Konfigurišite UFW da dozvoli isključivo SSH i HTTP saobraćaj, dodajući SSH pravilo pre uključivanja firewall-a.
  6. Testirajte i dokumentujte dostupnost veb servisa sa drugog uređaja (host računara), pre i posle dodavanja UFW pravila za port 80.
  7. Pregledajte log zapise SSH i veb servisa preko journalctl i dokumentujte relevantne zapise koji potvrđuju uspešnu konfiguraciju.
  8. Namerno unesite jednu grešku po vašem izboru (npr. pogrešan redosled UFW pravila, netačna Netplan sintaksa, ili greška u SSH konfiguraciji) i dokumentujte tačno kako se problem manifestuje, zatim ga ispravite koristeći sistematsku dijagnostiku iz Teme 16.

Ograničenja i pravila

  • SSH pristup mora raditi isključivo preko ključa, bez lozinke.
  • UFW pravilo za SSH mora biti dodato pre uključivanja firewall-a — dokumentujte da ste ovo svesno ispoštovali.
  • Dijagnostika mora pratiti sistematski redosled (interfejs → IP → ruta → DNS → lokalni port → spoljni port → log), ne nasumično nagađanje.

Šta predati

  • Dijagram topologije sa IP adresom servera i dozvoljenim portovima (može biti ručno nacrtan ili Mermaid).
  • Kompletna Netplan YAML konfiguracija.
  • Izlaz ip addr show, ss -tulpn, sudo ufw status verbose sa objašnjenjem šta svaki prikazuje.
  • Dokaz uspešne SSH prijave preko ključa i SCP prenosa fajla.
  • Dokaz dostupnosti veb servisa sa drugog uređaja, pre i posle UFW izmene.
  • Dokumentacija namerno unete greške iz zahteva 8 (pre i posle ispravke).

Kriterijumi ocenjivanja

KriterijumBroj poena
Ispravna statička mrežna konfiguracija preko Netplan-a, testirana sa try15
Ispravno konfigurisan SSH sa autentifikacijom isključivo preko ključa20
Uspešan SCP prenos fajla10
Ispravno instaliran i proveren veb servis (lokalno preko ss)10
Ispravno konfigurisan UFW (ispravan redosled, dozvoljen samo neophodan saobraćaj)20
Potvrđena dostupnost servisa spolja pre i posle UFW izmene10
Tačna dijagnostika i objašnjenje namerno unete greške (zahtev 8)15
Ukupno100

Rešenje

Kompletno rešenje dostupno je u /resenja/modul-18/08-zavrsni-zadatak-resenje.md.

📖 Prikaži rešenje

Rešenje završnog zadatka – Modul 18

Mrežna konfiguracija

Netplan (/etc/netplan/00-installer-config.yaml):

network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: false
      addresses:
        - 192.168.100.10/24
      routes:
        - to: default
          via: 192.168.100.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
$ sudo netplan try
(potvrđeno Enter-om nakon provere da veza radi)
$ ip addr show enp0s3
    inet 192.168.100.10/24 brd 192.168.100.255 scope global enp0s3

SSH sa autentifikacijom preko ključa

(host)
$ ssh-keygen -t ed25519
$ ssh-copy-id admin@192.168.100.10
$ ssh admin@192.168.100.10

(uspešna prijava bez lozinke, potvrđena PRE nastavka)

(na serveru, /etc/ssh/sshd_config)
PasswordAuthentication no
PermitRootLogin no
$ sudo systemctl restart sshd

SCP prenos

(host)
$ scp izvestaj.txt admin@192.168.100.10:/home/admin/
izvestaj.txt   100%   45   1.2KB/s   00:00

Veb servis i UFW

$ sudo apt install nginx -y
$ ss -tulpn | grep :80
tcp   LISTEN  0  511  0.0.0.0:80  0.0.0.0:*  users:(("nginx",pid=1420,fd=6))

$ sudo ufw allow OpenSSH
$ sudo ufw enable
$ sudo ufw allow 80/tcp
$ sudo ufw status verbose
Status: active
22/tcp (OpenSSH)    ALLOW IN    Anywhere
80/tcp              ALLOW IN    Anywhere

Test dostupnosti spolja (pre i posle):

(host, pre dodavanja porta 80)
$ curl http://192.168.100.10
curl: (7) Failed to connect ... Connection timed out

(host, posle)
$ curl http://192.168.100.10
<!DOCTYPE html>...Welcome to nginx!...

Log zapisi

$ journalctl -u sshd -n 10
sshd[901]: Accepted publickey for admin from 192.168.100.1 port 52001 ssh2

$ journalctl -u nginx -n 10
nginx[1420]: nginx.service: Deactivated successfully. (start)

Test i dijagnostika (zahtev 8)

Namerno uneta greška (primer): sudo ufw enable pokrenut pre dodavanja SSH pravila (obrnut redosled od preporučenog).

Manifestacija: Aktivna SSH sesija administratora se odmah prekida (connection closed), jer UFW podrazumevano odbija sav dolazni saobraćaj bez eksplicitnog pravila — uključujući saobraćaj postojeće SSH veze.

Dijagnostika: Pošto je SSH pristup potpuno onemogućen, potreban je pristup preko VirtualBox konzole (grafički prozor VM-a, ne mrežni SSH) da bi se problem uopšte mogao ispraviti — ovo je klasičan primer zašto redosled komandi u Temi 12 nije proizvoljan.

Ispravka: Preko VirtualBox konzole:

$ sudo ufw allow OpenSSH
$ sudo ufw reload

Nakon toga, SSH pristup sa host računara ponovo radi.

Napomena za ocenjivača

Prihvatljiv je bilo koji izbor konkretne namerne greške i IP adresiranja, dokle god: (1) statička mrežna konfiguracija je ispravno postavljena preko Netplan-a i testirana sa try, (2) SSH radi isključivo preko ključa, testiran pre onemogućavanja lozinke, (3) SCP prenos je uspešan, (4) veb servis je proveren i lokalno (ss) i spolja (curl/pretraživač) pre i posle UFW izmene, (5) UFW pravila su ispravno redosleđena, i (6) dijagnostička vežba jasno pokazuje uzrok, manifestaciju i ispravku namerno unete greške koristeći sistematski pristup iz Teme 16.