Жозеф Ж. Баарбиш Хувь нэмэр болгон оруулсан Брэд Дэйвис SGML уруу хөрвүүлж шинэчилсэн Лодойсамбын Баянзул Орчуулсан Галт хана Галт хана аюулгүй байдал галт хана Танилцуулга Галт ханын тусламжтайгаар систем уруу орж байгаа болон түүнээс гарч байгаа өгөгдлийн урсгалыг шүүн нэвтрүүлэх боломжтой болдог. Галт хана нь сүлжээгээр дамжин өнгөрч байгаа пакетуудыг, дүрмүүдэд заасны дагуу эсвэл нэвтрүүлэх, эсвэл хаах үүргийг гүйцэтгэдэг. Галт ханын дүрмүүд нь пакетийг протоколын төрөл, эхлэл хост хаяг, очих хост хаяг, эхлэл порт хаяг, очих порт хаяг зэрэг хэд хэдэн шинжээр нь шинжлэх боломжийг олгодог. Галт ханыг ашигласнаар тухайн хостын болон сүлжээний аюулгүй байдлыг нилээд нэмэгдүүлж чадна. Галт ханын тусламжтайгаар дараах зүйлсийг хийх боломжтой : Дотоод сүлжээнд байрлаж байгаа сервер машин, түүн дээр ажиллаж байгаа програм үйлчилгээг Интернэтээр дамжин орж ирж буй гадны урсгалаас хамгаалах, тусгаарлах. Дотоод сүлжээнд байрлаж байгаа хостоос Интернэт уруу хандах хандалтыг хаах, хязгаарлах. Network address translation буюу Сүлжээний Хаягийн Хөрвүүлэлтийг (NAT) дэмжих. Өөрөөр хэлбэл дотоод сүлжээндээ хувийн IP хаяг хэрэглэж, Интернэтэд гарахдаа дундаа нэг холболтыг (нэг IP хаяг эсвэл автоматаар оноосон бүлэг хаягаар) хуваан хэрэглэх. Энэ бүлгийг уншсаны дараа, та дараах зүйлсийг мэдэх болно: пакетийг шүүн нэвтрүүлэх дүрмүүдийг хэрхэн оновчтойгоор тодорхойлох. &os;-тэй хамт суусан галт ханануудын ялгаа. OpenBSD-н PF галт ханыг хэрхэн тохируулах болон хэрэглэх. IPFILTER-г хэрхэн тохируулах болон хэрэглэх. IPFW-г хэрхэн тохируулах болон хэрэглэх. Энэ бүлгийг уншихаасаа өмнө, та дараах зүйлсийг мэдсэн байх шаардлагатай: &os; болон Интернэтийн тухай үндсэн ойлголт. Галт ханын тухай ойлголтууд галт хана дүрмүүд Галт ханын дүрмүүдийг дараах үндсэн хоёр янзаар үүсгэж болно: inclusive буюу хамааруулсан эсвэл exclusive буюу хамааруулаагүй. Хамааруулаагүй галт хана нь дүрмэнд тохирсон урсгалаас бусдыг нэвтрүүлнэ. Харин хамааруулсан галт хана бол эсрэгээр нь, дүрмэнд тохирсон урсгалыг нэвтрүүлж бусдыг хаана. Болохгүй урсгалыг галт ханаар нэвтрүүлэх эрсдэлийг багасгадаг учраас хамааруулсан галт хана нь хамааруулаагүй галт ханыг бодвол илүүтэйгээр аюулгүй байдлыг хангаж чаддаг. Төлөвт галт ханыг ашиглан аюулгүй байдлыг цааш илүү сайжруулах боломжтой. Төлөвт галт хана нь галт ханаар дамжин тогтсон холболтуудыг бүртгэж, зөвхөн таарч байгаа тогтсон холболтоор эсвэл шинэ холболт үүсгэн урсгалыг нэвтрүүлдэг. Төлөвт галт ханын нэг дутагдалтай тал гэвэл олон шинэ холболтууд нэг дор тогтох үед Denial of Service буюу Үйлчилгээг Зогсоох(DoS) халдлагад өртөмтгий болдог. Иймээс галт ханыг зохион байгуулахдаа төлөвт ба төлөвт-бус байдлыг хослуулан хэрэглэх нь хамгийн оновчтой байдаг. Галт ханын багцууд &os; дээр гурван янзын галт ханын багцууд хамрагдсан байдаг. Нэрлэвэл: IPFILTER (IPF гэж нэрлэх нь элбэг), IPFIREWALL (IPFW гэж нэрлэх нь элбэг), ба OpenBSD-н PacketFilter (PF гэж нэрлэх нь элбэг). &os; нь мөн урсгалыг хязгаарлах(үндсэндээ зурвасын өргөнийг хязгаарлах) хоёр багцын хамт ирдэг: &man.altq.4; болон &man.dummynet.4;. Dummynet нь IPFW-тай, харин ALTQ нь IPF/PF-тай нягт холбоотой ажилладаг. IPF, IPFW, ба PF нь бүгд систем уруу орж байгаа болон гарч байгаа урсгалыг дүрмүүдийн тусламжтай удирдах боловч синтаксын хувьд ч, арга замын хувьд ч өөр өөр байдаг. &os; дээр олон галт ханын багцууд хамт ирдэг нь өөр өөр хэрэгцээ шаардлагатай хүмүүст хүртээмжтэй байхыг гол зорилгоо болгосонд оршино. Түүнээс аль ч галт хана нь нөгөөгөөсөө илүү, эсвэл дутуу гэсэн үг биш юм. Зохиогч IPFILTER-г сонгон авсан нь түүний төлөвт дүрмүүд нь NAT орчинд хэрэглэхэд төвөг багатай, мөн дотроо ftp proxy агуулсан байдгаас болсон хэрэг. Энэхүү ftp proxy-г ашиглан гадагшаа гарах FTP урсгалыг зөвшөөрсөн дүрмүүдийг бичихэд хялбар байдаг. Бүх галт ханууд пакет удирдах талбарын утгыг шинжлэх зарчмаар ажиллах тул галт ханын дүрмүүдийг бичихийн өмнө TCP/IP протокол хэрхэн ажилладаг талаар болон пакет удирдах талбарын утгууд, энэ утгууд session буюу сесс үүсэхэд хэрхэн хэрэглэгддэг талаар үндсэн ойлголттой байх шаардлагатай болдог. Дээрх ойлголтуудын талаар дараах хаягаар орж уншина уу: . OpenBSD Пакет шүүгч (PF) ба <acronym>ALTQ</acronym> галт хана PF 2003 оны 7 сард OpenBSD-н галт ханын програм болох PF &os; уруу шилжиж, &os; Портын Цуглуулгад орсон бөгөөд 2004 оны 11 сард гарсан &os; 5.3-с эхлэн PF-г үндсэн системийн багцын нэг хэсэг болгон оруулсан байдаг. PF нь бүрэн хэмжээнд ажиллах чадвартай галт хана бөгөөд ALTQ-тай (Alternate Queuing буюу Ээлжлэн солигдох дараалал) хамтран ажиллах боломжтой. ALTQ-н тусламжтай шүүн нэвтрүүлэх дүрмүүдийг харгалзан үйлчилгээнүүдэд шаардлагатай зурвасын өргөнийг баталгаатай олгох Quality of Service буюу Үйлчилгээний Чанарыг (QoS) хангасан зурвасын өргөнийг хязгаарлах боломжоор хангадаг. OpenBSD Төсөл нь PF-н Хэрэглэгчдийн Гарын авлагыг хөтлөн явуулдаг тул давхардуулахгүй үүднээс энэ гарын авлагад оруулаагүй болно. Илүү дэлгэрэнгүй мэдээллийг &os;-н PF вэб хуудаснаас үзнэ үү: . PF-г идэвхжүүлэх &os; 5.3-с хойших хувилбаруудад PF нь үндсэн суулгацтай хамт, ажиллах үеийн ачаалах боломжтой модуль байдлаар ирдэг. rc.conf тохиргооны файл дотор pf_enable="YES" илэрхийлэл байгаа үед систем PF цөмийн модулийг динамикаар ачаална. Энэ ачаалах боломжтой модуль нь &man.pflog.4;-н тусламжтай, бүртгэх боломжтойгоор бүтээгдсэн байдаг. Энэ модуль нь options INET ба device bpf-г байгаа гэж тооцдог. &os;-н 6.0-RELEASE-с өмнөх хувилбарын NOINET6, хойших хувилбарын NO_INET6-г (жишээ нь &man.make.conf.5;) системийг үүсгэх үед тодорхойлоогүй бол, options INET6 шаардлагатай. Цөмийн модуль ачаалагдсан эсвэл цөм нь PF-н хамт статик байдлаар бүтээгдсэн бол, pfpfctl тушаалын тусламжтай идэвхжүүлж, мөн идэвхгүй болгож болно. Энэ жишээн дээр pf-г хэрхэн идэвхжүүлэхийг харуулав: &prompt.root; pfctl -e pfctl тушаалыг ашиглан pf галт ханатай ажиллах боломжтой. тушаалыг ашиглахын өмнө &man.pfctl.8; заавар хуудаснаас дэлгэрэнгүй мэдээллийг авна уу. Цөмийн боломжууд цөмийн боломжууд pf төхөөрөмж цөмийн боломжууд pflog төхөөрөмж цөмийн боломжууд pfsync төхөөрөмж &os; цөм уруу дараах боломжуудыг эмхэтгэн PF-г идэвхжүүлэх албагүй боловч, суурь мэдлэг болгон энд үзүүллээ. PF-г цөм уруу хөрвүүлэн эмхэтгэснээр ачаалах боломжтой модулийг хэрэглэх боломжгүй болдог. Цөмийн тохиргоон дахь PF илэрхийллүүд /usr/src/sys/conf/NOTES гэсэн цөмийн эх файлд байх ба доор сийрүүлэв: device pf device pflog device pfsync device pf мөр Packet Filter галт ханыг дэмждэг болгоно. device pflog мөр хуурамч &man.pflog.4; сүлжээний төхөөрөмжийг идэвхжүүлнэ. Энэ хуурамч төхөөрөмжийн тусламжтайгаар &man.bpf.4; дескриптор уруу урсгалыг бүртгэх боломжтой. &man.pflogd.8; дэмонг бүртгэлийг дискэн дээр хадгалахад хэрэглэнэ. device pfsync мөр хуурамч &man.pfsync.4; сүлжээний төхөөрөмжийг идэвхжүүлнэ. Энэ хуурамч төхөөрөмжийн тусламжтайгаар төлвийн өөрчлөлтүүдийг хянах боломжтой. Энэ төхөөрөмж нь ачаалах боломжтой модульд байдаггүй тул, түүнийг ашиглахын тулд цөмийг шинээр бүтээх хэрэгтэй байдаг. Эдгээр тохируулгууд нь зөвхөн тэдгээрийг тохируулан, тусгайлан цөм бүтээж суулгасны дараа идэвхждэг. rc.conf боломжууд PF-г систем ачаалах үед идэвхтэй болгохын тулд /etc/rc.conf дотор дараах илэрхийллүүд байх ёстой: pf_enable="YES" # Enable PF (load module if required) pf_rules="/etc/pf.conf" # rules definition file for pf pf_flags="" # additional flags for pfctl startup pflog_enable="YES" # start pflogd(8) pflog_logfile="/var/log/pflog" # where pflogd should store the logfile pflog_flags="" # additional flags for pflogd startup Хэрвээ энэ галт ханын цаана LAN байгаа бөгөөд LAN-д байгаа компьютерууд уруу пакет дамжуулах шаардлагатай бол эсвэл NAT ашиглах бодолтой байгаа бол дараах илэрхийллийг идэвхжүүлэх хэрэгтэй: gateway_enable="YES" # Enable as LAN gateway <acronym>ALTQ</acronym>-г идэвхжүүлэх ALTQ-г идэвхжүүлэх ганц арга зам бол түүний боломжуудыг &os; цөмтэй хамт хөрвүүлэн эмхэтгэх юм. Мөн сүлжээний картын драйвер болгон ALTQ-г дэмждэггүй тул өөрийн тань хэрэглэж буй &os; хувилбарын хувьд дэмжигддэг драйверуудын жагсаалтыг &man.altq.4; гарын авлагын хуудаснаас үзнэ үү. Дараах тохируулгууд ALTQ-г идэвхжүүлж нэмэлт үүргүүдийг оруулдаг. options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build options ALTQ мөр ALTQ -г бүхэлд нь идэвхжүүлнэ. options ALTQ_CBQ мөр Class Based Queuing буюу Ангиллаас Хамаарсан Дараалал Үүсгэх(CBQ) боломжийг идэвхжүүлнэ. CBQ нь шүүгч дүрмүүд дээр үндэслэн урсгалуудад эрэмбэ тогтоох зорилгоор зурвасын өргөнийг өөр өөр ангиллуудад болон дарааллуудад хуваах боломжийг олгоно. options ALTQ_RED мөр Random Early Detection буюу Санамсаргүй Эрт Илрүүлэлт(RED)-г идэвхжүүлнэ. RED-г сүлжээний даац хэтрэхээс сэргийлэхэд хэрэглэдэг. RED дарааллын уртыг хэмжиж, түүнийг байх ёстой дээд ба доод хэмжээтэй жиших байдлаар ажилладаг. Хэрэв дараалал дээд хэмжээнээс урт болбол шинэ пакетууд орхигдох болно. Нэртэйгээ адилаар, RED нь холболтуудаас пакетийг санамсаргүйгээр орхигдуулдаг. options ALTQ_RIO мөр нь Random Early Detection In and Out буюу Орох ба Гарах Санамсаргүй Эрт Илрүүлэлтийг идэвхжүүлнэ. options ALTQ_HFSC мөр нь Hierarchical Fair Service Curve Packet Scheduler буюу Үе давхаргат Зохимжит Үйлчилгээний Муруйн Пакет Хуваарилагчийг идэвхжүүлнэ. HFSC талаар илүү дэлгэрэнгүй мэдээллийг дараах хаягаас үзнэ үү: . options ALTQ_PRIQ мөр нь Priority Queuing буюу Эрэмбэт Дараалал Үүсгэх (PRIQ)-г идэвхжүүлнэ. PRIQ нь эрэмбэ өндөртэй дараалалд байгаа урсгалыг эхэнд нэвтрүүлэх зарчмаар ажилладаг. options ALTQ_NOPCC мөр нь ALTQSMP-тай хамт ажиллах боломжтой болгоно. SMP системийн хувьд энэ боломжийг заавал идэвхжүүлэх хэрэгтэй. Шүүгч дүрмүүдийг үүсгэх Пакет Шүүгч нь дүрмүүдээ &man.pf.conf.5; файлаас уншиж, энд заагдсан дүрмүүд болон тодорхойлолтуудаас хамааран пакетийг нэвтрүүлэх, орхих, эсвэл өөрчлөхийн аль нэгийг хийнэ. &os; суулгац нь жишээ болон тайлбарыг агуулсан анхдагч /etc/pf.conf файлын хамт ирдэг. Хэдийгээр &os; өөрийн /etc/pf.conf файлтай боловч синтакс нь OpenBSD-ийнхтэй адилхан байна. pf галт ханыг тохируулах дэлгэрэнгүй мэдээллийг OpenBSD багийнхан бичсэн бөгөөд хаягаар орж үзэж болно. pf хэрэглэгчийн гарын авлагаар аялахдаа, &os; хувилбарууд өөр өөрийн pf хувилбарыг ашигладгийг санаарай. &os; 5.X дээрх pf галт хана нь OpenBSD-н 3.5 хувилбарынхтай дүйх ба &os; 6.X дээрх pf галт хана нь OpenBSD-н 3.7 хувилбарынхтай дүйдэг болохыг анхаарна уу. pf галт ханыг тохируулах, ажиллуулахтай холбоотой асуултуудаа &a.pf;-с асуугаарай. Мөн асуулт асуухынхаа өмнө, захидлын жагсаалтын архиваар орж үзэхээ мартуузай. IPFILTER (IPF) Галт хана галт хана IPFILTER Энэ хэсэг дээр үргэлжлүүлэн ажиллаж байна. Агуулга зарим хэсэгт буруу байхыг үгүйcгэхгүй. IPFILTER-г зохиосон хүн бол Даррин Рид билээ. IPFILTER нь үйлдлийн системээс хамааралгүй: нээлттэй эхийн програм бөгөөд &os;, NetBSD, OpenBSD, &sunos;, HP/UX, ба &solaris; зэрэг олон үйлдлийн систем уруу шилжүүлэгдсэн юм. IPFILTER эрчимтэй дэмжигдэж, сайжруулсан хувилбарууд нь тогтмол гарсаар байгаа. IPFILTER нь цөмийн талд ажиллах галт хана болон NAT механизм дээр суурилсан бөгөөд түүнийг удирдах, хянахын тулд хэрэглэгчийн интерфэйс програмыг ашиглана. Галт ханын дүрмүүдийг нэмэх болон хасахдаа &man.ipf.8; хэрэгслийг хэрэглэнэ. NAT дүрмүүдийг нэмэх болон хасахдаа &man.ipnat.1; хэрэгслийг хэрэглэнэ. &man.ipfstat.8; хэрэгсэл нь IPFILTER-н цөмийн талд ажиллаж байгаа хэсгийн статистикийг хэвлэхэд зориулагдсан. &man.ipmon.8; програм харин IPFILTER-н үйлдлүүдийг системийн бүртгэлийн файлд бүртгэнэ. IPF-г анх зохиохдоо сүүлд тохирсон дүрэм дийлнэ гэсэн логикийн дагуу бүтээсэн ба зөвхөн төлөвт-бус дүрмүүдийг ашигладаг байлаа. Цаг хугацаа өнгөрөхөд IPF илүү хөгжиж, quick тохируулга болон төлөвт keep state тохируулгуудыг агуулах болсон нь орчин үеийн хэрэгцээ шаардлагад илүү нийцэх болжээ. IPF-н албан ёсны баримтжуулалтанд хуучин уламжлалт дүрмүүдийг бичих параметрүүд болон файлтай ажиллах логикууд багтсан байдаг. Харин шинэ функцуудыг нь зөвхөн нэмэлт боломж байдлаар оруулсан нь аюулгүй байдлыг хавьгүй илүү хангасан галт хана бий болгож байгаа тэднийг хэт доогуур тавьсан санагддаг. Энэ бүлэгт байгаа зааврууд нь quick болон төлөвт keep state тохируулгуудыг агуулсан дүрмүүдээс үндсэндээ бүрдсэн байгаа. Энэ бол хамааруулсан галт ханын дүрмүүдийг бичих үндсэн арга барил юм. Хамааруулсан галт хана нь зөвхөн дүрмэнд тохирсон пакетуудыг нэвтрүүлнэ. Ийм маягаар галт ханын цаанаас Интернэт уруу ямар ямар үйлчилгээнүүд гарч болох болон эсрэгээр Интернэтээс дотоод сүлжээ уруу ямар ямар үйлчилгээнүүд нэвтэрч болохыг удирдах боломжтой. Эдгээрээс бусад бүх урсгалыг хааж, бүртгэдэг байхаар зохиогдсон байдаг. Хамааруулсан галт хана нь хамааруулаагүй галт ханаас аюулгүй байдлын хувьд хэд дахин илүү, тиймээс энд бид зөвхөн хамааруулсан галт ханын дүрмүүдийн талаар ярилцах болно. Хуучин уламжлалт дүрмүүдтэй ажиллах аргуудын талаар дэлгэрэнгүй тайлбарыг: ба хаягаар орж үзнэ үү. IPF FAQ-г хаягаар орж үзнэ үү. Нээлттэй эхийн IPFilter програмын захидлын жагсаалтын архивыг хаягаар орж үзнэ үү. IPF-г идэвхжүүлэх IPFILTER идэвхжүүлэх IPF нь &os; үндсэн суулгацтай хамт, ажиллах үеийн ачаалах боломжтой модуль байдлаар ирдэг. rc.conf тохиргооны файл дотор ipfilter_enable="YES" илэрхийлэл байгаа үед систем IPF цөмийн модулийг динамикаар ачаална. Энэ ачаалах боломжтой модуль нь бүртгэх боломжтойгоор, анхдагч default pass all тохируулгын хамт бүтээгдсэн байдаг. Анхдагч дүрмийг block all болгохын тулд IPF-г цөмд эмхэтгэх шаардлага байхгүй. Зөвхөн дүрмүүдийнхээ төгсгөлд бүгдийг хаах дүрмийг бичиж өгөхөд хангалттай. Цөмийн тохируулгууд цөмийн тохируулгууд IPFILTER цөмийн тохируулгууд IPFILTER_LOG цөмийн тохируулгууд IPFILTER_DEFAULT_BLOCK IPFILTER цөмийн тохируулгууд &os; цөм уруу дараах боломжуудыг эмхэтгэн IPF-г идэвхжүүлэх албагүй боловч, суурь мэдлэг болгон энд үзүүллээ. IPF-г цөм уруу хөрвүүлэн эмхэтгэснээр ачаалах боломжтой модулийг хэрэглэх боломжгүй болдог. Цөмийн тохиргоон дахь жишээ IPF илэрхийллүүд /usr/src/sys/conf/NOTES гэсэн цөмийн эх файлд байх ба доор сийрүүлбэл: options IPFILTER options IPFILTER_LOG options IPFILTER_DEFAULT_BLOCK options IPFILTER мөр нь IPFILTER галт ханыг идэвхжүүлнэ. options IPFILTER_LOG мөр нь log гэсэн түлхүүр үг орсон дүрмүүдийн хувьд урсгалыг ipl пакет бүртгэх хуурамч—төхөөрөмж уруу бүртгэх боломжтой болгоно. options IPFILTER_DEFAULT_BLOCK мөр нь галт ханын pass дүрмэнд тохироогүй пакетийг хаах анхдагч чанарыг зааж өгнө. Эдгээр тохируулгууд нь зөвхөн тэдгээрийг тохируулан, тусгайлан цөм бүтээж суулгасны дараа идэвхждэг. rc.conf тохируулгууд IPF-г систем ачаалах үед идэвхтэй болгохын тулд /etc/rc.conf дотор дараах илэрхийллүүд байх ёстой: ipfilter_enable="YES" # Start ipf firewall ipfilter_rules="/etc/ipf.rules" # loads rules definition text file ipmon_enable="YES" # Start IP monitor log ipmon_flags="-Ds" # D = start as daemon # s = log to syslog # v = log tcp window, ack, seq # n = map IP & port to names Хэрэв энэ галт ханын цаана хувийн IP хаяг хэрэглэдэг LAN байгаа бол NAT функцыг идэвхжүүлэхийн тулд дараах мөрүүдийг нэмэх хэрэгтэй: gateway_enable="YES" # Enable as LAN gateway ipnat_enable="YES" # Start ipnat function ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat IPF ipf Таны бичсэн дүрмүүдийг ачаалахад ipf тушаалыг хэрэглэнэ. Ер нь бол та өөрийн дүрмүүдээс бүтсэн файлыг үүсгээд, түүнийгээ дээрх тушаалын ашиглан галт ханын одоо ажиллаж байгаа дотоод дүрмүүдтэй сольж тавьна гэсэн үг юм: &prompt.root; ipf -Fa -f /etc/ipf.rules нь бүх дотоод дүрмүүдийн хүснэгтийг цэвэрлэ гэсэн үг. нь ачаалах дүрмүүдээ энэ файлаас унш гэсэн үг. Ийм байдлаар та өөрийн хүссэн дүрмүүдийн файлыг үүсгээд, дээрх IPF тушаалыг ажиллуулан системийг шинээр ачаалахгүйгээр ажиллаж байгаа галт ханын дүрмүүдийг шинээр өөрчлөх боломжтой болж байна. Дээрх аргаар галт ханын дүрмүүдийг хэдэн ч удаа сольж болох тул энэ арга нь шинэ дүрмүүдийг туршихад тохиромжтой арга юм. Энэ тушаалтай ажиллах боломжтой бусад тугуудын талаар дэлгэрэнгүйг &man.ipf.8; заавар хуудаснаас үзнэ үү. &man.ipf.8; тушаал дүрмүүдийн файлыг стандарт текст файл гэж тооцдог. Симбол орлуулалттай скрипт байдлаар бичигдсэн файлыг ойлгохгүй. Гэвч скрипт симбол орлуулалтын хүчийг ашиглан IPF дүрмүүдийг бүтээх арга зам байгаа. Илүү дэлгэрэнгүй мэдээллийг хэсгээс үзнэ үү. IPFSTAT ipfstat IPFILTER статистик &man.ipfstat.8;-н анхдагч чанар бол галт ханыг хамгийн сүүлд асааснаас хойших, эсвэл ipf -Z тушаалыг өгөн хуримтлуулагчийг хамгийн сүүлд тэглэснээс хойших галт ханаар орж байгаа болон гарч байгаа пакетуудыг хэрэглэгчийн тодорхойлж өгсөн дүрмүүдээр шүүсэн үр дүнд бий болсон статистик тоог гаргаж ирэн, дэлгэцэнд харуулах юм. Дэлгэрэнгүйг &man.ipfstat.8; заавар хуудаснаас үзнэ үү. &man.ipfstat.8; тушаалын анхдагч үр дүн дараах байдалтай байна: input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0 output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0 input packets logged: blocked 99286 passed 0 output packets logged: blocked 0 passed 0 packets logged: input 0 output 0 log failures: input 3898 output 0 fragment state(in): kept 0 lost 0 fragment state(out): kept 0 lost 0 packet state(in): kept 169364 lost 0 packet state(out): kept 431395 lost 0 ICMP replies: 0 TCP RSTs sent: 0 Result cache hits(in): 1215208 (out): 1098963 IN Pullups succeeded: 2 failed: 0 OUT Pullups succeeded: 0 failed: 0 Fastroute successes: 0 failures: 0 TCP cksum fails(in): 0 (out): 0 Packet log flags set: (0) Дотогшоо урсгалын хувьд , гадагшаа урсгалын хувьд тохируулгыг өгөхөд кернелийн ашиглаж буй дүрмүүдийн жагсаалтыг гаргаж харуулна. ipfstat -in нь дотогшоо урсгалын дотоод дүрмүүдийн хүснэгтийг дүрмүүдийн дугаарын хамт харуулна. ipfstat -on нь гадагшаа урсгалын дотоод дүрмүүдийн хүснэгтийг дүрмүүдийн дугаарын хамт харуулна. Үр дүн нь дараах байдалтай байна: @1 pass out on xl0 from any to any @2 block out on dc0 from any to any @3 pass out quick on dc0 proto tcp/udp from any to any keep state ipfstat -ih нь дотогшоо урсгалын дотоод дүрмүүдийн хүснэгтийг дүрмүүдийн хэдэн удаа тохирсон тооны хамт харуулна. ipfstat -oh нь гадагшаа урсгалын дотоод дүрмүүдийн хүснэгтийг дүрмүүдийн хэдэн удаа тохирсон тооны хамт харуулна. Үр дүн нь дараах байдалтай байна: 2451423 pass out on xl0 from any to any 354727 block out on dc0 from any to any 430918 pass out quick on dc0 proto tcp/udp from any to any keep state ipfstat тушаалын хамгийн чухал функцуудын нэг бол, &os;-н ажиллаж байгаа процессийн хүснэгтийг &man.top.1; харуулдаг шиг төлвийн хүснэгтийг туг харуулдаг явдал юм. Таны галт хана гадны халдлагад өртөх үед энэ функц түүнийг илрүүлэх, шинжлэх, халдлагад оролцож буй пакетуудыг харах боломжийг олгоно. Нэмэлт дэд тугууд нь хяналт хийх эхлэл болон очих IP хаяг, порт, эсвэл протоколыг сонгох боломжийг олгодог. Дэлгэрэнгүйг &man.ipfstat.8; заавар хуудаснаас үзнэ үү. IPMON ipmon IPFILTER бүртгэл хөтлөлт ipmon тушаал зохистой ажиллахын тулд цөмийн IPFILTER_LOG тохируулга идэвхжсэн байх ёстой. Энэ тушаал хоёр өөр горимд ажиллах чадвартай. Төрөлх горим нь энэ тушаалыг тушаал мөрөн дээр туггүйгээр оруулахад ажиллах анхдагч горим юм. Демон горим нь болж өнгөрсөн үйл явцын бүртгэлийг эргэж харахын тулд системийн бүртгэлийг тасралтгүй хөтлөн явуулахад тохиромжтой горим юм. &os; болон IPFILTER энэ горимд ажиллахаар тохируулагдсан байдаг. &os; нь системийн бүртгэлийг автоматаар тойруулах чадвартай. Тиймээс бүртгэлийн мэдээллийг syslogd процесс уруу гаргах нь энгийн файл уруу гаргах анхдагч аргаас дээр байдаг. Анхдагч rc.conf файл дотор ipmon_flags илэрхийлэл тугуудыг хэрэглэсэн байхыг олж харж болно: ipmon_flags="-Ds" # D = start as daemon # s = log to syslog # v = log tcp window, ack, seq # n = map IP & port to names Бүртгэл хөтлөн явуулахын давуу талыг дурдахад илүүц биз. Бүртгэлийн тусламжтай ямар пакетууд орхигдсон, тэдгээр пакетууд хаанаас ирсэн, хаашаа явж байсан зэрэг мэдээллийг эргэн харах боломжтой болдог. Энэ бүх мэдээлэл гадны халдлагыг мөрдөхөд чухал түлхэц болно. Хэдийгээр бүртгэх боломжоор хангагдсан боловч, IPF дангаараа бүртгэлийг үүсгэж чадахгүй. Галт ханын администратор аль дүрмийн бүртгэлийг бичихийг шийдэн, тэдгээр дүрмүүдэд log түлхүүр үгийг нэмж өгнө. Ер нь, зөвхөн deny дүрмүүдийн бүртгэл бичигддэг. Бүгдийг хориглосон анхдагч дүрмийг log түлхүүр үгийн хамт дүрмүүдийнхээ хамгийн төгсгөлд бичиж өгөх нь нилээд өргөн хэрэглэгддэг арга юм. Ийм байдлаар таны дүрмүүдийн алинтай ч тохироогүй пакетуудыг мэдэх боломжтой болно. IPMON бүртгэл хөтлөлт Syslogd нь бүртгэлийн мэдээллийг дотор нь ангилах өөрийн тусгай аргатай. facility ба түвшин гэсэн тусгай ангилалаар ялгадаг. горимон дахь IPMON нь facility-аар security-г хэрэглэдэг. IPMON-ы бүх бүртгэлийн мэдээлэл security нэрийн дор бичигддэг. Хэрэв хүсвэл доорх түвшнүүдийг ашиглан бүртгэгдсэн мэдээллийг илүү ангилж болно: LOG_INFO - нэвтрүүлэх, хаахаас үл хамааран "log" түлхүүрийг үйлдэл ашиглан пакетуудыг бүртгэх. LOG_NOTICE - нэвтэрсэн пакетуудыг бүртгэх. LOG_WARNING - хаагдсан пакетуудыг бүртгэх. LOG_ERR - бүртгэсэн пакетууд болон богино гэгдсэн пакетууд IPFILTER-н бүх бүртгэлийн мэдээллийг /var/log/ipfilter.log файл дотор бичихийн тулд, та энэ файлыг эхлээд үүсгэх хэрэгтэй. Үүний тулд дараах тушаалыг өгөх хэрэгтэй: &prompt.root; touch /var/log/ipfilter.log syslog-н функцуудыг /etc/syslog.conf файл доторх тодорхойлох илэрхийллүүдээр удирдаж болно. syslog.conf файл нь IPF мэт програмуудын үүсгэсэн системийн мэдэгдлүүдтэй ажиллахад уян хатан болгодог. Дараах илэрхийллүүдийг /etc/syslog.conf файл дотор нэмж бичнэ үү: security.* /var/log/ipfilter.log security.* нь бүх бүртгэгдсэн мэдэгдлүүдийг дурдсан файлд бичихийг хэлж өгч байна. /etc/syslog.conf файлд хийсэн өөрчлөлтүүдийг идэвхжүүлэхийн тулд та системээ дахин ачаалах эсвэл /etc/rc.d/syslogd reload тушаалыг ашиглан syslog процессод /etc/syslog.conf файлыг дахин уншуулах хэрэгтэй. Дээр шинээр үүсгэсэн бүртгэлийг тойруулахын тулд /etc/newsyslog.conf файл дотор өөрчлөлт оруулахаа мартуузай. Бүртгэгдсэн мэдэгдлийн формат ipmon-ы үүсгэсэн мэдэгдэл зайгаар тусгаарлагдсан өгөгдлийн талбаруудаас бүрдэнэ. Бүх мэдэгдэлд байдаг гол талбарууд гэвэл: Пакетийг хүлээж авсан огноо. Пакетийг хүлээж авсан цаг. Цаг, минут, секунд, бутархай секундэд (олон орны нарийвчлалтай) харгалзан HH:MM:SS.F форматтай байна. Пакеттай ажилласан интерфэйсийн нэр, жишээлбэл dc0. Дүрмийн бүлэг болон дүрмийн дугаар, жишээлбэл @0:17. Эдгээрийг ipfstat-in тушаалын тусламжтай үзэж болно. Үйлдэл: нэвтрүүлсэн бол р, хаасан бол b, богино пакет бол S, аль ч дүрмэнд тохироогүй бол n, бүртгэх дүрэм бол L. Эдгээр тугуудыг дараах эрэмбээр харуулна: S, p, b, n, L. Том P эсвэл B үсэг нь тухайн пакет ямар нэг дүрмээс биш, глобал тохиргооноос хамааран бүртгэгдсэн болохыг заана. Хаягууд. Үндсэндээ гурван талбар байна: эхлэл хаяг болон порт (таслалаар тусгаарлагдсан), -> тэмдэг, ба очих хаяг болон порт. 209.53.17.22,80 -> 198.73.220.17,1722. PR-н дараа протоколын нэр болон дугаар, жишээлбэл PR tcp. len-ы дараа толгойн урт болон пакетийн нийт урт, жишээлбэл len 20 40. Хэрэв TCP пакет бол зураасаар эхэлж тугуудаар удаалсан нэмэлт талбар байна. Үсгүүд болон түүнд харгалзах тугуудын талаар &man.ipmon.8; заавар хуудаснаас үзнэ үү. Хэрэв ICMP пакет бол, төгсгөлд нь хоёр талбар байна. Эхнийх нь үргэлж ICMP утгатай байна, дараагийнх нь налуу зураасаар тусгаарлагдсан ICMP мэдэгдэл болон дэд мэдэгдлийн төрөл, жишээлбэл портод хандаж чадсангүй гэсэн мэдэгдлийн хувьд ICMP 3/3 байна. Симбол орлуулалттай скриптийг үүсгэх нь Зарим туршлагатай IPF хэрэглэгчид дүрмүүдийг агуулсан файл үүсгээд түүнийгээ симбол орлуулалттай скрипт байдлаар ажиллуулах боломжтой болгон бичдэг. Үүний гол давуу тал нь та зөвхөн симбол нэрд харгалзах утгыг өөрчилбөл, скриптийг ажиллуулахад уг симбол орлуулалт орсон дүрэм бүр шинэ утгыг авах болно. Скриптийн хувьд, олон дахин хэрэглэгддэг утгуудыг бичихэд симбол орлуулалтыг ашиглаж, тэдгээрийг олон дүрмэнд орлуулж өгнө гэсэн үг юм. Дараах жишээн дээрээс харна уу. Энд хэрэглэгдсэн скриптийн синтакс нь sh, csh, ба tcsh бүрхүүл дээр ажиллах боломжтой. Симбол орлуулалтын талбарууд нь урдаа долларын тэмдэгтэй байна: $. Симбол талбарууд нь $ тэмдэг урдаа байхгүй. Симбол талбарыг орлох утга нь давхар хашилтан(") дотор байрлана. Дүрмийн файлаа дараах байдалтай үүсгэж эхлэх хэрэгтэй: ############# Start of IPF rules script ######################## oif="dc0" # name of the outbound interface odns="192.0.2.11" # ISP's DNS server IP address myip="192.0.2.7" # my static IP address from ISP ks="keep state" fks="flags S keep state" # You can choose between building /etc/ipf.rules file # from this script or running this script "as is". # # Uncomment only one line and comment out another. # # 1) This can be used for building /etc/ipf.rules: #cat > /etc/ipf.rules << EOF # # 2) This can be used to run script "as is": /sbin/ipf -Fa -f - << EOF # Allow out access to my ISP's Domain name server. pass out quick on $oif proto tcp from any to $odns port = 53 $fks pass out quick on $oif proto udp from any to $odns port = 53 $ks # Allow out non-secure standard www function pass out quick on $oif proto tcp from $myip to any port = 80 $fks # Allow out secure www function https over TLS SSL pass out quick on $oif proto tcp from $myip to any port = 443 $fks EOF ################## End of IPF rules script ######################## Байх ёстой бүх зүйлс бүгд байна. Энэ жишээн дээр дүрмүүд чухал биш, харин симбол орлуулалт хэрхэн ажилладгыг харуулсан байна. Хэрэв дээрх жишээ /etc/ipf.rules.script нэртэй файл дотор байсан бол, эдгээр дүрмүүдийг дараах тушаалыг өгч дахин ачаалах боломжтой: &prompt.root; sh /etc/ipf.rules.script Суулгагдсан симболтой дүрмийн файлыг хэрэглэхэд нэг асуудал тулгардаг: IPF симбол орлуулалтыг ойлгохгүй, ийм скриптийг шууд уншиж чаддаггүй. Дараах скриптийг хоёр аргын нэгээр хэрэглэж болно: cat-р эхэлсэн мөрийг ил гарга, харин /sbin/ipf-р эхэлсэн мөрүүдийг далдал. ipfilter_enable="YES"/etc/rc.conf файл дотор байрлуул, дараа нь өөрчлөлт бүрийн дараа скриптийг ажиллуулан /etc/ipf.rules файлыг үүсгэ эсвэл өөрчлөлт оруул. /etc/rc.conf файл дотор ipfilter_enable="NO" (энэ анхдагч утга) мөрийг нэмэн системийн эхлэл скриптэд IPFILTER-г идэвхгүй болго. Дээрхтэй адил скриптийг өөрийн /usr/local/etc/rc.d/ эхлэл хавтаст байрлуул. Энэ скрипт ipf.loadrules.sh ч юм уу ойлгомжтой нэртэй байх ёстой. .sh гэсэн өргөтгөлтэй байх ёстой. #!/bin/sh sh /etc/ipf.rules.script Энэ скриптийн эрхүүд эзэмшигч root-н хувьд унших, бичих, ажиллах эрхтэй байх ёстой. &prompt.root; chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh Одоо систем ачаалсны дараа таны IPF дүрмүүд ачаалагдсан байх болно. IPF Дүрмүүдийн олонлог Пакет дотор агуулагдаж байгаа утгуудыг үндэслэн тухайн пакетийг нэвтрүүлэх болон хаахыг хэлж байгаа дүрмүүдийг дүрмийн олонлог гэнэ. Хостуудын хоорондох хоёр чиглэлтэй пакет солилцоо нь сесс харилцааг бүрдүүлнэ. галт ханын дүрмийн олонлогоор пакет хоёр дахин шүүгдэнэ, эхний удаа Интернэтээс пакетийг хүлээн авахад, дараагийн удаа буцаж Интернэт рүү гарч явахад. Бүх TCP/IP үйлчилгээнүүдийн хувьд (жишээ нь: telnet, www, mail, г.м.) ямар протоколоор ажиллах болон эхлэл ба очих IP хаяг, эхлэл ба очих порт хаяг зэргийг урьдаас тодорхойлж өгсөн байдаг. Эдгээр үзүүлэлтүүд дээр үндэслэн нэвтрүүлэх болох хаах дүрмүүдийг зохиодог. IPFILTER Дүрмүүдтэй ажиллах дэс дараалал IPF-г анх зохиохдоо сүүлд тохирсон дүрэм дийлнэ логикийн дагуу бүтээсэн ба зөвхөн төлөвт-бус дүрмүүдийг ашигладаг байлаа. Цаг хугацаа өнгөрөхөд IPF илүү хөгжиж, quick тохируулга болон төлөвт keep state тохируулгуудыг агуулах болсон нь орчин үеийн хэрэгцээ шаардлагад илүү нийцэх болжээ. Энэ бүлэгт байгаа зааврууд нь quick болон төлөвт keep state тохируулгуудыг агуулсан дүрмүүдээс үндсэндээ бүрдсэн байгаа. Энэ бол хамааруулсан галт ханын дүрмүүдийг бичих үндсэн арга барил юм. Хамааруулсан галт хана нь зөвхөн дүрмэнд тохирсон пакетуудыг нэвтрүүлнэ. Ийм маягаар галт ханын цаанаас Интернэт уруу ямар ямар үйлчилгээнүүд гарч болох болон эсрэгээр Интернэтээс дотоод сүлжээ уруу ямар ямар үйлчилгээнүүд хандаж болохыг удирдах боломжтой. Эдгээрээс бусад бүх урсгалыг хааж, бүртгэдэг байхаар зохиогдсон байдаг. Хамааруулсан галт хана нь хамааруулаагүй галт ханаас аюулгүй байдлын хувьд хэд дахин илүү, тиймээс энд бид зөвхөн хамааруулсан галт ханын дүрмүүдийн талаар ярилцах болно. Галт ханын дүрмүүдтэй ажиллахдаа маш анхааралтай байх хэрэгтэй. Зарим тохиргоо серверээс бүх холбоог тань тасалж мэднэ. Ийм аюулаас хол байхын тулд, галт ханын тохиргоог анхлан хийхдээ ssh зэрэг алсын хандалтаас илүүтэйгээр ойрын удирдлагыг сонгоорой. Дүрмийн синтакс IPFILTER дүрмийн синтакс Энд дурдах дүрмийн синтакс нь орчин үеийн төлөвт дүрмүүдийн хүрээнд, сүүлд тохирсон дүрэм дийлнэ логикоор ажиллахаар хялбаршуулан бичигдсэн байгаа. Хуучин уламжлалт дүрмүүдийн синтаксын бүрэн тайлбарыг &man.ipf.8; заавар хуудаснаас үзнэ үү. # гэсэн тэмдэгт тайлбарын эхлэлийг заах ба дүрэм бичсэн мөрийн төгсгөлд эсвэл өөрөө бүтэн мөр байдлаар байрлана. Хоосон мөрийг тооцохгүй. Дүрмүүд нь түлхүүр үгүүдийг агуулна. Эдгээр түлхүүр үгүүд нь тухайн мөрөнд зүүнээс баруун тийш тодорхой дэс дараагаар бичигдэнэ. Түлхүүр үгүүд тодоор бичигдэх тул түүгээр нь ялгаж танина. Зарим түлхүүр үгүүд дэд-тохируулгатай байна. Тэр нь өөрөө түлхүүр үг байж болохоос гадна цааш дэд-тохируулгуудыг агуулсан байж болно. Доорх синтаксын үг бүр нь дор байрлах мөрүүдэд задаргааны хамт байгаа. ACTION IN-OUT OPTIONS SELECTION STATEFUL PROTO SRC_ADDR,DST_ADDR OBJECT PORT_NUM TCP_FLAG STATEFUL ACTION = block | pass IN-OUT = in | out OPTIONS = log | quick | on interface-name SELECTION = proto value | source/destination IP | port = number | flags flag-value PROTO = tcp/udp | udp | tcp | icmp SRC_ADD,DST_ADDR = all | from object to object OBJECT = IP address | any PORT_NUM = port number TCP_FLAG = S STATEFUL = keep state ACTION Тухайн дүрмэнд тохирч байгаа пакетийг хэрхэхийг action буюу үйлдэл зааж өгнө. Бүх дүрэм үйлдэлтэй байх ёстой. Дараах үйлдлүүдийг хэрэглэж болно: block гэдэг нь пакеттай selection буюу сонголтын параметрүүд тохирч байвал тухайн пакетийг орхигдуулахыг зааж өгнө. pass гэдэг нь пакеттай selection буюу сонголтын параметрүүд тохирч байвал тухайн пакетийг нэвтрүүлэхийг зааж өгнө. IN-OUT Дүрэм нь орох болон гарах урсгалын алинд үйлчлэхийг заавал зааж өгөх ёстой. Энэ нь in эсвэл out түлхүүр үгийн аль нэг нь заавал бичигдсэн байх ёстой гэсэн үг юм. Үгүй бол синтаксын алдаа өгч, танигдахгүй. in гэдэг нь Интернэт уруу харж байгаа интерфэйс дээр хүлээж авсан дотогшоо ирж байгаа пакетийн хувьд энэ дүрэм үйлчлэхийг зааж өгнө. out гэдэг нь Интернэт уруу харж байгаа интерфэйс уруу чиглэсэн гадагшаа явж байгаа пакетийн хувьд энэ дүрэм үйлчлэхийг зааж өгнө. OPTIONS Эдгээр options буюу тохируулгуудыг энд үзүүлсэн дэс дарааллын дагуу хэрэглэх ёстой. log гэдэг нь пакеттай selection буюу сонголтын параметрүүд тохирч байвал пакетийн толгой ipl бүртгэл уруу (дор Бүртгэл Хөтлөх хэсэгт заасны дагуу) бичигдэхийг зааж өгнө. quick гэдэг нь пакеттай selection буюу сонголтын параметрүүд тохирч байвал энэ дүрэм нь хамгийн сүүлийн дүрэм болохыг зааж өгнө. Ингэснээр short-circuit замыг тухайн пакетийн хувьд дараагийн дүрмүүдийг шалгахыг болиулна. Орчин үеийн дүрэмтэй ажиллах логикийн хувьд энэ тохируулгыг заавал хэрэглэнэ. on гэдэг нь selection буюу сонголтын параметрүүдийн ажиллах интерфэйсийг зааж өгнө. Интерфэйсүүдийн нэрийг &man.ifconfig.8;-н тусламжтай харж болно. Энэ тохируулгыг хэрэглэснээр, тухайн дүрэм зөвхөн энэ интерфэйсээр зохих чиглэлд(in/out) явж байгаа пакетийн хувьд үйлчилнэ. Орчин үеийн дүрэмтэй ажиллах логикийн хувьд энэ тохируулгыг заавал хэрэглэнэ. пакетийг бүртгэхэд, түүний толгойг IPL пакет бүртгэх хуурамч-төхөөрөмж уруу бичнэ. log түлхүүр үгийн дараа шууд залгаад, дараах тодотгогчдыг(дараах дэс дарааллаар) хэрэглэж болно: body гэдэг нь пакетийн толгойн дараа пакетийн агуулгын эхний 128 байтыг бүртгэхийг зааж өгнө. first Хэрэв log түлхүүр үг keep state тохируулгын хамт хэрэглэгдсэн бол, түүний араас ирэх keep state-д тохирч байгаа бүх пакетийг биш зөвхөн энэ тохируулгыг идэвхжүүлсэн эхний пакетийг бүртгэхийн тулд энэ тохируулгыг хэрэглэнэ. SELECTION Энэ бүлэгт танилцуулж байгаа түлхүүр үгүүд тухайн пакетийг дүрмэнд тохирсон эсэхийг тогтоохын тулд шалгадаг пакетийн онцлогийг тодорхойлоход хэрэглэгддэг. Мөн subject түлхүүр үг байх ба дэд-тохируулга түлхүүр үгийн аль нэгийг сонгон хэрэглэнэ. Дараах ерөнхий онцлогуудыг хэрэглэх боломжтой, гэхдээ доорх дэс дарааллаар хэрэглэх хэрэгтэй: PROTO proto гэдэг нь subject түлхүүр үг бөгөөд өөрийн харгалзах дэд-тохируулгын хамт хэрэглэгдэх ёстой. Утга нь ямар протокол дээр ажиллахыг хэлж өгнө. Орчин үеийн дүрэмтэй ажиллах логикийн хувьд энэ тохируулгыг заавал хэрэглэнэ. tcp/udp | udp | tcp | icmp эсвэл /etc/protocols файл дотор байгаа протоколуудыг хэрэглэж болно. Тусгай tcp/udp гэсэн түлхүүр үг TCP эсвэл UDP пакетийг сонгоход хэрэглэгддэг ба, давхар эсвэл төстэй дүрмүүдийг арилгах үүднээс нэмэгдсэн байгаа. SRC_ADDR/DST_ADDR all гэсэн түлхүүр үг нь өөр ямар ч параметргүй from any to any гэдэгтэй адил юм. from src to dst: from ба to гэсэн түлхүүр үгүүд IP хаягийг шүүхэд хэрэглэгдэнэ. Дүрэмд хэрэглэхдээ эхлэл ба очих параметрийг ХОЁУЛАНГ зааж өгөх ёстой. any гэсэн тусгай түлхүүр үгийн тусламжтай бүх IP хаягийг зөвшөөрч өгч болно. Хэрэглэх жишээ: from any to any эсвэл from 0.0.0.0/0 to any эсвэл from any to 0.0.0.0/0 эсвэл from 0.0.0.0 to any эсвэл from any to 0.0.0.0. IP хаягийг цэгтэй тоон хэлбэр болон багийн хамт эсвэл зүгээр цэгтэй тоон хэлбэрээр бичиж болно. Багаар хялбархан илэрхийлэх боломжгүй IP хаягуудыг хэрэглэх боломжгүй. Баг бичих талаар тусламжийг дараах вэб хуудсаар орж үзнэ үү: . PORT Хэрэв эхлэл эсвэл очих порт, эсвэл хоёулангаар нь тохируулах бол энэ нь зөвхөн TCP ба UDP пакетуудад хамаарна. Порт жишсэн дүрэм бичихдээ /etc/services файл доторх үйлчилгээний нэр эсвэл бүхэл тоон портын дугаарыг хэрэглэнэ. Портыг from обьекттой хамт хэрэглэх үед энэ нь эхлэл портын дугаарыг, to обьекттой хамт хэрэглэх үед энэ нь очих портын дугаарыг заана. Орчин үеийн дүрэмтэй ажиллах логикийн хувьд port тохиргоог to обьекттой заавал хамт хэрэглэнэ. Хэрэглэх жишээ: from any to any port = 80 Портыг жиших оператороор эсвэл порт зурвасыг зааж өгөх зэргээр хэд хэдэн янзаар жишиж болно. port "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq" | "ne" | "lt" | "gt" | "le" | "ge". Порт зурвасыг зааж өгөхдөө, port "<>" | "><" гэж хэрэглэнэ. Орчин үеийн дүрэмтэй ажиллах логикийн хувьд эхлэл болон очих порт тохируулах параметрүүдийн дараа, дараах хоёр параметрийг заавал хэрэглэнэ. <acronym>TCP</acronym>_FLAG Тугуудыг зөвхөн TCP шүүлтийн үед хэрэглэнэ. Үсгүүдээр нь TCP пакетийн толгойтойг шалгах боломжит тугуудыг үзүүлсэн байна. Орчин үеийн дүрэмтэй ажиллах логик нь flags S параметрийг tcp сесс эхлүүлэх хүсэлтийг тэмдэглэхдээ хэрэглэдэг. STATEFUL keep state гэдэг нь нэвтрүүлэх төрлийн дүрмийн хувьд сонгох параметрүүдтэй тохирсан ямар ч пакет төлөвт шүүх нэмэлт боломжийг идэвхжүүлэх ёстойг зааж өгнө. Орчин үеийн дүрэмтэй ажиллах логикийн хувьд энэ тохируулгыг заавал хэрэглэнэ. Төлөвт шүүлт IPFILTER төлөвт шүүлт Хостуудын хоорондох хоёр чиглэлтэй пакет солилцоо сесс харилцаанаас бүрддэг. Төлөвт шүүлт нь урсгалыг сесс харилцаанаас бүрдэж буй хоёр чиглэлтэй пакет солилцоо гэж үздэг. keep-state-г идэвхжүүлсэн үед, keep-state нь хоёр чиглэлтэй сесс харилцааны үед солилцсон бүх пакетуудын хувьд дотоод дүрмүүдийг динамик байдлаар үүсгэдэг. Мөн энэ нь сесс эхлүүлсэн болон хүлээн авсан хостуудын хоорондох сесс харилцаа нь хоёр чиглэлтэй пакет солилцох процедуртай зохицож байгаа эсэхийг магадлах чадвартай байдаг. Сесс харилцааны загварт зохицоогүй пакетийг хуурамч гэж үзэн хүлээж авахгүй. TCP эсвэл UDP сесстэй холбоотой ICMP пакетуудыг keep state нэвтрүүлнэ. Тэгэхээр, keep state дүрмээр зөвшөөрөгдсөн вэбээр хийх аялалын хариуд ICMP type 3 code 4 хариуг хүлээн авбал галт хана үүнийг автоматаар нэвтрүүлнэ гэсэн үг юм. Хэрэв IPF хүлээн авсан пакетийг идэвхтэй байгаа сессийн нэг хэсэг гэж баттай итгэж байвал, өөр протокол дээр байсан ч пакетийг нэвтрүүлнэ. Үүний цаана юу болох вэ гэвэл: Интернэт уруу холбогдсон интерфэйсээр гарч байгаа пакетуудыг хамгийн түрүүнд динамик төлвийн хүснэгтэнд шалгана. Хэрэв тухайн пакет ямар нэг идэвхтэй байгаа сесс харилцаанд оролцож байгаа зөвшөөрөгдсөн дараагийн пакет байх юм бол, галт ханаар нэвтрүүлэх ба динамик төлвийн хүснэгтэн дэх сесс харилцааны төлөв шинэчлэгдэнэ. Үлдсэн пакетуудыг гадагшаа урсгалын дүрмээр шалгах болно. Интернэт уруу холбогдсон интерфэйс дээр ирж байгаа пакетуудыг хамгийн түрүүнд динамик төлвийн хүснэгтэнд шалгана. Хэрэв тухайн пакет ямар нэг идэвхтэй байгаа сесс харилцаанд оролцож байгаа зөвшөөрөгдсөн дараагийн пакет байх юм бол, галт ханаар нэвтрүүлэх ба динамик төлвийн хүснэгтэн дэх сесс харилцааны төлөв шинэчлэгдэнэ. Үлдсэн пакетуудыг дотогшоо урсгалын дүрмээр шалгах болно. Харилцаа дуусахад динамик төлвийн хүснэгтээс зохих бичлэг устгагдана. Төлөвт шүүлтийн тусламжтайгаар та шинэ сесс зөвшөөрөх/хаах үйл ажиллагаан дээр төвлөрч ажиллаж чадна. Хэрэв шинэ сесс зөвшөөрөгдсөн бол түүний дараагийн бүх пакетуудыг автоматаар нэвтрүүлэх ба хуурамч пакетууд автоматаар буцаагдана. Хэрэв шинэ сесс хаагдсан бол түүний дараагийн ямар ч пакет нэвтэрч чадахгүй. Төлөвт шүүлт нь сүүлийн үеийн халдлагуудад ашиглагдаж байгаа аргуудын эсрэг хамгаалах чадвартай техникийн хувьд өндөр түвшний асуулга явуулах чадвартай юм. Хамааруулсан дүрмийн олонлогийн жишээ Дараах дүрмийн олонлог нь аюулгүй байдлыг маш сайн хангасан, хамааруулсан галт ханын дүрмүүдийг хэрхэн бичих жишээ юм. Хамааруулсан галт хана нь зөвхөн pass дүрмүүдэд тохирсон үйлчилгээг зөвшөөрч, бусдыг бүгдийг хаана. Бүх галт хананууд хамгийн багадаа хоёр интерфэйстэй байх ба галт хана маягаар ажиллахын тулд дүрмүүдийг тусгайлан зааж өгсөн байна. &os;-г оролцуулаад бүх &unix; төрлийн систем нь үйлдлийн систем дэх дотоод харилцаандаа lo0 интерфэйс болон 127.0.0.1 гэсэн IP хаягийг хэрэглэхээр бүтээгдсэн байдаг. Галт ханын дүрмүүд нь дотооддоо хэрэглэж байгаа эдгээр пакетуудыг чөлөөтэй нэвтрүүлэх дүрмүүдийг агуулсан байх ёстой. Интернэттэй холбогдож байгаа интерфэйс дээр та өөрийн Интернэт уруу гарч байгаа болон Интернэтээс ирж байгаа хандалтыг удирдах болон хянах дүрмүүдийг байрлуулна. Энэ нь таны PPP tun0 интерфэйс эсвэл таны DSL эсвэл кабель модемд холбогдсон NIC байж болно. Галт ханын цаана байгаа хувийн LAN-уудад нэг болон түүнээс дээш тооны NIC-ууд холбогдсон тохиолдолд, тэдгээр интерфэйсүүдийн хувьд тэдгээр LAN интерфэйсүүдээс ирсэн пакетуудыг чөлөөтэй нэвтрүүлэх дүрмийг агуулсан байх ёстой. Дүрмүүд эхлээд гурван үндсэн хэсэгт хуваагдан зохион байгуулагдсан байх ёстой: бүх чөлөөт халдашгүй интерфэйсүүд, нийтийн гадагшаа интерфэйс, ба нийтийн дотогшоо интерфэйс. Нийтийн интерфэйс хэсэгт байгаа дүрмүүд тухайн интерфэйс болон чиглэлийн хувьд хамгийн олон тохиолддог дүрмүүд нь хамгийн түрүүнд, цөөн тохиолддог дүрмүүдээс өмнө байхаар, хаах болох бүртгэх дүрмүүд нь хамгийн сүүлд байхаар бичигдсэн байна. Дараах жишээн дээрх Гадагшаа хэсэг нь Интернэт хандалтыг зөвшөөрч өгөх үйлчилгээг тодорхойлох сонголтын утгуудыг агуулсан зөвхөн 'pass' дүрмүүдээс бүрдэж байна. Бүх дүрмүүд 'quick', 'on', 'proto', 'port', ба 'keep state' тохируулгуудыг агуулсан байгаа. 'proto tcp' дүрмүүд нь төлөвт байдлыг идэвхжүүлж байгаа пакетийг тодорхойлох байдлаар, сесс эхлүүлэх хүсэлтийг тодорхойлох зорилгоор 'flag' тохируулгыг агуулсан байна. Дотогшоо хэсэгт эхлээд хүсээгүй пакетуудыг хаах дүрмүүдийг бичсэн байна. Энэ нь хоёр өөр шалтгаантай. Эхнийх нь, энэ дүрмүүдээр хаагдсан зүйлс нь доор байгаа өөр нэг дүрмээр зөвшөөрөгдсөн пакетийн нэг хэсэг байж болох талтай. Хоёр дахь шалтгаан нь, цөөхөн тоотой хүлээж авдаг ба бүртгэх хүсэлгүй байгаа пакетуудыг сонгон, тэдгээрийг бүрнээр хаах дүрмийг эхлээд бичиж өгснөөр эдгээр пакетууд хамгийн сүүлд байгаа ямар ч дүрмүүдэд тохироогүй пакетуудыг бүртгээд хаана гэсэн дүрмээр дайрахгүй болгож байгаа юм. Учир нь энэ хэсгийн хамгийн сүүлд байгаа бүгдийг бүртгээд хаана гэсэн дүрэм бол өөрийн систем уруу халдаж байгаа халдлагын нотолгоог цуглуулах таны нэг арга билээ. Өөр нэг тэмдэглэн хэлэх зүйл бол, хүсээгүй пакетуудын хариуд ямар ч хариу явуулахгүй, тэд зүгээр л орхигдож алга болно. Ингэснээр халдлага явуулагч түүний явуулсан пакетууд таны системд хүрсэн эсэх талаар юу ч мэдэхгүй үлдэх болно. Таны системийн талаар хэдий хэр бага мэднэ, тэд ямар нэг муу зүйл хийж чадах хүртэл төдий чинээ урт хугацаа зарцуулна гэсэн үг юм. Дотогшоо 'nmap OS fingerprint' оролдлогын эхний тохиолдлыг би бүртгэж байгаа, яагаад гэвэл энэ бол гадны халдлагын нэг хэлбэр юм. 'log first' орсон дүрмийн хувьд та анхны бүртгэлийг харах юм бол ipfstat -hio тушаалаар энэ дүрэм хэдэн удаа тохирсон байгааг шалгаарай. Магадгүй та халдлагад өртөж байж болох юм. Хэрвээ мэдэхгүй дугаартай портын хувьд пакетууд бүртгэгдсэн байвал /etc/services файлаас эсвэл хаягаар тухайн порт ямар зориулалтаар ашиглагддагийг орж шалгаарай. Троянуудын хэрэглэдэг портын дугааруудыг хаягаар орж шалгаарай. Дараах дүрмийн олонлог нь миний өөрийн систем дээрээ хэрэглэдэг аюулгүй байдлыг бүрэн хангасан хамааруулсан галт ханын дүрмийн олонлог байгаа юм. Та энэ дүрмүүдийг өөрийн системдээ ашиглахад буруудах юмгүй. Зөвшөөрөхийг хүсэхгүй байгаа үйлчилгээнүүдийн хувьд харгалзах нэвтрүүлэх дүрмийг далдлаарай. Хэрэв бүртгэлд байгаа зарим мэдэгдлийг дахин харахыг хүсэхгүй, бүртгэхийг хүсэхгүй байгаа бол дотогшоо хэсэгт хаах дүрэм нэмж бичээрэй. Дүрэм бүрт байгаа dc0 гэсэн интерфэйсийн нэрийн оронд таны системийг Интернэт уруу холбож байгаа NIC картны интерфэйсийн нэрийг сольж тавиарай. Хэрэглэгчийн PPP-н хувьд, энэ нь tun0 байна. Дараах илэрхийллүүдийг /etc/ipf.rules дотор бичих хэрэгтэй: ################################################################# # No restrictions on Inside LAN Interface for private network # Not needed unless you have LAN ################################################################# #pass out quick on xl0 all #pass in quick on xl0 all ################################################################# # No restrictions on Loopback Interface ################################################################# pass in quick on lo0 all pass out quick on lo0 all ################################################################# # Interface facing Public Internet (Outbound Section) # Interrogate session start requests originating from behind the # firewall on the private network # or from this gateway server destine for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # xxx must be the IP address of your ISP's DNS. # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state pass out quick on dc0 proto udp from any to xxx port = 53 keep state # Allow out access to my ISP's DHCP server for cable or DSL networks. # This rule is not needed for 'user ppp' type connection to the # public Internet, so you can delete this whole group. # Use the following rule and check log for IP address. # Then put IP address in commented out rule & delete first rule pass out log quick on dc0 proto udp from any to any port = 67 keep state #pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state # Allow out non-secure standard www function pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state # Allow out secure www function https over TLS SSL pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state # Allow out send & get email function pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state # Allow out Time pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state # Allow out nntp news pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state # Allow out gateway & LAN users non-secure FTP ( both passive & active modes) # This function uses the IPNAT built in FTP proxy function coded in # the nat rules file to make this single rule function correctly. # If you want to use the pkg_add command to install application packages # on your gateway system you need this rule. pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state # Allow out secure FTP, Telnet, and SCP # This function is using SSH (secure shell) pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state # Allow out non-secure Telnet pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state # Allow out FBSD CVSUP function pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state # Allow out ping to public Internet pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state # Allow out whois for LAN PC to public Internet pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state # Block and log only the first occurrence of everything # else that's trying to get out. # This rule enforces the block all by default logic. block out log first quick on dc0 all ################################################################# # Interface facing Public Internet (Inbound Section) # Interrogate packets originating from the public Internet # destine for this gateway server or the private network. ################################################################# # Block all inbound traffic from non-routable or reserved address spaces block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 private IP block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 private IP block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 private IP block in quick on dc0 from 127.0.0.0/8 to any #loopback block in quick on dc0 from 0.0.0.0/8 to any #loopback block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config block in quick on dc0 from 192.0.2.0/24 to any #reserved for docs block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect block in quick on dc0 from 224.0.0.0/3 to any #Class D & E multicast ##### Block a bunch of different nasty things. ############ # That I do not want to see in the log # Block frags block in quick on dc0 all with frags # Block short tcp packets block in quick on dc0 proto tcp all with short # block source routed packets block in quick on dc0 all with opt lsrr block in quick on dc0 all with opt ssrr # Block nmap OS fingerprint attempts # Log first occurrence of these so I can get their IP address block in log first quick on dc0 proto tcp from any to any flags FUP # Block anything with special options block in quick on dc0 all with ipopts # Block public pings block in quick on dc0 proto icmp all icmp-type 8 # Block ident block in quick on dc0 proto tcp from any to any port = 113 # Block all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 block in log first quick on dc0 proto tcp/udp from any to any port = 137 block in log first quick on dc0 proto tcp/udp from any to any port = 138 block in log first quick on dc0 proto tcp/udp from any to any port = 139 block in log first quick on dc0 proto tcp/udp from any to any port = 81 # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP's DHCP server as it's the only # authorized source to send this packet type. Only necessary for # cable or DSL configurations. This rule is not needed for # 'user ppp' type connection to the public Internet. # This is the same IP address you captured and # used in the outbound section. pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state # Allow in standard www function because I have apache server pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID/PW passed over public Internet as clear text. # Delete this sample group if you do not have telnet server enabled. #pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state # Allow in secure FTP, Telnet, and SCP from public Internet # This function is using SSH (secure shell) pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state # Block and log only first occurrence of all remaining traffic # coming into the firewall. The logging of only the first # occurrence stops a .denial of service. attack targeted # at filling up your log file space. # This rule enforces the block all by default logic. block in log first quick on dc0 all ################### End of rules file ##################################### <acronym>NAT</acronym> NAT IP маскарад NAT сүлжээний хаягийн хөрвүүлэлт NAT NAT нь Network Address Translation буюу Сүлжээний хаягийн Хөрвүүлэлтийн товчлол юм. &linux;-н талаар ойлголттой хүмүүсийн хувьд, энэ ойлголтыг IP маскарад гэж нэрлэдэг; NAT ба IP маскарад нь нэг зүйл юм. IPF NAT-н бидэнд олгож байгаа олон зүйлүүдийн нэг бол галт ханын цаана байгаа Local Area Network буюу Ойрын Зайн Сүлжээ(LAN)-н хувьд ISP-с оноож өгсөн ганц IP хаягийг Интернэтэд хуваан хэрэглэх юм. Ингэх ямар шаардлага байнаа гэж та гайхан асуух байх. ISP-ууд өөрийн ашгийн-бус хэрэглэгчиддээ ихэвчлэн динамик IP хаяг оноодог. Динамик гэдэг нь таныг ISP руу залган нэвтрэн орох болгонд, кабель эсвэл DSL модемтой хэрэглэгчдийн хувьд модемоо асааж унтраах болгонд танд өөр өөр IP хаяг онооно гэсэн үг юм. Энэ IP хаягаар та Интернэтэд гарах болно. Та гэртээ таван PC-тэй бөгөөд бүгд Интернэт уруу гардаг байх хэрэгтэй гэж бодъё. Тэгвэл та PC тус бүрт тусад нь эрх худалдан авч, таван утасны үзүүртэй байх хэрэгтэй болно. Тэгвэл NAT-н тусламжтай та ISP-гаасаа зөвхөн ганцхан эрх худалдан аваад, бусад дөрвөн PC-гээ switch буюу шилжүүлэгч уруу холбож, харин switch-ээ таны LAN-нд гарц байдлаар ажиллах &os; системийн NIC руу залгана. NAT нь LAN-д байгаа бүх PC-ны хувьд хувийн IP хаягийг ганцхан гадаад IP хаяг уруу автоматаар хөрвүүлэх болно. NAT нь эргэж ирж байгаа пакетуудын хувьд эсрэг хөрвүүлэлтийг мөн хийнэ. Ихэнх тохиолдолд NAT-г ISP-н зөвшөөрөлгүйгээр, мэдэгдэлгүйгээр хийдэг бөгөөд хэрэв ISP энэ тухайн мэдвэл таны эрхийг хаах хүртэл арга хэмжээ авдаг. Зүй нь бол хэрэглэгчид Интернэт холболтондоо илүү мөнгө төлж, хэзээ ч өөрчлөгдөхгүй бүлэг статик IP хаягийг авах явдал юм. ISP харин хэрэглэгчиддээ итгэл хүлээлгэн хэрэглэгчид нь NAT-г дотоод хувийн LAN-даа хэрэглэнэ гэж боддог. NAT хийгдсэн хувийн LAN IP хаягт зориулж бүлэг IP хаягийг тусгайлан гаргасан байдаг. RFC 1918 стандартад зааснаар бол, дараах бүлэг IP-г хувийн сүлжээндээ ашиглах боломжтой, эдгээр IP хэзээ ч гадаад Интернэт уруу гарахгүй болно: Эхлэх IP 10.0.0.0 - Төгсөх IP 10.255.255.255 Эхлэх IP 172.16.0.0 - Төгсөх IP 172.31.255.255 Эхлэх IP 192.168.0.0 - Төгсөх IP 192.168.255.255 IP<acronym>NAT</acronym> NAT ба IPFILTER ipnat NAT дүрмүүдийг ipnat тушаалын тусламжтай ачаална. Ихэвчлэн NAT дүрмүүд /etc/ipnat.rules файл дотор байрлана. Дэлгэрэнгүйг &man.ipnat.1; хэсгээс үзнэ үү. NAT ажиллаж эхэлсний дараа NAT дүрмүүдэд өөрчлөлт оруулах шаардлагатай бол NAT дүрмүүд байгаа файл дотор өөрчлөлтийг хийсний дараа, одоо хэрэглэгдэж байгаа NAT дүрмүүдийг устгаж, хөрвүүлэгч хүснэгтийг цэвэрлэхийн тулд ipnat тушаалыг тугийн хамт ажиллуулах хэрэгтэй. Харин NAT дүрмүүдийг дахин ачаалахдаа тушаалыг дараах байдалтай өгөх хэрэгтэй: &prompt.root; ipnat -CF -f /etc/ipnat.rules NAT-н талаар зарим статистикийг харъя гэвэл дараах тушаалыг ашиглана: &prompt.root; ipnat -s NAT хүснэгтийн одоо ашиглаж байгаа оноолтын жагсаалтыг харахын тулд дараах тушаалыг ашиглана: &prompt.root; ipnat -l Вербос буюу хэр зэрэг харуулах горимыг нээхийн тулд, дүрэмтэй ажиллах болон идэвхтэй байгаа дүрмүүдийн хүснэгтийг харахын тулд: &prompt.root; ipnat -v IP<acronym>NAT</acronym> Дүрмүүд NAT дүрмүүд нь маш уян хатан бөгөөд хэрэглэгчдийн хэрэгцээг хангах олон зүйлүүдийг хийж чадна. Энд үзүүлсэн дүрмийн синтаксыг ашгийн-бус орчинд ихэвчлэн хэрэглэгддэг дүрмүүдэд зориулан хялбаршуулсан байгаа. Дүрмийн синтаксын бүрэн тайлбарыг &man.ipnat.5; заавар хуудаснаас үзнэ үү. NAT дүрмийн синтакс дараах байдалтай байна: map IF LAN_IP_RANGE -> PUBLIC_ADDRESS Дүрэм нь map гэсэн түлхүүр үгээр эхэлнэ. IF-г гадаад интерфэйсээр сольж тавьна. LAN_IP_RANGE нь танай дотоод хэрэглэгчийн хэрэглэж буй IP хаяглалтыг заана, ихэвчлэн 192.168.1.0/24 гэсэн маягтай байна. PUBLIC_ADDRESS нь гадаад IP байж болно эсвэл IF-д оноосон IP хаягийг хэрэглэхийг заасан 0/32 гэсэн тусгай түлхүүр үг байж болно. <acronym>NAT</acronym> хэрхэн ажилладаг вэ Гадаад очих хаягтай пакет галт хана дээр LAN-с хүрэлцэн ирнэ. Эхлээд гадагшаа шүүлтийн дүрмүүдээр гарна, дараа нь NAT-н ээлж ирэх ба өөрийн дүрмүүдийг дээрээс доош шалгаж эхэлнэ. Хамгийн эхэнд тохирсон нь дийлнэ. NAT өөрийн дүрэм бүрийг пакетийн интерфэйсийн нэр болон эхлэл хаягаар тулгаж шалгана. Пакетийн интерфэйсийн нэр NAT дүрэмтэй тохирвол пакетийн [эхлэл IP хаяг, өөрөөр хэлбэл хувийн LAN IP хаяг] NAT дүрмийн сумны зүүн талд зааж өгсөн IP хаягийн зурвас дотор байгаа эсэхийг шалгана. Хэрэв энэ тохирвол пакетийн эхлэл хаягийг 0/32 түлхүүр үгийн тусламжтай олж авсан гадаад IP хаягаар сольж бичнэ. NAT өөрийн дотоод NAT хүснэгтэнд бичлэг нэмэх ба энэ нь пакет Интернэтээс буцаж ирэхэд түүнийг буцаан хувийн IP хаяг уруу нь хөрвүүлэн, цааш шүүлтийн дүрмүүдээр оруулах боломжийг олгоно. IP<acronym>NAT</acronym>-г идэвхжүүлэх IPNAT-г идэвхжүүлэхийн тулд эдгээр илэрхийллүүдийг /etc/rc.conf дотор нэмж бичнэ. Өөрийн машиныг интерфэйсүүдийн хооронд пакетуудыг чиглүүлдэг болгохын тулд: gateway_enable="YES" Систем ачаалахад IPNAT-г автоматаар ачаалдаг болгохын тулд: ipnat_enable="YES" IPNAT-н дүрмүүдийг хаанаас ачаалахыг зааж өгөхдөө: ipnat_rules="/etc/ipnat.rules" Маш том LAN-д зориулсан <acronym>NAT</acronym> LAN-даа олон тооны PC-тэй сүлжээний хувьд эсвэл нэгээс олон LAN-тай сүлжээний хувьд, энэ олон хувийн IP хаягуудыг нэг гадаад IP хаяг уруу нийлүүлэх үйл явцад NAT хийгдсэн олон LAN PC дээр ижил портын дугаар олон дахин хэрэглэгдсэнээс мөргөлдөөн үүсэх гэх мэт нөөцтэй холбоотой асуудал гардаг. Нөөцтэй холбоотой энэ асуудлаас гарахын тулд дараах хоёр арга зам байдаг. Хэрэглэх портуудыг оноох Энгийн NAT дүрэм дараах байдалтай байна: map dc0 192.168.1.0/24 -> 0/32 Дээрх дүрмэнд пакет IPNAT-р дайрч өнгөрөхөд пакетийн эхлэл порт өөрчлөгдөхгүй. portmap гэсэн түлхүүр үгийн тусламжтай IPNAT эхлэл порт зурвасыг ашиглах боломжтой болно. Жишээ нь, дараах дүрэм IPNAT-г эхлэл порт хаягийг тухайн зурвас дотор байхаар өөрчлөхийг зааж өгч байна. map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000 Дээр нь бид auto түлхүүр үгийн тусламжтай аль портуудыг ашиглах боломжтой байгааг өөрөө тодорхойлохыг зааж өгч болно: map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto Гадаад хаягийн цөөрмийг хэрэглэх Маш том LAN-уудын хувьд дэндүү олон LAN хаягуудыг нэг гадаад хаягт оноох нь боломжгүй болох үе ирдэг. Хэрэв бүлэг гадаад IP сул байгаа бол, та эдгээр IP хаягуудыг цөөрөм байдлаар ашиглаж болох ба, IPNAT эдгээрээс нэгийг сонгон авч гадагшаа явж байгаа пакетийн хаягт оноох байдлаар хэрэглэх болно. Жишээ нь, доор үзүүлсэн шиг бүх пакетуудыг ганц гадаад IP-д оноохын оронд: map dc0 192.168.1.0/24 -> 204.134.75.1 гадаад IP хаягийн зурвасыг сүлжээний хуваалтын хамт зааж өгч болно: map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0 эсвэл CIDR тэмдэглэгээг хэрэглэж болно: map dc0 192.168.1.0/24 -> 204.134.75.0/24 Портын дахин чиглүүлэлт LAN дотор вэб сервер, цахим шуудангийн сервер, өгөгдлийн сангийн сервер болон DNS серверийг өөр өөр PC дээр тараан ажиллуулах нь түгээмэл байдаг. Энэ тохиолдолд эдгээр серверээс гарч байгаа урсгал мөн NAT хийгдсэн байх ёстой. Гэхдээ гаднаас ирж буй урсгалыг зөв LAN PC уруу дахин чиглүүлэх арга зам байх хэрэгтэй болно. Энэ асуудлыг шийдэхийн тулд IPNAT нь дахин чиглүүлэлт хийх NAT нэмэлт боломжийг олгодог. Таны вэб сервер 10.0.10.25 гэсэн LAN хаягтай байна, мөн та 20.20.20.5 гэсэн ганц гадаад IP-тай байлаа гэж бодъё. Тэгвэл та дүрмээ дараах байдалтай: rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80 эсвэл: rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80 эсвэл гаднаас DNS хүсэлтүүд хүлээн авдаг 10.0.10.33 гэсэн хаягтай LAN DNS Серверийн хувьд: rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udp гэж бичих байсан. FTP ба <acronym>NAT</acronym> FTP-г Интернэт одоогийнх шиг байхаас өмнөх үе, их сургуулиуд түрээсийн шугамаар хоорондоо холбогдож, судлаач эрдэмтэд хоорондоо файл солилцохын тулд FTP-г ашигладаг байх үес үлдсэн үлэг гүрвэл гэж хэлж болох юм. Тэр үед өгөгдлийн аюулгүй байдлын талаар огт анхаардаггүй байлаа. Цаг хугацаа өнгөрөхөд FTP протоколыг шинээр гарч ирж байгаа Интернэтийн гол нуруу сүлжээнд хэрэглэх болсон ба түүний хэрэглэгчийн нэр, нууц үгийг цэвэр текст хэлбэрээр дамжуулдаг байдал нь хэзээ ч өөрчлөгдөөгүй бөгөөд орчин үеийн аюулгүй байдлын шаардлагад нийцэхгүй болсон билээ. FTP нь active буюу идэвхтэй, passive буюу идэвхгүй гэсэн хоёр горимд ажилладаг. Өгөгдлийн сувгийг хэрхэн ашиглаж байгаа дээр гол ялгаа нь гардаг. Өгөгдлийн сувгийг ftp сесс хүсэгч байдлаар ажиллуулдаг тул идэвхгүй горимд ажиллах нь аюулгүй байдлыг илүүтэйгээр хангана. FTP-н талаар илүү сайн тайлбарыг болон түүний горимуудын талаар хаягаар үзнэ үү. IP<acronym>NAT</acronym> Дүрмүүд IPNAT нь дотроо NAT оноолт дүрэмд тодорхойлж өгөх боломжтой тусгай FTP прокси тохируулгыг агуулсан байдаг. Энэ нь идэвхтэй болон идэвхгүй FTP сесс эхлүүлэх хүсэлтэд оролцож байгаа бүх гадагшаа чиглэлтэй FTP пакетийг хянаж чадна. Мөн өгөгдлийн сувагт үнэхээр хэрэглэгдэж байгаа порт дугаарыг агуулсан түр зуурын шүүлтийн дүрмүүдийг динамикаар үүсгэж чадна. Ийм байдлаар FTP-с болж үүсдэг дээд хэсгийн портуудыг өргөн зурвасаар нээх эрсдэлээс галт ханыг хамгаалж байгаа юм. Доорх дүрэм нь дотоод LAN-н бүх урсгалыг зохицуулна: map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp Доорх дүрэм гарцаас ирж буй FTP урсгалыг зохицуулна: map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp Доорх дүрэм дотоод LAN-с ирж буй бүх FTP-н биш урсгалыг зохицуулна: map dc0 10.0.10.0/29 -> 0/32 FTP оноолтын дүрэм нь бидний ердийн оноолтын дүрмүүдийн өмнө бичигдэнэ. Бүх пакетийг хамгийн дээр бичигдсэн дүрмээс эхлэн шалгана. Интерфэйсийн нэр тохирвол дотоод LAN эхлэл IP хаяг, дараа нь FTP пакет эсэхийг шалгана. Хэрэв бүгд тохирвол, тусгай FTP прокси эдгээр FTP сесс пакетуудыг NAT хийхээс гадна гадагш нь болон дотогш нь нэвтрүүлэх түр зуурын шүүлтийн дүрмийг үүсгэнэ. FTP-н биш бусад бүх LAN пакетууд эхний дүрмэнд тохирохгүй тул гуравдугаар дүрэм уруу шилжин дахин шалгагдана. Интерфэйс болон эхлэл IP тохирох тул NAT хийгдэнэ. IP<acronym>NAT</acronym> FTP Шүүлтийн Дүрмүүд NAT FTP прокси ашиглаж байгаа тохиолдолд FTP-н хувьд ганцхан шүүлтийн дүрэм хэрэгтэй. FTP Прокси байхгүй бол та дараах гурван дүрмийг хэрэглэнэ: # Allow out LAN PC client FTP to public Internet # Active and passive modes pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state # Allow out passive mode data channel high order port numbers pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state # Active mode let data channel in from FTP server pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state IPFW галт хана IPFW Энэ хэсэг дээр үргэлжлүүлэн ажиллаж байгаа болно. Агуулга зарим газар буруу байхыг үгүйсгэхгүй. IPFIREWALL (IPFW) нь &os;-ийн хандиваар &os;-ийн сайн дурын гишүүдийн бүтээсэн, тэдний эрх мэдэлд байдаг галт ханын програм юм. Энэ нь хуучин уламжлалт төлөвт дүрмүүдийг хэрэглэдэг бөгөөд Simple Stateful logiс буюу Хялбар Төлөвт логикийг бий болгохын тулд уламжлалт дүрэм бичих техникийг хэрэглэдэг. Стандарт &os; суулгац дахь IPFW-н хялбар дүрмийн олонлог(/etc/rc.firewall файл дотор байрлана) нь нилээд хялбар бөгөөд өөрт тохируулан засварласны дараа хэрэглэхээр бодолцон бичигдсэн байдаг. Жишээн дээр ихэнх суулгацад тохиромжтой төлөвт шүүлтийг хэрэглээгүй байгаа. Тиймээс энэ хэсэгт энэ жишээг хэрэглэхгүй болно. IPFW-н төлөвт дүрмийн синтакс нь галт хана суулгах анхан шатны мэдлэгээс хол давсан техникийн хувьд ярвигтай сонголтын боломжуудаар хүч нэмсэн байдаг. IPFW нь мэргэжлийн түвшний хэрэглэгчид эсвэл өндөр түвшний пакет сонголт шаардлагатай байгаа техникийн өндөр түвшний компьютер сонирхогчид зориулагдсан юм. IPFW-н дүрмүүдийн хүчийг мэдрэхийн өмнө протоколууд өөрийн тусгай пакетийн толгойн мэдээллийг хэрхэн үүсгэдэг болон хэрэглэдэг талаар нилээд дэлгэрэнгүй мэдлэгийг олж авсан байх хэрэгтэй. Тийм түвшний тайлбарыг энд өгөх нь номын энэ бүлгийн мэдлээс халих тул энд оруулах боломжгүй юм. IPFW нь долоон хэсгээс бүрдэнэ, гол хэсэг болох цөмийн галт ханын шүүлтийн дүрмийг боловсруулагч болон түүний бусад хэсэг болох пакет данслах боломж, бүртгэх боломж, NAT боломжийг идэвхжүүлэх 'divert буюу эргүүлэх' дүрэм, болон өндөр түвшний тусгай зориулалттай боломжууд, dummynet трафик хязгаарлагч боломжууд, 'fwd дүрэм' дамжуулах боломж, гүүр боломжууд, болон ipstealth боломжуудаас бүрдэнэ. IPFW-г идэвхжүүлэх IPFW идэвхжүүлэх IPFW нь &os; үндсэн суулгацтай хамт, ажиллах үеийн ачаалах боломжтой модуль байдлаар ирдэг. rc.conf тохиргооны файл дотор firewall_enable="YES" илэрхийлэл байгаа үед систем IPFW цөмийн модулийг динамикаар ачаална. NAT функцыг ашиглахгүй бол IPFW-г цөмд эмхэтгэх шаардлага байхгүй. rc.conf файл дотор firewall_enable="YES" илэрхийллийг нэмээд системийг дахин асаасны дараа ачаалах үйл явцын нэг хэсэг болж дараах мессеж дэлгэцэн дээр гарах болно: ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled Ачаалах боломжтой модульд бүртгэх боломжийг эмхэтгээгүй байгаа. Бүртгэлийг идэвхжүүлэхийн тулд, мөн вербос бүртгэлийн хязгаарыг тогтоохын тулд /etc/sysctl.conf файл дотор дараах илэрхийллүүдийг нэмж өгөх хэрэгтэй, бүртгэлийн систем дараагийн удаа ачаалахад идэвхжинэ: net.inet.ip.fw.verbose=1 net.inet.ip.fw.verbose_limit=5 Цөмийн тохируулгууд цөмийн тохируулгууд IPFIREWALL цөмийн тохируулгууд IPFIREWALL_VERBOSE цөмийн тохируулгууд IPFIREWALL_VERBOSE_LIMIT IPFW цөмийн тохируулгууд NAT функцыг хэрэглэхгүй бол &os; цөм уруу дараах боломжуудыг эмхэтгэн IPFW-г идэвхжүүлэх албагүй болно. Суурь мэдлэг болгон энд үзүүллээ. options IPFIREWALL Энэ тохируулга IPFW-г цөмийн нэг хэсэг болгон идэвхжүүлнэ options IPFIREWALL_VERBOSE Энэ тохируулга 'log' гэсэн түлхүүр үг орсон дүрмийн хувьд IPFW-р дайран өнгөрөх пакетуудыг бүртгэх боломжтой болгоно. options IPFIREWALL_VERBOSE_LIMIT=5 Энэ тохируулга &man.syslogd.8;-р нэгэн зэрэг бүртгэгдэж буй пакетийн тоог хязгаарлана. галт ханын үйлдлүүдийг бүртгэхийг хүсэж байгаа найрсаг орчнуудад та энэ тохируулгыг хэрэглээрэй. Энэ тохируулга нь syslog-г живүүлэх замаар явагдах үйлчилгээг зогсоох халдлагыг хааж өгөх болно. цөмийн тохируулгууд IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_DEFAULT_TO_ACCEPT Энэ тохируулга нь галт ханыг дамжин өнгөрч байгаа бүх зүйлийг нэвтрүүлэх анхдагч төлөвт оруулна. галт ханыг анх удаа тохируулж байгаа үед энэ нь илүү тохиромжтой. options IPV6FIREWALL options IPV6FIREWALL_VERBOSE options IPV6FIREWALL_VERBOSE_LIMIT options IPV6FIREWALL_DEFAULT_TO_ACCEPT Эдгээр тохируулгууд IPv6-н тохируулгууд боловч IPv4-д байдаг тохируулгуудтай яг адилхан юм. Хэрэв та IPv6-г хэрэглэдэггүй бол IPV6FIREWALL-г харгалзах ямар ч дүрэмгүйгээр хэрэглэн бүх IPv6 урсгалыг хааж болох юм. цөмийн тохируулгууд IPDIVERT options IPDIVERT Энэ тохируулга NAT функцыг идэвхжүүлнэ. Хэрэв та IPFIREWALL_DEFAULT_TO_ACCEPT-г оруулаагүй эсвэл ирж байгаа пакетуудыг нэвтрүүлэх дүрмүүд бичээгүй бол та энэ машинаас ирж байгаа болон явж байгаа бүх пакетуудыг хаачихлаа гэсэн үг юм. <filename>/etc/rc.conf</filename> Тохируулгууд галт ханыг идэвхжүүлэхийн тулд: firewall_enable="YES" &os;-тэй хамт ирдэг анхдагч галт ханын төрлүүдээс нэгийг сонгохын тулд, /etc/rc.firewall файлыг уншсаны дараа нэгийг сонгоод, түүнийгээ дараах илэрхийлэлд бичиж өгнө: firewall_type="open" Боломжит утгууд нь: open — бүх урсгалыг нэвтрүүлнэ. client — зөвхөн энэ машиныг хамгаална. simple — бүхэл бүтэн сүлжээг хамгаална. closed — loopback интерфэйсээс бусад IP урсгалыг боломжгүй болгоно. UNKNOWN — галт ханын дүрмүүдийг ачаалах боломжгүй болгоно. filename — галт ханын дүрмүүдийг агуулсан файлын бүрэн зам. ipfw галт хана уруу тусгайлан бэлдсэн дүрмүүдийг хоёр аргаар ачаалж болно. Нэг нь, firewall_type хувьсагчийн утганд &man.ipfw.8;-д зориулсан ямар ч тушаал мөрийн тохируулгагүйгээр бичигдсэн галт ханын дүрмүүд-г агуулсан файлын бүрэн замыг өгөх. Дүрмүүдийг агуулсан хялбар жишээ файл дараах байдалтай байж болно: add block in all add block out all Нөгөө нь, систем ачаалах үед ажиллах ipfw тушаалуудыг агуулсан ажиллах боломжтой скриптийн бүрэн замыг firewall_script хувьсагчид оноох юм. Дээр үзүүлсэн дүрмүүдийн файлтай дүйх дүрмүүдийн скрипт дараах байдалтай байна: #!/bin/sh ipfw -q flush ipfw add block in all ipfw add block out all Хэрэв firewall_type нь client эсвэл simple утгыг авсан бол, /etc/rc.firewall файл доторх анхдагч дүрмүүдийг тухайн машинд тохируулан өөрчлөх хэрэгтэй. Мөн энэ бүлэгт хэрэглэж байгаа жишээнүүдийн хувьд firewall_script-н утга /etc/ipfw.rules гэж үзэж байгаа болно. Бүртгэлийг идэвхжүүлэхийн тулд: firewall_logging="YES" firewall_logging хувьсагчийн хийх ганц зүйл гэвэл net.inet.ip.fw.verbose sysctl хувьсагчийн утгыг 1 болгох юм ( хэсгийг үзнэ үү). rc.conf дотор бүртгэлийг хязгаарлах хувьсагч байхгүй, харин үүний тулд sysctl хувьсагчаар дамжуулан хийж болно. /etc/sysctl.conf файл дотор эсвэл гараараа утгыг оноож өгч болно: net.inet.ip.fw.verbose_limit=5 Хэрэв таны машин гарц байдлаар ажиллаж байгаа бол, жишээ нь &man.natd.8;-н тусламжтай Сүлжээний хаягийн Хөрвүүлэлт (NAT) хийж байгаа бол, /etc/rc.conf файл доторх шаардлагатай тохируулгуудын мэдээллийг хэсэг уруу хандана уу. IPFW Тушаал ipfw галт ханыг ажиллаж байх явцад түүний идэвхтэй байгаа дотоод дүрмүүдэд шинэ дүрэм нэмэх, дүрэм хасах зэрэг өөрчлөлтүүдийг гараар хийх гол механизм бол ipfw тушаал юм. Энэ аргыг хэрэглэхэд тулгардаг нэг асуудал бол нэгэнт системийг унтраасан эсвэл зогсоосон бол таны нэмсэн эсвэл хассан эсвэл өөрчилсөн бүх дүрмүүд алга болно. Бүх дүрмүүдээ нэг файлд бичээд систем ачаалах үед энэ файлыг ашиглан дүрмүүдийг ачаалах, эсвэл одоо ажиллаж байгаа галт ханын дүрмүүдийг файл дотор хийсэн өөрчлөлтүүдээр бүхлээр нь сольж тавих нь энд хэрэглэж байгаа, та бүхэнд зөвлөх арга барил юм. Удирдлагын дэлгэцэн дээр ажиллаж байгаа галт ханын дүрмүүдийг харуулахад ipfw тушаалыг одоо хэр нь хэрэглэсээр байна. IPFW-н данс хөтлөх боломж нь дүрэм бүрийн хувьд тухайн дүрэмд тохирсон пакетийг тоолох тоолуурыг үүсгэдэг. Ямар нэг дүрмийг шалгах үйл явцад тухайн дүрэм ажиллаж байгаа эсэхийг тогтоох аргуудын нэг бол дүрмийг тоолуурын хамт жагсаан харах байдаг. Бүх дүрмүүдийг дараагаар нь жагсаан харахын тулд: &prompt.root; ipfw list Бүх дүрмүүдийг тухайн дүрэм хамгийн сүүлд тохирсон цагны хамт жагсаан харахын тулд: &prompt.root; ipfw -t list Данслалтын мэдээлэл болон дүрмүүдийг тохирсон пакетийн тооны хамт харахын тулд. Эхний багана нь дүрмийн дугаар, дараа нь энэ дүрэмд тохирсон гарч байгаа пакетийн тоо, дараа нь энэ дүрэмд тохирсон орж байгаа пакетийн тоо, тэгээд дүрэм өөрөө байна. &prompt.root; ipfw -a list Статик дүрмүүдээс гадна динамик дүрмүүдийг жагсаан харахын тулд: &prompt.root; ipfw -d list Мөн хугацаа нь дууссан динамик дүрмүүдийг харахын тулд: &prompt.root; ipfw -d -e list Тоолууруудыг тэглэхийн тулд: &prompt.root; ipfw zero Зөвхөн NUM дугаартай тоолуурыг тэглэхийн тулд: &prompt.root; ipfw zero NUM IPFW Дүрмийн Олонлог Пакет дотор агуулагдаж байгаа утгуудыг үндэслэн тухайн пакетийг нэвтрүүлэх болон хаахыг хэлж байгаа дүрмүүдийг дүрмийн олонлог гэнэ. Хостуудын хоорондох хоёр чиглэлтэй пакет солилцоо нь сесс харилцааг бүрдүүлнэ. галт ханын дүрмийн олонлогоор пакет хоёр дахин шүүгдэнэ, эхний удаа Интернэтээс пакетийг хүлээн авахад, дараагийн удаа буцаж Интернэт уруу гарч явахад. Бүх TCP/IP үйлчилгээнүүдийн хувьд (жишээ нь: telnet, www, mail, г.м.) ямар протоколоор ажиллах болон эхлэл ба очих IP хаяг, эхлэл ба очих порт хаяг зэргийг урьдаас тодорхойлж өгсөн байдаг. Эдгээр үзүүлэлтүүд дээр үндэслэн нэвтрүүлэх болох хаах дүрмүүдийг зохиодог. IPFW Дүрмүүдтэй ажиллах дэс дараалал пакетийг галт хана хүлээн аваад дүрмийн олонлогт байгаа хамгийн эхний дүрэмтэй тулгах ба цааш дүрмүүдийн дугаарын өсөх дарааллын дагуу дээрээс доош нэг нэгээр шалгаж эхэлнэ. Пакет аль нэг дүрмийн сонголтын параметртай тохирвол, түүнд харгалзах үйлдлийг хийж, тухайн пакетийн хувьд цааш хайлтыг дуусгана. Энэ аргыг эхэнд тохирсон нь дийлнэ хайлтын арга гэнэ. Хэрэв тухайн пакет ямар ч дүрэмд тохирохгүй бол, энэ пакетийг 65535 дугаартай бүх пакетийг хааж, явуулсан хүнд нь ямар ч хариу өгөлгүй орхигдуулна гэсэн ipfw-н анхдагч дүрэмд албаар тохируулна. count, skipto ба tee дүрмүүдийн дараа хайлт үргэлжилнэ. Энд байгаа зааварчилгаанууд нь төлөвт 'keep state', 'limit', 'in'/'out', ба via зэрэг тохируулгуудыг агуулсан дүрмүүд дээр үндэслэгдсэн байгаа. Энэ бол хамааруулсан галт ханын дүрмийн олонлогийг бичих үндсэн арга барил юм. Хамааруулсан галт хана нь зөвхөн дүрмүүдэд тохирсон пакетуудыг нэвтрүүлнэ. Ийм маягаар галт ханын цаанаас Интернэт уруу ямар ямар үйлчилгээнүүд гарч болох болон эсрэгээр Интернэтээс дотоод сүлжээ уруу ямар ямар үйлчилгээнүүд нэвтэрч болохыг удирдах боломжтой. Эдгээрээс бусад бүх урсгалыг хааж, бүртгэдэг байхаар зохиогдсон байдаг. Хамааруулсан галт хана нь хамааруулаагүй галт ханаас аюулгүй байдлын хувьд хэд дахин илүү, тиймээс энд бид зөвхөн хамааруулсан галт ханын дүрмүүдийн талаар ярилцах болно. галт ханын дүрмүүдтэй ажиллахдаа маш анхааралтай байх хэрэгтэй. Зарим тохиргоо серверээс бүх холбоог тань тасалж мэднэ. Дүрмийн Синтакс IPFW дүрмийн синтакс Энд үзүүлсэн дүрмийн синтакс нь стандарт хамааруулсан галт хана үүсгэхэд шаардлагатай дүрмийн олонлогийг бичих хэмжээнд тохируулан хялбаршуулсан байгаа. Дүрмийн синтаксын бүрэн тайлбарыг &man.ipfw.8; заавар хуудаснаас үзнэ үү. Дүрмүүд нь түлхүүр үгүүдийг агуулна. Эдгээр түлхүүр үгүүд нь тухайн мөрөнд зүүнээс баруун тийш тодорхой дэс дараагаар бичигдэнэ. Түлхүүр үгүүд тодоор бичигдэх тул түүгээр нь ялгаж танина. Зарим түлхүүр үгүүд дэд-тохируулгатай байна. Тэр нь өөрөө түлхүүр үг байж болохоос гадна цааш дэд-тохируулгуудыг агуулсан байж болно. # гэсэн тэмдэгт тайлбарын эхлэлийг заах ба дүрэм бичсэн мөрийн төгсгөлд эсвэл өөрөө бүтэн мөр байдлаар байрлана. Хоосон мөрийг тооцохгүй. CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL CMD Шинэ дүрэм бүр дотоод хүснэгтэнд бичигдэхийн тулд add гэсэн түлхүүр үгийг өмнөө агуулж байх ёстой. RULE_NUMBER Дүрэм бүр өөрийн дүрмийн дугаартай байх ёстой. ACTION Тухайн дүрмийн сонголтын үзүүлэлтэд пакет тохироход заасан action буюу үйлдлийг гүйцэтгэх ба дүрэм нь дараах үйлдлүүдийн аль нэгтэй холбогдсон байна. allow | accept | pass | permit Эдгээр нь бүгд нэг зүйлийг, тухайлбал: дүрэмд тохирсон пакетуудыг нэвтрүүлж, галт ханын дүрэмтэй ажиллах явцаас гарахыг хэлж өгч байна. Эдгээр дүрмүүдийн дараа хайлт дуусна. check-state нь динамик дүрмийн хүснэгттэй пакетуудыг тулгана. Хэрэв тохирвол, энэ динамик дүрмийг үүсгэсэн дүрэмд харгалзах үйлдлийг гүйцэтгэнэ, үгүй бол дараагийн дүрэмд шилжинэ. check-state дүрэмд сонголтын шалгуур байхгүй. Хэрэв дүрмийн олонлогт check-state дүрэм байхгүй бол эхний keep-state эсвэл limit дүрмийг динамик дүрмийн хүснэгттэй тулгана. deny | drop Энэ хоёр үг хоёул дүрэмд тохирсон пакетуудыг хаяхыг заана. Хайлт энд дуусна. Бүртгэл хөтлөлт log эсвэл logamount Пакет log гэсэн түлхүүр үг орсон дүрэмд тохироход, энэ тухай мессеж syslogd уруу SECURITY гэсэн facility нэртэйгээр бүртгэгдэнэ. Зөвхөн тухайн дүрмийн хувьд бүртгэгдсэн пакетийн тоо logamount параметрийн утгыг даваагүй тохиолдолд бүртгэл явагдана. Хэрэв logamount-н утгыг зааж өгөөгүй бол, sysctl-н net.inet.ip.fw.verbose_limit хувьсагчийн утгыг хязгаарын утга болгон авна. Аль ч тохиолдолд тэг гэсэн утга бүртгэлийн хязгаарыг үгүй болгоно. Хязгаарт тулсан тохиолдолд, бүртгэлийг дахин идэвхжүүлэхийн тулд бүртгэлийн тоолуурыг эсвэл тухайн дүрмийн пакет тоолуурыг дахин эхлүүлнэ. ipfw reset log тушаалыг үзнэ үү. Бүртгэл нь бусад бүх пакет тохирох нөхцлүүд амжилттай нотлогдсоны дараа, мөн тухайн пакет дээр эцсийн үйлдлийг(зөвшөөрөх, татгалзах) хийхийн өмнө явагдана. Ямар дүрмүүдийн хувьд бүртгэл явуулахыг та шийдэх болно. Сонголт Энд танилцуулах түлхүүр үгнүүд нь тухайн пакет дүрэмд тохирч байгаа үгүй эсэхийг тодорхойлох үед, шалгагдаж байгаа пакетийн шинжүүдийг тодорхойлно. Дараах байнгын хэрэглээний шинжүүд өгөгдсөн байдаг ба доорх дэс дарааллаар хэрэглэнэ: udp | tcp | icmp эсвэл /etc/protocols файлд байгаа ямар ч протоколын нэрийг хэрэглэж болно. Харин утга нь шалгагдах протоколын нэрийг заана. Энэ бол заавал тавигдах шаардлага юм. from src to dst from src to dst: from ба to гэсэн түлхүүр үгүүд IP хаягийг шүүхэд хэрэглэгдэнэ. Хэрэглэх бол эхлэл ба очих параметрийг ХОЁУЛАНГ зааж өгөх хэрэгтэй. any гэсэн тусгай түлхүүр үгийн тусламжтай ямар ч IP хаягийг зөвшөөрч өгч болно. Хэрэглэх жишээ: from any to any эсвэл from 0.0.0.0/0 to any эсвэл from any to 0.0.0.0/0 эсвэл from 0.0.0.0 to any эсвэл from any to 0.0.0.0. from ба to гэсэн түлхүүр үгүүд IP хаягийг шүүхэд хэрэглэгдэнэ. Дүрмэнд хэрэглэхдээ эхлэл ба очих параметрүүдийг ХОЁУЛАНГ зааж өгөх ёстой. any гэсэн тусгай түлхүүр үгийн тусламжтай бүх IP хаягийг зөвшөөрч өгч болно. me гэсэн тусгай түлхүүр үг нь таны &os; системийн аль нэг интерфэйс дээр тохируулсан IP хаягийг заах ба галт хана ажиллаж байгаа PC-г (өөрөөр хэлбэл энэ машин) 'from me to any' эсвэл 'from any to me' эсвэл 'from 0.0.0.0/0 to any' эсвэл 'from any to 0.0.0.0/0' эсвэл 'from 0.0.0.0 to any' эсвэл 'from any to 0.0.0.0' эсвэл 'from me to 0.0.0.0' гэсэн байдлаар төлөөлнө. IP хаягуудыг цэгтэй тоон хэлбэр/багийн-урт байдлаар эсвэл зүгээр цэгтэй тоон хэлбэрээр бичиж болно. Энэ бол заавал тавигдах шаардлага юм. Багийн уртыг бичихтэй холбоотой тусламжийг дараах хаягаар орж үзнэ үү. port number Портын дугаарыг дэмждэг протоколуудын хувьд (TCP ба UDP гэх мэт), тааруулахыг хүсэж байгаа портын дугаарыг заавал бичиж өгөх ёстой байдаг. Портын тоон утгын оронд үйлчилгээний нэрийг(/etc/services файлаас) хэрэглэж болно. in | out Орж байгаа болон гарч байгаа пакетуудыг харгалзан тааруулна. in ба out нь түлхүүр үгүүд бөгөөд дүрэмд тааруулах шалгуур болгож энэ хоёр үгийн аль нэгийг заавал бичсэн байх ёстой. via IF Нэрээр нь зааж өгсөн интерфэйсээр дайран өнгөрч буй пакетуудыг тааруулна. via гэсэн түлхүүр үг нь тухайн интерфэйсийг тааруулах үйл явцын нэг хэсэг байдлаар байнга шалгаж байхыг зааж өгнө. setup Энэ түлхүүр үг нь TCP пакетуудын хувьд сесс эхлүүлэх хүсэлтийг зааж өгч байгаа заавал хэрэглэх түлхүүр үг юм. keep-state Энэ бол заавал хэрэглэх түлхүүр үг юм. Дүрэм таарахад, галт хана яг тэр протоколыг ашиглан эхлэл болон очих IP/портын хооронд үүсэх хоёр чиглэлтэй урсгалыг тааруулах анхдагч чанартай динамик дүрэм үүсгэнэ. limit {src-addr | src-port | dst-addr | dst-port} Дүрэмд заасантай адил параметрүүдтэй холболтын тоог N-р хязгаарлана. Нэг ба түүнээс дээш тооны эхлэл болон очих хаягууд, портуудыг зааж өгч болно. 'limit' ба 'keep-state'-г нэг дүрэмд хамтад нь хэрэглэж болохгүй. Limit нь 'keep-state'-тэй адил төлөвт функцуудыг гүйцэтгэхээс гадна өөрийн нэмэлт функцүүлтэй. Төлөвт Дүрмийн Тохируулгууд IPFW төлөвт шүүлт Төлөвт шүүлт нь урсгалыг сесс харилцаанаас бүрдэж буй хоёр чиглэлтэй пакет солилцоо гэж үздэг. Мөн энэ нь сесс эхлүүлсэн болон хүлээн авсан хостуудын хоорондох сесс харилцаа нь хоёр чиглэлтэй пакет солилцох процедуртай зохицож байгаа эсэхийг магадлах чадвартай байдаг. Сесс харилцааны загварт зохицоогүй пакетийг хуурамч гэж үзэн хүлээж авахгүй. 'check-state' нь IPFW дүрмийн олонлогийн хаана нь пакетийг динамик дүрмүүдийн боломжоор шалгахыг тогтооно. Таарсан тохиолдолд, пакет галт ханыг нэвтэрч цааш явах ба энэ хоёр чиглэлт сесс харилцааны туршид солилцох пакетуудын хувьд шинэ динамик дүрэм үүснэ. Таараагүй тохиолдолд, пакет дүрмийн олонлогийн дараагийн дүрэмд шалгагдахаар шилжинэ. Динамик дүрмүүдийн боломж нь маш олон тооны динамик дүрмүүдийг нээдэг SYN-живүүлэх халдлагаас үүсэх нөөцийн хомсдолд эмзэг байдаг. Энэ халдлагаас зайлсхийхийн тулд &os; limit гэсэн шинэ тохируулгыг нэмж өгсөн байдаг. Энэ тохируулгын тусламжтай нэгэн зэрэг явагдах сесс харилцааны тоог хязгаарлана. Limit тохируулгад зааж өгсөн эхлэл болон очих талбаруудаар пакетийн IP хаягийг асуулга явуулах замаар шалгасны дараа, энэ дүрэмд энэ IP хаягийн хослол хэдэн удаа таарсан тоог харгалзан хэрэв энэ тоо хязгаараас давсан бол тухайн пакетийг гээнэ. галт ханын мессежийг бүртгэх IPFW бүртгэл хөтлөлт Бүртгэл хөтлөлтийн ашиг тус тодорхой юм: Таны бүртгэхээр идэвхжүүлсэн дүрмүүдийн хувьд, ямар пакетууд гээгдсэн, тэдгээр нь ямар хаягаас ирсэн, хаашаа явж байсан зэрэг мэдээллийг эргэн харах боломжийг олгох ба гадны халдлагыг мөрдөхөд танд чухал хувь нэмэр болно. Бүртгэл хөтлөх боломжийг идэвхжүүлсэн хэдий ч, IPFW нь өөрөө ямар ч дүрмийг үүсгэхгүй. Администратор аль дүрмүүдийн хувьд бүртгэл явуулахыг шийдэн, тэдгээр дүрмүүддээ log гэсэн түлхүүр үгийг нэмж бичнэ. Ихэвчлэн зөвхөн татгалзах дүрмүүдийг бүртгэдэг, жишээлбэл ирж буй ICMP ping-г татгалзах гэх мэт. Хамгийн сүүлд байгаа ipfw-н анхдагч татгалзах дүрмийг хувилан log түлхүүр үгтэйгээр үүсгэх нь элбэг байдаг. Ийм байдлаар дүрмийн олонлогийн аль ч дүрмэнд таараагүй пакетуудыг харах боломжтой болно. Бүртгэл хөтлөлт нь хоёр талдаа иртэй сэлэмтэй адил юм, хэрэв та хайхрамжгүй хандвал, диск дүүрэн бүртгэлийн мэдээлэл дотроо учраа олохгүй суух болно. Дискийг дүүргэх DoS халдлага нь хамгийн эртний халдлагуудын нэг юм. Эдгээр бүртгэлийн мессеж нь syslogd-д бичигдэхээс гадна, root консол дэлгэцэн дээр гарах учир удахгүй ядаргаатай санагдаж эхэлдэг. IPFIREWALL_VERBOSE_LIMIT=5 гэсэн цөмийн тохируулга нь системийн бүртгэл хөтлөгч болох syslogd уруу шидэгдэж байгаа тухайн дүрэмд тохирсон пакетад харгалзах дараалсан мессежийн тоог хязгаарлана. Энэ тохируулгыг идэвхжүүлсэн үед, тодорхой дүрмийн хувьд дараалсан мессежийн тоог зааж өгсөн тоогоор хязгаарлана. Нэг ижил зүйлийг хэлсэн 200 бүртгэлийн бичлэгээс мэдэж авах зүйл хомс юм. Жишээ нь, тодорхой дүрмийн хувьд дараалсан таван бичлэг syslogd-д бичигдэнэ, үлдсэн дараалсан ижил бичлэгүүд тоологдоод syslogd-д дараах байдалтай бичигдэнэ: last message repeated 45 times Бүртгэл хөтлөгдөж байгаа бүх пакетуудын мессежүүд /etc/syslog.conf файлд анхдагч байдлаар зааж өгсөн /var/log/security файлд бичигдэнэ. Дүрмийн скриптийг бүтээх Туршлагатай IPFW хэрэглэгчид дүрмүүдийг агуулсан файл үүсгээд түүнийгээ скрипт байдлаар ажиллуулах боломжтой байхаар бичдэг. Үүний гол давуу тал нь шинэ дүрмүүдийг идэвхжүүлэхийн тулд системийг дахин ачаалах шаардлагагүй болно. Энэ аргыг ашиглан хэдэн ч удаа дараалан галт ханын дүрмүүдийг ачаалж болох тул шинэ дүрмүүдийг шалгах үед хэрэглэхэд тохиромжтой байдаг. Скрипт учраас олон дахин бичигдэж байгаа утгын оронд симбол орлуулалтыг ашиглах боломжтой. Энэ талаар дараах жишээн дээрээс харна уу. Энд хэрэглэгдсэн скриптийн синтакс нь sh, csh, ба tcsh бүрхүүл дээр ажиллах боломжтой. Симбол орлуулалттай талбарууд нь урдаа $ буюу долларын тэмдэгтэй байна. Симбол талбарууд нь $ тэмдэг урдаа байхгүй. Симбол талбарыг орлох утга нь давхар хашилтан (") дотор байрлана. Дүрмийн файлаа дараах байдалтай үүсгэж эхлэх хэрэгтэй: ############### start of example ipfw rules script ############# # ipfw -q -f flush # Delete all rules # Set defaults oif="tun0" # out interface odns="192.0.2.11" # ISP's DNS server IP address cmd="ipfw -q add " # build rule prefix ks="keep-state" # just too lazy to key this each time $cmd 00500 check-state $cmd 00502 deny all from any to any frag $cmd 00501 deny tcp from any to any established $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks $cmd 00611 allow udp from any to $odns 53 out via $oif $ks ################### End of example ipfw rules script ############ Байх ёстой бүх зүйлс бүгд байна. Энэ жишээн дээр дүрмүүд чухал биш, харин симбол орлуулалт хэрхэн ажилладагыг харуулсан байна. Хэрэв дээрх жишээ /etc/ipfw.rules нэртэй файл дотор байсан бол, эдгээр дүрмүүдийг дараах тушаалыг өгч дахин ачаалах боломжтой: &prompt.root; sh /etc/ipfw.rules /etc/ipfw.rules гэсэн файл ямар ч нэртэй байж болох ба таны хүссэн ямар ч газар байж болно. Дараах скриптийг хоёр аргын нэгээр хэрэглэж болно: Дээрхтэй адил зүйлсийг дараах тушаалыг гараар оруулан гүйцэтгэж болно: &prompt.root; ipfw -q -f flush &prompt.root; ipfw -q add check-state &prompt.root; ipfw -q add deny all from any to any frag &prompt.root; ipfw -q add deny tcp from any to any established &prompt.root; ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state &prompt.root; ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state &prompt.root; ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state Төлөвт дүрмийн олонлог Дараах NAT хийгдээгүй дүрмийн олонлог нь аюулгүй байдлыг маш сайн хангасан, хамааруулсан галт ханын дүрмүүдийг хэрхэн бичих жишээ юм. Хамааруулсан галт хана нь зөвхөн pass дүрмүүдэд тохирсон үйлчилгээг зөвшөөрч, бусдыг бүгдийг хаана. Бүх галт хананууд хамгийн багадаа хоёр интерфэйстэй байх ба галт хана маягаар ажиллахын тулд дүрмүүдийг тусгайлан зааж өгсөн байна. &os;-г оролцуулаад бүх &unix; төрлийн систем нь үйлдлийн систем дэх дотоод харилцаандаа lo0 интерфэйс болон 127.0.0.1 гэсэн IP хаягийг хэрэглэхээр бүтээгдсэн байдаг. Галт ханын дүрмүүд нь дотооддоо хэрэглэж байгаа эдгээр пакетуудыг чөлөөтэй нэвтрүүлэх дүрмүүдийг агуулсан байх ёстой. Интернэттэй холбогдож байгаа интерфэйс дээр та өөрийн Интернэт уруу гарч байгаа болон Интернэтээс ирж байгаа хандалтыг удирдах болон хянах дүрмүүдийг байрлуулна. Энэ нь таны PPP tun0 интерфэйс эсвэл таны DSL эсвэл кабель модемд холбогдсон NIC байж болно. Галт ханын цаана байгаа хувийн LAN-уудад нэг болон түүнээс дээш тооны NIC-ууд холбогдсон тохиолдолд, тэдгээр интерфэйсүүдийн хувьд тэдгээр LAN интерфэйсүүдээс ирсэн пакетуудыг чөлөөтэй нэвтрүүлэх дүрмийг агуулсан байх ёстой. Дүрмүүд эхлээд гурван үндсэн хэсэгт хуваагдан зохион байгуулагдсан байх ёстой: бүх чөлөөт халдашгүй интерфэйсүүд, нийтийн гадагшаа интерфэйс болон нийтийн дотогшоо интерфэйс. Нийтийн интерфэйс бүр дээр байгаа дүрмүүдийн дараалал нь хамгийн олон тохиолддог дүрмүүд нь хамгийн түрүүнд цөөн тохиолддог дүрмүүдээс өмнө байхаар, тухайн интерфэйс болон чиглэлийн хувьд хаах болон бүртгэх дүрмүүд нь хамгийн сүүлд байхаар бичигдсэн байна. Дараах жишээн дээрх гадагшаа хэсэг нь Интернэт хандалтыг зөвшөөрч өгөх үйлчилгээг тодорхойлох сонголтын утгуудыг агуулсан зөвхөн 'allow' дүрмүүдээс бүрдэж байна. Бүх дүрмүүд 'proto', 'port', 'in/out', 'via' ба 'keep state' тохируулгуудыг агуулсан байгаа. 'proto tcp' дүрмүүд нь төлөвт байдлыг идэвхжүүлж байгаа пакетийг keep state төлөвт хүснэгтэд нэмэх байдлаар, сесс эхлүүлэх хүсэлтийг тодорхойлох зорилгоор 'setup' тохируулгыг агуулсан байна. Дотогшоо хэсэгт эхлээд хүсээгүй пакетуудыг хаах дүрмүүдийг бичсэн байна. Энэ нь хоёр өөр шалтгаантай. Эхнийх нь, энэ дүрмүүдээр хаагдсан зүйлс нь доор байгаа өөр нэг дүрмээр зөвшөөрөгдсөн пакетийн нэг хэсэг байж болох талтай. Хоёр дахь шалтгаан нь, цөөхөн тоотой хүлээж авдаг ба бүртгэх хүсэлгүй байгаа пакетуудыг сонгон, тэдгээрийг бүрнээр хаах дүрмийг эхлээд бичиж өгснөөр эдгээр пакетууд хамгийн сүүлд байгаа ямар ч дүрмүүдэд тохироогүй пакетуудыг бүртгээд хаана гэсэн дүрмээр дайрахгүй болгож байгаа юм. Учир нь энэ хэсгийн хамгийн сүүлд байгаа бүгдийг бүртгээд хаана гэсэн дүрэм бол өөрийн систем уруу халдаж байгаа халдлагын нотолгоог цуглуулах таны нэг арга билээ. Өөр нэг тэмдэглэн хэлэх зүйл бол, хүсээгүй пакетуудын хариуд ямар ч хариу явуулахгүй, тэд зүгээр л орхигдож алга болно. Ингэснээр халдлага явуулагч түүний явуулсан пакетууд таны системд хүрсэн эсэх талаар юу ч мэдэхгүй үлдэх болно. Таны системийн талаар хэдий хэр бага мэднэ, төдий чинээ аюулгүй байна гэсэн үг юм. Хэрвээ мэдэхгүй дугаартай портын хувьд пакетууд бүртгэгдсэн байвал /etc/services/ файлаас эсвэл хаягаар тухайн порт ямар зориулалтаар ашиглагддагийг орж шалгаарай. Троянуудын хэрэглэдэг портын дугааруудыг хаягаар орж шалгаарай. Хамааруулсан дүрмийн олонлогийн жишээ Дараах NAT хийгдээгүй дүрмийн олонлог нь бүрэн хэмжээний хамааруулсан дүрмийн олонлог байгаа юм. Та энэ дүрмүүдийг өөрийн системдээ ашиглахад буруудах юмгүй. Зөвшөөрөхийг хүсэхгүй байгаа үйлчилгээнүүдийн хувьд харгалзах нэвтрүүлэх дүрмийг далдлаарай. Хэрэв бүртгэлд байгаа зарим мэдэгдлийг дахин харахыг хүсэхгүй, бүртгэхийг хүсэхгүй байгаа бол дотогшоо хэсэгт хаах дүрэм нэмж бичээрэй. Дүрэм бүрт байгаа 'dc0' гэсэн интерфэйсийн нэрийн оронд таны системийг Интернэт уруу холбож байгаа NIC картны интерфэйсийн нэрээр сольж тавиарай. Хэрэглэгчийн PPP-н хувьд, энэ нь 'tun0' байна. Эдгээр дүрмүүдийг хэрэглэх явцад та хэв маяг олж харах болно. Интернэт уруу чиглэсэн сесс эхлүүлэх хүсэлтийг төлөөлж байгаа илэрхийллүүд бүгд keep-state хэрэглэж байгаа. Интернэтээс ирж буй бүх зөвшөөрөгдсөн үйлчилгээнүүд живүүлэх халдлагыг зогсоох үүднээс limit гэсэн тохируулгын хамт бичигдсэн байгаа. Бүх дүрмүүд чиглэлийг тодотгохын тулд in эсвэл out-г хэрэглэсэн байгаа. Бүх дүрмүүд пакетийн дайран өнгөрөх интерфэйсийг тодорхойлж өгөхдөө via-г хэрэглэсэн байгаа. Дараах дүрмүүд /etc/ipfw.rules дотор байрлана. ################ Start of IPFW rules file ############################### # Flush out the list before we begin. ipfw -q -f flush # Set rules command prefix cmd="ipfw -q add" pif="dc0" # public interface name of NIC # facing the public Internet ################################################################# # No restrictions on Inside LAN Interface for private network # Not needed unless you have LAN. # Change xl0 to your LAN NIC interface name ################################################################# #$cmd 00005 allow all from any to any via xl0 ################################################################# # No restrictions on Loopback Interface ################################################################# $cmd 00010 allow all from any to any via lo0 ################################################################# # Allow the packet through if it has previous been added to the # the "dynamic" rules table by a allow keep-state statement. ################################################################# $cmd 00015 check-state ################################################################# # Interface facing Public Internet (Outbound Section) # Interrogate session start requests originating from behind the # firewall on the private network or from this gateway server # destine for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # x.x.x.x must be the IP address of your ISP.s DNS # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file $cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state $cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state # Allow out access to my ISP's DHCP server for cable/DSL configurations. # This rule is not needed for .user ppp. connection to the public Internet. # so you can delete this whole group. # Use the following rule and check log for IP address. # Then put IP address in commented out rule & delete first rule $cmd 00120 allow log udp from any to any 67 out via $pif keep-state #$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state # Allow out non-secure standard www function $cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state # Allow out secure www function https over TLS SSL $cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state # Allow out send & get email function $cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state $cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state # Allow out FBSD (make install & CVSUP) functions # Basically give user root "GOD" privileges. $cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root # Allow out ping $cmd 00250 allow icmp from any to any out via $pif keep-state # Allow out Time $cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state # Allow out nntp news (i.e. news groups) $cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state # Allow out secure FTP, Telnet, and SCP # This function is using SSH (secure shell) $cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state # Allow out whois $cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state # deny and log everything else that.s trying to get out. # This rule enforces the block all by default logic. $cmd 00299 deny log all from any to any out via $pif ################################################################# # Interface facing Public Internet (Inbound Section) # Interrogate packets originating from the public Internet # destine for this gateway server or the private network. ################################################################# # Deny all inbound traffic from non-routable reserved address spaces $cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect $cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Deny public pings $cmd 00310 deny icmp from any to any in via $pif # Deny ident $cmd 00315 deny tcp from any to any 113 in via $pif # Deny all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 $cmd 00320 deny tcp from any to any 137 in via $pif $cmd 00321 deny tcp from any to any 138 in via $pif $cmd 00322 deny tcp from any to any 139 in via $pif $cmd 00323 deny tcp from any to any 81 in via $pif # Deny any late arriving packets $cmd 00330 deny all from any to any frag in via $pif # Deny ACK packets that did not match the dynamic rule table $cmd 00332 deny tcp from any to any established in via $pif # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP.s DHCP server as it.s the only # authorized source to send this packet type. # Only necessary for cable or DSL configurations. # This rule is not needed for .user ppp. type connection to # the public Internet. This is the same IP address you captured # and used in the outbound section. #$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state # Allow in standard www function because I have apache server $cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2 # Allow in secure FTP, Telnet, and SCP from public Internet $cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2 # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID & PW are passed over public # Internet as clear text. # Delete this sample group if you do not have telnet server enabled. $cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2 # Reject & Log all incoming connections from the outside $cmd 00499 deny log all from any to any in via $pif # Everything else is denied by default # deny and log all packets that fell through to see what they are $cmd 00999 deny log all from any to any ################ End of IPFW rules file ############################### <acronym>NAT</acronym> болон Төлөвт дүрмийн олонлогийн жишээ NAT ба IPFW IPFW-н NAT функцыг идэвхжүүлэхийн тулд зарим нэмэлт тохиргооны илэрхийллүүдийг идэвхжүүлэх хэрэгтэй болдог. Цөмийн эх кодын бусад IPFIREWALL илэрхийллүүд дээр 'option divert' илэрхийллийг нэмж эмхэтгэн тусгайлан бэлдсэн цөмийг гаргаж авах хэрэгтэй. /etc/rc.conf доторх энгийн IPFW тохируулгууд дээр нэмж дараах тохируулгууд хэрэгтэй болно. natd_enable="YES" # Enable NATD function natd_interface="rl0" # interface name of public Internet NIC natd_flags="-dynamic -m" # -m = preserve port numbers if possible Төлөвт дүрмүүдийг divert natd (Сүлжээний хаягийн Хөрвүүлэлт) дүрмийн хамт хэрэглэх нь дүрмийн олонлог бичих логикийг төвөгтэй болгодог. 'check-state' ба 'divert natd' дүрмүүдийн дүрмийн олонлог дахь байрлал нь маш их нөлөөтэй. Энэ нь хялбар дайраад-өнгөрөх логик урсгал биш болно. 'skipto' гэсэн шинэ үйлдлийн төрлийг хэрэглэх болно. skipto тушаалыг хэрэглэхийн тулд хаашаа үсрэхээ тодорхойлохын тулд бүх дүрмүүдийг дугаарлах хэрэгтэй болно. Дараах тайлбаргүй жишээн дээр пакет дүрмийн олонлогоор дайрч өнгөрөх дарааллыг тайлбарлахаар сонгон авсан дүрэм бичих арга байгаа юм. Дүрэмтэй ажиллах процесс дүрмийн файлд байгаа хамгийн эхний дүрмээр эхлэн цааш дүрмүүдийг нэг нэгээр уншин, файлын төгсгөл хүртэл эсвэл пакет аль нэг дүрмийн сонголтын шалгуурт тохирч галт ханыг орхих хүртэл үргэлжилнэ. 100, 101, 450, 500, ба 510 дугаартай дүрмүүдийн байрлалыг сайн анзаарах хэрэгтэй. Эдгээр дүрмүүд нь гадагшаа болон дотогшоо чиглэлтэй пакетуудын хөрвүүлэлтийг удирдах бөгөөд ингэснээр keep-state динамик хүснэгтэн дэх тэдгээрт харгалзах мөрөнд хувийн LAN IP хаяг бүртгэгдсэн байх нөхцөлийг хангана. Дараа нь, бүх зөвшөөрөх болон татгалзах дүрмүүдэд пакетийн явж буй чиглэл (өөрөөр хэлбэл гадагшаа эсвэл дотогшоо) ба интерфэйсийг зааж өгсөн байгааг анзаараарай. Мөн гадагшаа сесс эхлүүлэх хүсэлтүүд, сүлжээний хаягийн хөрвүүлэлтийн бүх skipto дүрмүүд 500-с эхэлж байгааг анзаарна уу. Нэгэн LAN хэрэглэгч вэб хуудас үзэхийн тулд вэб хөтчийг хэрэглэж байна гэж бодъё. Веб хуудсууд 80-р портыг ашиглан холбогдоно. Пакет галт хананд ирнэ, гадагшаа чиглэж байгаа тул 100-р дүрмэнд тохирохгүй. 101-р дүрмийг мөн өнгөрнө, яагаад гэвэл энэ нь хамгийн анхны пакет тул keep-state динамик хүснэгтэнд хараахан бичигдэж амжаагүй байгаа. Пакет эцэст нь 125-р дүрэм дээр ирж, дүрэмд таарна. Энэ пакет Интернэт уруу харсан NIC-р гадагшаа гарч байгаа. пакетийн эхлэл IP хаяг нь хувийн LAN IP хаяг хэвээр байгаа. Энэ дүрмэнд таарах үед хоёр үйлдэл хийгдэнэ. keep-state тохируулга энэ дүрмийг keep-state динамик дүрмийн хүснэгтэнд нэмнэ, мөн зааж өгсөн үйлдлийг гүйцэтгэнэ. Үйлдэл нь динамик хүснэгтэд нэмэгдсэн мэдээллийн нэг хэсэг байна. Энэ тохиолдолд "skipto rule 500" байна. 500-р дүрэм нь пакетийн IP хаягийг NAT хийж, пакетийг гадагш явуулна. Үүнийг бүү мартаарай, энэ бол маш чухал шүү. Энэ пакет өөрийн замаар хүрэх газраа хүрээд буцаж ирэхдээ мөн л энэ дүрмийн олонлогийг дайрна. Энэ үед харин 100-р дүрэмд тохирч, очих IP хаяг нь буцаж харгалзах LAN IP хаяг уруу хөрвүүлэгдэнэ. Дараа нь check-state дүрмээр гарах ба хүснэгтэнд явагдаж байгаа сесс харилцаанд оролцож байгаа гэж тэмдэглэгдсэн тул цааш LAN уруу нэвтрэн орно. Тэгээд өөрийг нь анх явуулсан LAN PC уруу очих ба алсын серверээс өөр хэсэг өгөгдлийг авахыг хүссэн шинэ пакетийг явуулна. Энэ удаа энэ пакет check-state дүрмээр шалгагдах ба түүний гадагшаа урсгалд харгалзах мөр олдох тул харгалзах үйлдэл 'skipto 500'-г гүйцэтгэнэ. Пакет 500-р мөр уруу үсэрч NAT хийгдэн цааш өөрийн замаар явах болно. Дотогшоо урсгал дээр, идэвхтэй сесс харилцаанд оролцож байгаа гаднаас ирж байгаа бүх зүйлс автоматаар check-state дүрмээр болон зохих divert natd дүрмүүдээр шийдэгдэнэ. Энд бидний хийх ёстой зүйл бол хэрэггүй пакетуудыг татгалзаж, зөвшөөрөгдсөн үйлчилгээг нэвтрүүлэх юм. Галт ханын байгаа машин дээр апачи сервер ажиллаж байна, тэгээд Интернэтээс хүмүүс энэ дотоод вэб сайт уруу хандаж байна гэж бодъё. Шинэ дотогшоо сесс эхлүүлэх хүсэлтийн пакет 100-р дүрэмд тохирох бөгөөд түүний IP хаяг галт ханын LAN IP хаяг уруу оноолт хийгдэнэ. Дараа нь энэ пакет цааш бүх дүрмүүдээр шалгагдан эцэст нь 425-р дүрэмд тохирно. Энэ дүрэмд таарах үед хоёр үйлдэл хийгдэнэ. Энэ дүрэм keep-state динамик дүрмийн хүснэгтэнд нэмэгдэнэ, мөн зааж өгсөн үйлдлийг гүйцэтгэнэ. Гэвч энэ тохиолдолд энэ эхлэл IP хаягнаас эхэлсэн шинэ сесс эхлүүлэх хүсэлтийн тоо 2-оор хязгаарлагдана. Энэ нь тодорхой порт дээр ажиллаж байгаа үйлчилгээний хувьд DoS халдлагаас хамгаална. Харгалзах үйлдэл нь зөвшөөрөгдсөн тул пакет LAN уруу нэвтэрнэ. Буцах замд check-state дүрэм энэ пакетийг идэвхтэй сесс харилцаанд хамаарч байгааг таних тул 500-р дүрэм уруу шилжүүлэн, пакет тэнд NAT хийгдээд цааш гадагшаа интерфэйсээр гарна. Жишээ дүрмийн олонлог #1: #!/bin/sh cmd="ipfw -q add" skip="skipto 500" pif=rl0 ks="keep-state" good_tcpo="22,25,37,43,53,80,443,110,119" ipfw -q -f flush $cmd 002 allow all from any to any via xl0 # exclude LAN traffic $cmd 003 allow all from any to any via lo0 # exclude loopback traffic $cmd 100 divert natd ip from any to any in via $pif $cmd 101 check-state # Authorized outbound packets $cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks $cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks $cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks $cmd 130 $skip icmp from any to any out via $pif $ks $cmd 135 $skip udp from any to any 123 out via $pif $ks # Deny all inbound traffic from non-routable reserved address spaces $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Authorized inbound packets $cmd 400 allow udp from xx.70.207.54 to any 68 in $ks $cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1 $cmd 450 deny log ip from any to any # This is skipto location for outbound stateful rules $cmd 500 divert natd ip from any to any out via $pif $cmd 510 allow ip from any to any ######################## end of rules ################## Дараах жишээ дээрхтэй нилээд төстэй боловч туршлагагүй IPFW дүрэм бичигчид зориулан дүрмүүд юунд зориулагдсаныг тайлбарласан тайлбартай байгаагаараа онцлог юм. Жишээ дүрмийн олонлог #2: #!/bin/sh ################ Start of IPFW rules file ############################### # Flush out the list before we begin. ipfw -q -f flush # Set rules command prefix cmd="ipfw -q add" skip="skipto 800" pif="rl0" # public interface name of NIC # facing the public Internet ################################################################# # No restrictions on Inside LAN Interface for private network # Change xl0 to your LAN NIC interface name ################################################################# $cmd 005 allow all from any to any via xl0 ################################################################# # No restrictions on Loopback Interface ################################################################# $cmd 010 allow all from any to any via lo0 ################################################################# # check if packet is inbound and nat address if it is ################################################################# $cmd 014 divert natd ip from any to any in via $pif ################################################################# # Allow the packet through if it has previous been added to the # the "dynamic" rules table by a allow keep-state statement. ################################################################# $cmd 015 check-state ################################################################# # Interface facing Public Internet (Outbound Section) # Interrogate session start requests originating from behind the # firewall on the private network or from this gateway server # destine for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # x.x.x.x must be the IP address of your ISP's DNS # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file $cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state # Allow out access to my ISP's DHCP server for cable/DSL configurations. $cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state # Allow out non-secure standard www function $cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state # Allow out secure www function https over TLS SSL $cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state # Allow out send & get email function $cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state $cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state # Allow out FreeBSD (make install & CVSUP) functions # Basically give user root "GOD" privileges. $cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root # Allow out ping $cmd 080 $skip icmp from any to any out via $pif keep-state # Allow out Time $cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state # Allow out nntp news (i.e. news groups) $cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state # Allow out secure FTP, Telnet, and SCP # This function is using SSH (secure shell) $cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state # Allow out whois $cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state # Allow ntp time server $cmd 130 $skip udp from any to any 123 out via $pif keep-state ################################################################# # Interface facing Public Internet (Inbound Section) # Interrogate packets originating from the public Internet # destine for this gateway server or the private network. ################################################################# # Deny all inbound traffic from non-routable reserved address spaces $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Deny ident $cmd 315 deny tcp from any to any 113 in via $pif # Deny all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 $cmd 320 deny tcp from any to any 137 in via $pif $cmd 321 deny tcp from any to any 138 in via $pif $cmd 322 deny tcp from any to any 139 in via $pif $cmd 323 deny tcp from any to any 81 in via $pif # Deny any late arriving packets $cmd 330 deny all from any to any frag in via $pif # Deny ACK packets that did not match the dynamic rule table $cmd 332 deny tcp from any to any established in via $pif # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP's DHCP server as it's the only # authorized source to send this packet type. # Only necessary for cable or DSL configurations. # This rule is not needed for 'user ppp' type connection to # the public Internet. This is the same IP address you captured # and used in the outbound section. $cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state # Allow in standard www function because I have Apache server $cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2 # Allow in secure FTP, Telnet, and SCP from public Internet $cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2 # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID & PW are passed over public # Internet as clear text. # Delete this sample group if you do not have telnet server enabled. $cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2 # Reject & Log all unauthorized incoming connections from the public Internet $cmd 400 deny log all from any to any in via $pif # Reject & Log all unauthorized out going connections to the public Internet $cmd 450 deny log all from any to any out via $pif # This is skipto location for outbound stateful rules $cmd 800 divert natd ip from any to any out via $pif $cmd 801 allow ip from any to any # Everything else is denied by default # deny and log all packets that fell through to see what they are $cmd 999 deny log all from any to any ################ End of IPFW rules file ###############################