
Uudet Windows-maailmasta tulevat Linux-käyttäjät usein ihmettelevät:
“Missä tässä on palomuuri?”
Vastauksena annamme aina, että
“iptables on nx kertaa parempi kuin mikään Windowsin lelupalomuureista, ja iptablesilla voi vaikka integroida ankkoja!”
Yllättäen tämä perustelu ei kovin usein toimi, joten jatkovastaukseksi sitten toteamme, että “iptablesia voi hallita monilla eri graafisilla härpättimillä, mutta toisaalta Linux on niin turvallinen, ettei mitään palomuuria edes tarvi”.
Ajan kanssa ihmiset sitten aivopeseytyvät jonkinlaiseen harhaluuloon, että iptables/NetFilter jollain tapaa soveltuisi työpöytäkäyttöön, tai unohtavat palomuurin kokonaan.
iptablesissa ei ole mitään henkilökohtaista
Windowsin kanssa käytettävät henkilökohtaiset palomuurit ovat totaalisen eri asia kuin Linuxin palomuuri! Eritelläänpäs vähän asiaan liittyviä käyttötapauksia:
- Käyttäjä käynnistää satunnaisen softan X, joka ottaa yhteyttä tekijän palvelimelle, tarkistaa onko tullut päivityksiä, ja siinä ohessa siirtää kaiken käyttäjän arkaluonteisen materiaalin kotihakemistosta ohjelman X tekijälle (tokihan vain palvelun kehitystarkoituksessa!)
Windows-palomuurin reagointi: “Haluatko päästää ohjelman X nettiin?”
Linux-palomuuri reagointi: Nada.
- Käyttäjällä on vahingossa NFS/Samba-jako auki myös nettiin päin. Kuka tahansa pääsee kiinni käyttäjän tiedostoihin, tai ainakin saa mahdollisuuden murtaa salasanan.
Windows-palomuurin reagoi: “Haluatko, että ohjelma X kuuntelee yhteyksiä”
Linux-palomuuri reagoi: Jos palomuuri on konfiguroitu, niin ei hätää.
- Käyttäjä haluaa hostata verkkopeliä jossain satunnaisessa portissa, ja kutsuu kaverinsa mukaan pelaamaan, kertoen samalla portin.
Windows-palomuurin reagointi: Sama kuin aiemmin, kysytään käyttäjältä.
Linux-palomuurin reagointi: Jos palomuuri on konfiguroitu normaalisti, niin peli ei toimi. Jos palomuuria ei ole, niin tämän kanssa ei ole ongelmaa. Jos portti olisi vakio, se on voitu konfiguroida oikein.
Miksi palomuuri käsittelee edelleen yksittäisiä paketteja?

Minä haluan minun palomuurini olevan dynaaminen ja kysyvän minulta lupaa erilaisten asioiden tekemiseen, jos en ole jo aiemmin antanut sääntöä tilanteeseen. Kaikkia seuraavia asioita yksinkertaisesti ei pysty tekemään iptablesilla (joitain pystyy purkahtavalla skriptaamisella tai ikäväkäyttöisillä ACL-palikoilla):
- Ohjelma kysyy lupaa verkkoyhteyksiin ja yhteyksien kuunteluun. Asiaa kysytään oikealta käyttäjältä, ja verkkoyhteys ei onnistu ennen kuin vastaus on saatu, tai tilanne sopii aiemmin määriteltyyn sääntöön.
- Ohjelmalle voidaan antaa lupa verkkoyhteyksiin (tietyin ehdoin) tietyksi ajaksi, tai vain tälle tietylle instanssille. Eli kun ohjelma sammuu, se ei enää pääse verkkoon kysymättä uudelleen lupaa. Toisaalta kahdesta samasta käynnissä olevasta ohjelmasta vain toiselle annetaan lupa.
- Tietylle binäärille (esim
/usr/bin/firefox) annetaan lupa päästä verkkoon, mutta vain tietyille käyttäjille. Vieras-käyttäjä saa ottaa ainoastaan TCP-yhteyksiä, ja niitäkin vain portteihin 80 tai 8080. - Yksittäiseen TCP-yhteyteen annetaan erikseen lupa, esim yksi wget-haku. Prosessi ei saa ottaa muita yhteyksiä, ja uusi lataaminen aiheuttaa uuden kysymyksen.
Ratkaisuntapainen
Kirjoitin jokunen aika sitten kaikki aiemmat ongelmat ratkaisevan palomuuriohjelman Linuxiin. Siinä oli kolme eri komponenttia:- Linux Security Modules -rajapintaa käyttävä ajonaikaisesti lisättävä kernel-moduuli, joka toimi siihen aikaan muiden LSM-moduulien kanssa kiltisti, ja on todella kevyt, esim paljon NetFilteriä (se palikka, joka toteuttaa iptables-säännöt) nopeampi niissä yksinkertaisissa säännöissä, mitä moduuli itse osaa toteuttaa.
- C++:llä toteutettu user space daemon, joka käsittelee ja ylläpitää monimutkaisempia sääntöjä verkkoyhteyksille. Tämä ohjelma on suoraan yhteydessä koneen kernel-moduuliin.
- Pythonilla koodattu client-ohjelma, joka integroituu gnome-työpöytäympäristöön ja keskustelee käyttäjän kanssa. Jokaisella X:ään loggautuneella käyttäjällä on oma client-prosessi käynnissä. Tämä osaa olla useaan eri daemoniin yhteydessä, eli omalta koneelta voit hallita myös ssh-tunnelin yli ajettavien ohjelmien yhteyksiä.
Client ilmoitti aina kun uusi ohjelma ottaa yhteyttä, ja antaa mahdollisuuden sallia/kieltää tämä kyseinen yhteys, tai laatia sääntö ongelmaan.
Kernelin muutos
Idiootit menivät sitten rikkomaan LSM:n (myönnettäköön, että oikeastaan he lähinnä korjasivat sen, mutta ärsyttää se silti), ja poistivat siitä tuen LSM-moduulien pinoamiseen ja ajonaikaiseen lisäykseen. Nyt siis nykyisillä kerneleillä palomuuriohjelmaa ei voi ottaa ajonaikaisesti käyttöön, vaan se vaatii Kernelin puukotuksen, uudelleenkäännön ja bootin. Lisäksi esim SELinux ei enää toimi yhtä aikaa tämän palikan kanssa.
Tein moduulista myös uuden version, joka ei enää käyttänyt LSM-rajapintaa, mutta joka tapauksessa vaatii oman kernelin.
Mutta missä koodi?
Pahoittelen screenshot-kuvien laatua, ne ovat vanhoja kuvia, client-ohjelmakin oli siinä vaiheessa vain “gui-test”, eikä se lopullinen client. Siitä en löytänyt screenshotia tähän hätään, eikä ohjelma ole tällä hetkellä erityisen käyttökelpoinen.
Yritän joku päivä löytää vähän aikaa ja saada softan (työnimi mielikuvituksellisesti “Linux Personal Firewall”) toimimaan vaikkapa uusimman Ubuntun kanssa nätisti ja samalla julkaista koodin. Tosin haaveilen edelleen siitä, että systeemin saisi toimimaan jotenkin ilman kernelin puukotusta.

