ESP on IP-protokolla 50, ei TCP-portti 50: mitä sallitaan
Protokollanumerot ja portinumerot ovat eri nimiavaruuksia. Sääntö TCP-portille 50 ei salli mitään, ja NAT-läpäisy siirtää ESP:n UDP 4500:aan.
Palomuurilomakkeet kysyvät TCP-porttia, ja ilmeinen vastaus on 50. Se vastaus ei salli mitään, koska ESP on IP-protokolla numero 50 eivätkä protokollanumerot ole portteja. Kaksi nimiavaruutta jakavat pienet kokonaisluvut eikä mitään muuta, ja virhe pysyy näkymättömänä, kunnes IKE päättyy eikä suojattu liikenne koskaan saavu.
Kaksi nimiavaruutta, jotka jakavat pienet luvut
IP-otsake kuljettaa protokollakenttää, joka nimeää seuraavan: 6 TCP:lle, 17 UDP:lle, 1 ICMP:lle, 50 ESP:lle, 51 AH:lle. TCP- tai UDP-otsake kuljettaa porttinumeroita, jotka valitsevat prosessin kohdeisännässä. Protokolla 50 ja TCP-portti 50 ovat toisistaan riippumattomia arvoja, mutta dialogi voi saada ne näyttämään vaihdettavilta.
Siksi portin edelleenlähetyssääntö ei voi ilmaista natiivia ESP:tä. Ei ole ESP-kohdeporttia, jota voisi edelleenlähettää, eikä laite, joka ymmärtää vain porttisääntöjä, omaa lainkaan sanastoa sille paketille. Oikea sääntö nimeää IP-protokollan. Mikä tahansa porttidialogi on väärä työkalu sille paketille.
Sekavuudella on toinenkin puoli. Kun paketti on salattu, kaikki sen sisällä on läpinäkymätöntä, mukaan lukien alkuperäisen yhteyden TCP-otsake. Palomuuri, joka tutkii portteja siitä paketista, katsoo ulompaa otsaketta, jossa natiivissa tapauksessa ei ole portteja tutkittavaksi.
Natiivi ESP, sitten kapseloitu vaihtoehto
Natiivi ESP kuljetetaan suoraan IP-protokollana, mikä on yhtä aikaa tehokasta ja hankalaa. Tehokasta siksi, ettei ole ylimääräistä otsaketta, ja hankalaa siksi, että mikään osoitteita ja portteja kääntävä laite ei voi seurata sitä. NAT-läpäisy on olemassa juuri tätä varten: se käärii ESP-paketin UDP:n sisään, jotta kääntäjällä on portit uudelleenkirjoitettavaksi.
| Form on the wire | How it is identified | What the firewall must permit |
|---|---|---|
| IKE negotiation | UDP with a destination port | UDP 500, and 4500 once traversal is detected |
| Native ESP | IP protocol 50 in the outer header | The protocol itself, with no port to name |
| ESP inside UDP | UDP 4500 carrying an ESP payload | The UDP port pair, which translation devices can track |
Kaksi muotoa ovat saman datakanavan vaihtoehtoisia käyttöönottoja, eivät yhden kerroksia. Natiivin ESP:n salliminen ei salli kapseloitua muotoa, eikä UDP 4500:n salliminen salli natiivia liikennettä, joten sääntöjoukon on vastattava käyttöönottoa eikä katettava molempia vahingossa.
Havaitseminen on tässä myös tärkeää. Päätepisteet päättävät muotojen välillä neuvottelun aikana, ja vaihto tapahtuu yleensä silloin, kun niiden väliltä havaitaan NAT. Siksi reitti, joka muuttuu tunnelin pystyttämisen jälkeen, voi siirtää liikenteen nimiavaruuteen, jota sääntösi eivät koskaan kattaneet.
Lue, mitä muotoa yhteys todella käyttää
Kysy päätepisteeltä sen sijaan, että arvaisit palomuurista. Linuxissa tilarivi kertoo, käyttääkö yhdistys UDP-kapselointia ja mitkä portit ovat mukana. Kaappaus vastaa samaan kysymykseen johdosta, ja molemmat ovat nopeampia kuin sääntöjoukon lukeminen ja toivominen.
ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'
Ensimmäinen komento näyttää kapselointityypin, kun NAT-läpäisy on käytössä, ja ei mitään, kun se ei ole. Toinen näyttää, kumpi kahdesta muodosta todella ylittää rajapinnan, ja se lopettaa väittelyt kokoonpanosta, joka näyttää paperilla oikealta.
Vastanäyttö kuuluu samaan vaiheeseen. Sääntö, joka ilmoittaa nollasta osumasta, kertoo sinulle, ettei paketti koskaan saavuttanut sitä, ja se on reititys- tai valitsinkysymys, ei palomuurikysymys.
Vahvista sitten ohjauskanava erikseen. IKE:llä on omat porttinsa ja omat lokinsa, ja valmis neuvottelu ilman dataa on juuri se jako, josta tämä artikkeli kertoo.
Kirjoita sääntö oikeaan nimiavaruuteen
Protokollasääntö ja porttisääntö ovat eri ohjeita, joten työkalun on ilmaistava se, jota tarkoitat. Nftablesissa protokollavastaavuus on eksplisiittinen, ja kapseloitu vaihtoehto saa oman UDP-sääntönsä. Pidä kaksi sääntöä vierekkäin, jotta pari näkyy katselmoinnissa.
nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept
Vastusta kiusausta laajentaa kumpaakaan sääntöä väärän diagnoosin kompensoimiseksi. Kaiken salliminen ESP-protokollalle jokaisella rajapinnalla tai UDP-lupa mistä tahansa mihin tahansa korjaa oireen ja poistaa sen hallinnan, jota yritit määrittää. Kapea tuettu virtaus riittää lähes aina, kun muoto on tiedossa.
Lopuksi, pidä kerrokset oikein, kun tunneli toimii eikä sovellus toimi. Yhdyskäytävälle saapuvat paketit tarvitsevat edelleen edelleenlähetyksen, paluureitin ja politiikan, joka hyväksyy ne, eikä mitään näistä ilmaista ESP-säännöllä. Puuttuva portti selittää tietyn vian, ei jokaista IPsec-vikaa. Pidä säännön korjaus ja reitityksen tarkistus kahtena erillisenä johtopäätöksenä.
Kirjaa havaitsemasi muoto, lisäämäsi protokollasääntö ja laskuri, jonka näit jälkeenpäin. Kolme riviä, ja seuraava henkilö erottaa nimiavaruusvirheen reititysvirheestä minuutissa iltapäivän sijaan.