es fi fi fi fi es fi fi fi fi fi fi fi fi fi fi en fi fi fi fi fi fi fi fi en en fi en es fi fi en fi en en en en fi fi de en fi fi sl en en fi fi sl en en en fi en en fi en en en fi fi fi en fi fi hbs_lat en en en en en en en en en fi fi fi fi fi fi fi sl en en en en en en en en en en fi fi fi fi en fi en en en fi en fi es en fi en fi fi fi fi en fi en en en fi pl en fi fi en fi fi en en en fi en ru it ar en fi en en en en fi fi en fi it it en en en en ja ja en en en en en it pt en fi fi fi fi en fi fi fi fi es cs cs it fi fi fi es pl fi fi fi fi fi fi en fi fi fi fi en fi fi fi en fi en fr en fi fi fi fi sl en fi fr sl pl fi de fi de fi en fi fi fi sl fi hbs_lat en fi hbs_lat fi hbs_lat fi en en fi de fi fi fi fi en en en
Ftp on palomuureille vaikea protokolla, koska siinä on erotettu ohjaus ja datansiirto eri portteihin ja porttineuvottelut käydään palomuurin näkökulmasta siirrettävän datan sisällä. Sillä on lisäksi kaksi erilaista toimintatapaa, aktiivinen ja passiivinen:
Aktiivinen ftp: palvelin avaa datayhteyden asiakkaan ilmoittamaan porttiin.
Passiivinen ftp: asiakas avaa datayhteyden palvelimen ilmoittamaan porttiin.
Siis joko asiakkaan tai palvelimen sekä välissä olevien palomuurien pitää sallia yhteys uuteen, satunnaiseen porttiin.
Sekä aktiivisessa että passiivisessa ftp:ssä ensimmäinen, kontrolliyhteys avataan samalla tavalla: asiakas ottaa yhteyden palvelimen porttiin 21. Palvelin vastaa normaaliin tapaan, palomuurit osaavat sallia tämän "established" -liikenteenä.
Dataliikennettä varten käytettävää porttia palomuuri ei tunnista ilman erillistä helper-modulia yhteydenseurannan avuksi (moduli nf_conntrack_ftp, aiemmin ip_conntrack_ftp). Aikaisemmin se piti ladata modprobe-komennolla tms, nykyisin iptables osaa yleensä hoitaa asian itse (--helper ftp).
Helper-modulille pitää kertoa mitä porttia sen pitää seurata erillisellä säännöllä raw-taulussa (ketju PREROUTING tai OUTPUT).
Aktiivinen ftp toimii porttitasolla näin:
Asiakas ottaa yhteyden palvelimen porttiin 21, source port jotain 1024-65535 (esim. 1026) ja ilmoittaa sille haluamansa portin datayhteydelle (yleensä kontrolliyhteyden sport+1, esim. 1027).
Palvelin ottaa yhteyden asiakkaan ilmoittamaan porttiin (palvelimen source port 20), asiakas vastaa (sport 1027, dport 20).
Asiakkaan pitää siis sallia palvelimen yhteydenotot omaan (vaihtuvaan) porttiinsa.
Kontrolli (komennot) kulkee sen jälkeen normaaliin tapaan palvelimen portista 21, data portista 20.
Passiivinen ftp toimii porttitasolla näin:
Asiakas ottaa (ohjaus)yhteyden ftp-palvelimen porttiin 21 ja ilmoittaa haluavansa passiivisen yhteyden.
Palvelin ilmoittaa asiakkaalle valitsemansa (satunnaisen) portin (esim. 2024) datayhteyttä varten.
Asiakas ottaa yhteyden palvelimen ilmoittamaan porttiin.
Asiakkaan tarvitsee sallia sisään vain paluuliikenne.
Data siirtyy edellä valitun portin kautta, ohjauskomennot taas portin 21 kautta.
Palvelimen saa toimimaan ilman conntrack-moduliakin hieman turvattomasti avaamalla portteja enemmän kuin oikeasti tarvitaan.
FTP palvelin, turvattomat säännöt ilmani yhteydenseurantamodulia
-A input -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
# sallitaan uudetkin yhteydet ulos portista 20 kaikkiin portteihin
# ilman yhteydenseurantaa ei voi erottaa uudesta
-A output -p tcp --sport 20 --dport 1024: -j ACCEPT
-A input -p tcp --dport 50020:50040 -j ACCEPT
-A output -p tcp --sport 50020:50040 -m state --state ESTABLISHED -j ACCEPT
FTP palvelin, tiukat säännöt yhteyden seurannalla
# ohjataan portti 21 ftp helper modulille
-t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp
-A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
# active ftp: vain related ja established ulos, vain established sisään
-A OUTPUT -p tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
# passive ftp: vain related ja established sisään, vain established ulos
-A INPUT -p tcp --dport 50020:50040 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 50020:50040 -m state --state ESTABLISHED -j ACCEPT
Ftp saattaa tarvita client-päässäkin palomuurin säätöä. Tyypillisillä "kaikki ulospäin ja paluuliikenne takaisin" -säännöillä passiivinen ftp toimii suoraan, mutta jos liikennettä ulospäinkin on rajoitettu tai jos halutaan käyttää aktiivista ftp:tä, client-päässä tarvitaan olennaisesti vastaavat säädöt kuin serverissäkin, ikäänkuin niiden peilikuvina vain.
Tässä tapauksessa ftp helper -sääntö pitää laittaa OUTPUT-ketjuun, lähtevässä liikenteessä raw-taulu on siellä.
Palvelimen käyttämää porttialuetta passiivisessa ftp:ssä ei asiakas kuitenkaan yleensä voi tietää, joten sille pitää sallia kaikki portit, tai ainakin 1024-65535.
FTP client, tiukat säännöt yhteyden seurannalla
# porttiin 21 uloslähtevä liikenne ftp helper -modulille
-t raw -A OUTPUT -p tcp --dport 21 -j CT --helper ftp
-A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --sport 1024: -m state --state ESTABLISHED -j ACCEPT
Ftp-liikenteen päästäminen reitittimenä toimivan palomuurin läpi tarvitsee vielä hieman erilaiset säännöt.
Jos palomuuri myös NATtaa liikenteen ftp-palvelimelle, esimerkiksi jos ftp-palvelin on virtuaalikone ja alustakone toimii palomuurina, myös NAT-sääntöjä pitää säätää ftp:tä varten (tyypillisesti PREROUTING DNAT).
Seuraavassa esimerkissä palomuurin ulkoinen verkkortti on eth0 ja sisäinen eth1, palomuurin sisäpuolella olevan ftp-palvelimen (sisäinen) osoite 10.1.1.1, reitityssääntöjä ei ole näytetty.
Tämän esimerkin säännöt eivät salli yhteyttä itse palomuurista ftp-palvelimeen eivätkä yhteyksiä palomuurin takana olevasta asiakkaasta palvelimeen sen ulkopuolella.
# ftp helper helper sisääntulevalle (välitettävälle) liikenteelle porttiin 21
-t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp
-A FORWARD -i eth0 -o eth1 -d 10.1.1.1 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -s 10.1.1.1 -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -d 10.1.1.1 -p tcp -m tcp --dport 50020:50040 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -s 10.1.1.1 -p tcp -m tcp --sport 50020:50040 -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -d 10.1.1.1 -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -s 10.1.1.1 -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
NFS: Network File System
Keino jakaa tiedostojärjestelmä kokonaan tai osittain (alihakemisto) toiselle koneelle.
NFSv3:ssa koneet luottavat toisiinsa, vähänlaisesti tietoturvaominaisuuksia.
NFSv4 lisää paljon mm. käyttäjäkohtaisen autentikoinnin ja kaikenlaista muutakin.
Seuraavissa esimerkeissä NFSv3 ellei toisin mainita.
NFS: Network File System
Palvelimella (tunnus2): apt-get install nfs-kernel-server
jos virhe ”... not implemented”:
(vanhemmssa Ubuntuissa service nfs-kernel-server restart)
NFS: Network File System
Yleisiä optioita /etc/exports'issa (ks. man 5 exports):
rw read+write (oletus readonly)
async nopea, vaarallinen jos palvelin kaatuu tms
subtree_check ekstratarkistuksia jos alihakemisto exportattu
[no_]root_squash root → nobody (oletuksena päällä)
all_squash kaikki → nobody (oletuksena pois)
NFS: Network File System
mkdir /home2; mount tunnus2:/home /home2
tunnus2:/home /home2 nfs defaults 0 0
NFS:n toiminta edellyttää isoa joukkoa erillisiä palveluita, jotka tarvitsevat omat porttinsa auki palomuurissa. Asiaa vaikeuttaa se, että osa niistä arpoo portin satunnaisesti, ellei sitä erikseen kiinnitä. Tarvittavat palvelut ovat (suluissa portti jos se on kiinteä): portmapper (111), nfsd (2049), lockd, mountd ja statd, sekä levykiintiöitä käytettäessä rquotad. NFSv4 käyttää vielä yhtä ns. callback-porttia.
Portit on helppo kiinnittää palvelimella ja yleensä asiakkaat ovat tiedossa ja omassa hallinnassa, joten niihinkin voi tehdä palomuurisäännöt kiinteillä porttinumeroilla.
Muuttuvat portit voidaan palvelimessa kiinnittää näin:
STATDOPTS="--port 4000 --outgoing-port 4001"
lockd ja (NFSv4) callback tiedostossa (esim.) /etc/modprobe.d/lockd.conf:
options lockd nlm_udpport=4003 nlm_tcpport=4003
Portit pitää sitten avata palvelimen palomuurissa esim. näin:
iptables -A INPUT -p tcp -m multiport --dports 111,2049,4000:4005 -j ACCEPT
iptables -A INPUT -p udp -m multipors --dports 111,2049,4000:4005 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 111,2049,4000:4005 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m multiport --sports 111,2049,4000:4005 -m state --state ESTABLISHED -j ACCEPT
ja vastaavat säännöt asiakkaisiin (INPUT ja OUTPUT päinvastoin) ja mahdolliseen välissä olevaan palomuuriin FORWARDit.
Valitut portit kannattaa lisätä tiedostoon /etc/services.
/etc/services NFS:ää varten (esimerkki)
sunrpc 111/tcp portmapper # RPC 4.0 portmapper
nfs 2049/tcp # Network File System
nfs 2049/udp # Network File System
rpc.statd-bc 4000/tcp # RPC statd broadcast
rpc.statd-bc 4000/udp # RPC statd broadcast
rpc.statd 4001/tcp # RPC statd listen
rpc.statd 4001/udp # RPC statd listen
rpc.mountd 4002/tcp # RPC mountd
rpc.mountd 4002/udp # RPC mountd
rcp.lockd 4003/tcp # RPC lockd/nlockmgr
rcp.lockd 4003/udp # RPC lockd/nlockmgr
nfs.callback 4004/tcp # NFSv4 callback
rpc.quotad 4005/tcp # RPC quotad
rpc.quotad 4005/udp # RPC quotad
mounttaa nfs- tai muita (verkko)levyjä (myös CD:tä yms) tarpeen mukaan, ja umounttaa kun tarve poistuu
asennus: apt-get install autofs
mounttauksesta huolehtii demoni automount
konfiguraatiotiedostot: /etc/auto.master ja siellä viitatut ns. kuvaustiedostot, map files (useimmiten /etc/auto.jotakin)
suorat kuvaukset (direct maps): absoluuttinen polku kuvaustiedostossa, harvoin käytetty
epäsuorat kuvaukset (indirect maps): kuvaustiedostossa suhteellinen polku, yhdistetään master-tiedoston polkumääritykseen
säätömahdollisuuksia monimutkaisempiin ympäristöihin (LDAP jne)
automountatut hakemistot tulevat näkyviin kun niitä käytetään; edellisessä esimerkissä komento “ls /koti” voi näyttää tyhjää, mutta “cd /koti/oma/tt” toimii kuitenkin (ja sen jälkeen ls toimii myös).
automounter luo tarvittavat välihakemistot (edellä /koti jne) itse, niitä ei saa tehdä valmiiksi. Niitä ei myöskään saa käyttää muuhun itse.
master-tiedoston muuttamisen jälkeen tarvitaan
systemctl reload autofs # tai service autofs reload
umount tapahtuu automaattisesti määräajan (oletus 5min) kuluttua siitä kun hakemistoja on viimeksi käytetty (tarvittaessa fuser tai lsof tai ps auttavat selvittämään käyttäjän)
aikoja voi myös muuttaa polkukohtaisesti auto.master -tiedostossa optiolla --timeout (sekunteja)
kuvaustiedostossa voi käyttää hakemistonimessä jokerimerkkejä * ja &:
kuvaustiedosto voi olla skripti, joka tavalla tai toisella tuottaa halutun mounttikuvauksen (argumenttina levypalvelimen nimi); esimerkkinä /etc/auto.net, joka mounttaa mitä vain verkosta löytyy polkuun /net/kone/hakemisto
debuggausta varten automount-demonia voi ajaa verbose-optiolla etualalla omassa ikkunassaan:
Testillä --limit voidaan rajoittaa tietynlaisen liikenteen määrää:
... -m limit --limit n/aikayksikkö [--limit-burst m]
Optio --limit rajoittaa pakettien määrän per aikayksikkö (second, minute, hour, day) ja --limit-burst kuinka monta pakettia saa ensin tulla peräkkäin ennen kuin niitä aletaan rajoittaa.
Esim. sallitaan vain 5 ssh-yhteyttä peräkkäin ja sitten 3/minuutti:
... -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
Esimerkki: estetään lokin täyttyminen, esim.
-A LognDrop -m limit --limit-burst 5 --limit 2/min -j LOG --log-prefix ”evil packet”
-A LognDrop -j DROP
Käytettävissä on myös --hashlimit, jolla voidaan tehdä monimutkaisempia rajoituksia tyyliin ”enintään 100 yhteydenottoa per portti-ja-palvelin” jne.
connlimit -ehdolla voidaan rajoittaa yhtaikaisten yhteyksien määrää, esim.
... -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP
rajoittaa porttiin 80 (http) samasta osoitteesta tulevien samanaikaisten yhteyksien määrän 20:een. Jos halutaan tehdä vastaava rajoitus yhteydenottajan aliverkolle, se voidaan tehdä --connlimit-mask -optiolla. Optio --syn rajaa testin uusiin yhteydenottoihin.
recent -ehdolla voidaan virittää aikaisemmista tapahtumista riippuvia ehtoja. Esimerkiksi ssh-massahyökkäysten torjunta:
iptables -N SshTest # tehdään uusi ketju
# kutsutaan ketjua aina kun joku kolkuttaa ssh-porttia
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j SshTest
# --set tallettaa tapahtuman joukkoon ”Ssh”
iptables -A SshTest -m recent --set --name Ssh --rsource
# jos yli 5 yritystä 10 minuutissa, lokitetaan ...
iptables -A SshTest -m recent --update --seconds 600 --hitcount 5 --name Ssh --rsource -j LOG --log-prefix "ssh-attack" --log-level warn
# ja blokataan ne
iptables -A SshTest -m recent --update --seconds 600 --hitcount 5 --name Ssh --rsource -j DROP
# muussa tapauksessa hyväksytään
iptables -A SshTest -j ACCEPT
Tehtäessä useita samantapaisia asennuksia voi asennusohjelman kysymysten vastaukset laittaa valmiiksi tiedostoon preseed.cfg ja lisätä virt-install'in optioihin
Huom. tiedostonimeä ei saa vaihtaa!
preseed.cfg:n voi myös laittaa CD imageen tms (toimii myös muissa kuin virtuaalikoneasennuksissa)
Tiedoston preseed.cfg syntaksi on hankala ja tarvittavat asetukset vaihtelevat käyttöjärjestelmäversiosta toiseen, mutta netistä löytyy pohja: https://help.ubuntu.com/lts/installation-guide/example-preseed.txt
ja vastauksia voi katsoa toimivasta asennuksesta komennoilla
Komento debconf-get-selections löytyy paketista debconf-utils.