Яагаад tcpdump IPsec-ийн нээлттэй текстийг зөвхөн нэг чиглэлд харуулдаг вэ
Энэ тэгш бус байдал нь барих цэгийн олдвор бөгөөд эвдэрсэн хариултын зам биш. Linux IPsec гарцын дотоод болон гадаад урсгалыг хаанаас харахыг энд тайлбарлав.
Та Linux IPsec гарцын гадаад интерфэйс дээр tcpdump ажиллуулж, нэгэн зэрэг хоёр зүйлийг харна: орж буй ESP фрэймүүд ба тэдний дараа шууд тайлагдсан дотоод пакетууд. Гарах чиглэлд зөвхөн ESP харагдана. Байгалийн дүгнэлт нь хариултууд илгээгдэхгүй байна эсвэл IPsec нэг чиглэлийг шифрлээд нөгөөг нь мартдаг. Аль нь ч үнэн биш.
Таны харж байгаа зүйл бол барих цэг юм. Цөм нь гарч буй пакетуудыг төхөөрөмжийн дамжуулах зам тэдгээрийг пакетын сокетод өгөхөөс өмнө өөрчилдөг тул сокет гадагш гарах дотоод хэлбэрийг хэзээ ч хардаггүй. Орох үед пакетыг эхлээд ESP хэлбэрээр барьж, декапсуллагдсан хуулбар стек рүү дахин ороход харагдана. Нэг ижил урсгал, хоёр өөр ажиглалтын цонх.
Барих цэг нь юу харахыг тань тодорхойлно
Энгийн интерфэйс дээр AF_PACKET сокет төхөөрөмжийн давхаргын ойролцоо байрлана. Хостыг орхиж буй пакетууд эхлээд IPsec-ийн гарах боловсруулалтаар дамжина, энэ нь дотоод TCP сегментийг ESP эсвэл UDP-4500 датаграм болгон хувиргаж, дараа нь л тэр давхаргад хүрнэ. Ирж буй пакетуудыг утсаар ирэх үед нь шифрлэгдсэн хэвээр сокет руу хуулж, тайлагдсан үр дүн нь стек үүнийг локалаар хүргэх эсвэл дамжуулах үед дараа нь харагдана.
Энэ дараалал тэгш бус байдлыг бүрэн тайлбарлана. Энэ нь чиглэл, бодлого эсвэл програмын зан үйлийн талаарх нотолгоо биш бөгөөд үүнийг тийм гэж үзэх нь хүмүүсийг бүх хугацаанд зөв илгээгдсэн хариултын араас гүйлгэхэд хүргэдэг. Энэ бол гажигийг сүлжээ биш, багаж нь үүсгэдэг цөөн сүлжээний оньсогын нэг юм.
Шүүлтүүрийг санаж буй давхаргадаа тааруул
tcp port 443 шиг илэрхийлэл дотоод TCP холболтыг сонгодог. Гарах чиглэлд сокетоос асуух үед энэ холболт аль хэдийн ESP болсон байдаг тул шүүлтүүр юутай ч таарахгүй. Хэрэв та хамгаалагдсан урсгалыг тоолохыг хүсвэл оронд нь гадаад хэлбэрээр шүүнэ үү: түүхий ESP-д протокол 50, эсвэл NAT дамжуулалт хэрэглэгдэж байгаа үед UDP 4500 порт. Хоёр шүүлтүүр хоёулаа хоёр талын хооронд харьцуулж болох пакетын тоог өгдөг бөгөөд ихэнхдээ тоолох шалтгаан нь энэ байдаг. Аль нь ч дотоод хүсэлтэд хариу өгсөн эсэхийг хэлэхгүй.
UDP 4500-ийн тоог ESP пакетын тоо гэж бүү үзээрэй. IKE мөн энэ портыг NAT-T-ийн амьд байлгах мэдэгдэл болон капсуллагдсан солилцоонд ашигладаг тул тоо нь таны хэмжихийг хүссэн өгөгдөл биш урсгалыг агуулна. UDP 500 дээрх анхны IKE солилцоонд энэ нь асуулт бол өөрийн шүүлтүүр хэрэгтэй. Хяналтын урсгалыг өгөгдөлтэй хольсон тоо нь аливаа зурвасын өргөний тооцоог тодорхойгүй хэмжээгээр буруу болгоно. Тусдаа тоолол тусдаа асуултад хариулна.
Шүүлтүүрийг түүний хариулдаг асуултын хажууд бичээрэй. «Хайрцагнаас хэдэн ESP гарсан» ба «вэб хүсэлт хайрцгаас гарсан уу» нь өөр шүүлтүүртэй өөр хэмжилтүүд бөгөөд нэг барилт хоёуланг нь шийдэж чадахгүй. Тэр тэмдэглэлгүйгээр хоёр хүн хэзээ ч нэг зүйлийг тоолоогүй тоонуудыг харьцуулна.
Хувиргалтын өмнө ажигла, дараа биш
Хэрэв гарч буй нээлттэй текстийг харах шаардлагатай бол ажиглалтын цэгийг эртхэн, IPsec-ийн гарах боловсруулалтаас өмнө зөөнө үү. NFLOG танд Netfilter дэгээ өгдөг бөгөөд тэнд дүрэм сонгосон пакетуудыг хэрэглэгчийн орон зайн сокет руу хуулж чадах бөгөөд tcpdump үүнийг уншиж чадна. strongSwan-ы урсгал буулгах гарын авлага энэ аргыг яг энэ шалтгаанаар баримтжуулсан.
Бодлогын тохирол дүрмийг туннельд орох гэж буй урсгалаар хязгаарлана. -m policy --pol ipsec --dir out нь хайрцагнаас илгээсэн бүх пакетыг бүртгэхийн оронд дүрмийг тодорхой болгодог. Дараа нь бүртгэлийн бүлгийг хязгаарлагдмал барилтаар уншина: цөөн агшин зураг, хэмжээний хязгаар нь оношилгоог урсгалын архив болохоос сэргийлнэ. Хязгаарлагдмал барилтыг шүүмжлэгчид өгөх нь хамаагүй ачаа чирэхгүйгээр илүү хялбар. Тоог эхлэхээс өмнө шийдээрэй, хэд ирснийг харсны дараа биш.
iptables -I OUTPUT 1 -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5
tcpdump -ni nflog:5 -s 128 -c 20 'host 10.83.0.44 and tcp port 8443'Урсгалд тохирох дэгээг сонгоно уу. OUTPUT гарц өөрөө үүсгэдэг урсгалыг хамарна; LAN клиентээс дамжих нь оронд нь FORWARD гинжин хэлхээгээр явдаг бөгөөд OUTPUT дээрх дүрэм үүнийг хэзээ ч харахгүй. Дээрх хаяг, порт нь зөвшөөрөгдсөн туршилтын зорилтын орлуулагч юм.
Ажиглалт юуг нотолдог
NFLOG бол бүртгэлийн зорилт, хүлээн авах шийдвэр биш. Тэнд гарч ирсэн пакет нь дэгээнд хүрч, дүрэмд тохирсныг харуулна. Дараагийн шүүлтүүр зөвшөөрсөн, төхөөрөмж дамжуулсан эсвэл нөгөө тал ямар нэг зүйл хүлээн авсан гэдгийг харуулахгүй.
Хоосон бүртгэл ч мөн адил хоёрдмол утгатай. Дүрмийн пакетын тоолуурыг шалгаж, чиглэлийг баталгаажуулж, урсгал үнэхээр IPsec бодлоготой тохирсныг баталгаажуулж, зорьсон газрыг баталгаажуулна уу. Зөвхөн хоёр талд тохирох тоолуур л ажиглалтыг дүгнэлт болгоно. Дараа нь ижил хяналттай оролдлогын хувьд хоёр талын аюулгүй байдлын нэгдлийн тоолуурыг харьцуулна уу, учир нь SA тоолуур нь юу хамгаалагдаж, илгээгдсэний эрх бүхий бүртгэл юм.
Бас нэг урхи: энэ контекстэд «нээлттэй текст» нь IPsec-ийн шифрлэлтийн давхаргын гадна гэсэн үг. Дотоод HTTPS сесс өөрийн TLS-тэй хэвээр байна. Декапсуллагдсан пакетыг барих нь програмын TLS-ийг тайлахгүй бөгөөд тэнд уншигдахуйц HTTP харагдвал програм анхнаасаа HTTPS ашиглаагүй гэсэн үг.
Цэвэрлэж, хоёр үзүүрийг харьцуул
Ажиглалт дуусмагц таны оруулсан яг тэр дүрмийг эзэмшигчийн дагуу устгана уу. Бүртгэлийн дүрмийг орхивол тохирох пакет бүрт CPU зарцуулагдаж, өгөгдөл хадгалах асуудлыг чимээгүй үүсгэдэг. Өөрт тань хамаарахгүй гинжийг цэвэрлэхийн оронд дүрмийг -D-тэй давтан устгана уу.
iptables -D OUTPUT -d 10.83.0.44/32 -p tcp --dport 8443 -m policy --pol ipsec --dir out -j NFLOG --nflog-group 5Хэрэв байршуулалт хэрэглэгчийн орон зайн IPsec, XFRM интерфэйс эсвэл техник хангамжийн ачаа буулгалт ашигладаг бол ажиглалтын цэгүүд шилжиж, энэ жор огт хамаарахгүй байж болно. libipsec-ийн хувьд дотоод урсгалыг ажиглах баримтжуулсан газар нь TUN төхөөрөмж юм. Эхлээд замыг тодорхойлж, дараа нь асуултад хариулдах цэгийг сонгож, хоёр чиглэл нь хувиргалтын буруу талыг харж байхад л өөр харагдана гэж хүлээгээрэй.