UFW on tehty siksi, että palomuurin voi asettaa kolmella komennolla, ja siinä se onnistuu. Ongelma on muualla: ufw status näyttää aikomukset, ei tulosta. Sääntö voi olla listalla eikä silti sulje yhtään mitään — kolmesta eri syystä, ja kaikki kolme esiintyvät oikeilla palvelimilla säännöllisesti.

Aloitus, jossa et lukitse itseäsi ulos

Komentojen järjestyksellä on merkitystä. Salli ensin SSH, kytke sitten päälle:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable

ufw enable ennen SSH-sääntöä katkaisee oman istuntosi, ja jäljelle jää vain palveluntarjoajan konsoli. Jos palvelin on jo pystyssä etkä ole varma — pidä toinen yhteys auki, se selviää epäonnistuneesta muutoksesta.

Katso yksityiskohtaista tilaa; lyhyt piilottaa oletuskäytännön:

sudo ufw status verbose

Virhe yksi: sääntö on, mutta portti on auki koko maailmalle

Yleisin rivi vieraissa kokoonpanoissa:

sudo ufw allow 3306

Näin avataan MySQL ”jotta pääsee yhdistämään kotoa” — ja avataan se koko internetille. Oikeita vaihtoehtoja on kaksi, ja molemmat ovat parempia:

sudo ufw allow from 203.0.113.25 to any port 3306

tai, mikä on luotettavampaa, olla päästämättä palvelua ulos lainkaan: bind-address = 127.0.0.1 MySQL:n asetuksissa ja pääsy ulkoa SSH-tunnelin kautta. Palomuuri on toinen linja; ensimmäinen on se, ettei palvelu kuuntele julkista osoitetta. UFW-sääntö voidaan poistaa vahingossa, kun taas bind-address ei muutu itsestään.

Virhe kaksi: IPv6

Sääntö muotoa ufw allow from 203.0.113.25 koskee vain IPv4:ää. Jos palvelimella on IPv6-osoite — ja useimmilla VPS:illä on, päällä — palvelu pysyy sen kautta tavoitettavissa. Palveluntarjoaja antoi osoitteen, sinä et muista sitä, skanneri tietää siitä.

Tarkista, että v6-suodatus on ylipäätään päällä (IPV6=yes tiedostossa /etc/default/ufw) ja ettei palvelu kuuntele osoitetta :: turhaan:

ss -tulpn | grep ':::'

Säännöt, joissa osoite on määritetty nimenomaisesti, on luotava erikseen molemmille protokollaversioille.

Virhe kolme: Docker

Harmillisin. Docker julkaisee portteja kirjoittamalla omat sääntönsä iptables-ketjuihin ennen niitä, joihin UFW kirjoittaa. Seurauksena kontti, joka on käynnistetty valitsimella -p 5432:5432, on tavoitettavissa internetistä, vaikka UFW näyttää Status: active ja käytännön deny incoming. Palomuuri ei ole rikki — vuoro ei vain koskaan tule sille.

Tätä ei korjata UFW:ssä vaan siinä, miten portti julkaistaan:

ports:
  - "127.0.0.1:5432:5432"

Sidonta paikalliseen osoitteeseen on yksinkertaisin ja luotettavin ratkaisu. Ulospäin saa katsoa vain se, mikä todella palvelee kävijöitä: yleensä käänteisen välityspalvelimen portit 80 ja 443.

Sääntöjen järjestys

UFW soveltaa ensimmäistä sopivaa sääntöä ja pysähtyy siihen. Siksi kiellon lisääminen sallimisen jälkeen ei toimi: vuoro ei ehdi siihen. Katsomme numerointia ja lisäämme oikeaan kohtaan:

sudo ufw status numbered
sudo ufw insert 1 deny from 198.51.100.0/24
sudo ufw delete 7

Säännöt poistetaan numeron perusteella, mutta numerot siirtyvät jokaisen poiston jälkeen — poista yksi kerrallaan ja lue lista uudelleen.

Tarkistus ulkoa

Paikalliset komennot näyttävät, mitä on asetettu. Mitä siitä todella tuli, näkyy vain toiselta koneelta:

nmap -Pn -p- 203.0.113.25
nc -zv 203.0.113.25 3306

Mikä tahansa toinen palvelin tai kotikone kelpaa. Se on ainoa tarkistus, joka ei valehtele, ja se kannattaa tehdä jokaisen merkittävän uudelleenkonfiguroinnin jälkeen — erityisesti kun on asennettu jotain, joka ”asettaa verkon puolestasi”: Docker, hallintapaneelit, VPN.

Lokit

Oletuksena UFW ei kirjoita juuri mitään. Näin se kytketään päälle:

sudo ufw logging low

Merkinnät päätyvät tiedostoon /var/log/ufw.log — mutta vain jos järjestelmässä on rsyslog. Debian 12:ssa ja Ubuntu 24.04:ssä sitä ei ehkä ole, ja silloin kaikki menee systemd-journaliin:

sudo journalctl -k | grep -i '\[UFW'

Tyhjä /var/log/ufw.log ei sinänsä tarkoita mitään — katso ensin journalia.

Mitä palomuurilta pitää odottaa

UFW sulkee sen, minkä ei pidä olla tavoitettavissa. Se ei tutki sen sisältöä, mikä on auki: portti 443 on auki kaikille, ja kaikki mikä sivustolle tulee, tulee esteettä perille. Se on muiden työkalujen työtä — WAF sovellustasolla, IDS liikennetasolla. Palomuurin tehtävä on vaatimattomampi ja tärkeämpi: että avoimien porttien lista vastaa sitä, mitä siitä luulet. Miltä tuo lista näyttää aktiivisten sääntöjen kanssa yhdellä sivulla, näkyy alla olevassa esittelyssä.