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ä.