Pildi autor: Jamie McLennan

Kuidas oma sadamaid peita portsu koputades

Paljud meist, eriti süsteemi / võrguadministraatorid, jätavad süsteemipõhise juurdepääsu jaoks sageli ssh-porti 22 lahti. See jätab häkkeritele ukse, et proovida süsteemi hiilida. Mitte legitiimne kasutaja saab lihtsalt sundida süsteemi avatud ssh-pordiga ühenduse looma. Üks viis ülaltoodud stsenaariumi korral probleemi lahendamiseks on varjata ssh-port (või mõni muu) pordi koputusmehhanismi abil. Selles artiklis näitan teile, kuidas pordi koputamist iptable'i abil rakendada.

iptables on utiliidiprogramm, mis võimaldab süsteemi administraatoritel konfigureerida Linuxi kerneli tulemüüri pakutavaid tabeleid.

Märkus. Kui soovite reegleid ipv6-le, saate tulemüüri jaoks reeglite loomiseks kasutada ip6table-sid. Huvitatud lugejad saavad vaadata ka nftable'i, mis on iptable'i täiendatud versioon ja mis peaks tulevikus selle asendama. Veenduge, et teie süsteemi oleks installitud iptables.

Kaks kasutatavat süsteemi:
Server 172.31.75.10 (Ubuntu)
Klient: 172.31.72.153 (Kali Linux)

Pordi koputamine on mehhanism süsteemi suletud porti avamiseks tulemüüris, proovides luua ühenduse mõne eelnevalt määratletud suletud pordiga. Mõelge ssh-pordi juhtumile. Esialgu suletakse pordi number 22 ja keegi ei saa sellega ühenduse luua. Seal on tulemüürireeglid, mis täpsustavad, et ssh-port avatakse alles pärast mõne pordi (nt 8000, 8001 ja 8002) koputamist. Määratud pordi numbrid on samuti suletud.

Selle õpetuse jaoks järgime antud järjestust: 5678, 5984 ja 6357. Eelistatav on, et sadamate valik oleks võimalikult varjatud. Vaatame sellest lähemalt hiljem postituses. Esialgu on tabel tühi ja selle saab ristkontrolli teha järgmise käsu abil.

$ sudo iptables -L

Enne alustamist vaatame nmap-i abil avatud pordi olekut. Nagu näete alloleval pildil, näitab serveri skannimine nelja pordi lahti, nimelt 22, 80, 443 ja 8000. Õpiku lõpuks 22 ei kuvata nmap avatuks. Pordi numbril 8000 töötab python SimpleHTTPServer.

Serveri kontrollimise tulemus enne tulemüürireeglite seadmist

Sadama koputamise loogiline kujundus

Esiteks soovime, et meie tulemüür aktsepteeriks kogu liiklust, mida sadama koputamine ei hõlma. See hõlmab kogu veebiserveri liiklust (pordi numbrite 80, 443 ja 8000 jaoks).
Pärast seda peame ülejäänud liikluse edastama uude ahelasse, mis tegeleb sadama koputamisega. Helistagem sellele ahelaks WALL. Pärast seda peame märgistama IP-aadressid, mis üritavad ühenduse luua esimese legaalse pordiga. Vajame reeglit, mis kontrollib, kas teine ​​kokkulangevus asub teises legaalses sadamas. Kui see on nii, siis panime paika uue lipu, mis näitab, et kaks porti on õigesti koputatud. Kui teine ​​koputus on vale, kukutame paketi ja lipp lähtestatakse. Sarnaselt töötavad teised ketid sama strateegiaga, kontrollides sobivat lippu ja edastades selle edasi, kui see jätkub õigel teel. Lõpuks, kui IP-aadress tabab õigesti järjestikku asuvaid sadamaid, puutub ssh-port kokku. Eelistatav on, et ssh-deemon kuvataks ainult lühikese aja jooksul, võimaldades IP-aadressil ühendust luua.
Loogiliselt võttes on meil kolm väravat, millest igaüks nõuab ühte koputamist, et võimaldada IP-aadressil ühenduda jooksva teenusega. See tähendab, et IP-aadressi taotlemiseks on neli erinevat olekut:

  • algseisund: kõik IP-aadressid on esialgu selles olekus, kui nad pole esimest porti õigesti jõudnud. Meie puhul on sadam 5678.
  • olek auth1: IP-aadressid, mis on esimesse pordi õigesti jõudnud, märgistatakse auth1-ga.
  • auth2 olek: kui IP-aadress on auth2-ga märgistatud, tähendab see, et IP-aadress on teise pordi õigesti koputanud. Sellest olekust järgmine pakettaknad määravad, kas seada IP-aadressi lipuks algne või auth3.
  • auth3 olek: kõik auth3-ga tähistatud IP-aadressid on kolm pordi õiges järjekorras koputanud. Igal selle lipuga IP-aadressil on lubatud ssh-pordiga ühenduse luua.

Vaja on nelja erinevat ahelat:

  • GATE1: määrab, kas algses olekus olev aadress tuleks märgistada kui auth1.
  • GATE2: määrab, kas oleku „auth1” aadress tuleks töödelda auth2-ks või lähtestada algsesse olekusse.
  • GATE3: määrab, kas olekus „aut2” olev aadress tuleks SSH-ühenduse lubamiseks märgistada kui „auth3” või lähtestada „algsesse” olekusse.
  • PASSED: see ahel avab legitiimsete klientide jaoks SSH-ühenduse pordi.

Käte määrimine

Praeguste ühenduste säilitamiseks on alati hea tava seada tühja tabeli vaikesäteteks „ACCEPT”. Siis peaksime olemasolevad tulemüürireeglid läbi loputama ja tulemüüri värskelt käivitama.

$ sudo iptables - P sisend aktsepteeritakse
$ sudo iptables -P EDASI VASTUVÕTMINE
$ sudo iptables - P VÄLJUND aktsepteeritakse
$ sudo iptables -F

Tippige järgmised käsud, et luua täiendavaid ahelaid, mida kasutame:

$ sudo iptables -N WALL
$ sudo iptables -N KNOCK1
$ sudo iptables -N KNOCK2
$ sudo iptables -N KNOCK3
$ sudo iptables - N PASSED

Pärast nende käskude tippimist on meil avatud tulemüür, mida me piirame. Tulemüüris peaks olema kaheksa erinevat ahelat. Võite neid kontrollida, sisestades järgmise käskluse:

$ sudo iptables -L

Selles loetletakse kõik ahelad ja reeglid.
Nagu me juba rääkisime, peame hakkama saama liiklusega, mis ei kuulu sadama koputamisse. Selle sisestusahela peame lisama reeglid. Proovige järgmisi käske:

$ sudo iptables - INPUT -i lo -j ACCEPT
$ sudo iptables - A INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables - A INPUT -p tcp --dport 443 -j ACCEPT
$ sudo iptables - A INPUT -p tcp --dport 8000 -j ACCEPT

Esimene käsk võimaldab masinal aktsepteerida kõiki kohaliku masina ühendusi, kuna erinevad teenused ja rakendused peavad sageli omavahel suhtlema. Teine ja kolmas käsk võimaldavad veebiserverit kasutavate sadamate (http ja https) liiklust. Neljas käsk on sellepärast, et olen jätnud python SimpleHTTPServeri käima.
Kõik need käsud võimaldavad põhilisi ühendusi ja nüüd saame ülejäänud liikluse WALL-ahelasse üle kanda.

$ sudo iptables -A sisend -j WALL

Kolme KNOCK-ahela seadistamine

$ sudo iptables -A KNOCK1 -p tcp --dport 5678 -m hiljutine - nimi AUTH1 - set -j DROP
$ sudo iptables -A KNOCK1 -j DROP
$ sudo iptables -A KNOCK2 -m hiljutine - nimi AUTH1 - eemalda
$ sudo iptables -A KNOCK2 -p tcp --dport 5984 -m hiljutine - nimi AUTH2 - set -j DROP
$ sudo iptables -A KNOCK2 -j KNOCK1
$ sudo iptables - A KNOCK3 -m hiljutine - nimi AUTH2 - eemalda
$ sudo iptables -A KNOCK3 -p tcp --dport 6357 -m hiljutine - nimi AUTH3 - set -j DROP
$ sudo iptables -A KNOCK3 -j KNOCK1

Läbitud kett

$ sudo iptables -PASSED -m hiljutine - nimi AUTH3 - eemalda
$ sudo iptables - A PASSED -p tcp --dport 22 -j ACCEPT
$ sudo iptables -PASSED -j KNOCK1

Seinaketi seadistamine

$ sudo iptables - WALL -m viimased --rcheck --seconds 30 - name AUTH3 -j PASSED
$ sudo iptables - SEIN - viimased - kontroll - sekundit 10 - nimi AUTH2 -j KNOCK3
$ sudo iptables - WALL -m viimased --rcheck --seconds 10 - name AUTH2 -j KNOCK2
$ sudo iptables - WALL -j KNOCK1

Kui olete kõigi käskudega lõpetanud, peaks teie iptables-i loend välja nägema umbes selline:

Kõik ahelad koos tulemüüri täielike reeglitega

Mul on kõigi käskude skript ja pordinumbrid on käsuridadest argumentidena edasi antud. See võimaldab mul muuta pordi numbrit ilma koodi muutmata. Kogu skripti leiate siit.

Nüüd on aeg tulemüüri testida. Kõigepealt peate leidma viisi sadamate õigesti löömiseks. Selleks võite kasutada nmap-i, hping-i või kõike muud, mis teile sobib. Nmap abil saate teha midagi sellist.

nmap -Pn --host_timeout 201 --max-kordab 0-p portNumber sshServer

Sellel real saate lihtsalt lüüa 3 sadamasse:

x-i jaoks dollar 5678 5984 6357; do nmap -Pn --host-timeout 201 --max-reeds 0 -p $ x 172.31.75.10 && uni 1; tehtud
$ ssh suraj@172.31.75.10
Edukas ühendus suletud ssh-pordiga

Nagu ülaltoodud pildilt näete, saate ssh-teenuse abil ühenduda mõne muu süsteemiga.

Pordi numbrite valimine on oluline aspekt sadamate koputamise rakendamisel. Mitu korda kasutavad inimesed sageli ennustatavaid pordinumbreid, näiteks 1111, 2222 ja 3333; või 1234, 2345, 3456. Õige aeg ja hea töö võimaldavad häkkeritel tungida esimese kaitsekihi sisse. Enamasti leitakse, et pordinumbrite järjestus suureneb. Selguse suurendamiseks saab valida pordinumbrid järgmises järjekorras: 6547, 2385, 5875; või midagi sarnast.

Port Knockingi muu kasutamine

Jätan oma süsteemi sageli Pythoni HTTP-failiserveri lahti. See võimaldab mul oma failidele igalt poolt juurde pääseda. Üks viis veenduda, et keegi teine ​​ei pääse mu sisule juurde, rakendab minu süsteemi tulemüüris pordi koputamist. Teine viis selleks on autentimiskihi lisamine, nagu see on. Soovitan kasutada mõlemat turbemehhanismi, mis suurendaks teie sisu privaatsust.

Tulemüürireeglite püsimiseks peame serverisse installima veel ühe paketi:

$ sudo apt-get install iptables-püsiv
$ sudo teenuse iptables - püsiv algus

Lisalinke edasiseks lugemiseks

  1. http://www.microhowto.info/howto/implement_port_knocking_using_iptables.html
  2. https://www.digitalocean.com/community/tutorials/how-to-use-port-knocking-to-hide-your-ssh-daemon-from-attackers-on-ubuntu