3040 lines
190 KiB
XML
3040 lines
190 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!--
|
||
The FreeBSD Mongolian Documentation Project
|
||
|
||
Original revision 40647
|
||
|
||
$FreeBSD$
|
||
-->
|
||
|
||
<chapter id="firewalls">
|
||
<chapterinfo>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Жозеф Ж.</firstname>
|
||
<surname>Баарбиш</surname>
|
||
<contrib>Хувь нэмэр болгон оруулсан </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Брэд</firstname>
|
||
<surname>Дэйвис</surname>
|
||
<contrib>SGML уруу хөрвүүлж шинэчилсэн </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Лодойсамбын</firstname>
|
||
<surname>Баянзул</surname>
|
||
<contrib>Орчуулсан </contrib>
|
||
</author>
|
||
</authorgroup>
|
||
</chapterinfo>
|
||
|
||
<title>Галт хана</title>
|
||
|
||
<indexterm><primary>Галт хана</primary></indexterm>
|
||
|
||
<indexterm>
|
||
<primary>аюулгүй байдал</primary>
|
||
|
||
<secondary>галт хана</secondary>
|
||
</indexterm>
|
||
|
||
<sect1 id="firewalls-intro">
|
||
<title>Танилцуулга</title>
|
||
|
||
<para>Галт ханын тусламжтайгаар систем уруу орж байгаа болон түүнээс гарч байгаа өгөгдлийн урсгалыг шүүн нэвтрүүлэх боломжтой болдог.
|
||
Галт хана нь сүлжээгээр дамжин өнгөрч байгаа пакетуудыг, <quote>дүрмүүдэд</quote> заасны дагуу эсвэл нэвтрүүлэх, эсвэл хаах үүргийг гүйцэтгэдэг.
|
||
Галт ханын дүрмүүд нь пакетийг протоколын төрөл, эхлэл хост хаяг, очих хост хаяг, эхлэл порт хаяг, очих порт хаяг зэрэг хэд хэдэн шинжээр нь шинжлэх боломжийг олгодог.</para>
|
||
|
||
<para>Галт ханыг ашигласнаар тухайн хостын болон сүлжээний аюулгүй байдлыг нилээд нэмэгдүүлж чадна. Галт ханын тусламжтайгаар дараах зүйлсийг хийх боломжтой :</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Дотоод сүлжээнд байрлаж байгаа сервер машин, түүн дээр ажиллаж байгаа програм үйлчилгээг Интернэтээр дамжин орж ирж буй гадны урсгалаас хамгаалах, тусгаарлах.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Дотоод сүлжээнд байрлаж байгаа хостоос Интернэт уруу хандах хандалтыг хаах, хязгаарлах.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Network address translation буюу Сүлжээний Хаягийн Хөрвүүлэлтийг
|
||
(<acronym>NAT</acronym>) дэмжих. Өөрөөр хэлбэл дотоод сүлжээндээ хувийн <acronym>IP</acronym> хаяг хэрэглэж,
|
||
Интернэтэд гарахдаа дундаа нэг холболтыг (нэг <acronym>IP</acronym> хаяг эсвэл автоматаар оноосон бүлэг хаягаар) хуваан хэрэглэх.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Энэ бүлгийг уншсаны дараа, та дараах зүйлсийг мэдэх болно:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>пакетийг шүүн нэвтрүүлэх дүрмүүдийг хэрхэн оновчтойгоор тодорхойлох.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>&os;-тэй хамт суусан галт ханануудын ялгаа.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>OpenBSD-н
|
||
<application>PF</application> галт ханыг хэрхэн тохируулах болон хэрэглэх.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><application>IPFILTER</application>-г хэрхэн тохируулах болон хэрэглэх.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><application>IPFW</application>-г хэрхэн тохируулах болон хэрэглэх.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Энэ бүлгийг уншихаасаа өмнө, та дараах зүйлсийг мэдсэн байх шаардлагатай:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>&os; болон Интернэтийн тухай үндсэн ойлголт.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</sect1>
|
||
|
||
<sect1 id="firewalls-concepts">
|
||
<title>Галт ханын тухай ойлголтууд</title>
|
||
|
||
<indexterm>
|
||
<primary>галт хана</primary>
|
||
|
||
<secondary>дүрмүүд</secondary>
|
||
</indexterm>
|
||
|
||
<para>Галт ханын дүрмүүдийг дараах үндсэн хоёр янзаар үүсгэж болно:
|
||
<quote>inclusive буюу хамааруулсан</quote> эсвэл <quote>exclusive буюу хамааруулаагүй</quote>.
|
||
Хамааруулаагүй галт хана нь дүрмэнд тохирсон урсгалаас бусдыг нэвтрүүлнэ. Харин хамааруулсан галт хана бол эсрэгээр нь,
|
||
дүрмэнд тохирсон урсгалыг нэвтрүүлж бусдыг хаана.</para>
|
||
|
||
<para>Хамааруулсан галт хана нь Интернэтэд үйлчилгээнүүдийг санал
|
||
болгодог системүүдийн хувьд илүү сайн сонголт болдог бөгөөд гарч байгаа
|
||
урсгалыг илүү сайн хянах боломжийг олгодог. Энэ нь Интернэтээс таны хувийн
|
||
сүлжээ рүү хандах урсгалыг бас хянадаг. Дүрэмд харгалзаж тохирохгүй
|
||
бүх урсгалыг хааж бүртгэдэг.
|
||
Болохгүй урсгалыг галт ханаар нэвтрүүлэх эрсдэлийг
|
||
багасгадаг учраас хамааруулсан галт хана нь хамааруулаагүй
|
||
галт ханыг бодвол илүүтэйгээр аюулгүй байдлыг хангаж чаддаг.</para>
|
||
|
||
<note>
|
||
<para>Зааж хэлээгүй л бол энэ бүлгийн бүх тохиргоо болон дүрмүүд
|
||
нь хамааруулсан галт ханыг үүсгэдэг.</para>
|
||
</note>
|
||
|
||
<para><quote>Төлөвт галт ханыг</quote> ашиглан аюулгүй байдлыг цааш илүү сайжруулах боломжтой.
|
||
Энэ төрлийн галт хана нь галт ханаар дамжин тогтсон холболтуудыг бүртгэж,
|
||
зөвхөн таарч байгаа тогтсон холболтоор эсвэл шинэ холболт үүсгэн урсгалыг нэвтрүүлдэг.
|
||
Төлөвт галт ханын нэг дутагдалтай тал гэвэл олон шинэ холболтууд нэг дор тогтох үед
|
||
Denial of Service буюу Үйлчилгээг Зогсоох(<acronym>DoS</acronym>) халдлагад өртөмтгий болдог. Иймээс галт ханыг
|
||
зохион байгуулахдаа төлөвт ба төлөвт-бус байдлыг хослуулан хэрэглэх нь хамгийн оновчтой байдаг.</para>
|
||
</sect1>
|
||
|
||
<sect1 id="firewalls-apps">
|
||
<title>Галт ханын багцууд</title>
|
||
|
||
<para>&os; дээр гурван янзын галт ханын багцууд хамрагдсан байдаг.
|
||
Нэрлэвэл: <emphasis>IPFILTER</emphasis>
|
||
(<acronym>IPF</acronym> гэж нэрлэх нь элбэг),
|
||
<emphasis>IPFIREWALL</emphasis> (<acronym>IPFW</acronym> гэж нэрлэх нь элбэг),
|
||
ба <emphasis>OpenBSD-н PacketFilter</emphasis> (<acronym>PF</acronym> гэж нэрлэх нь элбэг).
|
||
&os; нь мөн урсгалыг хязгаарлах(үндсэндээ зурвасын өргөнийг хязгаарлах) хоёр багцын хамт ирдэг:
|
||
&man.altq.4; болон &man.dummynet.4;. Dummynet нь анхнаасаа <acronym>IPFW</acronym>-тай, харин
|
||
<acronym>ALTQ</acronym> нь <acronym>PF</acronym>-тэй нягт холбоотой ажилладаг.
|
||
IPFILTER-ийн хувьд урсгал хязгаарлалтыг хийхдээ
|
||
NAT болон шүүлтэд IPFILTER-ийг ба
|
||
<acronym>IPFW</acronym>-ийг &man.dummynet.4;-тэй цуг юм уу
|
||
<emphasis>эсвэл</emphasis> <acronym>PF</acronym>-ийг
|
||
<acronym>ALTQ</acronym>-тай цуг ашиглан хийж болно.
|
||
IPFW, ба PF нь бүгд систем уруу орж байгаа болон гарч байгаа урсгалыг дүрмүүдийн тусламжтай удирдах боловч
|
||
синтаксын хувьд ч, арга замын хувьд ч өөр өөр байдаг.</para>
|
||
|
||
<para>&os; дээр олон галт ханын багцууд хамт ирдэг нь өөр өөр хэрэгцээ шаардлагатай хүмүүст
|
||
хүртээмжтэй байхыг гол зорилгоо болгосонд оршино. Түүнээс аль ч галт хана нь нөгөөгөөсөө илүү, эсвэл дутуу гэсэн үг биш юм.</para>
|
||
|
||
<para>Зохиогч IPFILTER-г сонгон авсан нь түүний төлөвт дүрмүүд нь
|
||
<acronym>NAT</acronym> орчинд хэрэглэхэд төвөг багатай, мөн
|
||
дотроо ftp proxy агуулсан байдгаас болсон хэрэг. Энэхүү ftp proxy-г ашиглан
|
||
гадагшаа гарах FTP урсгалыг зөвшөөрсөн дүрмүүдийг бичихэд хялбар байдаг.</para>
|
||
|
||
<para>Бүх галт ханууд пакет удирдах талбарын утгыг шинжлэх зарчмаар ажиллах тул
|
||
галт ханын дүрмүүдийг бичихийн өмнө <acronym>TCP/IP</acronym> протокол хэрхэн
|
||
ажилладаг талаар болон пакет удирдах талбарын утгууд, энэ утгууд session буюу сесс
|
||
үүсэхэд хэрхэн хэрэглэгддэг талаар үндсэн ойлголттой байх шаардлагатай болдог.
|
||
Дээрх ойлголтуудын талаар дараах хаягаар орж уншина уу:
|
||
<ulink
|
||
url="http://www.ipprimer.com/overview.cfm"></ulink>.</para>
|
||
</sect1>
|
||
|
||
<sect1 id="firewalls-pf">
|
||
<sect1info>
|
||
<authorgroup>
|
||
<author>
|
||
<firstname>Жон</firstname>
|
||
<surname>Феррел</surname>
|
||
<contrib>Хянан залруулж шинэчилсэн </contrib>
|
||
<!-- 24 March 2008 -->
|
||
</author>
|
||
</authorgroup>
|
||
</sect1info>
|
||
|
||
<title>OpenBSD Пакет шүүгч (PF) ба
|
||
<acronym>ALTQ</acronym></title>
|
||
|
||
<indexterm>
|
||
<primary>галт хана</primary>
|
||
|
||
<secondary>PF</secondary>
|
||
</indexterm>
|
||
|
||
<para>2003 оны 7 сард OpenBSD-н галт ханын програм болох
|
||
<acronym>PF</acronym> &os; уруу шилжиж, &os; Портын Цуглуулгад
|
||
орсон. 2004 онд гарсан &os; 5.3 нь <acronym>PF</acronym>-г
|
||
үндсэн системийн багцын нэг хэсэг болгон оруулсан анхны хувилбар юм.
|
||
<acronym>PF</acronym> нь бүрэн хэмжээнд ажиллах чадвартай
|
||
галт хана бөгөөд <acronym>ALTQ</acronym>-тай (Alternate
|
||
Queuing буюу Ээлжлэн солигдох дараалал) хамтран ажиллах боломжтой. <acronym>ALTQ</acronym> нь
|
||
Quality of Service буюу Үйлчилгээний Чанарын (<acronym>QoS</acronym>)
|
||
боломжоор хангадаг.
|
||
OpenBSD Төсөл нь <ulink
|
||
url="http://www.openbsd.org/faq/pf/">PF FAQ</ulink>-г хөтлөн
|
||
явуулдаг.
|
||
Тиймээс гарын авлагын энэ хэсэг нь &os;-д хамаатай
|
||
<acronym>PF</acronym> дээр илүү анхаарлаа хандуулахахаас гадна
|
||
хэрэглээний талаар зарим нэг ерөнхий мэдээллийг өгнө. Хэрэглээний
|
||
мэдээллийн талаар илүү дэлгэрэнгүйг <ulink
|
||
url="http://www.openbsd.org/faq/pf/">PF FAQ</ulink>-с үзнэ үү.</para>
|
||
|
||
<para>&os;-д зориулсан <acronym>PF</acronym>-ийн талаар илүү дэлгэрэнгүй мэдээллийг
|
||
<ulink url="http://pf4freebsd.love2party.net/"></ulink> хаягаас үзэж болно.</para>
|
||
|
||
<sect2>
|
||
<title>Цөмийн дуудагдах PF модулиудыг ашиглах нь</title>
|
||
|
||
<para>PF цөмийн модулийг дуудахдаа <filename>/etc/rc.conf</filename> файлд
|
||
дараах мөрийг нэмнэ:</para>
|
||
|
||
<programlisting>pf_enable="YES"</programlisting>
|
||
|
||
<para>Дараа нь модулийг дуудахдаа эхлүүлэх скриптийг ажиллуулна:</para>
|
||
|
||
<screen>&prompt.root; <userinput>/etc/rc.d/pf start</userinput></screen>
|
||
|
||
<para>PF модуль нь дүрмийн тохиргооны файлаа олж чадахгүй бол дуудагдахгүйг
|
||
санаарай. Анхдагч байрлал нь <filename>/etc/pf.conf</filename> байна.
|
||
Хэрэв PF дүрмийн олонлог өөр хаа нэгтээ байгаа бол <filename>/etc/rc.conf</filename>
|
||
файлд доор дурдсантай адил мөрийг нэмж PF дүрмийн олонлогоо тэр газраас
|
||
хайхаар зааж өгч болно:</para>
|
||
|
||
<programlisting>pf_rules="<replaceable>/path/to/pf.conf</replaceable>"</programlisting>
|
||
|
||
<para>Жишээ <filename>pf.conf</filename> файлыг <filename
|
||
class="directory">/usr/share/examples/pf/</filename> сангаас олж болно.</para>
|
||
|
||
<para><acronym>PF</acronym> модулийг тушаалын мөрөөс бас дуудан ажиллуулж
|
||
болно:</para>
|
||
|
||
<screen>&prompt.root; <userinput>kldload pf.ko</userinput></screen>
|
||
|
||
<para>PF-д зориулсан бүртгэл хөтлөх дэмжлэгийг
|
||
<literal>pflog.ko</literal> хангадаг бөгөөд
|
||
<filename>/etc/rc.conf</filename> файлд дараах мөрийг нэмж
|
||
дуудаж болно:</para>
|
||
|
||
<programlisting>pflog_enable="YES"</programlisting>
|
||
|
||
<para>Дараа нь модулийг дуудахдаа эхлүүлэх скриптийг ажиллуулна:</para>
|
||
|
||
<screen>&prompt.root; <userinput>/etc/rc.d/pflog start</userinput></screen>
|
||
|
||
<para>Хэрэв танд <acronym>PF</acronym>-ийн өөр боломжууд хэрэгтэй
|
||
бол <acronym>PF</acronym>-ийн дэмжлэгийг цөмд оруулан эмхэтгэх
|
||
хэрэгтэй.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>PF цөмийн тохиргоонууд</title>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохиргоонууд</primary>
|
||
|
||
<secondary>pf төхөөрөмж</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохиргоонууд</primary>
|
||
|
||
<secondary>pflog төхөөрөмж</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохиргоонууд</primary>
|
||
|
||
<secondary>pfsync төхөөрөмж</secondary>
|
||
</indexterm>
|
||
|
||
<para><acronym>PF</acronym> дэмжлэгийг &os; цөмд оруулж эмхэтгэх нь
|
||
шаардлагагүй боловч дуудагдах модульд ороогүй байдаг PF-ийн нэмэлт
|
||
боломжуудын нэг бөгөөд <acronym>PF</acronym>-ийн ашигладаг төлвийн хүснэгтэд
|
||
зарим өөрчлөлтүүдийг ил гаргадаг псевдо төхөөрөмж болох &man.pfsync.4;
|
||
гэгддэг боломжийг ашиглахын тулд та тэгж хийж өгч болох юм. Үүнийг
|
||
&man.carp.4;-тэй хослуулан ажиллагаа доголдоход тойрон гарах галт ханаыг
|
||
<acronym>PF</acronym> ашиглан бүтээж болно. <acronym>CARP</acronym>-ийн
|
||
талаар дэлгэрэнгүйг гарын авлагын <xref linkend="carp"/>-с
|
||
үзэж болно.</para>
|
||
|
||
<para>Цөмийн <acronym>PF</acronym> тохиргоонуудыг
|
||
<filename>/usr/src/sys/conf/NOTES</filename>-с олж болох бөгөөд
|
||
доор үзүүлэв:</para>
|
||
|
||
<programlisting>device pf
|
||
device pflog
|
||
device pfsync</programlisting>
|
||
|
||
<para><literal>device pf</literal> тохиргоо <quote>Packet Filter</quote>
|
||
галт ханыг (&man.pf.4;) дэмждэг болгоно.</para>
|
||
|
||
<para><literal>device pflog</literal> тохиргоо
|
||
псевдо буюу хуурамч &man.pflog.4; сүлжээний төхөөрөмжийг идэвхжүүлнэ. Энэ хуурамч
|
||
төхөөрөмжийн тусламжтайгаар &man.bpf.4; дескриптор уруу урсгалыг бүртгэх
|
||
боломжтой. &man.pflogd.8; дэмонг бүртгэлийг дискэн дээр хадгалахад хэрэглэнэ.</para>
|
||
|
||
<para><literal>device pfsync</literal> тохиргоо
|
||
псевдо буюу хуурамч &man.pfsync.4; сүлжээний төхөөрөмжийг идэвхжүүлнэ. Энэ хуурамч
|
||
төхөөрөмжийн тусламжтайгаар <quote>төлвийн өөрчлөлтүүдийг</quote> хянах боломжтой.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>rc.conf боломжууд</title>
|
||
|
||
<para>Дараах &man.rc.conf.5; илэрхийллүүд
|
||
<acronym>PF</acronym> болон &man.pflog.4;-ийг ачаалах үед тохируулна:</para>
|
||
|
||
<programlisting>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</programlisting>
|
||
|
||
<para>Хэрвээ энэ галт ханын цаана LAN байгаа бөгөөд
|
||
LAN-д байгаа компьютерууд уруу пакет дамжуулах шаардлагатай бол эсвэл
|
||
NAT ашиглах бодолтой байгаа бол дараах илэрхийлэл танд бас хэрэгтэй:</para>
|
||
|
||
<programlisting>gateway_enable="YES" # Enable as LAN gateway</programlisting>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Шүүгч дүрмүүдийг үүсгэх нь</title>
|
||
|
||
<para><acronym>PF</acronym> нь &man.pf.conf.5;-с (анхдагчаар <filename>/etc/pf.conf</filename>)
|
||
өөрийн тохиргооны дүрмүүдийг унших бөгөөд тэнд заагдсан дүрмүүд буюу тодорхойлолтуудын
|
||
дагуу пакетуудыг өөрчлөх, орхих буюу эсвэл дамжуулдаг. &os; суулгацад
|
||
<filename>/usr/share/examples/pf/</filename>-д байрлах хэд хэдэн жишээ
|
||
файлууд байдаг. <acronym>PF</acronym>-ийн дүрмийн олонлогуудын талаар бүрэн мэдээллийг
|
||
<ulink url="http://www.openbsd.org/faq/pf/">PF FAQ</ulink>-с
|
||
лавлана уу.</para>
|
||
|
||
<warning>
|
||
<para><ulink
|
||
url="http://www.openbsd.org/faq/pf/">PF FAQ</ulink>-г үзэж байхдаа
|
||
&os;-ийн хувилбар бүр өөр өөр PF хувилбартай байж болохыг
|
||
анхаарах хэрэгтэй. Одоогоор &os; 8.<replaceable>X</replaceable> болон
|
||
түүнээс өмнөх хувилбарууд OpenBSD 4.1-ийн нэгэн адил
|
||
<acronym>PF</acronym>-ийн хувилбарыг ашигладаг.
|
||
&os; 9.<replaceable>X</replaceable> болон түүнээс хойшхи хувилбарууд
|
||
OpenBSD 4.5-ийн нэгэн адил
|
||
<acronym>PF</acronym>-ийн хувилбарыг ашигладаг.</para>
|
||
</warning>
|
||
|
||
<para>&a.pf; нь <acronym>PF</acronym> галт ханыг тохируулж ажиллуулах
|
||
талаар асуухад тохиромжтой газар юм. Асуулт асуухаасаа өмнө захидлын
|
||
жагсаалтын архиваас шалгахаа мартуузай!</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>PF-тэй ажиллах нь</title>
|
||
|
||
<para><acronym>PF</acronym>-ийг хянахдаа &man.pfctl.8;-г ашиглана.
|
||
Зарим нэг хэрэгтэй тушаалуудыг доор жагсаав (Бүх боломжит тохиргоонуудын
|
||
талаар &man.pfctl.8; гарын авлагын хуудаснаас лавлахаа мартуузай):</para>
|
||
|
||
<informaltable frame="none" pgwide="1">
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Тушаал</entry>
|
||
<entry>Зорилго</entry>
|
||
</row>
|
||
</thead>
|
||
|
||
<tbody>
|
||
<row>
|
||
<entry><command>pfctl <option>-e</option></command></entry>
|
||
<entry>PF-г идэвхжүүлэх</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry><command>pfctl <option>-d</option></command></entry>
|
||
<entry>PF-г болиулах</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry><command>pfctl <option>-F</option> all <option>-f</option> /etc/pf.conf</command></entry>
|
||
<entry>Бүх дүрмүүдийг арилгаж (nat, шүүх, төлөв, хүснэгт, гэх мэт.)
|
||
<filename>/etc/pf.conf</filename> файлаас дахин ачаалах</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry><command>pfctl <option>-s</option> [ rules | nat | state ]</command></entry>
|
||
<entry>Шүүх дүрмүүд, nat дүрмүүд, эсвэл төлвийн хүснэгтийн талаар тайлан гаргах</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry><command>pfctl <option>-vnf</option> /etc/pf.conf</command></entry>
|
||
<entry>Дүрмийн олонлогийг ачаалалгүйгээр <filename>/etc/pf.conf</filename>-д
|
||
алдаа байгаа эсэхийг шалгах</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title><acronym>ALTQ</acronym>-г идэвхжүүлэх</title>
|
||
|
||
<para><acronym>ALTQ</acronym>-г идэвхжүүлэх ганц арга зам бол түүний боломжуудыг
|
||
&os; цөмтэй хамт хөрвүүлэн эмхэтгэх юм. Мөн сүлжээний картын драйвер болгон <acronym>ALTQ</acronym>-г
|
||
дэмждэггүй тул өөрийн тань хэрэглэж буй &os; хувилбарын хувьд дэмжигддэг драйверуудын жагсаалтыг
|
||
&man.altq.4; гарын авлагын хуудаснаас үзнэ үү.</para>
|
||
|
||
<para>Дараах тохируулгууд
|
||
<acronym>ALTQ</acronym>-г идэвхжүүлж нэмэлт үүргүүдийг оруулдаг.</para>
|
||
|
||
<programlisting>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</programlisting>
|
||
|
||
<para><literal>options ALTQ</literal> мөр <acronym>ALTQ</acronym>
|
||
-г бүхэлд нь идэвхжүүлнэ.</para>
|
||
|
||
<para><literal>options ALTQ_CBQ</literal> мөр <emphasis>Class Based Queuing</emphasis>
|
||
буюу Ангиллаас Хамаарсан Дараалал Үүсгэх(<acronym>CBQ</acronym>) боломжийг идэвхжүүлнэ.
|
||
<acronym>CBQ</acronym> нь шүүгч дүрмүүд дээр үндэслэн урсгалуудад эрэмбэ тогтоох зорилгоор
|
||
зурвасын өргөнийг өөр өөр ангиллуудад болон дарааллуудад хуваах боломжийг олгоно.</para>
|
||
|
||
<para><literal>options ALTQ_RED</literal> мөр <emphasis>Random Early
|
||
Detection</emphasis> буюу Санамсаргүй Эрт Илрүүлэлт(<acronym>RED</acronym>)-г идэвхжүүлнэ.
|
||
<acronym>RED</acronym>-г сүлжээний даац хэтрэхээс сэргийлэхэд хэрэглэдэг.
|
||
<acronym>RED</acronym> дарааллын уртыг хэмжиж, түүнийг байх ёстой дээд ба
|
||
доод хэмжээтэй жиших байдлаар ажилладаг. Хэрэв дараалал дээд хэмжээнээс урт болбол
|
||
шинэ пакетууд орхигдох болно. Нэртэйгээ адилаар, <acronym>RED</acronym> нь холболтуудаас пакетийг
|
||
санамсаргүйгээр орхигдуулдаг.</para>
|
||
|
||
<para><literal>options ALTQ_RIO</literal> мөр нь <emphasis>Random Early
|
||
Detection In and Out</emphasis> буюу Орох ба Гарах Санамсаргүй Эрт Илрүүлэлтийг идэвхжүүлнэ.</para>
|
||
|
||
<para><literal>options ALTQ_HFSC</literal> мөр нь
|
||
<emphasis>Hierarchical Fair Service Curve Packet Scheduler</emphasis> буюу Үе давхаргат Зохимжит Үйлчилгээний Муруйн Пакет Хуваарилагчийг
|
||
идэвхжүүлнэ. <acronym>HFSC</acronym> талаар илүү дэлгэрэнгүй мэдээллийг дараах хаягаас үзнэ үү:
|
||
<ulink url="http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html"></ulink>.</para>
|
||
|
||
<para><literal>options ALTQ_PRIQ</literal> мөр нь <emphasis>Priority Queuing</emphasis> буюу Эрэмбэт Дараалал Үүсгэх
|
||
(<acronym>PRIQ</acronym>)-г идэвхжүүлнэ. <acronym>PRIQ</acronym> нь эрэмбэ өндөртэй дараалалд байгаа
|
||
урсгалыг эхэнд нэвтрүүлэх зарчмаар ажилладаг.</para>
|
||
|
||
<para><literal>options ALTQ_NOPCC</literal> мөр нь <acronym>ALTQ</acronym>-г
|
||
<acronym>SMP</acronym>-тай хамт ажиллах боломжтой болгоно.
|
||
<acronym>SMP</acronym> системийн хувьд энэ боломжийг заавал идэвхжүүлэх хэрэгтэй.</para>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="firewalls-ipf">
|
||
<title>IPFILTER (IPF) Галт хана</title>
|
||
|
||
<indexterm>
|
||
<primary>галт хана</primary>
|
||
|
||
<secondary>IPFILTER</secondary>
|
||
</indexterm>
|
||
|
||
<para>IPFILTER-г зохиосон хүн бол Даррин Рид билээ. IPFILTER нь
|
||
үйлдлийн системээс хамааралгүй: нээлттэй эхийн програм бөгөөд
|
||
&os;, NetBSD, OpenBSD, &sunos;, HP/UX, ба &solaris; зэрэг олон үйлдлийн систем уруу
|
||
шилжүүлэгдсэн юм. IPFILTER эрчимтэй дэмжигдэж,
|
||
сайжруулсан хувилбарууд нь тогтмол гарсаар байгаа.</para>
|
||
|
||
<para>IPFILTER нь цөмийн талд ажиллах галт хана болон
|
||
<acronym>NAT</acronym> механизм дээр суурилсан бөгөөд түүнийг удирдах, хянахын тулд
|
||
хэрэглэгчийн интерфэйс програмыг ашиглана. Галт ханын дүрмүүдийг нэмэх болон хасахдаа
|
||
&man.ipf.8; хэрэгслийг хэрэглэнэ. <acronym>NAT</acronym> дүрмүүдийг
|
||
нэмэх болон хасахдаа &man.ipnat.8; хэрэгслийг хэрэглэнэ. &man.ipfstat.8; хэрэгсэл
|
||
нь IPFILTER-н цөмийн талд ажиллаж байгаа хэсгийн статистикийг хэвлэхэд зориулагдсан.
|
||
&man.ipmon.8; програм харин IPFILTER-н үйлдлүүдийг системийн бүртгэлийн файлд
|
||
бүртгэнэ.</para>
|
||
|
||
<para>IPF-г анх зохиохдоо <quote>сүүлд тохирсон дүрэм дийлнэ</quote> гэсэн
|
||
логикийн дагуу бүтээсэн ба зөвхөн төлөвт-бус дүрмүүдийг ашигладаг байлаа.
|
||
Цаг хугацаа өнгөрөхөд IPF илүү хөгжиж, <quote>quick</quote> тохируулга
|
||
болон төлөвт <quote>keep state</quote> тохируулгуудыг агуулах болсон нь орчин үеийн
|
||
хэрэгцээ шаардлагад илүү нийцэх болжээ. IPF-н албан ёсны баримтжуулалтанд
|
||
хуучин уламжлалт дүрмүүдийг бичих параметрүүд болон файлтай ажиллах логикууд багтсан байдаг.
|
||
Харин шинэ функцуудыг нь зөвхөн нэмэлт боломж байдлаар оруулсан нь аюулгүй байдлыг хавьгүй
|
||
илүү хангасан аюулгүй галт хана бий болгож байгаа тэднийг хэт доогуур тавьсан санагддаг.</para>
|
||
|
||
<para>Энэ бүлэгт байгаа зааврууд нь <quote>quick</quote> болон төлөвт <quote>keep state</quote>
|
||
тохируулгуудыг агуулсан дүрмүүдээс үндсэндээ бүрдсэн байгаа. Энэ бол хамааруулсан галт ханын дүрмүүдийг
|
||
бичих үндсэн арга барил юм.</para>
|
||
|
||
<para>Хуучин уламжлалт дүрмүүдтэй ажиллах аргуудын талаар дэлгэрэнгүй тайлбарыг:
|
||
<ulink url="http://www.munk.me.uk/ipf/ipf-howto.html"></ulink>
|
||
ба <ulink
|
||
url="http://coombs.anu.edu.au/~avalon/ip-filter.html"></ulink> хаягаар орж үзнэ үү.</para>
|
||
|
||
<para>IPF FAQ-г <ulink
|
||
url="http://www.phildev.net/ipf/index.html"></ulink> хаягаар орж үзнэ үү.</para>
|
||
|
||
<para>Нээлттэй эхийн IPFilter програмын захидлын жагсаалтын архивыг <ulink
|
||
url="http://marc.theaimsgroup.com/?l=ipfilter"></ulink> хаягаар орж үзнэ үү.</para>
|
||
|
||
<sect2>
|
||
<title>IPF-г идэвхжүүлэх</title>
|
||
|
||
<indexterm>
|
||
<primary>IPFILTER</primary>
|
||
|
||
<secondary>идэвхжүүлэх</secondary>
|
||
</indexterm>
|
||
|
||
<para>IPF нь &os; үндсэн суулгацтай хамт, ажиллах үеийн ачаалах боломжтой модуль байдлаар ирдэг.
|
||
<filename>rc.conf</filename> тохиргооны файл дотор ipfilter_enable="YES" илэрхийлэл байгаа үед систем IPF цөмийн
|
||
модулийг динамикаар ачаална. Энэ ачаалах боломжтой модуль нь бүртгэх боломжтойгоор,
|
||
анхдагч <literal>default pass all</literal> тохируулгын хамт бүтээгдсэн байдаг. Анхдагч дүрмийг
|
||
<literal>block all</literal> болгохын тулд IPF-г цөмд эмхэтгэх шаардлага байхгүй. Зөвхөн
|
||
дүрмүүдийнхээ төгсгөлд бүгдийг хаах дүрмийг бичиж өгөхөд хангалттай.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Цөмийн тохируулгууд</title>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохируулгууд</primary>
|
||
|
||
<secondary>IPFILTER</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохируулгууд</primary>
|
||
|
||
<secondary>IPFILTER_LOG</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохируулгууд</primary>
|
||
|
||
<secondary>IPFILTER_DEFAULT_BLOCK</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>IPFILTER</primary>
|
||
|
||
<secondary>цөмийн тохируулгууд</secondary>
|
||
</indexterm>
|
||
|
||
<para>&os; цөм уруу дараах боломжуудыг эмхэтгэн IPF-г идэвхжүүлэх
|
||
албагүй боловч, суурь мэдлэг болгон энд үзүүллээ. IPF-г цөм уруу хөрвүүлэн
|
||
эмхэтгэснээр ачаалах боломжтой модулийг хэрэглэх боломжгүй болдог.</para>
|
||
|
||
<para>Цөмийн тохиргоон дахь жишээ IPF илэрхийллүүд
|
||
<filename>/usr/src/sys/conf/NOTES</filename> гэсэн цөмийн эх файлд
|
||
байх ба доор сийрүүлбэл:</para>
|
||
|
||
<programlisting>options IPFILTER
|
||
options IPFILTER_LOG
|
||
options IPFILTER_DEFAULT_BLOCK</programlisting>
|
||
|
||
<para><literal>options IPFILTER</literal> мөр нь <quote>IPFILTER</quote>
|
||
галт ханыг идэвхжүүлнэ.</para>
|
||
|
||
<para><literal>options IPFILTER_LOG</literal> мөр нь <literal>log</literal>
|
||
гэсэн түлхүүр үг орсон дүрмүүдийн хувьд урсгалыг <devicename>ipl</devicename>
|
||
пакет бүртгэх хуурамч—төхөөрөмж уруу бүртгэх боломжтой болгоно.</para>
|
||
|
||
<para><literal>options IPFILTER_DEFAULT_BLOCK</literal> мөр нь
|
||
галт ханын <literal>pass</literal> дүрмэнд тохироогүй пакетийг
|
||
хаах анхдагч чанарыг зааж өгнө.</para>
|
||
|
||
<para>Эдгээр тохируулгууд нь зөвхөн тэдгээрийг тохируулан,
|
||
тусгайлан цөм бүтээж суулгасны дараа идэвхждэг.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>rc.conf тохируулгууд</title>
|
||
|
||
<para>IPF-г систем ачаалах үед идэвхтэй болгохын тулд /etc/rc.conf дотор
|
||
дараах илэрхийллүүд байх ёстой:</para>
|
||
|
||
<programlisting>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</programlisting>
|
||
|
||
<para>Хэрэв энэ галт ханын цаана хувийн IP хаяг хэрэглэдэг LAN байгаа бол
|
||
<acronym>NAT</acronym> функцыг идэвхжүүлэхийн тулд дараах мөрүүдийг нэмэх хэрэгтэй:</para>
|
||
|
||
<programlisting>gateway_enable="YES" # Enable as LAN gateway
|
||
ipnat_enable="YES" # Start ipnat function
|
||
ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat</programlisting>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>IPF</title>
|
||
|
||
<indexterm><primary><command>ipf</command></primary></indexterm>
|
||
|
||
<para>Таны бичсэн дүрмүүдийг ачаалахад &man.ipf.8; тушаалыг хэрэглэнэ.
|
||
Та өөрийн дүрмүүдээс бүтсэн файлыг үүсгээд, түүнийгээ дээрх тушаалын ашиглан
|
||
галт ханын одоо ажиллаж байгаа дотоод дүрмүүдтэй сольж тавьна гэсэн үг юм:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipf -Fa -f /etc/ipf.rules</userinput></screen>
|
||
|
||
<para><option>-Fa</option> нь бүх дотоод дүрмүүдийн хүснэгтийг цэвэрлэ гэсэн үг.</para>
|
||
|
||
<para><option>-f</option> нь ачаалах дүрмүүдээ энэ файлаас унш гэсэн үг.</para>
|
||
|
||
<para>Ийм байдлаар та өөрийн хүссэн дүрмүүдийн файлыг үүсгээд,
|
||
дээрх IPF тушаалыг ажиллуулан системийг шинээр ачаалахгүйгээр
|
||
ажиллаж байгаа галт ханын дүрмүүдийг шинээр өөрчлөх боломжтой болж байна.
|
||
Дээрх аргаар галт ханын дүрмүүдийг хэдэн ч удаа сольж болох тул энэ арга нь
|
||
шинэ дүрмүүдийг туршихад тохиромжтой арга юм.</para>
|
||
|
||
<para>Энэ тушаалтай ажиллах боломжтой бусад тугуудын талаар
|
||
дэлгэрэнгүйг &man.ipf.8; заавар хуудаснаас үзнэ үү.</para>
|
||
|
||
<para>&man.ipf.8; тушаал дүрмүүдийн файлыг стандарт текст файл гэж
|
||
тооцдог. Симбол орлуулалттай скрипт байдлаар бичигдсэн файлыг ойлгохгүй.</para>
|
||
|
||
<para>Гэвч скрипт симбол орлуулалтын хүчийг ашиглан IPF дүрмүүдийг бүтээх
|
||
арга зам байгаа. Илүү дэлгэрэнгүй мэдээллийг
|
||
<xref linkend="firewalls-ipf-rules-script"/> хэсгээс үзнэ үү.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>IPFSTAT</title>
|
||
|
||
<indexterm><primary><command>ipfstat</command></primary></indexterm>
|
||
|
||
<indexterm>
|
||
<primary>IPFILTER</primary>
|
||
|
||
<secondary>статистик</secondary>
|
||
</indexterm>
|
||
|
||
<para>&man.ipfstat.8;-н анхдагч чанар бол галт ханыг хамгийн сүүлд асааснаас хойших,
|
||
эсвэл <command>ipf -Z</command> тушаалыг өгөн хуримтлуулагчийг хамгийн сүүлд тэглэснээс хойших
|
||
галт ханаар орж байгаа болон гарч байгаа пакетуудыг хэрэглэгчийн тодорхойлж өгсөн дүрмүүдээр
|
||
шүүсэн үр дүнд бий болсон статистик тоог гаргаж ирэн, дэлгэцэнд харуулах юм.</para>
|
||
|
||
<para>Дэлгэрэнгүйг &man.ipfstat.8; заавар хуудаснаас үзнэ үү.</para>
|
||
|
||
<para>&man.ipfstat.8; тушаалын анхдагч үр дүн дараах байдалтай байна:</para>
|
||
|
||
<screen>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 <acronym>TCP</acronym> 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
|
||
<acronym>TCP</acronym> cksum fails(in): 0 (out): 0
|
||
Packet log flags set: (0)</screen>
|
||
|
||
<para>Дотогшоо урсгалын хувьд <option>-i</option>,
|
||
гадагшаа урсгалын хувьд <option>-o</option> тохируулгыг өгөхөд
|
||
кернелийн ашиглаж буй дүрмүүдийн жагсаалтыг гаргаж харуулна.</para>
|
||
|
||
<para><command>ipfstat -in</command> нь дотогшоо урсгалын
|
||
дотоод дүрмүүдийн хүснэгтийг дүрмүүдийн дугаарын хамт харуулна.</para>
|
||
|
||
<para><command>ipfstat -on</command> нь гадагшаа урсгалын
|
||
дотоод дүрмүүдийн хүснэгтийг дүрмүүдийн дугаарын хамт харуулна.</para>
|
||
|
||
<para>Үр дүн нь дараах байдалтай байна:</para>
|
||
|
||
<screen>@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</screen>
|
||
|
||
<para><command>ipfstat -ih</command> нь дотогшоо урсгалын
|
||
дотоод дүрмүүдийн хүснэгтийг дүрмүүдийн хэдэн удаа тохирсон тооны хамт харуулна.</para>
|
||
|
||
<para><command>ipfstat -oh</command> нь гадагшаа урсгалын
|
||
дотоод дүрмүүдийн хүснэгтийг дүрмүүдийн хэдэн удаа тохирсон тооны хамт харуулна.</para>
|
||
|
||
<para>Үр дүн нь дараах байдалтай байна:</para>
|
||
|
||
<screen>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</screen>
|
||
|
||
<para><command>ipfstat</command> тушаалын хамгийн чухал функцуудын
|
||
нэг бол, &os;-н ажиллаж байгаа процессийн хүснэгтийг &man.top.1;
|
||
харуулдаг шиг төлвийн хүснэгтийг <option>-t</option> туг харуулдаг явдал юм.
|
||
Таны галт хана гадны халдлагад өртөх үед энэ функц түүнийг илрүүлэх, шинжлэх, халдлагад
|
||
оролцож буй пакетуудыг харах боломжийг олгоно. Нэмэлт дэд тугууд нь хяналт хийх
|
||
эхлэл болон очих IP хаяг, порт, эсвэл протоколыг сонгох боломжийг олгодог.
|
||
Дэлгэрэнгүйг &man.ipfstat.8; заавар хуудаснаас үзнэ үү.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>IPMON</title>
|
||
|
||
<indexterm><primary><command>ipmon</command></primary></indexterm>
|
||
|
||
<indexterm>
|
||
<primary>IPFILTER</primary>
|
||
|
||
<secondary>бүртгэл хөтлөлт</secondary>
|
||
</indexterm>
|
||
|
||
<para><command>ipmon</command> тушаал зохистой ажиллахын тулд цөмийн
|
||
<literal>IPFILTER_LOG</literal> тохируулга идэвхжсэн байх ёстой. Энэ тушаал хоёр өөр горимд
|
||
ажиллах чадвартай. Төрөлх горим нь энэ тушаалыг тушаал мөрөн дээр
|
||
<option>-D</option> туггүйгээр оруулахад ажиллах анхдагч горим юм.</para>
|
||
|
||
<para>Демон горим нь болж өнгөрсөн үйл явцын бүртгэлийг эргэж харахын тулд
|
||
системийн бүртгэлийг тасралтгүй хөтлөн явуулахад тохиромжтой горим юм.
|
||
&os; болон IPFILTER энэ горимд ажиллахаар тохируулагдсан байдаг. &os;
|
||
нь системийн бүртгэлийг автоматаар тойруулах чадвартай. Тиймээс бүртгэлийн мэдээллийг &man.syslogd.8;
|
||
процесс уруу гаргах нь энгийн файл уруу гаргах анхдагч аргаас дээр байдаг.
|
||
Анхдагч <filename>rc.conf</filename> файл дотор <literal>ipmon_flags</literal> илэрхийлэл
|
||
<option>-Ds</option> тугуудыг хэрэглэдэг:</para>
|
||
|
||
<programlisting>ipmon_flags="-Ds" # D = start as daemon
|
||
# s = log to syslog
|
||
# v = log tcp window, ack, seq
|
||
# n = map IP & port to names</programlisting>
|
||
|
||
<para>Бүртгэл хөтлөн явуулахын давуу талыг дурдахад илүүц биз.
|
||
Бүртгэлийн тусламжтай ямар пакетууд орхигдсон, тэдгээр пакетууд хаанаас ирсэн,
|
||
хаашаа явж байсан зэрэг мэдээллийг эргэн харах боломжтой болдог. Энэ бүх мэдээлэл
|
||
гадны халдлагыг мөрдөхөд чухал түлхэц болно.</para>
|
||
|
||
<para>Хэдийгээр бүртгэх боломжоор хангагдсан боловч, IPF дангаараа бүртгэлийг үүсгэж
|
||
чадахгүй. Галт ханын администратор аль дүрмийн бүртгэлийг бичихийг шийдэн, тэдгээр дүрмүүдэд
|
||
log түлхүүр үгийг нэмж өгнө. Ер нь, зөвхөн deny дүрмүүдийн бүртгэл бичигддэг.</para>
|
||
|
||
<para>Бүгдийг хориглосон анхдагч дүрмийг log түлхүүр үгийн хамт дүрмүүдийнхээ
|
||
хамгийн төгсгөлд бичиж өгөх нь нилээд өргөн хэрэглэгддэг арга юм. Ингэснээр
|
||
таны дүрмүүдийн алинтай ч тохироогүй пакетуудыг мэдэх боломжтой болно.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>IPMON бүртгэл хөтлөлт</title>
|
||
|
||
<para><application>Syslogd</application> нь бүртгэлийн мэдээллийг дотор нь ангилах
|
||
өөрийн тусгай аргатай. <quote>facility</quote> ба <quote>түвшин</quote> гэсэн тусгай ангилалаар ялгадаг.
|
||
<option>-Ds</option> горимон дахь IPMON нь анхдагчаар <quote>facility</quote>-аар <literal>local0</literal>-г
|
||
хэрэглэдэг. Хэрэв хүсвэл
|
||
доорх түвшнүүдийг ашиглан бүртгэгдсэн мэдээллийг илүү ангилж болно:</para>
|
||
|
||
<screen>LOG_INFO - нэвтрүүлэх, хаахаас үл хамааран "log" түлхүүрийг үйлдэл ашиглан пакетуудыг бүртгэх.
|
||
LOG_NOTICE - нэвтэрсэн пакетуудыг бүртгэх.
|
||
LOG_WARNING - хаагдсан пакетуудыг бүртгэх.
|
||
LOG_ERR - бүртгэсэн пакетууд болон богино гэгдсэн пакетууд</screen>
|
||
|
||
<!-- XXX: "can be considered short" == "with incomplete header" -->
|
||
|
||
<para>IPFILTER-н бүх бүртгэлийн мэдээллийг <filename>/var/log/ipfilter.log</filename>
|
||
файл дотор бичихийн тулд, файл эхлээд үүссэн байх хэрэгтэй. Үүний тулд дараах
|
||
тушаалыг өгөх хэрэгтэй:</para>
|
||
|
||
<screen>&prompt.root; <userinput>touch /var/log/ipfilter.log</userinput></screen>
|
||
|
||
<para>&man.syslogd.8;-н функцуудыг <filename>/etc/syslog.conf</filename> файл доторх
|
||
тодорхойлох илэрхийллүүдээр удирдаж болно. <filename>syslog.conf</filename> файл нь
|
||
IPF мэт програмуудын үүсгэсэн системийн мэдэгдлүүдтэй <application>syslog</application>-г
|
||
ажиллахад уян хатан болгодог.</para>
|
||
|
||
<para>Дараах илэрхийллүүдийг <filename>/etc/syslog.conf</filename> файл дотор нэмж
|
||
бичнэ үү:</para>
|
||
|
||
<programlisting>local0.* /var/log/ipfilter.log</programlisting>
|
||
|
||
<para><literal>local0.*</literal> нь бүх бүртгэгдсэн мэдэгдлүүдийг
|
||
дурдсан файлд бичихийг хэлж өгч байна.</para>
|
||
|
||
<para><filename>/etc/syslog.conf</filename> файлд хийсэн өөрчлөлтүүдийг
|
||
идэвхжүүлэхийн тулд та системээ дахин ачаалах эсвэл <command>/etc/rc.d/syslogd reload</command>
|
||
тушаалыг ашиглан &man.syslogd.8; демонд <filename>/etc/syslog.conf</filename> файлыг дахин уншуулах
|
||
хэрэгтэй.</para>
|
||
|
||
<para>Дээр шинээр үүсгэсэн бүртгэлийг тойруулахын тулд
|
||
<filename>/etc/newsyslog.conf</filename> файл дотор өөрчлөлт оруулахаа мартуузай.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Бүртгэгдсэн мэдэгдлийн формат</title>
|
||
|
||
<para><command>ipmon</command>-ы үүсгэсэн мэдэгдэл зайгаар тусгаарлагдсан
|
||
өгөгдлийн талбаруудаас бүрдэнэ. Бүх мэдэгдэлд байдаг гол талбарууд гэвэл:</para>
|
||
|
||
<orderedlist>
|
||
<listitem>
|
||
<para>Пакетийг хүлээж авсан огноо.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Пакетийг хүлээж авсан цаг. Цаг, минут, секунд, бутархай секундэд (олон орны нарийвчлалтай)
|
||
харгалзан HH:MM:SS.F форматтай байна.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Пакеттай ажилласан интерфэйсийн нэр, жишээлбэл <devicename>dc0</devicename>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Дүрмийн бүлэг болон дүрмийн дугаар, жишээлбэл <literal>@0:17</literal>.</para>
|
||
</listitem>
|
||
</orderedlist>
|
||
|
||
<para>Эдгээрийг <command>ipfstat-in</command> тушаалын тусламжтай үзэж болно.</para>
|
||
|
||
<orderedlist>
|
||
<listitem>
|
||
<para>Үйлдэл: нэвтрүүлсэн бол р, хаасан бол b, богино пакет бол S,
|
||
аль ч дүрмэнд тохироогүй бол n, бүртгэх дүрэм бол L. Эдгээр тугуудыг дараах эрэмбээр харуулна:
|
||
S, p, b, n, L. Том P эсвэл B үсэг нь тухайн пакет ямар нэг дүрмээс биш, глобал тохиргооноос
|
||
хамааран бүртгэгдсэн болохыг заана.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Хаягууд. Үндсэндээ гурван талбар байна: эхлэл
|
||
хаяг болон порт (таслалаар тусгаарлагдсан), -> тэмдэг, ба очих хаяг болон порт.
|
||
Жишээ нь <literal>209.53.17.22,80 -> 198.73.220.17,1722</literal>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><literal>PR</literal>-н дараа протоколын нэр болон дугаар, жишээлбэл <literal>PR tcp</literal>.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><literal>len</literal>-ы дараа толгойн урт болон
|
||
пакетийн нийт урт, жишээлбэл <literal>len 20 40</literal>.</para>
|
||
</listitem>
|
||
</orderedlist>
|
||
|
||
<para>Хэрэв <acronym>TCP</acronym> пакет бол зураасаар эхэлж тугуудаар удаалсан
|
||
нэмэлт талбар байна. Үсгүүд болон түүнд харгалзах тугуудын талаар &man.ipf.5; заавар
|
||
хуудаснаас үзнэ үү.</para>
|
||
|
||
<para>Хэрэв ICMP пакет бол, төгсгөлд нь хоёр талбар байна.
|
||
Эхнийх нь үргэлж <quote>ICMP</quote> утгатай байна, дараагийнх нь налуу зураасаар тусгаарлагдсан
|
||
ICMP мэдэгдэл болон дэд мэдэгдлийн төрөл, жишээлбэл портод хандаж чадсангүй гэсэн мэдэгдлийн хувьд ICMP 3/3 байна.</para>
|
||
</sect2>
|
||
|
||
<sect2 id="firewalls-ipf-rules-script">
|
||
<title>Симбол орлуулалттай скриптийг үүсгэх нь</title>
|
||
|
||
<para>Зарим туршлагатай IPF хэрэглэгчид дүрмүүдийг агуулсан файл үүсгээд
|
||
түүнийгээ симбол орлуулалттай скрипт байдлаар ажиллуулах боломжтой болгон бичдэг.
|
||
Үүний гол давуу тал нь зөвхөн симбол нэрд харгалзах утгыг өөрчлөх хэрэгтэй бөгөөд, скриптийг ажиллуулахад
|
||
уг симбол орлуулалт орсон дүрэм бүр шинэ утгыг авах болно. Скриптийн хувьд,
|
||
олон дахин хэрэглэгддэг утгуудыг бичихэд симбол орлуулалтыг ашиглаж, тэдгээрийг
|
||
олон дүрмэнд орлуулж өгнө гэсэн үг юм. Дараах жишээн дээрээс харна уу.</para>
|
||
|
||
<para>Энд хэрэглэгдсэн скриптийн синтакс нь &man.sh.1;, &man.csh.1;, ба &man.tcsh.1; бүрхүүл дээр ажиллах
|
||
боломжтой.</para>
|
||
|
||
<para>Симбол орлуулалтын талбарууд нь урдаа долларын тэмдэгтэй байна: <literal>$</literal>.</para>
|
||
|
||
<para>Симбол талбарууд нь $ тэмдэг урдаа байхгүй.</para>
|
||
|
||
<para>Симбол талбарыг орлох утга нь давхар хашилтан(<literal>"</literal>) дотор байрлана.</para>
|
||
|
||
<para>Дүрмийн файлаа дараах байдалтай үүсгэж эхлэх хэрэгтэй:</para>
|
||
|
||
<programlisting>############# 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 ########################</programlisting>
|
||
|
||
<para>Байх ёстой бүх зүйлс бүгд байна. Энэ жишээн дээр дүрмүүд чухал биш,
|
||
харин симбол орлуулалт хэрхэн ажилладгыг харуулсан байна. Хэрэв дээрх жишээ
|
||
<filename>/etc/ipf.rules.script</filename> нэртэй файл дотор байсан бол, эдгээр
|
||
дүрмүүдийг дараах тушаалыг өгч дахин ачаалах боломжтой:</para>
|
||
|
||
<screen>&prompt.root; <userinput>sh /etc/ipf.rules.script</userinput></screen>
|
||
|
||
<para>Суулгагдсан симболтой дүрмийн файлыг хэрэглэхэд нэг асуудал тулгардаг:
|
||
IPF симбол орлуулалтыг ойлгохгүй, ийм скриптийг шууд уншиж чаддаггүй.</para>
|
||
|
||
<para>Дараах скриптийг хоёр аргын нэгээр хэрэглэж болно:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para><literal>cat</literal>-р эхэлсэн мөрийг ил гарга, харин
|
||
<literal>/sbin/ipf</literal>-р эхэлсэн мөрүүдийг далдал. <literal>ipfilter_enable="YES"</literal>-г
|
||
<filename>/etc/rc.conf</filename> файл дотор байрлуул, дараа нь өөрчлөлт бүрийн дараа скриптийг
|
||
ажиллуулан <filename>/etc/ipf.rules</filename> файлыг үүсгэ эсвэл өөрчлөлт оруул.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para><filename>/etc/rc.conf</filename> файл дотор <literal>ipfilter_enable="NO"</literal>
|
||
(энэ анхдагч утга) мөрийг нэмэн системийн эхлэл скриптэд IPFILTER-г идэвхгүй болго.</para>
|
||
|
||
<para>Дээрхтэй адил скриптийг өөрийн <filename class="directory">/usr/local/etc/rc.d/</filename> эхлэл хавтаст
|
||
байрлуул. Энэ скрипт <filename>ipf.loadrules.sh</filename> ч юм уу ойлгомжтой нэртэй байх ёстой.
|
||
|
||
<filename>.sh</filename> гэсэн өргөтгөлтэй байх ёстой.</para>
|
||
|
||
<programlisting>#!/bin/sh
|
||
sh /etc/ipf.rules.script</programlisting>
|
||
|
||
<para>Энэ скриптийн эрхүүд эзэмшигч <username>root</username>-н хувьд
|
||
унших, бичих, ажиллах эрхтэй байх ёстой.</para>
|
||
|
||
<screen>&prompt.root; <userinput>chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh</userinput></screen>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Одоо систем ачаалсны дараа таны IPF дүрмүүд ачаалагдсан байх болно.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>IPF Дүрмүүдийн олонлог</title>
|
||
|
||
<para>Пакет дотор агуулагдаж байгаа утгуудыг үндэслэн тухайн пакетийг
|
||
нэвтрүүлэх болон хаахыг хэлж байгаа IPF дүрмүүдийг дүрмийн олонлог гэнэ. Хостуудын
|
||
хоорондох хоёр чиглэлтэй пакет солилцоо нь сесс харилцааг бүрдүүлнэ. Галт ханын
|
||
дүрмийн олонлог нь Интернэтээс ирж байгаа пакетуудыг болон систем
|
||
буцааж тэдэнд хариу өгсөн пакетуудыг боловсруулдаг. Бүх <acronym>TCP/IP</acronym> үйлчилгээнүүд
|
||
(жишээ нь: telnet, www, mail, г.м.) өөрийн протокол болон зөвшөөрөгдсөн
|
||
(сонсож байгаа) портоороо тодорхойлогддог.
|
||
Тухайн нэг үйлчилгээ рүү зорисон пакетууд нь тусгай зориулалтаар ашиглагддаггүй
|
||
порт ашиглан эх хаягаас гарч очих хаягийн тухайн үйлчилгээний порт руу
|
||
чиглэдэг.
|
||
Дээрх бүх параметрууд (өөрөөр хэлбэл: портууд болон хаягууд) дээр үндэслэн
|
||
нэвтрүүлэх болох хаах дүрмүүдийг зохиодог.</para>
|
||
|
||
|
||
<indexterm>
|
||
<primary>IPFILTER</primary>
|
||
|
||
<secondary>Дүрмүүдтэй ажиллах дэс дараалал</secondary>
|
||
</indexterm>
|
||
<para>IPF-г анх зохиохдоо <quote>сүүлд тохирсон дүрэм дийлнэ</quote>
|
||
логикийн дагуу бүтээсэн ба зөвхөн төлөвт-бус дүрмүүдийг ашигладаг байлаа.
|
||
Цаг хугацаа өнгөрөхөд IPF илүү хөгжиж, <quote>quick</quote> тохируулга
|
||
болон төлөвт <quote>keep state</quote> тохируулгуудыг агуулах болсон нь орчин үеийн
|
||
хэрэгцээ шаардлагад илүү нийцэх болжээ.</para>
|
||
|
||
<para>Энэ бүлэгт байгаа зааврууд нь <quote>quick</quote> болон төлөвт <quote>keep state</quote>
|
||
тохируулгуудыг агуулсан дүрмүүдээс үндсэндээ бүрдсэн байгаа. Энэ бол хамааруулсан галт ханын дүрмүүдийг
|
||
бичих үндсэн арга барил юм.</para>
|
||
|
||
<warning>
|
||
<para>Галт ханын дүрмүүдтэй ажиллахдаа <emphasis>маш
|
||
анхааралтай</emphasis> байх хэрэгтэй. Зарим тохиргоо серверээс
|
||
<emphasis>бүх холбоог тань тасалж</emphasis> мэднэ. Ийм аюулаас хол
|
||
байхын тулд, галт ханын тохиргоог анхлан хийхдээ <application>ssh</application>
|
||
зэрэг алсын хандалтаас илүүтэйгээр ойрын удирдлагыг сонгоорой.</para>
|
||
</warning>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Дүрмийн синтакс</title>
|
||
|
||
<indexterm>
|
||
<primary>IPFILTER</primary>
|
||
|
||
<secondary>дүрмийн синтакс</secondary>
|
||
</indexterm>
|
||
|
||
<para>Энд дурдах дүрмийн синтакс нь орчин үеийн төлөвт
|
||
дүрмүүдийн хүрээнд, <quote>сүүлд тохирсон дүрэм дийлнэ</quote> логикоор
|
||
ажиллахаар хялбаршуулан бичигдсэн байгаа. Хуучин уламжлалт дүрмүүдийн
|
||
синтаксын бүрэн тайлбарыг &man.ipf.8; заавар хуудаснаас үзнэ үү.</para>
|
||
|
||
<para><literal>#</literal> гэсэн тэмдэгт тайлбарын эхлэлийг заах ба
|
||
дүрэм бичсэн мөрийн төгсгөлд эсвэл өөрөө бүтэн мөр байдлаар байрлана.
|
||
Хоосон мөрийг тооцохгүй.</para>
|
||
|
||
<para>Дүрмүүд нь түлхүүр үгүүдийг агуулна. Эдгээр түлхүүр үгүүд нь
|
||
тухайн мөрөнд зүүнээс баруун тийш тодорхой дэс дараагаар бичигдэнэ.
|
||
Түлхүүр үгүүд тодоор бичигдэх тул түүгээр нь ялгаж танина. Зарим түлхүүр
|
||
үгүүд дэд-тохируулгатай байна. Тэр нь өөрөө түлхүүр үг байж болохоос гадна
|
||
цааш дэд-тохируулгуудыг агуулсан байж болно. Доорх синтаксын үг бүр нь
|
||
дор байрлах мөрүүдэд задаргааны хамт байгаа.</para>
|
||
|
||
<!-- This section is probably wrong. See the OpenBSD flag -->
|
||
<!-- What is the "OpenBSD flag"? Reference please -->
|
||
|
||
<para><replaceable>ACTION IN-OUT OPTIONS SELECTION STATEFUL PROTO
|
||
SRC_ADDR,DST_ADDR OBJECT PORT_NUM TCP_FLAG
|
||
STATEFUL</replaceable></para>
|
||
|
||
<para><replaceable>ACTION</replaceable> = block | pass</para>
|
||
|
||
<para><replaceable>IN-OUT</replaceable> = in | out</para>
|
||
|
||
<para><replaceable>OPTIONS</replaceable> = log | quick | on
|
||
interface-name</para>
|
||
|
||
<para><replaceable>SELECTION</replaceable> = proto value |
|
||
source/destination IP | port = number | flags
|
||
flag-value</para>
|
||
|
||
<para><replaceable>PROTO</replaceable> = tcp/udp | udp | tcp |
|
||
icmp</para>
|
||
|
||
<para><replaceable>SRC_ADD,DST_ADDR</replaceable> = all | from
|
||
object to object</para>
|
||
|
||
<para><replaceable>OBJECT</replaceable> = IP address | any</para>
|
||
|
||
<para><replaceable>PORT_NUM</replaceable> = port number</para>
|
||
|
||
<para><replaceable>TCP_FLAG</replaceable> = S</para>
|
||
|
||
<para><replaceable>STATEFUL</replaceable> = keep state</para>
|
||
|
||
<sect3>
|
||
<title>ACTION</title>
|
||
|
||
<para>Тухайн дүрмэнд тохирч байгаа пакетийг хэрхэхийг action буюу
|
||
үйлдэл зааж өгнө. Бүх дүрэм үйлдэлтэй <emphasis>байх ёстой</emphasis>. Дараах
|
||
үйлдлүүдийг хэрэглэж болно:</para>
|
||
|
||
<para><literal>block</literal> гэдэг нь пакеттай selection буюу сонголтын
|
||
параметрүүд тохирч байвал тухайн пакетийг орхигдуулахыг зааж өгнө.</para>
|
||
|
||
<para><literal>pass</literal> гэдэг нь пакеттай selection буюу сонголтын
|
||
параметрүүд тохирч байвал тухайн пакетийг нэвтрүүлэхийг зааж өгнө.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>IN-OUT</title>
|
||
|
||
<para>Дүрэм нь орох болон гарах урсгалын алинд үйлчлэхийг
|
||
заавал зааж өгөх ёстой. Энэ нь <literal>in</literal> эсвэл <literal>out</literal> түлхүүр үгийн аль нэг нь заавал
|
||
бичигдсэн байх ёстой гэсэн үг юм. Үгүй бол синтаксын алдаа өгч, танигдахгүй.</para>
|
||
|
||
<para><literal>in</literal> гэдэг нь Интернэт уруу харж байгаа
|
||
интерфэйс дээр хүлээж авсан дотогшоо ирж байгаа пакетийн хувьд энэ дүрэм
|
||
үйлчлэхийг зааж өгнө.</para>
|
||
|
||
<para><literal>out</literal> гэдэг нь Интернэт уруу харж байгаа
|
||
интерфэйс уруу чиглэсэн гадагшаа явж байгаа пакетийн хувьд энэ дүрэм үйлчлэхийг
|
||
зааж өгнө.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>OPTIONS</title>
|
||
|
||
<note>
|
||
<para>Эдгээр options буюу тохируулгуудыг энд үзүүлсэн дэс
|
||
дарааллын дагуу хэрэглэх ёстой.</para>
|
||
</note>
|
||
|
||
<para><literal>log</literal> гэдэг нь пакеттай selection буюу сонголтын
|
||
параметрүүд тохирч байвал пакетийн толгой
|
||
<!-- XXX - xref here -->
|
||
|
||
<devicename>ipl</devicename> бүртгэл уруу (дор Бүртгэл Хөтлөх хэсэгт
|
||
заасны дагуу) бичигдэхийг зааж өгнө.</para>
|
||
|
||
<para><literal>quick</literal> гэдэг нь пакеттай selection буюу сонголтын
|
||
параметрүүд тохирч байвал энэ дүрэм нь хамгийн сүүлийн дүрэм болохыг зааж өгнө.
|
||
Ингэснээр <quote>short-circuit</quote> замыг тухайн пакетийн хувьд дараагийн
|
||
дүрмүүдийг шалгахыг болиулна. Орчин үеийн дүрэмтэй ажиллах логикийн хувьд энэ
|
||
тохируулгыг заавал хэрэглэнэ.</para>
|
||
|
||
<para><literal>on</literal> гэдэг нь selection буюу сонголтын
|
||
параметрүүдийн ажиллах интерфэйсийг зааж өгнө. Интерфэйсүүдийн нэрийг
|
||
&man.ifconfig.8;-н тусламжтай харж болно. Энэ тохируулгыг хэрэглэснээр,
|
||
тухайн дүрэм зөвхөн энэ интерфэйсээр зохих чиглэлд(in/out) явж байгаа
|
||
пакетийн хувьд үйлчилнэ. Орчин үеийн дүрэмтэй ажиллах логикийн хувьд энэ
|
||
тохируулгыг заавал хэрэглэнэ.</para>
|
||
|
||
<para>Пакетийг бүртгэхэд, түүний толгойг <acronym>IPL</acronym> пакет бүртгэх
|
||
хуурамч-төхөөрөмж уруу бичнэ. <literal>log</literal> түлхүүр үгийн дараа шууд залгаад,
|
||
дараах тодотгогчдыг(дараах дэс дарааллаар) хэрэглэж болно:</para>
|
||
|
||
<para><literal>body</literal> гэдэг нь пакетийн толгойн дараа
|
||
пакетийн агуулгын эхний 128 байтыг бүртгэхийг зааж өгнө.</para>
|
||
|
||
<para><literal>first</literal> Хэрэв <literal>log</literal>
|
||
түлхүүр үг <literal>keep state</literal> тохируулгын хамт хэрэглэгдсэн бол,
|
||
түүний араас ирэх <quote>keep state</quote>-д тохирч байгаа бүх пакетийг
|
||
биш зөвхөн энэ тохируулгыг идэвхжүүлсэн эхний пакетийг бүртгэхийн тулд
|
||
энэ тохируулгыг хэрэглэнэ.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>SELECTION</title>
|
||
|
||
<para>Энэ бүлэгт танилцуулж байгаа түлхүүр үгүүд тухайн пакетийг
|
||
дүрмэнд тохирсон эсэхийг тогтоохын тулд шалгадаг пакетийн онцлогийг
|
||
тодорхойлоход хэрэглэгддэг. Мөн subject түлхүүр үг байх ба дэд-тохируулга
|
||
түлхүүр үгийн аль нэгийг сонгон хэрэглэнэ. Дараах ерөнхий онцлогуудыг
|
||
хэрэглэх боломжтой, гэхдээ доорх дэс дарааллаар хэрэглэх хэрэгтэй:</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>PROTO</title>
|
||
|
||
<para><literal>proto</literal> гэдэг нь subject түлхүүр үг бөгөөд
|
||
өөрийн харгалзах дэд-тохируулгын хамт хэрэглэгдэх ёстой. Утга нь
|
||
ямар протокол дээр ажиллахыг хэлж өгнө. Орчин үеийн дүрэмтэй
|
||
ажиллах логикийн хувьд энэ тохируулгыг заавал хэрэглэнэ.</para>
|
||
|
||
<para><literal>tcp/udp | udp | tcp | icmp</literal> эсвэл
|
||
<filename>/etc/protocols</filename> файл дотор байгаа протоколуудыг
|
||
хэрэглэж болно. Тусгай <literal>tcp/udp</literal> гэсэн түлхүүр үг
|
||
<acronym>TCP</acronym> эсвэл <acronym>UDP</acronym> пакетийг сонгоход хэрэглэгддэг ба,
|
||
давхар эсвэл төстэй дүрмүүдийг арилгах үүднээс нэмэгдсэн байгаа.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>SRC_ADDR/DST_ADDR</title>
|
||
|
||
<para><literal>all</literal> гэсэн түлхүүр үг нь
|
||
өөр ямар ч параметргүй <quote>from any to any</quote> гэдэгтэй адил юм.</para>
|
||
|
||
<para><literal>from src to dst</literal>: <literal>from</literal> ба <literal>to</literal> гэсэн
|
||
түлхүүр үгүүд IP хаягийг шүүхэд хэрэглэгдэнэ. Дүрэмд хэрэглэхдээ эхлэл ба
|
||
очих параметрийг <emphasis>хоёуланг</emphasis> зааж өгөх ёстой. <literal>any</literal>
|
||
гэсэн тусгай түлхүүр үгийн тусламжтай бүх IP хаягийг зөвшөөрч өгч болно.
|
||
Хэрэглэх жишээ: <literal>from any to any</literal>
|
||
эсвэл <literal>from 0.0.0.0/0 to any</literal> эсвэл <literal>from any to
|
||
0.0.0.0/0</literal> эсвэл <literal>from 0.0.0.0 to any</literal> эсвэл
|
||
<literal>from any to 0.0.0.0</literal>.</para>
|
||
|
||
<para>Цэгээр тусгаарлагдсан тоо/баг хэлбэрээр хялбархан илэрхийлэх боломжгүй IP хаягуудыг
|
||
хэрэглэх боломжгүй. <filename role="package">net-mgmt/ipcalc</filename> порт ашиглан үүнийг
|
||
хялбарчилж болох юм. Нэмэлт мэдээллийг дараах вэб хуудсаар
|
||
орж үзнэ үү: <ulink url="http://jodies.de/ipcalc"></ulink>.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>PORT</title>
|
||
|
||
<para>Хэрэв эхлэл эсвэл очих порт, эсвэл хоёулангаар нь тохируулах бол
|
||
энэ нь зөвхөн <acronym>TCP</acronym> ба <acronym>UDP</acronym> пакетуудад хамаарна. Порт жишсэн дүрэм
|
||
бичихдээ <filename>/etc/services</filename> файл доторх үйлчилгээний нэр эсвэл
|
||
бүхэл тоон портын дугаарыг хэрэглэнэ. Портыг <literal>from</literal> обьекттой хамт хэрэглэх үед
|
||
энэ нь эхлэл портын дугаарыг, <literal>to</literal> обьекттой хамт хэрэглэх үед
|
||
энэ нь очих портын дугаарыг заана. Орчин үеийн дүрэмтэй
|
||
ажиллах логикийн хувьд port тохиргоог <literal>to</literal> обьекттой
|
||
заавал хамт хэрэглэнэ. Хэрэглэх жишээ: <literal>from any to any port = 80</literal></para>
|
||
|
||
<!-- XXX: Rewritten, but probably needs more changes -->
|
||
|
||
<para>Портын харьцуулалтыг төрөл бүрийн жиших операторуудыг
|
||
ашиглан хэд хэдэн аргаар хийж болно. Портын зурвасыг бас
|
||
зааж өгч болно.</para>
|
||
|
||
<para>port "=" | "!=" | "<" | ">" | "<=" | ">=" |
|
||
"eq" | "ne" | "lt" | "gt" | "le" | "ge".</para>
|
||
|
||
<para>Порт зурвасыг зааж өгөхдөө, port "<>" |
|
||
"><" гэж хэрэглэнэ.</para>
|
||
|
||
<warning>
|
||
<para>Орчин үеийн дүрэмтэй
|
||
ажиллах логикийн хувьд эхлэл болон очих порт тохируулах параметрүүдийн дараа,
|
||
дараах хоёр параметрийг заавал хэрэглэнэ.</para>
|
||
</warning>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title><acronym>TCP</acronym>_FLAG</title>
|
||
|
||
<para>Тугуудыг зөвхөн <acronym>TCP</acronym> шүүлтийн үед хэрэглэнэ.
|
||
Үсгүүдээр нь <acronym>TCP</acronym> пакетийн толгойтой таарч байгаа эсэхийг шалгах боломжит тугуудыг
|
||
үзүүлсэн байна.</para>
|
||
|
||
<para>Орчин үеийн дүрэмтэй ажиллах логик нь <literal>flags S</literal> параметрийг
|
||
tcp сесс эхлүүлэх хүсэлтийг тэмдэглэхдээ хэрэглэдэг.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>STATEFUL</title>
|
||
|
||
<para><literal>keep state</literal> гэдэг нь нэвтрүүлэх төрлийн дүрмийн хувьд
|
||
сонгох параметрүүдтэй тохирсан ямар ч пакет төлөвт шүүх нэмэлт боломжийг идэвхжүүлэх ёстойг
|
||
зааж өгнө.</para>
|
||
|
||
<note>
|
||
<para>Орчин үеийн дүрэмтэй ажиллах логикийн хувьд энэ тохируулгыг заавал
|
||
хэрэглэнэ.</para>
|
||
</note>
|
||
</sect3>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Төлөвт шүүлт</title>
|
||
|
||
<indexterm>
|
||
<primary>IPFILTER</primary>
|
||
|
||
<secondary>төлөвт шүүлт</secondary>
|
||
</indexterm>
|
||
|
||
<!-- XXX: duplicated -->
|
||
|
||
<para> Хостуудын хоорондох хоёр чиглэлтэй пакет солилцоо сесс харилцаанаас бүрддэг.
|
||
Төлөвт шүүлт нь урсгалыг сесс харилцаанаас бүрдэж буй хоёр чиглэлтэй пакет
|
||
солилцоо гэж үздэг. keep-state-г идэвхжүүлсэн үед, keep-state нь хоёр чиглэлтэй сесс харилцааны
|
||
үед солилцсон бүх пакетуудын хувьд дотоод дүрмүүдийг динамик байдлаар үүсгэдэг. Мөн
|
||
энэ нь сесс эхлүүлсэн болон хүлээн авсан хостуудын хоорондох сесс харилцаа
|
||
хоёр чиглэлтэй пакет солилцох процедуртай зохицож байгаа эсэхийг магадлах чадвартай байдаг.
|
||
Сесс харилцааны загварт зохицоогүй пакетийг хуурамч гэж үзэн хүлээж авахгүй.</para>
|
||
|
||
<para><acronym>TCP</acronym> эсвэл <acronym>UDP</acronym> сесстэй холбоотой
|
||
<acronym>ICMP</acronym> пакетуудыг keep state нэвтрүүлнэ. Тэгэхээр, keep state дүрмээр
|
||
зөвшөөрөгдсөн вэбээр хийх аялалын хариуд <acronym>ICMP</acronym> type 3 code 4 хариуг хүлээн авбал
|
||
галт хана үүнийг автоматаар нэвтрүүлнэ гэсэн үг юм. Хэрэв IPF хүлээн авсан пакетийг
|
||
идэвхтэй байгаа сессийн нэг хэсэг гэж баттай итгэж байвал, өөр протокол дээр байсан ч
|
||
пакетийг нэвтрүүлнэ.</para>
|
||
|
||
<para>Үүний цаана юу болох вэ гэвэл:</para>
|
||
|
||
<para>Интернэт уруу холбогдсон интерфэйсээр гарч байгаа пакетуудыг
|
||
хамгийн түрүүнд динамик төлвийн хүснэгтэнд шалгана. Хэрэв тухайн пакет ямар нэг
|
||
идэвхтэй байгаа сесс харилцаанд оролцож байгаа зөвшөөрөгдсөн дараагийн пакет
|
||
байх юм бол, галт ханаар нэвтрүүлэх ба динамик төлвийн хүснэгтэн дэх
|
||
сесс харилцааны төлөв шинэчлэгдэнэ. Идэвхтэй сесс харилцаанд хамааралгүй
|
||
пакетуудыг гадагшаа урсгалын дүрмээр шалгах болно.</para>
|
||
|
||
<para>Интернэт уруу холбогдсон интерфэйсээс ирж байгаа пакетуудыг
|
||
хамгийн түрүүнд динамик төлвийн хүснэгтэнд шалгана. Хэрэв тухайн пакет ямар нэг
|
||
идэвхтэй байгаа сесс харилцаанд оролцож байгаа зөвшөөрөгдсөн дараагийн пакет
|
||
байх юм бол, галт ханаар нэвтрүүлэх ба динамик төлвийн хүснэгтэн дэх
|
||
сесс харилцааны төлөв шинэчлэгдэнэ. Идэвхтэй сесс харилцаанд хамааралгүй
|
||
пакетуудыг дотогшоо урсгалын дүрмээр шалгах болно.</para>
|
||
|
||
<para>Харилцаа дуусахад динамик төлвийн хүснэгтээс зохих бичлэг
|
||
устгагдана.</para>
|
||
|
||
<para>Төлөвт шүүлтийн тусламжтайгаар та шинэ сесс зөвшөөрөх/хаах
|
||
үйл ажиллагаан дээр төвлөрч ажиллаж чадна. Хэрэв шинэ сесс зөвшөөрөгдсөн бол
|
||
түүний дараагийн бүх пакетуудыг автоматаар нэвтрүүлэх ба хуурамч пакетууд
|
||
автоматаар буцаагдана. Хэрэв шинэ сесс хаагдсан бол
|
||
түүний дараагийн ямар ч пакет нэвтэрч чадахгүй. Төлөвт шүүлт нь
|
||
сүүлийн үеийн халдлагуудад ашиглагдаж байгаа аргуудын эсрэг хамгаалах
|
||
чадвартай, техникийн хувьд өндөр түвшний шүүлт хийх чадвартай юм.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<!-- XXX: This section needs a rewrite -->
|
||
|
||
<title>Хамааруулсан дүрмийн олонлогийн жишээ</title>
|
||
|
||
<para>Дараах дүрмийн олонлог нь аюулгүй байдлыг маш сайн хангасан, хамааруулсан
|
||
галт ханын дүрмүүдийг хэрхэн бичих жишээ юм. Хамааруулсан галт хана нь зөвхөн <literal>pass</literal> дүрмүүдэд
|
||
тохирсон үйлчилгээг зөвшөөрч, бусдыг бүгдийг хаана.
|
||
Бусад машинуудыг хамгаалах ёстой галт хананууд буюу <quote>сүлжээний галт хананууд</quote>
|
||
нь багаар бодоход хоёр интерфэйстэй байх ёстой бөгөөд ерөнхийдөө
|
||
нэг талд (<acronym>LAN</acronym>) итгэж нөгөөд (Интернэт) итгэхгүй байхаар
|
||
тохируулагдсан байдаг. Мөн ажиллаж байгаа системээ зөвхөн хамгаалахаар
|
||
галт хана тохируулагдсан байж болох бөгөөд ийм галт ханыг <quote>хостын галт хана</quote>
|
||
гэх бөгөөд энэ нь итгэлгүй сүлжээн дэх серверүүдийн хувьд ялангуяа
|
||
тохиромжтой байдаг.</para>
|
||
|
||
<para>&os;-г оролцуулаад бүх &unix; төрлийн систем нь үйлдлийн систем дэх
|
||
дотоод харилцаандаа <devicename>lo0</devicename> интерфэйс болон <hostid role="ipaddr">127.0.0.1</hostid>
|
||
гэсэн IP хаягийг хэрэглэхээр бүтээгдсэн байдаг. Галт ханын дүрмүүд нь дотооддоо хэрэглэж байгаа
|
||
эдгээр пакетуудыг чөлөөтэй нэвтрүүлэх дүрмүүдийг агуулсан байх ёстой.</para>
|
||
|
||
<para>Интернэттэй холбогдож байгаа интерфэйс дээр
|
||
Интернэт уруу гарч байгаа болон Интернэтээс ирж байгаа хандалтыг удирдах
|
||
болон хянах дүрмүүдийг байрлуулна. Энэ нь таны PPP <devicename>tun0</devicename>
|
||
интерфэйс эсвэл таны DSL эсвэл кабель модемд холбогдсон NIC байж болно.</para>
|
||
|
||
<para>Галт ханын цаана байгаа хувийн сүлжээнд нэг болон түүнээс дээш тооны NIC-ууд
|
||
холбогдсон тохиолдолд, тэдгээр интерфэйсүүдийн хувьд тэдгээр LAN интерфэйсүүдийн нэгээс
|
||
нөгөө рүү ба/эсвэл гадагш гарсан пакетуудыг чөлөөтэй нэвтрүүлэх дүрмийг агуулсан байх ёстой.</para>
|
||
|
||
<para>Дүрмүүд гурван үндсэн хэсэгт хуваагдан зохион байгуулагдсан байх
|
||
ёстой: эхлээд итгэлтэй интерфэйсүүд, дараа нь нийтийн гадагшаа интерфэйс, төгсгөлд нь
|
||
нийтийн итгэлтэй дотогшоо интерфэйс.</para>
|
||
|
||
<para>Нийтийн интерфэйс хэсэгт байгаа дүрмүүд тухайн интерфэйс болон чиглэлийн
|
||
хувьд хамгийн олон тохиолддог дүрмүүд нь хамгийн түрүүнд, цөөн тохиолддог дүрмүүдээс өмнө байхаар,
|
||
хаах болох бүртгэх дүрмүүд нь хамгийн сүүлд байхаар бичигдсэн байна.</para>
|
||
|
||
<para>Дараах жишээн дээрх Гадагшаа хэсэг нь Интернэт хандалтыг зөвшөөрч өгөх
|
||
үйлчилгээг тодорхойлох сонголтын утгуудыг агуулсан зөвхөн <literal>pass</literal> дүрмүүдээс бүрдэж байна.
|
||
Бүх дүрмүүд <literal>quick</literal>, <literal>on</literal>,
|
||
<literal>proto</literal>, <literal>port</literal>, болон <literal>keep state</literal> тохируулгуудыг агуулсан байгаа.
|
||
<literal>proto tcp</literal> дүрмүүд нь төлөвт байдлыг идэвхжүүлж байгаа пакетийг тодорхойлох байдлаар,
|
||
сесс эхлүүлэх хүсэлтийг тодорхойлох зорилгоор <literal>flag</literal> тохируулгыг агуулсан байна.</para>
|
||
|
||
<para>Дотогшоо хэсэгт эхлээд хүсээгүй пакетуудыг хаах дүрмүүдийг бичсэн байна.
|
||
Энэ нь хоёр өөр шалтгаантай. Эхнийх нь хортой пакетуудын зарим нь зөвшөөрсөн
|
||
урсгалын хэсэг байж болох юм. <literal>allow</literal> дүрэмд таарч байгаа
|
||
тэр хэсэг дээр тулгуурлан эдгээр пакетуудыг зөвшөөрөлгүйгээр
|
||
хаах ёстой. Хоёр дахь шалтгаан нь тухайн хэсэгт байгаа хамгийн сүүлийн
|
||
дүрмээр хааж бүртгэхийн оронд тэдгээр мэдэгдэж байгаа сонирхолгүй
|
||
татгалзалтуудыг чимээгүйгээр хааж болох юм. Хэсэг бүр дэх
|
||
сүүлийн дүрэм бүх пакетуудыг хааж бүртгэдэг бөгөөд таны систем рүү
|
||
халдаж байгаа хүмүүсийг шүүхэд шаардагдах баримтыг бий болгоход
|
||
ашиглагдаж болох юм.</para>
|
||
|
||
<para>Өөр нэг санаа тавин тэмдэглэн хэлэх зүйл бол хүсээгүй урсгалын хариуд ямар ч хариу явуулахгүй
|
||
байх явдал юм. Буруу пакетуудыг зүгээр орхиж тэд алга болох ёстой юм.
|
||
Ингэснээр халдлага явуулагч түүний явуулсан пакетууд
|
||
таны системд хүрсэн эсэх талаар юу ч мэдэхгүй үлдэх болно. Таны системийн талаар хэдий хэр бага мэднэ,
|
||
тэд ямар нэг муу зүйл хийж чадах хүртэл төдий чинээ урт хугацаа зарцуулна гэсэн үг юм.
|
||
|
||
<literal>log first</literal> тохируулгыг агуулах дүрмүүд
|
||
анхны удаа таарахад бүртгэж авдаг. Энэ тохируулга нь
|
||
жишээ <literal>nmap OS fingerprint</literal> дүрэмд орсон
|
||
байдаг. <filename role="package">security/nmap</filename> хэрэгслийг
|
||
халдагчид таны серверийн үйлдлийн системийг танихын тулд ихэвчлэн
|
||
ашигладаг.</para>
|
||
|
||
<para><literal>log first</literal> дүрмийн хувьд бүртгэлийн мэдээлэл
|
||
бүртгэгдэх бүрт <command>ipfstat -hio</command> тушаалаар энэ дүрэм хэдэн
|
||
удаа тохирсон байгааг шалгаж болно. Ихээхэн хэмжээний бүртгэлийн
|
||
мэдээлэл нь таныг халдлагад өртөж байгааг ихэвчлэн илэрхийлдэг.</para>
|
||
|
||
<para><filename>/etc/services</filename> файлыг ашиглан мэдэгдэхгүй
|
||
портын дугаарыг хайж олж болох юм. Мөн
|
||
<ulink url="http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers"></ulink> хаягаар тухайн
|
||
порт ямар зориулалтаар ашиглагддагийг орж шалгаж болох юм.</para>
|
||
|
||
<para>Троянуудын хэрэглэдэг портын дугааруудыг
|
||
<ulink url="http://www.sans.org/security-resources/idfaq/oddports.php"></ulink> хаягаар орж шалгаарай.</para>
|
||
|
||
<para>Дараах дүрмийн олонлог нь ажиллаж байгаа систем дээр шалгагдсан
|
||
аюулгүй байдлыг бүрэн хангасан хамааруулсан галт ханын дүрмийн олонлог юм.
|
||
Үүнийг өөрийн системд хялбарханаар тааруулж болох юм.
|
||
Зөвшөөрөхийг хүсэхгүй байгаа үйлчилгээнүүдийн хувьд харгалзах
|
||
<literal>pass</literal> дүрмийг далдлаарай.</para>
|
||
|
||
<para>Хүсээгүй мэдээллийг бүртгэхгүйн тулд дотогшоо хэсэгт
|
||
<literal>block</literal> дүрэм нэмж бичээрэй.</para>
|
||
|
||
<para>Дүрэм бүрт байгаа <devicename>dc0</devicename> гэсэн интерфэйсийн нэрийн оронд
|
||
таны системийг Интернэт уруу холбож байгаа NIC картны интерфэйсийн нэрээр сольж тавиарай.
|
||
Хэрэглэгчийн PPP-н хувьд, энэ нь <devicename>tun0</devicename> байна.</para>
|
||
|
||
<para>Дараах илэрхийллүүдийг <filename>/etc/ipf.rules</filename> дотор бичих хэрэгтэй:</para>
|
||
|
||
<programlisting>#################################################################
|
||
# 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)
|
||
# Match session start requests originating from behind the
|
||
# firewall on the private network
|
||
# or from this gateway server destined 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 IP<acronym>NAT</acronym> 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 ssh/sftp/scp (telnet/rlogin/FTP replacements)
|
||
# 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 insecure Telnet
|
||
pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state
|
||
|
||
# Allow out FreeBSD CVSup
|
||
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 from LAN 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 implements the default block
|
||
block out log first quick on dc0 all
|
||
|
||
#################################################################
|
||
# Interface facing Public Internet (Inbound Section)
|
||
# Match packets originating from the public Internet
|
||
# destined 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 avoids filling up disk with Denial of Service logs.
|
||
# This rule implements the default block.
|
||
block in log first quick on dc0 all
|
||
################### End of rules file #####################################</programlisting>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title><acronym>NAT</acronym></title>
|
||
|
||
<indexterm><primary>NAT</primary></indexterm>
|
||
|
||
<indexterm>
|
||
<primary>IP маскарад</primary>
|
||
|
||
<see>NAT</see>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>сүлжээний хаягийн хөрвүүлэлт</primary>
|
||
|
||
<see>NAT</see>
|
||
</indexterm>
|
||
|
||
<para><acronym>NAT</acronym> нь <emphasis>Network Address Translation</emphasis> буюу
|
||
Сүлжээний хаягийн Хөрвүүлэлтийн товчлол юм. &linux;-н талаар ойлголттой хүмүүсийн хувьд,
|
||
энэ ойлголтыг IP маскарад гэж нэрлэдэг; <acronym>NAT</acronym> ба IP маскарад
|
||
нь нэг зүйл юм. IPF <acronym>NAT</acronym>-н бидэнд олгож байгаа олон зүйлүүдийн нэг бол
|
||
галт ханын цаана байгаа Local Area Network буюу Ойрын Зайн Сүлжээ(LAN)-н хувьд
|
||
ISP-с оноож өгсөн ганц IP хаягийг Интернэтэд хуваан хэрэглэх юм.</para>
|
||
|
||
<para>Ингэх ямар шаардлага байнаа гэж та гайхан асуух байх.
|
||
ISP-ууд өөрийн ашгийн-бус хэрэглэгчиддээ ихэвчлэн динамик IP хаяг оноодог.
|
||
Динамик гэдэг нь таныг ISP руу залган нэвтрэн орох болгонд, кабель эсвэл
|
||
DSL модемтой хэрэглэгчдийн хувьд модемоо асааж унтраах болгонд
|
||
өөр өөр IP хаяг онооно гэсэн үг юм. Таны системийг Интернэтэд танихад
|
||
энэ динамик IP хаягийг ашигладаг.</para>
|
||
|
||
<para>Та гэртээ таван PC-тэй бөгөөд бүгд Интернэт уруу гардаг байх хэрэгтэй гэж бодъё.
|
||
Тэгвэл та PC тус бүрт тусад нь эрх худалдан авч, таван утасны үзүүртэй байх хэрэгтэй болно.</para>
|
||
|
||
<para><acronym>NAT</acronym>-н тусламжтай ISP-гаас зөвхөн ганцхан эрх
|
||
шаардлагатай. Бусад дөрвөн PC-гээ switch буюу шилжүүлэгч уруу холбож, харин switch-ээ таны LAN-нд гарц байдлаар ажиллах
|
||
&os; системийн NIC руу залгана. <acronym>NAT</acronym> нь LAN-д байгаа бүх PC-ны хувьд хувийн IP
|
||
хаягийг ганцхан гадаад IP хаяг уруу автоматаар хөрвүүлэх болно. <acronym>NAT</acronym> нь эргэж
|
||
ирж байгаа пакетуудын хувьд эсрэг хөрвүүлэлтийг мөн хийнэ.</para>
|
||
|
||
<para><acronym>NAT</acronym> хийгдсэн хувийн LAN-уудад зориулж бүлэг IP хаягийг тусгайлан
|
||
гаргасан байдаг. RFC 1918 стандартад зааснаар бол, дараах бүлэг IP-г хувийн сүлжээндээ ашиглах
|
||
боломжтой, эдгээр IP хэзээ ч гадаад Интернэт уруу гарахгүй болно:</para>
|
||
|
||
<informaltable frame="none" pgwide="1">
|
||
<tgroup cols="3">
|
||
<colspec colwidth="1*"/>
|
||
|
||
<colspec colwidth="1*"/>
|
||
|
||
<colspec colwidth="1*"/>
|
||
|
||
<tbody>
|
||
<row>
|
||
<entry>Эхлэх IP <hostid role="ipaddr">10.0.0.0</hostid></entry>
|
||
|
||
<entry>-</entry>
|
||
|
||
<entry>Төгсөх IP <hostid role="ipaddr">10.255.255.255</hostid></entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry>Эхлэх IP <hostid role="ipaddr">172.16.0.0</hostid></entry>
|
||
|
||
<entry>-</entry>
|
||
|
||
<entry>Төгсөх IP <hostid role="ipaddr">172.31.255.255</hostid></entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry>Эхлэх IP <hostid role="ipaddr">192.168.0.0</hostid></entry>
|
||
|
||
<entry>-</entry>
|
||
|
||
<entry>Төгсөх IP <hostid role="ipaddr">192.168.255.255</hostid></entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>IP<acronym>NAT</acronym></title>
|
||
|
||
<indexterm>
|
||
<primary>NAT</primary>
|
||
|
||
<secondary>ба IPFILTER</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm><primary><command>ipnat</command></primary></indexterm>
|
||
|
||
<para><acronym>NAT</acronym> дүрмүүдийг <command>ipnat</command> тушаалын
|
||
тусламжтай ачаална. Ихэвчлэн <acronym>NAT</acronym> дүрмүүд <filename>/etc/ipnat.rules</filename>
|
||
файл дотор байрлана. Дэлгэрэнгүйг &man.ipnat.8; хэсгээс үзнэ үү.</para>
|
||
|
||
<para><acronym>NAT</acronym> ажиллаж эхэлсний дараа <acronym>NAT</acronym> дүрмүүдэд
|
||
өөрчлөлт оруулах шаардлагатай бол NAT дүрмүүд байгаа файл дотор өөрчлөлтийг хийсний дараа,
|
||
одоо хэрэглэгдэж байгаа <acronym>NAT</acronym> дүрмүүдийг устгаж, хөрвүүлэгч хүснэгтийг цэвэрлэхийн
|
||
тулд <command>ipnat</command> тушаалыг <option>-CF</option> тугийн хамт ажиллуулах хэрэгтэй.</para>
|
||
|
||
<para>Харин <acronym>NAT</acronym> дүрмүүдийг дахин ачаалахдаа тушаалыг
|
||
дараах байдалтай өгөх хэрэгтэй:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipnat -CF -f /etc/ipnat.rules</userinput></screen>
|
||
|
||
<para><acronym>NAT</acronym>-н талаар зарим статистикийг харъя гэвэл дараах
|
||
тушаалыг ашиглана:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipnat -s</userinput></screen>
|
||
|
||
<para><acronym>NAT</acronym> хүснэгтийн одоо ашиглаж байгаа оноолтын жагсаалтыг
|
||
харахын тулд дараах тушаалыг ашиглана:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipnat -l</userinput></screen>
|
||
|
||
<para>Вербос буюу хэр зэрэг харуулах горимыг нээхийн тулд, дүрэмтэй ажиллах болон идэвхтэй
|
||
байгаа дүрмүүдийн хүснэгтийг харахын тулд:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipnat -v</userinput></screen>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>IP<acronym>NAT</acronym> Дүрмүүд</title>
|
||
|
||
<para><acronym>NAT</acronym> дүрмүүд нь маш уян хатан бөгөөд хэрэглэгчдийн
|
||
хэрэгцээг хангах олон зүйлүүдийг хийж чадна.</para>
|
||
|
||
<para>Энд үзүүлсэн дүрмийн синтаксыг ашгийн-бус орчинд ихэвчлэн хэрэглэгддэг
|
||
дүрмүүдэд зориулан хялбаршуулсан байгаа. Дүрмийн синтаксын бүрэн тайлбарыг &man.ipnat.5;
|
||
заавар хуудаснаас үзнэ үү.</para>
|
||
|
||
<para><acronym>NAT</acronym> дүрмийн синтакс дараах байдалтай байна:</para>
|
||
|
||
<programlisting>map <replaceable>IF</replaceable> <replaceable>LAN_IP_RANGE</replaceable> -> <replaceable>PUBLIC_ADDRESS</replaceable></programlisting>
|
||
|
||
<para>Дүрэм нь <literal>map</literal> гэсэн түлхүүр үгээр эхэлнэ.</para>
|
||
|
||
<para><replaceable>IF</replaceable>-г гадаад интерфэйсээр сольж тавьна.</para>
|
||
|
||
<para><replaceable>LAN_IP_RANGE</replaceable> нь танай дотоод хэрэглэгчийн
|
||
хэрэглэж буй IP хаяглалтыг заана, ихэвчлэн <hostid role="ipaddr">192.168.1.0/24</hostid>
|
||
гэсэн маягтай байна.</para>
|
||
|
||
<para><replaceable>PUBLIC_ADDRESS</replaceable> нь гадаад IP
|
||
байж болно эсвэл <replaceable>IF</replaceable>-д оноосон IP хаягийг
|
||
хэрэглэхийг заасан <literal>0/32</literal> гэсэн тусгай түлхүүр үг байж болно.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title><acronym>NAT</acronym> хэрхэн ажилладаг вэ</title>
|
||
|
||
<para>Гадаад очих хаягтай пакет галт хана дээр LAN-с хүрэлцэн ирнэ.
|
||
Эхлээд гадагшаа шүүлтийн дүрмүүдээр гарна, дараа нь <acronym>NAT</acronym>-н
|
||
ээлж ирэх ба өөрийн дүрмүүдийг дээрээс доош шалгаж эхэлнэ. Хамгийн эхэнд тохирсон нь
|
||
дийлнэ. <acronym>NAT</acronym> өөрийн дүрэм бүрийг пакетийн интерфэйсийн нэр болон
|
||
эхлэл хаягаар тулгаж шалгана. Пакетийн интерфэйсийн нэр <acronym>NAT</acronym>
|
||
дүрэмтэй тохирвол пакетийн эхлэл IP хаяг (өөрөөр хэлбэл хувийн LAN IP хаяг)
|
||
<acronym>NAT</acronym> дүрмийн сумны зүүн талд зааж өгсөн
|
||
IP хаягийн зурвас дотор байгаа эсэхийг шалгана. Хэрэв энэ тохирвол
|
||
пакетийн эхлэл хаягийг <literal>0/32</literal> түлхүүр үгийн тусламжтай
|
||
олж авсан гадаад IP хаягаар сольж бичнэ. <acronym>NAT</acronym>
|
||
өөрийн дотоод <acronym>NAT</acronym> хүснэгтэнд бичлэг нэмэх ба энэ нь
|
||
пакет Интернэтээс буцаж ирэхэд түүнийг буцаан хувийн IP хаяг уруу нь хөрвүүлэн,
|
||
цааш шүүлтийн дүрмүүдээр оруулах боломжийг олгоно.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>IP<acronym>NAT</acronym>-г идэвхжүүлэх</title>
|
||
|
||
<para>IP<acronym>NAT</acronym>-г идэвхжүүлэхийн тулд эдгээр илэрхийллүүдийг
|
||
<filename>/etc/rc.conf</filename> дотор нэмж бичнэ.</para>
|
||
|
||
<para>Өөрийн машиныг интерфэйсүүдийн хооронд пакетуудыг чиглүүлдэг
|
||
болгохын тулд:</para>
|
||
|
||
<programlisting>gateway_enable="YES"</programlisting>
|
||
|
||
<para>Систем ачаалахад IP<acronym>NAT</acronym>-г автоматаар ачаалдаг
|
||
болгохын тулд:</para>
|
||
|
||
<programlisting>ipnat_enable="YES"</programlisting>
|
||
|
||
<para>IP<acronym>NAT</acronym>-н дүрмүүдийг хаанаас ачаалахыг зааж өгөхдөө:</para>
|
||
|
||
<programlisting>ipnat_rules="/etc/ipnat.rules"</programlisting>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Маш том LAN-д зориулсан <acronym>NAT</acronym></title>
|
||
|
||
<para>LAN-даа олон тооны PC-тэй сүлжээний хувьд эсвэл нэгээс олон
|
||
LAN-тай сүлжээний хувьд, энэ олон хувийн IP хаягуудыг нэг гадаад IP хаяг уруу
|
||
нийлүүлэх үйл явцад <acronym>NAT</acronym> хийгдсэн олон LAN PC дээр ижил портын
|
||
дугаар олон дахин хэрэглэгдсэнээс мөргөлдөөн үүсэх гэх мэт нөөцтэй холбоотой асуудал гардаг.
|
||
Нөөцтэй холбоотой энэ асуудлаас гарахын тулд дараах хоёр арга зам байдаг.</para>
|
||
|
||
<sect3>
|
||
<title>Хэрэглэх портуудыг оноох</title>
|
||
|
||
<!-- What does it mean ? Is there something missing ?-->
|
||
<!-- XXXBLAH <- Apparently you can't start a sect
|
||
with a <programlisting> tag ?-->
|
||
|
||
<para>Энгийн NAT дүрэм дараах байдалтай байна:</para>
|
||
|
||
<programlisting>map dc0 192.168.1.0/24 -> 0/32</programlisting>
|
||
|
||
<para>Дээрх дүрмэнд пакет IP<acronym>NAT</acronym>-р дайрч өнгөрөхөд
|
||
пакетийн эхлэл порт өөрчлөгдөхгүй. <literal>portmap</literal> гэсэн түлхүүр үгийг нэмсэнээр
|
||
IP<acronym>NAT</acronym>-ийг заасан зурвас дахь зөвхөн эхлэл портуудыг ашиглахаар зааж өгнө.
|
||
Жишээ нь, дараах дүрэм IP<acronym>NAT</acronym>-г эхлэл порт хаягийг
|
||
тухайн зурвас дотор байхаар өөрчлөхийг зааж өгч байна.</para>
|
||
|
||
<programlisting>map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000</programlisting>
|
||
|
||
<para>Дээр нь бид <literal>auto</literal> түлхүүр үгийн тусламжтай
|
||
аль портуудыг ашиглах боломжтой байгааг өөрөө тодорхойлохыг зааж өгч болно:</para>
|
||
|
||
<programlisting>map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto</programlisting>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>Гадаад хаягийн цөөрмийг хэрэглэх</title>
|
||
|
||
<para>Маш том LAN-уудын хувьд дэндүү олон LAN хаягуудыг нэг гадаад
|
||
хаягт оноох нь боломжгүй болох үе ирдэг. Хэрэв бүлэг гадаад IP сул байгаа бол,
|
||
эдгээр IP хаягуудыг <quote>цөөрөм</quote> байдлаар ашиглаж болох ба,
|
||
IP<acronym>NAT</acronym> эдгээрээс нэгийг сонгон авч гадагшаа явж байгаа
|
||
пакетийн хаягт оноох байдлаар хэрэглэх болно.</para>
|
||
|
||
<para>Жишээ нь, доор үзүүлсэн шиг бүх пакетуудыг ганц
|
||
гадаад IP-д оноохын оронд:</para>
|
||
|
||
<programlisting>map dc0 192.168.1.0/24 -> 204.134.75.1</programlisting>
|
||
|
||
<para>гадаад IP хаягийн зурвасыг сүлжээний хуваалтын хамт зааж өгч болно:</para>
|
||
|
||
<programlisting>map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0</programlisting>
|
||
|
||
<para>эсвэл CIDR тэмдэглэгээг хэрэглэж болно:</para>
|
||
|
||
<programlisting>map dc0 192.168.1.0/24 -> 204.134.75.0/24</programlisting>
|
||
</sect3>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>Портын дахин чиглүүлэлт</title>
|
||
|
||
<para>LAN дотор вэб сервер, цахим шуудангийн сервер, өгөгдлийн
|
||
сангийн сервер болон DNS серверийг өөр өөр PC дээр тараан ажиллуулах нь
|
||
түгээмэл байдаг. Энэ тохиолдолд эдгээр серверээс гарч байгаа урсгал
|
||
мөн <acronym>NAT</acronym> хийгдсэн байх ёстой. Гэхдээ гаднаас ирж буй
|
||
урсгалыг зөв LAN PC уруу дахин чиглүүлэх арга зам байх хэрэгтэй болно.
|
||
Энэ асуудлыг шийдэхийн тулд IP<acronym>NAT</acronym> нь дахин чиглүүлэлт хийх
|
||
<acronym>NAT</acronym> нэмэлт боломжийг олгодог. Вэб сервер
|
||
<hostid role="ipaddr">10.0.10.25</hostid> гэсэн LAN хаягтай бөгөөд
|
||
<hostid role="ipaddr">20.20.20.5</hostid> гэсэн ганц гадаад IP-тай
|
||
байлаа гэж бодъё. Тэгвэл дүрмийг дараах байдалтай:</para>
|
||
|
||
<programlisting>rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80</programlisting>
|
||
|
||
<para>эсвэл:</para>
|
||
|
||
<programlisting>rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80</programlisting>
|
||
|
||
<para>эсвэл гаднаас DNS хүсэлтүүд хүлээн авдаг
|
||
<hostid role="ipaddr">10.0.10.33</hostid> гэсэн хаягтай LAN DNS Серверийн хувьд:</para>
|
||
|
||
<programlisting>rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udp</programlisting>
|
||
|
||
<para>гэж бичих байсан.</para>
|
||
</sect2>
|
||
|
||
<sect2>
|
||
<title>FTP ба <acronym>NAT</acronym></title>
|
||
|
||
<para>FTP-г Интернэт одоогийнх шиг байхаас өмнөх үе, их сургуулиуд
|
||
түрээсийн шугамаар хоорондоо холбогдож, судлаач эрдэмтэд хоорондоо файл солилцохын тулд
|
||
FTP-г ашигладаг байх үес үлдсэн үлэг гүрвэл гэж хэлж болох юм. Тэр үед
|
||
өгөгдлийн аюулгүй байдлын талаар огт анхаардаггүй байлаа. Цаг хугацаа өнгөрөхөд
|
||
FTP протоколыг шинээр гарч ирж байгаа Интернэтийн гол нуруу сүлжээнд хэрэглэх болсон ба
|
||
түүний хэрэглэгчийн нэр, нууц үгийг цэвэр текст хэлбэрээр дамжуулдаг байдал нь
|
||
хэзээ ч өөрчлөгдөөгүй бөгөөд орчин үеийн аюулгүй байдлын шаардлагад
|
||
нийцэхгүй болсон билээ. FTP нь active буюу идэвхтэй, passive буюу идэвхгүй гэсэн хоёр
|
||
горимд ажилладаг. Өгөгдлийн сувгийг хэрхэн ашиглаж байгаа дээр гол ялгаа нь гардаг.
|
||
Өгөгдлийн сувгийг эхэлж ftp сесс хүсэгч нь авдаг тул идэвхгүй горимд ажиллах
|
||
нь аюулгүй байдлыг илүүтэйгээр хангана. FTP-н талаар илүү сайн тайлбарыг болон түүний
|
||
горимуудын талаар <ulink url="http://www.slacksite.com/other/ftp.html"></ulink> хаягаар үзнэ үү.</para>
|
||
|
||
<sect3>
|
||
<title>IP<acronym>NAT</acronym> Дүрмүүд</title>
|
||
|
||
<para>IP<acronym>NAT</acronym> нь дотроо <acronym>NAT</acronym>
|
||
оноолт дүрэмд тодорхойлж өгөх боломжтой тусгай FTP прокси тохируулгыг
|
||
агуулсан байдаг. Энэ нь идэвхтэй болон идэвхгүй FTP сесс эхлүүлэх хүсэлтэд
|
||
оролцож байгаа бүх гадагшаа чиглэлтэй FTP пакетийг хянаж чадна. Мөн
|
||
өгөгдлийн сувагт үнэхээр хэрэглэгдэж байгаа порт дугаарыг агуулсан түр зуурын
|
||
шүүлтийн дүрмүүдийг динамикаар үүсгэж чадна. Ийм байдлаар FTP-с болж үүсдэг
|
||
дээд хэсгийн портуудыг өргөн зурвасаар нээх эрсдэлээс галт ханыг хамгаалж байгаа юм.</para>
|
||
|
||
<para>Доорх дүрэм нь дотоод LAN-н бүх урсгалыг зохицуулна:</para>
|
||
|
||
<programlisting>map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp</programlisting>
|
||
|
||
<para>Доорх дүрэм гарцаас ирж буй FTP урсгалыг зохицуулна:</para>
|
||
|
||
<programlisting>map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp</programlisting>
|
||
|
||
<para>Доорх дүрэм дотоод LAN-с ирж буй бүх FTP-н биш урсгалыг зохицуулна:</para>
|
||
|
||
<programlisting>map dc0 10.0.10.0/29 -> 0/32</programlisting>
|
||
|
||
<para>FTP оноолтын дүрэм нь бидний ердийн оноолтын дүрмүүдийн өмнө бичигдэнэ.
|
||
Бүх пакетийг хамгийн дээр бичигдсэн дүрмээс эхлэн шалгана.
|
||
Интерфэйсийн нэр тохирвол дотоод LAN эхлэл IP хаяг, дараа нь FTP пакет эсэхийг
|
||
шалгана. Хэрэв бүгд тохирвол, тусгай FTP прокси эдгээр FTP сесс пакетуудыг
|
||
<acronym>NAT</acronym> хийхээс гадна гадагш нь болон дотогш нь нэвтрүүлэх
|
||
түр зуурын шүүлтийн дүрмийг үүсгэнэ. FTP-н биш бусад бүх LAN пакетууд эхний
|
||
дүрмэнд тохирохгүй тул гуравдугаар дүрэм уруу шилжин дахин шалгагдана. Интерфэйс болон
|
||
эхлэл IP тохирох тул <acronym>NAT</acronym> хийгдэнэ.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>IP<acronym>NAT</acronym> FTP Шүүлтийн Дүрмүүд</title>
|
||
|
||
<para><acronym>NAT</acronym> FTP прокси ашиглаж байгаа тохиолдолд
|
||
FTP-н хувьд ганцхан шүүлтийн дүрэм хэрэгтэй.</para>
|
||
|
||
<para>FTP Прокси байхгүй бол дараах гурван дүрмийг хэрэглэнэ:</para>
|
||
|
||
<programlisting># 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</programlisting>
|
||
</sect3>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<sect1 id="firewalls-ipfw">
|
||
<title>IPFW</title>
|
||
|
||
<indexterm>
|
||
<primary>галт хана</primary>
|
||
|
||
<secondary>IPFW</secondary>
|
||
</indexterm>
|
||
|
||
<para>IPFIREWALL (<acronym>IPFW</acronym>) нь &os;-ийн хандиваар &os;-ийн сайн дурын гишүүдийн бүтээсэн,
|
||
тэдний эрх мэдэлд байдаг галт ханын програм юм. Энэ нь хуучин уламжлалт төлөвт
|
||
дүрмүүдийг хэрэглэдэг бөгөөд Simple Stateful logiс буюу Хялбар Төлөвт логикийг
|
||
бий болгохын тулд уламжлалт дүрэм бичих техникийг хэрэглэдэг.</para>
|
||
|
||
<para>Стандарт &os; суулгац дахь IPFW-н хялбар дүрмийн олонлог
|
||
(<filename>/etc/rc.firewall</filename> болон <filename>/etc/rc.firewall6</filename>
|
||
файл дотор байрлана) нь нилээд хялбар бөгөөд өөрт тохируулан засварласны дараа хэрэглэхээр бодолцон
|
||
бичигдсэн байдаг. Жишээн дээр ихэнх суулгацад тохиромжтой төлөвт шүүлтийг хэрэглээгүй байгаа.
|
||
Тиймээс энэ хэсэгт энэ жишээг хэрэглэхгүй болно.</para>
|
||
|
||
<para>IPFW-н төлөвт дүрмийн синтакс нь галт хана суулгах анхан шатны мэдлэгээс
|
||
хол давсан техникийн хувьд ярвигтай сонголтын боломжуудаар хүч нэмсэн байдаг.
|
||
IPFW нь мэргэжлийн түвшний хэрэглэгчид эсвэл өндөр түвшний пакет сонголт
|
||
шаардлагатай байгаа техникийн өндөр түвшний компьютер сонирхогчид зориулагдсан юм.
|
||
IPFW-н дүрмүүдийн хүчийг мэдрэхийн өмнө протоколууд өөрийн тусгай пакетийн толгойн
|
||
мэдээллийг хэрхэн үүсгэдэг болон хэрэглэдэг талаар нилээд дэлгэрэнгүй мэдлэгийг
|
||
олж авсан байх хэрэгтэй. Тийм түвшний тайлбарыг энд өгөх нь номын энэ бүлгийн
|
||
мэдлээс халих тул энд оруулах боломжгүй юм.</para>
|
||
|
||
<para>IPFW нь долоон хэсгээс бүрдэнэ, гол хэсэг болох цөмийн галт ханын шүүлтийн
|
||
дүрмийг боловсруулагч болон түүний бусад хэсэг болох пакет данслах боломж, бүртгэх боломж, <acronym>NAT</acronym>
|
||
боломжийг идэвхжүүлэх <literal>divert</literal> дүрэм, болон өндөр түвшний тусгай зориулалттай боломжууд,
|
||
dummynet трафик хязгаарлагч боломжууд, <literal>fwd дүрэм</literal> дамжуулах боломж, гүүр боломжууд, болон
|
||
ipstealth боломжуудаас бүрдэнэ. IPFW нь IPv4 болон IPv6-г дэмждэг.</para>
|
||
|
||
|
||
<sect2 id="firewalls-ipfw-enable">
|
||
<title>IPFW-г идэвхжүүлэх</title>
|
||
|
||
<indexterm>
|
||
<primary>IPFW</primary>
|
||
|
||
<secondary>идэвхжүүлэх</secondary>
|
||
</indexterm>
|
||
|
||
<para>IPFW нь &os; үндсэн суулгацтай хамт, ажиллах үеийн ачаалах боломжтой модуль байдлаар ирдэг.
|
||
<filename>rc.conf</filename> тохиргооны файл дотор <literal>firewall_enable="YES"</literal> илэрхийлэл байгаа үед систем IPFW цөмийн
|
||
модулийг динамикаар ачаална. IPFW-г цөмд эмхэтгэх шаардлага байхгүй.</para>
|
||
|
||
<para><filename>rc.conf</filename> файл дотор <literal>firewall_enable="YES"</literal>
|
||
илэрхийллийг нэмээд системийг дахин асаасны дараа ачаалах үйл явцын нэг хэсэг болж
|
||
дараах мессеж дэлгэцэн дээр гарах болно:</para>
|
||
|
||
<screen>ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled</screen>
|
||
|
||
<para>Ачаалах боломжтой модульд бүртгэх боломжийг эмхэтгээгүй байгаа.
|
||
Бүртгэлийг идэвхжүүлж вербос бүртгэлийн хязгаарыг тогтоохын тулд
|
||
<filename>/etc/sysctl.conf</filename> файл дотор тохируулж болох тохиргоо бий.
|
||
Эдгээр илэрхийллүүдийг нэмсэнээр бүртгэлийн систем дараагийн удаа ачаалахад идэвхжинэ:</para>
|
||
|
||
<programlisting>net.inet.ip.fw.verbose=1
|
||
net.inet.ip.fw.verbose_limit=5</programlisting>
|
||
</sect2>
|
||
|
||
<sect2 id="firewalls-ipfw-kernel">
|
||
<title>Цөмийн тохируулгууд</title>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохируулгууд</primary>
|
||
|
||
<secondary>IPFIREWALL</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохируулгууд</primary>
|
||
|
||
<secondary>IPFIREWALL_VERBOSE</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохируулгууд</primary>
|
||
|
||
<secondary>IPFIREWALL_VERBOSE_LIMIT</secondary>
|
||
</indexterm>
|
||
|
||
<indexterm>
|
||
<primary>IPFW</primary>
|
||
|
||
<secondary>цөмийн тохируулгууд</secondary>
|
||
</indexterm>
|
||
|
||
<para>&os; цөм уруу
|
||
дараах боломжуудыг эмхэтгэн IPFW-г идэвхжүүлэх албагүй болно.
|
||
Суурь мэдлэг болгон энд үзүүллээ.</para>
|
||
|
||
<programlisting>options IPFIREWALL</programlisting>
|
||
|
||
<para>Энэ тохируулга IPFW-г цөмийн нэг хэсэг болгон идэвхжүүлнэ</para>
|
||
|
||
<programlisting>options IPFIREWALL_VERBOSE</programlisting>
|
||
|
||
<para>Энэ тохируулга <literal>log</literal> гэсэн түлхүүр үг орсон дүрмийн хувьд
|
||
IPFW-р дайран өнгөрөх пакетуудыг бүртгэх боломжтой болгоно.</para>
|
||
|
||
<programlisting>options IPFIREWALL_VERBOSE_LIMIT=5</programlisting>
|
||
|
||
<para>Энэ тохируулга &man.syslogd.8;-р нэгэн зэрэг бүртгэгдэж буй
|
||
пакетийн тоог хязгаарлана. Галт ханын үйлдлүүдийг бүртгэхийг хүсэж байгаа
|
||
дайсагнасан орчнуудад энэ тохируулгыг хэрэглэж болно. Энэ тохируулга нь
|
||
syslog-г живүүлэх замаар явагдах үйлчилгээг зогсоох халдлагыг хааж өгөх болно.</para>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохируулгууд</primary>
|
||
|
||
<secondary>IPFIREWALL_DEFAULT_TO_ACCEPT</secondary>
|
||
</indexterm>
|
||
|
||
<programlisting>options IPFIREWALL_DEFAULT_TO_ACCEPT</programlisting>
|
||
|
||
<para>Энэ тохируулга нь анхдагчаар галт ханыг дамжин өнгөрч байгаа бүх зүйлийг
|
||
нэвтрүүлэхийг зөвшөөрөх бөгөөд энэ нь галт ханыг анх удаа тохируулж байгаа үед илүү тохиромжтой.</para>
|
||
|
||
<indexterm>
|
||
<primary>цөмийн тохируулгууд</primary>
|
||
|
||
<secondary>IPDIVERT</secondary>
|
||
</indexterm>
|
||
|
||
<programlisting>options IPDIVERT</programlisting>
|
||
|
||
<para>Энэ тохируулга <acronym>NAT</acronym> функцыг идэвхжүүлнэ.</para>
|
||
|
||
<note>
|
||
<para>Хэрэв та IPFIREWALL_DEFAULT_TO_ACCEPT-г оруулаагүй эсвэл
|
||
ирж байгаа пакетуудыг нэвтрүүлэх дүрмүүд бичээгүй бол ирж
|
||
байгаа болон явж байгаа бүх пакетуудыг галт хана хаах болно.</para>
|
||
</note>
|
||
</sect2>
|
||
|
||
<sect2 id="firewalls-ipfw-rc">
|
||
<title><filename>/etc/rc.conf</filename> Тохируулгууд</title>
|
||
|
||
<para>Галт ханыг идэвхжүүлэхийн тулд:</para>
|
||
|
||
<programlisting>firewall_enable="YES"</programlisting>
|
||
|
||
<para>&os;-тэй хамт ирдэг анхдагч галт ханын төрлүүдээс нэгийг
|
||
сонгохын тулд, <filename>/etc/rc.firewall</filename> файлыг уншсаны дараа
|
||
нэгийг сонгоод, түүнийгээ дараах илэрхийлэлд бичиж өгнө:</para>
|
||
|
||
<programlisting>firewall_type="open"</programlisting>
|
||
|
||
<para>Боломжит утгууд нь:</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para><literal>open</literal> — бүх урсгалыг нэвтрүүлнэ.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><literal>client</literal> — зөвхөн энэ машиныг хамгаална.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><literal>simple</literal> — бүхэл бүтэн сүлжээг хамгаална.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><literal>closed</literal> — loopback интерфэйсээс бусад IP
|
||
урсгалыг боломжгүй болгоно.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><literal>UNKNOWN</literal> — галт ханын дүрмүүдийг ачаалах
|
||
боломжгүй болгоно.</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><filename><replaceable>filename</replaceable></filename> — галт ханын дүрмүүдийг агуулсан
|
||
файлын бүрэн зам.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para><application>ipfw</application> галт хана уруу тусгайлан бэлдсэн
|
||
дүрмүүдийг хоёр аргаар ачаалж болно. Нэг нь, <literal>firewall_type</literal> хувьсагчийн
|
||
утганд &man.ipfw.8;-д зориулсан ямар ч тушаал мөрийн тохируулгагүйгээр бичигдсэн
|
||
<emphasis>галт ханын дүрмүүд</emphasis>-г агуулсан файлын бүрэн замыг өгөх. Дараах нь
|
||
орж байгаа болон гарч байгаа урсгалыг хаах дүрмийн энгийн жишээ юм:</para>
|
||
|
||
<programlisting>add deny in
|
||
add deny out</programlisting>
|
||
|
||
<para>Нөгөө нь, систем ачаалах үед ажиллах <command>ipfw</command> тушаалуудыг
|
||
агуулсан ажиллах боломжтой скриптийн бүрэн замыг <literal>firewall_script</literal>
|
||
хувьсагчид оноох юм. Дээр үзүүлсэн дүрмүүдийн файлтай дүйх дүрмүүдийн скрипт дараах байдалтай
|
||
байна:</para>
|
||
|
||
<programlisting>#!/bin/sh
|
||
|
||
ipfw -q flush
|
||
|
||
ipfw add deny in
|
||
ipfw add deny out</programlisting>
|
||
|
||
<note>
|
||
<para>Хэрэв <literal>firewall_type</literal> нь <literal>client</literal>
|
||
эсвэл <literal>simple</literal> утгыг авсан бол, <filename>/etc/rc.firewall</filename>
|
||
файл доторх анхдагч дүрмүүдийг тухайн машинд тохируулан өөрчлөх хэрэгтэй.
|
||
Мөн энэ бүлэгт хэрэглэж байгаа жишээнүүдийн хувьд <literal>firewall_script</literal>-н утга
|
||
<filename>/etc/ipfw.rules</filename> гэж үзэж байгаа болно.</para>
|
||
</note>
|
||
|
||
<para>Бүртгэлийг идэвхжүүлэхийн тулд:</para>
|
||
|
||
<programlisting>firewall_logging="YES"</programlisting>
|
||
|
||
<warning>
|
||
<para><varname>firewall_logging</varname> хувьсагчийн
|
||
хийх ганц зүйл гэвэл <varname>net.inet.ip.fw.verbose</varname> sysctl
|
||
хувьсагчийн утгыг <literal>1</literal> болгох юм (<xref
|
||
linkend="firewalls-ipfw-enable"/> хэсгийг үзнэ үү). <filename>rc.conf</filename>
|
||
дотор бүртгэлийг хязгаарлах хувьсагч байхгүй, харин үүний тулд
|
||
sysctl хувьсагчаар дамжуулан хийж болно. <filename>/etc/sysctl.conf</filename>
|
||
файл дотор эсвэл гараараа утгыг оноож өгч болно:</para>
|
||
|
||
<programlisting>net.inet.ip.fw.verbose_limit=5</programlisting>
|
||
</warning>
|
||
|
||
<para>Хэрэв таны машин гарц байдлаар ажиллаж байгаа бол,
|
||
жишээ нь &man.natd.8;-н тусламжтай Сүлжээний хаягийн Хөрвүүлэлт (NAT) хийж байгаа бол,
|
||
<filename>/etc/rc.conf</filename> файл доторх шаардлагатай тохируулгуудын
|
||
мэдээллийг <xref linkend="network-natd"/> хэсэг уруу хандана уу.</para>
|
||
</sect2>
|
||
|
||
<sect2 id="firewalls-ipfw-cmd">
|
||
<title>IPFW Тушаал</title>
|
||
|
||
<indexterm><primary><command>ipfw</command></primary></indexterm>
|
||
|
||
<para>Галт ханыг ажиллаж байх явцад түүний идэвхтэй байгаа дотоод
|
||
дүрмүүдэд шинэ дүрэм нэмэх, дүрэм хасах зэрэг өөрчлөлтүүдийг гараар хийх
|
||
гол механизм бол <command>ipfw</command> тушаал юм. Энэ аргыг хэрэглэхэд тулгардаг нэг асуудал
|
||
бол нэгэнт системийг унтраасан эсвэл зогсоосон бол нэмсэн эсвэл хассан
|
||
эсвэл өөрчилсөн бүх дүрмүүд алга болно. Бүх дүрмүүдээ нэг файлд бичээд систем
|
||
ачаалах үед энэ файлыг ашиглан дүрмүүдийг ачаалах, эсвэл одоо ажиллаж байгаа
|
||
галт ханын дүрмүүдийг файл дотор хийсэн өөрчлөлтүүдээр бүхлээр нь сольж тавих нь
|
||
энд хэрэглэж байгаа, та бүхэнд зөвлөх арга барил юм.</para>
|
||
|
||
<para>Удирдлагын дэлгэцэн дээр ажиллаж байгаа галт ханын
|
||
дүрмүүдийг харуулахад <command>ipfw</command> тушаалыг одоо хэр нь хэрэглэсээр байна.
|
||
IPFW-н данс хөтлөх боломж нь дүрэм бүрийн хувьд тухайн дүрэмд тохирсон
|
||
пакетийг тоолох тоолуурыг үүсгэдэг. Ямар нэг дүрмийг шалгах үйл явцад тухайн
|
||
дүрэм ажиллаж байгаа эсэхийг тогтоох аргуудын нэг бол дүрмийг тоолуурын хамт
|
||
жагсаан харах байдаг.</para>
|
||
|
||
<para>Бүх дүрмүүдийг дараагаар нь жагсаан харахын тулд:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipfw list</userinput></screen>
|
||
|
||
<para>Бүх дүрмүүдийг тухайн дүрэм хамгийн сүүлд тохирсон цагны хамт
|
||
жагсаан харахын тулд:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipfw -t list</userinput></screen>
|
||
|
||
<para>Дараагийн жишээ нь данслалтын мэдээлэл буюу дүрмүүдийг тохирсон пакетийн тооны
|
||
хамт харуулж байна. Эхний багана нь дүрмийн дугаар, дараа нь энэ дүрэмд
|
||
тохирсон гарч байгаа пакетийн тоо, дараа нь энэ дүрэмд тохирсон орж байгаа
|
||
пакетийн тоо, тэгээд дүрэм өөрөө байна.</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipfw -a list</userinput></screen>
|
||
|
||
<para>Статик дүрмүүдээс гадна динамик дүрмүүдийг жагсаан харахын тулд:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipfw -d list</userinput></screen>
|
||
|
||
<para>Мөн хугацаа нь дууссан динамик дүрмүүдийг харахын тулд:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipfw -d -e list</userinput></screen>
|
||
|
||
<para>Тоолууруудыг тэглэхийн тулд:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipfw zero</userinput></screen>
|
||
|
||
<para>Зөвхөн <replaceable>NUM</replaceable> дугаартай тоолуурыг тэглэхийн тулд:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipfw zero NUM</userinput></screen>
|
||
</sect2>
|
||
|
||
<sect2 id="firewalls-ipfw-rules">
|
||
<title>IPFW Дүрмийн Олонлог</title>
|
||
|
||
<!-- This has already appeared once -->
|
||
|
||
<para>Пакет дотор агуулагдаж байгаа утгуудыг үндэслэн тухайн пакетийг
|
||
нэвтрүүлэх болон хаахыг хэлж байгаа дүрмүүдийг IPFW дүрмийн олонлог гэнэ. Хостуудын
|
||
хоорондох хоёр чиглэлтэй пакет солилцоо нь сесс харилцааг бүрдүүлнэ. Галт ханын
|
||
дүрмийн олонлог нь Интернэтээс ирж байгаа пакетууд болон тэдгээрт хариу болж
|
||
системээс явж байгаа пакетуудыг боловсруулдаг.
|
||
Бүх <acronym>TCP/IP</acronym> үйлчилгээнүүдийн
|
||
хувьд (жишээ нь: telnet, www, mail, г.м.) протокол болон зөвшөөрөгдсөн (сонсох)
|
||
портыг урьдчилан тодорхойлсон байдаг.
|
||
Тухайн нэг үйлчилгээ рүү чиглэсэн пакетууд нь зөвшөөрөгдөөгүй (өндөр)
|
||
портууд ашиглан эх хаягаас гарч очих хаягийн тухайн үйлчилгээний
|
||
порт руу хүрдэг. Дээрх өгөгдлүүд (өөрөөр хэлбэл портууд ба хаягууд)
|
||
нь үйлчилгээнүүдийг зөвшөөрөх эсвэл хаах дүрмүүдийг үүсгэхэд
|
||
шалгуур болон ашиглагдаж болно.</para>
|
||
|
||
<indexterm>
|
||
<primary>IPFW</primary>
|
||
|
||
<secondary>Дүрмүүдтэй ажиллах дэс дараалал</secondary>
|
||
</indexterm>
|
||
|
||
<!-- Needs rewording to include note below -->
|
||
|
||
<para>Пакетийг галт хана хүлээн аваад дүрмийн олонлогт байгаа хамгийн
|
||
эхний дүрэмтэй тулгах ба цааш дүрмүүдийн дугаарын өсөх дарааллын дагуу
|
||
дээрээс доош нэг нэгээр шалгаж эхэлнэ. Пакет аль нэг дүрмийн сонголтын
|
||
параметртай тохирвол, түүнд харгалзах үйлдлийг хийж, тухайн пакетийн хувьд
|
||
цааш хайлтыг дуусгана. Энэ аргыг <quote>эхэнд тохирсон нь дийлнэ</quote> хайлтын
|
||
арга гэнэ. Хэрэв тухайн пакет ямар ч дүрэмд тохирохгүй бол, энэ пакетийг 65535 дугаартай
|
||
бүх пакетийг хааж, явуулсан хүнд нь ямар ч хариу өгөлгүй орхигдуулна гэсэн
|
||
IPFW-н анхдагч дүрэмд албаар тохируулна.</para>
|
||
|
||
<note>
|
||
<para><literal>count</literal>, <literal>skipto</literal> ба <literal>tee</literal>
|
||
дүрмүүдийн дараа хайлт үргэлжилнэ.</para>
|
||
</note>
|
||
|
||
<para>Энд байгаа зааварчилгаанууд нь төлөвт <literal>keep state</literal>, <literal>limit</literal>, <literal>in</literal>, <literal>out</literal>
|
||
болон <literal>via</literal> зэрэг тохируулгуудыг агуулсан дүрмүүд дээр үндэслэгдсэн байгаа. Энэ бол хамааруулсан
|
||
галт ханын дүрмийн олонлогийг бичих үндсэн арга барил юм.</para>
|
||
|
||
<warning>
|
||
<para>Галт ханын дүрмүүдтэй ажиллахдаа маш анхааралтай байх хэрэгтэй.
|
||
Зарим тохиргоо серверээс <emphasis>бүх холбоог тань тасалж</emphasis> мэднэ.</para>
|
||
</warning>
|
||
|
||
<sect3 id="firewalls-ipfw-rules-syntax">
|
||
<title>Дүрмийн Синтакс</title>
|
||
|
||
<indexterm>
|
||
<primary>IPFW</primary>
|
||
|
||
<secondary>дүрмийн синтакс</secondary>
|
||
</indexterm>
|
||
|
||
<para>Энд үзүүлсэн дүрмийн синтакс нь стандарт хамааруулсан
|
||
галт хана үүсгэхэд шаардлагатай дүрмийн олонлогийг бичих хэмжээнд
|
||
тохируулан хялбаршуулсан байгаа. Дүрмийн синтаксын бүрэн тайлбарыг &man.ipfw.8;
|
||
заавар хуудаснаас үзнэ үү.</para>
|
||
|
||
<para>Дүрмүүд нь түлхүүр үгүүдийг агуулна. Эдгээр түлхүүр үгүүд нь
|
||
тухайн мөрөнд зүүнээс баруун тийш тодорхой дэс дараагаар бичигдэнэ.
|
||
Түлхүүр үгүүд тодоор бичигдэх тул түүгээр нь ялгаж танина. Зарим түлхүүр
|
||
үгүүд дэд-тохируулгатай байна. Тэр нь өөрөө түлхүүр үг байж болохоос гадна
|
||
цааш дэд-тохируулгуудыг агуулсан байж болно.</para>
|
||
|
||
<para><literal>#</literal> гэсэн тэмдэгт тайлбарын эхлэлийг заах ба
|
||
дүрэм бичсэн мөрийн төгсгөлд эсвэл өөрөө бүтэн мөр байдлаар байрлана.
|
||
Хоосон мөрийг тооцохгүй.</para>
|
||
|
||
<para><replaceable>CMD RULE_NUMBER ACTION LOGGING SELECTION
|
||
STATEFUL</replaceable></para>
|
||
|
||
<sect4>
|
||
<title>CMD</title>
|
||
|
||
<para>Шинэ дүрэм бүр дотоод хүснэгтэнд бичигдэхийн тулд
|
||
<parameter>add</parameter> гэсэн түлхүүр үгийг өмнөө агуулж байх ёстой.</para>
|
||
</sect4>
|
||
|
||
<sect4>
|
||
<title>RULE_NUMBER</title>
|
||
|
||
<para>Дүрэм бүр өөрийн дүрмийн дугаартай холбоотой бөгөөд 1..65535-н дотор байдаг.</para>
|
||
</sect4>
|
||
|
||
<sect4>
|
||
<title>ACTION</title>
|
||
|
||
<para>Тухайн дүрмийн сонголтын үзүүлэлтэд пакет тохироход
|
||
заасан action буюу үйлдлийг гүйцэтгэх ба дүрэм нь дараах үйлдлүүдийн
|
||
аль нэгтэй холбогдсон байна.</para>
|
||
|
||
<para><parameter>allow | accept | pass |
|
||
permit</parameter></para>
|
||
|
||
<para>Эдгээр нь бүгд нэг зүйлийг, тухайлбал: дүрэмд тохирсон пакетуудыг нэвтрүүлж, галт ханын
|
||
дүрэмтэй ажиллах явцаас гарахыг хэлж өгч байна. Эдгээр дүрмүүдийн дараа хайлт
|
||
дуусна.</para>
|
||
|
||
<para><parameter>check-state</parameter></para>
|
||
|
||
<para>нь динамик дүрмийн хүснэгттэй пакетуудыг
|
||
тулгана. Хэрэв тохирвол, энэ динамик дүрмийг үүсгэсэн дүрэмд харгалзах
|
||
үйлдлийг гүйцэтгэнэ, үгүй бол дараагийн дүрэмд шилжинэ. check-state дүрэмд
|
||
сонголтын шалгуур байхгүй. Хэрэв дүрмийн олонлогт check-state дүрэм байхгүй бол
|
||
эхний keep-state эсвэл limit дүрмийг динамик дүрмийн хүснэгттэй тулгана.</para>
|
||
|
||
<para><parameter>deny | drop</parameter></para>
|
||
|
||
<para>Энэ хоёр үг хоёул дүрэмд тохирсон пакетуудыг хаяхыг
|
||
заана. Хайлт энд дуусна.</para>
|
||
</sect4>
|
||
|
||
<sect4>
|
||
<title>Бүртгэл хөтлөлт</title>
|
||
|
||
<para><parameter>log</parameter> эсвэл <parameter>logamount</parameter></para>
|
||
|
||
<para>Пакет <literal>log</literal> гэсэн түлхүүр үг орсон дүрэмд тохироход, энэ тухай мессеж
|
||
&man.syslogd.8; уруу SECURITY гэсэн facility нэртэйгээр бүртгэгдэнэ. Зөвхөн
|
||
тухайн дүрмийн хувьд бүртгэгдсэн пакетийн тоо <literal>logamount</literal> параметрийн утгыг
|
||
даваагүй тохиолдолд бүртгэл явагдана. Хэрэв <literal>logamount</literal>-н утгыг зааж өгөөгүй бол,
|
||
sysctl-н <literal>net.inet.ip.fw.verbose_limit</literal> хувьсагчийн утгыг хязгаарын утга болгон авна.
|
||
Аль ч тохиолдолд тэг гэсэн утга бүртгэлийн хязгаарыг үгүй болгоно. Хязгаарт тулсан
|
||
тохиолдолд, бүртгэлийг дахин идэвхжүүлэхийн тулд бүртгэлийн тоолуурыг эсвэл
|
||
тухайн дүрмийн пакет тоолуурыг дахин эхлүүлнэ. <command>ipfw reset log</command> тушаалыг үзнэ үү.</para>
|
||
|
||
<note>
|
||
<para>Бүртгэл нь бусад бүх пакет тохирох нөхцлүүд амжилттай нотлогдсоны дараа,
|
||
мөн тухайн пакет дээр эцсийн үйлдлийг(зөвшөөрөх, татгалзах) хийхийн өмнө явагдана.
|
||
Ямар дүрмүүдийн хувьд бүртгэл явуулахыг та шийдэх болно.</para>
|
||
</note>
|
||
</sect4>
|
||
|
||
<sect4>
|
||
<title>Сонголт</title>
|
||
|
||
<para>Энд танилцуулах түлхүүр үгнүүд нь тухайн пакет дүрэмд тохирч байгаа
|
||
үгүй эсэхийг тодорхойлох үед, шалгагдаж байгаа пакетийн шинжүүдийг тодорхойлно.
|
||
Дараах байнгын хэрэглээний шинжүүд өгөгдсөн байдаг ба доорх дэс дарааллаар хэрэглэнэ:</para>
|
||
|
||
<para><parameter>udp | tcp | icmp</parameter></para>
|
||
|
||
<para><filename>/etc/protocols</filename> файлд байгаа ямар ч протоколын
|
||
нэрийг бас хэрэглэж болно. Харин утга нь шалгагдах протоколын нэрийг заана. Энэ бол заавал
|
||
тавигдах шаардлага юм.</para>
|
||
|
||
<para><parameter>from src to dst</parameter></para>
|
||
|
||
<para><literal>from</literal> ба <literal>to</literal> гэсэн түлхүүр үгүүд IP хаягийг шүүхэд хэрэглэгдэнэ.
|
||
Дүрмэнд хэрэглэхдээ эхлэл ба очих параметрүүдийг <emphasis>ХОЁУЛАНГ</emphasis> зааж өгөх ёстой.
|
||
<literal>any</literal> гэсэн тусгай түлхүүр үгийн тусламжтай бүх IP хаягийг
|
||
зөвшөөрч өгч болно. <literal>me</literal> гэсэн тусгай түлхүүр үг нь таны
|
||
&os; системийн аль нэг интерфэйс дээр тохируулсан IP хаягийг заах ба
|
||
галт хана ажиллаж байгаа PC-г (өөрөөр хэлбэл энэ машин) <literal>from me to
|
||
any</literal> эсвэл <literal>from any to me</literal> эсвэл <literal>from 0.0.0.0/0 to any</literal> эсвэл
|
||
<literal>from any to 0.0.0.0/0</literal> эсвэл <literal>from 0.0.0.0 to any</literal> эсвэл <literal>from
|
||
any to 0.0.0.0</literal> or <literal>from me to 0.0.0.0</literal>
|
||
гэсэн байдлаар төлөөлнө. IP хаягуудыг цэгтэй тоон хэлбэр/багийн-урт байдлаар эсвэл
|
||
зүгээр цэгтэй тоон хэлбэрээр бичиж болно. Энэ бол заавал тавигдах шаардлага юм.
|
||
Тооцооллыг хялбар болгохын тулд <filename role="package">net-mgmt/ipcalc</filename>
|
||
портыг ашиглаж болох юм. Нэмэлт мэдээллийг хэрэгслийн вэб хуудаснаас үзэж
|
||
болно: <ulink url="http://jodies.de/ipcalc"></ulink></para>
|
||
|
||
<para><parameter>port number</parameter></para>
|
||
|
||
<para>Портын дугаарыг дэмждэг протоколуудын хувьд
|
||
(<acronym>TCP</acronym> ба <acronym>UDP</acronym> гэх мэт), тааруулахыг хүсэж байгаа портын
|
||
дугаарыг заавал бичиж өгөх ёстой байдаг. Портын тоон утгын оронд үйлчилгээний нэрийг(<filename>/etc/services</filename>
|
||
файлаас) хэрэглэж болно.</para>
|
||
|
||
<para><parameter>in | out</parameter></para>
|
||
|
||
<para>Орж байгаа болон гарч байгаа пакетуудыг харгалзан тааруулна.
|
||
<literal>in</literal> ба <literal>out</literal> нь түлхүүр үгүүд бөгөөд дүрэмд тааруулах шалгуур болгож энэ хоёр
|
||
үгийн аль нэгийг заавал бичсэн байх ёстой.</para>
|
||
|
||
<para><parameter>via IF</parameter></para>
|
||
|
||
<para>Нэрээр нь зааж өгсөн интерфэйсээр дайран өнгөрч буй пакетуудыг
|
||
тааруулна. <literal>via</literal> гэсэн түлхүүр үг нь тухайн интерфэйсийг тааруулах үйл явцын
|
||
нэг хэсэг байдлаар байнга шалгаж байхыг зааж өгнө.</para>
|
||
|
||
<para><parameter>setup</parameter></para>
|
||
|
||
<para>Энэ түлхүүр үг нь <acronym>TCP</acronym> пакетуудын хувьд
|
||
сесс эхлүүлэх хүсэлтийг зааж өгч байгаа заавал хэрэглэх түлхүүр үг юм.</para>
|
||
|
||
<para><parameter>keep-state</parameter></para>
|
||
|
||
<para>Энэ бол заавал хэрэглэх түлхүүр үг юм. Дүрэм таарахад, галт хана
|
||
яг тэр протоколыг ашиглан эхлэл болон очих IP/портын хооронд үүсэх
|
||
хоёр чиглэлтэй урсгалыг тааруулах анхдагч чанартай динамик дүрэм үүсгэнэ.</para>
|
||
|
||
<para><parameter>limit {src-addr | src-port | dst-addr |
|
||
dst-port}</parameter></para>
|
||
|
||
<para>Дүрэмд заасантай адил параметрүүдтэй холболтын тоог <replaceable>N</replaceable>-р
|
||
хязгаарлана. Нэг ба түүнээс дээш тооны эхлэл болон очих хаягууд, портуудыг зааж өгч болно.
|
||
<literal>limit</literal> ба <literal>keep-state</literal>-г нэг дүрэмд хамтад нь хэрэглэж болохгүй.
|
||
<literal>limit</literal> тохируулга нь <literal>keep-state</literal>-тэй адил төлөвт
|
||
функцуудыг гүйцэтгэхээс гадна өөрийн нэмэлт функцүүлтэй.</para>
|
||
</sect4>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>Төлөвт Дүрмийн Тохируулгууд</title>
|
||
|
||
<indexterm>
|
||
<primary>IPFW</primary>
|
||
|
||
<secondary>төлөвт шүүлт</secondary>
|
||
</indexterm>
|
||
|
||
<!-- XXX: duplicated -->
|
||
|
||
<para>Төлөвт шүүлт нь урсгалыг сесс харилцаанаас бүрдэж буй хоёр чиглэлтэй пакет
|
||
солилцоо гэж үздэг. Мөн энэ нь сесс эхлүүлсэн болон хүлээн авсан хостуудын хоорондох сесс харилцаа нь
|
||
хоёр чиглэлтэй пакет солилцох процедуртай зохицож байгаа эсэхийг магадлах чадвартай байдаг.
|
||
Сесс харилцааны загварт зохицоогүй пакетийг хуурамч гэж үзэн хүлээж авахгүй.</para>
|
||
|
||
<para><literal>check-state</literal> нь IPFW дүрмийн олонлогийн хаана нь пакетийг
|
||
динамик дүрмүүдийн боломжоор шалгахыг тогтооно. Таарсан тохиолдолд,
|
||
пакет галт ханыг нэвтэрч цааш явах ба энэ хоёр чиглэлт сесс харилцааны туршид
|
||
солилцох пакетуудын хувьд шинэ динамик дүрэм үүснэ. Таараагүй тохиолдолд,
|
||
пакет дүрмийн олонлогийн дараагийн дүрэмд шалгагдахаар шилжинэ.</para>
|
||
|
||
<para>Динамик дүрмүүдийн боломж нь маш олон тооны динамик дүрмүүдийг
|
||
нээдэг SYN-живүүлэх халдлагаас үүсэх нөөцийн хомсдолд эмзэг байдаг. Энэ халдлагаас зайлсхийхийн
|
||
тулд &os; <literal>limit</literal> гэсэн шинэ тохируулгыг нэмж өгсөн байдаг. Энэ тохируулгын
|
||
тусламжтай нэгэн зэрэг явагдах сесс харилцааны тоог хязгаарлана. <literal>limit</literal> тохируулгад
|
||
зааж өгсөн эхлэл болон очих талбаруудаар пакетийн IP хаягийг асуулга явуулах замаар шалгасны дараа,
|
||
энэ дүрэмд энэ IP хаягийн хослол хэдэн удаа таарсан тоог харгалзан хэрэв энэ тоо <literal>limit</literal>-д
|
||
зааснаас давсан бол тухайн пакетийг гээнэ.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>Галт ханын мессежийг бүртгэх</title>
|
||
|
||
<indexterm>
|
||
<primary>IPFW</primary>
|
||
|
||
<secondary>бүртгэл хөтлөлт</secondary>
|
||
</indexterm>
|
||
|
||
<para>Бүртгэл хөтлөлтийн ашиг тус тодорхой юм: Таны бүртгэхээр идэвхжүүлсэн
|
||
дүрмүүдийн хувьд, ямар пакетууд гээгдсэн, тэдгээр нь ямар хаягаас ирсэн, хаашаа явж байсан
|
||
зэрэг мэдээллийг эргэн харах боломжийг олгох ба гадны халдлагыг мөрдөхөд танд чухал хувь
|
||
нэмэр болно.</para>
|
||
|
||
<para>Бүртгэл хөтлөх боломжийг идэвхжүүлсэн хэдий ч,
|
||
IPFW нь өөрөө ямар ч дүрмийг үүсгэхгүй. Администратор аль дүрмүүдийн хувьд
|
||
бүртгэл явуулахыг шийдэн, тэдгээр дүрмүүддээ <literal>log</literal> гэсэн түлхүүр үгийг нэмж бичнэ.
|
||
Ихэвчлэн зөвхөн татгалзах дүрмүүдийг бүртгэдэг, жишээлбэл ирж буй <acronym>ICMP</acronym> ping-г
|
||
татгалзах гэх мэт. Хамгийн сүүлд байгаа <quote>ipfw default deny everything</quote> дүрмийг хувилан <literal>log</literal> түлхүүр
|
||
үгтэйгээр үүсгэх нь элбэг байдаг. Ийм байдлаар дүрмийн олонлогийн аль ч дүрмэнд таараагүй
|
||
пакетуудыг харах боломжтой болно.</para>
|
||
|
||
<para>Бүртгэл хөтлөлт нь хоёр талдаа иртэй сэлэмтэй адил юм,
|
||
хэрэв та хайхрамжгүй хандвал, диск дүүрэн бүртгэлийн мэдээлэл
|
||
дотроо учраа олохгүй суух болно. Дискийг дүүргэх DoS халдлага нь
|
||
хамгийн эртний халдлагуудын нэг юм. Эдгээр бүртгэлийн мессеж нь <application>syslogd</application>-д
|
||
бичигдэхээс гадна, root консол дэлгэцэн дээр гарах учир удахгүй ядаргаатай санагдаж
|
||
эхэлдэг.</para>
|
||
|
||
<para><literal>IPFIREWALL_VERBOSE_LIMIT=5</literal> гэсэн
|
||
цөмийн тохируулга нь системийн бүртгэл хөтлөгч болох &man.syslogd.8; уруу
|
||
шидэгдэж байгаа тухайн дүрэмд тохирсон пакетад харгалзах
|
||
дараалсан мессежийн тоог хязгаарлана. Энэ тохируулгыг идэвхжүүлсэн үед,
|
||
тодорхой дүрмийн хувьд дараалсан мессежийн тоог зааж өгсөн тоогоор хязгаарлана.
|
||
Нэг ижил зүйлийг хэлсэн 200 бүртгэлийн бичлэгээс мэдэж авах зүйл хомс юм.
|
||
Жишээ нь, тодорхой дүрмийн хувьд дараалсан таван бичлэг <application>syslogd</application>-д бичигдэнэ,
|
||
үлдсэн дараалсан ижил бичлэгүүд тоологдоод <application>syslogd</application>-д дараах байдалтай бичигдэнэ:</para>
|
||
|
||
<programlisting>last message repeated 45 times</programlisting>
|
||
|
||
<para>Бүртгэл хөтлөгдөж байгаа бүх пакетуудын мессежүүд <filename>/etc/syslog.conf</filename>
|
||
файлд анхдагч байдлаар зааж өгсөн <filename>/var/log/security</filename> файлд бичигдэнэ.</para>
|
||
</sect3>
|
||
|
||
<sect3 id="firewalls-ipfw-rules-script">
|
||
<title>Дүрмийн скриптийг бүтээх</title>
|
||
|
||
<para>Туршлагатай IPFW хэрэглэгчид дүрмүүдийг агуулсан файл үүсгээд
|
||
түүнийгээ скрипт байдлаар ажиллуулах боломжтой байхаар бичдэг.
|
||
Үүний гол давуу тал нь дүрмүүдийг идэвхжүүлэхийн тулд
|
||
системийг дахин ачаалах шаардлагагүй болно. Энэ аргыг ашиглан хэдэн ч
|
||
удаа дараалан галт ханын дүрмүүдийг ачаалж болох тул шинэ дүрмүүдийг
|
||
шалгах үед хэрэглэхэд тохиромжтой байдаг. Скрипт учраас олон дахин бичигдэж байгаа
|
||
утгын оронд симбол орлуулалтыг ашиглах боломжтой. Энэ талаар дараах жишээн дээрээс харна уу.</para>
|
||
|
||
<para>Энд хэрэглэгдсэн скриптийн синтакс нь &man.sh.1;, &man.csh.1;, &man.tcsh.1; бүрхүүл дээр ажиллах
|
||
боломжтой. Симбол орлуулалттай талбарууд нь урдаа $ буюу долларын тэмдэгтэй байна.
|
||
Симбол талбарууд нь $ тэмдэг урдаа байхгүй. Симбол талбарыг орлох утга нь
|
||
давхар хашилтан (<literal>"</literal>) дотор байрлана.</para>
|
||
|
||
<para>Дүрмийн файлаа дараах байдалтай үүсгэж эхлэх хэрэгтэй:</para>
|
||
|
||
<programlisting>############### 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 ############</programlisting>
|
||
|
||
<para>Байх ёстой бүх зүйлс бүгд байна. Энэ жишээн дээр дүрмүүд чухал биш,
|
||
харин симбол орлуулалт хэрхэн ажилладагыг харуулсан байна.</para>
|
||
|
||
<para>Хэрэв дээрх жишээ <filename>/etc/ipfw.rules</filename> нэртэй файл дотор байсан бол,
|
||
эдгээр дүрмүүдийг дараах тушаалыг өгч дахин ачаалах боломжтой:</para>
|
||
|
||
<screen>&prompt.root; <userinput>sh /etc/ipfw.rules</userinput></screen>
|
||
|
||
<para><filename>/etc/ipfw.rules</filename> гэсэн файл ямар ч нэртэй байж
|
||
болох ба таны хүссэн ямар ч газар байж болно.</para>
|
||
|
||
<para>Дараах скриптийг хоёр аргын нэгээр хэрэглэж болно:</para>
|
||
|
||
<para>Дээрхтэй адил зүйлсийг дараах тушаалыг гараар оруулан
|
||
гүйцэтгэж болно:</para>
|
||
|
||
<screen>&prompt.root; <userinput>ipfw -q -f flush</userinput>
|
||
&prompt.root; <userinput>ipfw -q add check-state</userinput>
|
||
&prompt.root; <userinput>ipfw -q add deny all from any to any frag</userinput>
|
||
&prompt.root; <userinput>ipfw -q add deny tcp from any to any established</userinput>
|
||
&prompt.root; <userinput>ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state</userinput>
|
||
&prompt.root; <userinput>ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state</userinput>
|
||
&prompt.root; <userinput>ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state</userinput></screen>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>Төлөвт дүрмийн олонлог</title>
|
||
|
||
<para>Дараах <acronym>NAT</acronym> хийгдээгүй дүрмийн олонлог нь
|
||
аюулгүй байдлыг маш сайн хангасан, хамааруулсан галт ханын дүрмүүдийг
|
||
хэрхэн бичих жишээ юм. Хамааруулсан галт хана нь зөвхөн pass дүрмүүдэд тохирсон
|
||
үйлчилгээг зөвшөөрч, бусдыг бүгдийг хаана. Сүлжээний бүх сегментийг хамгаалахаар
|
||
хийгдсэн галт хананууд хамгийн багадаа хоёр
|
||
интерфэйстэй байх ба галт хана маягаар ажиллахын тулд дүрмүүдийг тусгайлан зааж
|
||
өгсөн байна.</para>
|
||
|
||
<para>&os;-г оролцуулаад бүх &unix; төрлийн систем нь үйлдлийн систем
|
||
дэх дотоод харилцаандаа lo0 интерфэйс болон 127.0.0.1 гэсэн IP хаягийг хэрэглэхээр
|
||
бүтээгдсэн байдаг. Галт ханын дүрмүүд нь дотооддоо хэрэглэж байгаа эдгээр пакетуудыг
|
||
чөлөөтэй нэвтрүүлэх дүрмүүдийг агуулсан байх ёстой.</para>
|
||
|
||
<para>Интернэттэй холбогдож байгаа интерфэйс дээр гадагшаа болон
|
||
дотогшоо холболтуудыг удирдах болон хянах дүрмүүдийг байрлуулна.
|
||
Энэ нь таны <acronym>PPP</acronym> <devicename>tun0</devicename> интерфэйс эсвэл таны DSL эсвэл кабель
|
||
модемд холбогдсон NIC байж болно.</para>
|
||
|
||
<para>Галт ханын цаана байгаа хувийн LAN-уудад нэг болон түүнээс дээш
|
||
тооны NIC-ууд холбогдсон тохиолдолд, тэдгээр интерфэйсүүдийн хувьд тэдгээр LAN
|
||
интерфэйсүүдээс ирсэн пакетуудыг чөлөөтэй нэвтрүүлэх дүрмийг агуулсан байх ёстой.</para>
|
||
|
||
<para>Дүрмүүд эхлээд гурван үндсэн хэсэгт хуваагдан зохион байгуулагдсан
|
||
байх ёстой: бүх чөлөөт халдашгүй интерфэйсүүд, нийтийн гадагшаа интерфэйс болон нийтийн дотогшоо интерфэйс.</para>
|
||
|
||
<para>Нийтийн интерфэйс бүр дээр байгаа дүрмүүдийн дараалал нь хамгийн олон тохиолддог
|
||
дүрмүүд нь хамгийн түрүүнд цөөн тохиолддог дүрмүүдээс өмнө байхаар, тухайн интерфэйс болон чиглэлийн
|
||
хувьд хаах болон бүртгэх дүрмүүд нь хамгийн сүүлд байхаар бичигдсэн байна.</para>
|
||
|
||
<para>Дараах жишээн дээрх гадагшаа хэсэг нь Интернэт хандалтыг зөвшөөрч өгөх
|
||
үйлчилгээг тодорхойлох сонголтын утгуудыг агуулсан зөвхөн <literal>allow</literal> дүрмүүдээс бүрдэж байна.
|
||
Бүх дүрмүүд <literal>proto</literal>, <literal>port</literal>, <literal>in/out</literal>, <literal>via</literal> ба
|
||
<literal>keep state</literal> тохируулгуудыг агуулсан байгаа.
|
||
<literal>proto tcp</literal> дүрмүүд нь төлөвт байдлыг идэвхжүүлж байгаа пакетийг keep state төлөвт хүснэгтэд нэмэх байдлаар,
|
||
сесс эхлүүлэх хүсэлтийг тодорхойлох зорилгоор <literal>setup</literal> тохируулгыг агуулсан байна.</para>
|
||
|
||
<para>Дотогшоо хэсэгт эхлээд хүсээгүй пакетуудыг хаах дүрмүүдийг бичсэн байна.
|
||
Энэ нь хоёр өөр шалтгаантай. Эхнийх нь хортой пакетууд нь
|
||
зөвшөөрөгдсөн пакетийн нэг хэсэг байж болох талтай. Эдгээр пакетуудыг
|
||
<literal>allow</literal> дүрэмд таарсан хэсэг дээр тулгуурлан зөвшөөрөлгүйгээр орхих ёстой.
|
||
Хоёр дахь шалтгаан нь тухайн хэсгийн хамгийн сүүлийн дүрмээр хааж бүртгэхийн оронд мэдэгдэж байгаа,
|
||
сонирхолгүй пакетуудыг чимээгүйхэн хааж болох юм.
|
||
Бүх пакетуудыг бүртгээд хаадаг хэсгийн хамгийн сүүлийн дүрмийг өөрийн систем уруу халдаж
|
||
байгаа хүмүүсийг шүүхэд шаардагдах халдлагын нотолгоог цуглуулахад хэрэглэж болно.</para>
|
||
|
||
<para>Өөр нэг тэмдэглэн хэлэх зүйл бол, хүсээгүй пакетуудын хариуд ямар ч хариу явуулахгүй
|
||
байх ёстойг санах хэрэгтэй. Буруу пакетууд орхигдож алга болох ёстой.
|
||
Ингэснээр халдлага явуулагч нь түүний явуулсан пакетууд таны системд
|
||
хүрсэн эсэх талаар юу ч мэдэхгүй үлдэх болно. Таны системийн талаар хэдий хэр бага мэднэ, төдий чинээ
|
||
аюулгүй байна гэсэн үг юм. Танигдаагүй портын дугаартай пакетуудын хувьд
|
||
<filename>/etc/services/</filename> файлаас эсвэл <ulink url="http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers">
|
||
</ulink> хаягаар тухайн порт ямар зориулалтаар ашиглагддагийг орж шалгаарай.
|
||
Троянуудын хэрэглэдэг портын дугааруудыг <ulink
|
||
url="http://www.sans.org/security-resources/idfaq/oddports.php"></ulink> хаягаар орж шалгаарай.</para>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title>Хамааруулсан дүрмийн олонлогийн жишээ</title>
|
||
|
||
<para>Дараах <acronym>NAT</acronym> хийгдээгүй дүрмийн олонлог нь
|
||
бүрэн хэмжээний хамааруулсан дүрмийн олонлог байгаа юм. Та энэ дүрмүүдийг өөрийн системдээ
|
||
ашиглахад буруудах юмгүй. Зөвшөөрөхийг хүсэхгүй байгаа үйлчилгээнүүдийн хувьд харгалзах
|
||
<literal>pass</literal> дүрмийг далдлаарай. Хэрэв бүртгэлд байгаа зарим мэдэгдлийг дахин харахыг хүсэхгүй,
|
||
бүртгэхийг хүсэхгүй байгаа бол дотогшоо хэсэгт <literal>deny</literal> дүрэм нэмж бичээрэй. Дүрэм бүрт байгаа
|
||
<devicename>dc0</devicename> гэсэн интерфэйсийн нэрийн оронд таны системийг Интернэт уруу холбож байгаа NIC картны
|
||
интерфэйсийн нэрээр сольж тавиарай. Хэрэглэгчийн <acronym>PPP</acronym>-н хувьд, энэ нь <devicename>tun0</devicename> байна.</para>
|
||
|
||
<para>Эдгээр дүрмүүдийг хэрэглэх явцад хэв маяг олж харах болно.</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Интернэт уруу чиглэсэн сесс эхлүүлэх хүсэлтийг төлөөлж байгаа
|
||
илэрхийллүүд бүгд <literal>keep-state</literal> хэрэглэж байгаа.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Интернэтээс ирж буй бүх зөвшөөрөгдсөн үйлчилгээнүүд живүүлэх халдлагыг
|
||
зогсоох үүднээс <literal>limit</literal> гэсэн тохируулгын хамт бичигдсэн байгаа.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Бүх дүрмүүд чиглэлийг тодотгохын тулд <literal>in</literal> эсвэл <literal>out</literal>-г хэрэглэсэн байгаа.</para>
|
||
</listitem>
|
||
|
||
<listitem>
|
||
<para>Бүх дүрмүүд пакетийн дайран өнгөрөх <replaceable>interface-name</replaceable> интерфэйсийг тодорхойлж өгөхдөө <literal>via</literal>-г хэрэглэсэн байгаа.</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>Дараах дүрмүүд <filename>/etc/ipfw.rules</filename> дотор байрлана.</para>
|
||
|
||
<programlisting>################ 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
|
||
# destined 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)
|
||
# Check packets originating from the public Internet
|
||
# destined 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 ###############################</programlisting>
|
||
</sect3>
|
||
|
||
<sect3>
|
||
<title><acronym>NAT</acronym> болон Төлөвт дүрмийн олонлогийн жишээ</title>
|
||
|
||
<indexterm>
|
||
<primary>NAT</primary>
|
||
|
||
<secondary>ба IPFW</secondary>
|
||
</indexterm>
|
||
|
||
<para>IPFW-н <acronym>NAT</acronym> функцыг идэвхжүүлэхийн тулд зарим
|
||
нэмэлт тохиргооны илэрхийллүүдийг идэвхжүүлэх хэрэгтэй болдог. Цөмийн эх кодын
|
||
бусад IPFIREWALL илэрхийллүүд дээр <literal>option IPDIVERT</literal> илэрхийллийг нэмж эмхэтгэн
|
||
тусгайлан бэлдсэн цөмийг гаргаж авах хэрэгтэй.</para>
|
||
|
||
<para><filename>/etc/rc.conf</filename> доторх энгийн IPFW тохируулгууд дээр
|
||
нэмж дараах тохируулгууд хэрэгтэй болно.</para>
|
||
|
||
<programlisting>natd_enable="YES" # Enable <acronym>NAT</acronym>D function
|
||
natd_interface="rl0" # interface name of public Internet NIC
|
||
natd_flags="-dynamic -m" # -m = preserve port numbers if possible</programlisting>
|
||
|
||
<para>Төлөвт дүрмүүдийг <literal>divert natd</literal> (Сүлжээний хаягийн Хөрвүүлэлт)
|
||
дүрмийн хамт хэрэглэх нь дүрмийн олонлог бичих логикийг төвөгтэй болгодог.
|
||
<literal>check-state</literal> ба <literal>divert natd</literal> дүрмүүдийн дүрмийн олонлог дахь байрлал нь маш
|
||
их нөлөөтэй. Энэ нь хялбар дайраад-өнгөрөх логик урсгал биш болно.
|
||
<literal>skipto</literal> гэсэн шинэ үйлдлийн төрлийг хэрэглэх болно. <literal>skipto</literal>-г хэрэглэхдээ
|
||
<literal>skipto</literal> дүрмийн дугаар хаашаа үсрэхээ мэдэж байхын тулд бүх дүрмүүдийг дугаарлах хэрэгтэй болно.</para>
|
||
|
||
<para>Дараах тайлбаргүй жишээн дээр пакет дүрмийн олонлогоор дайрч
|
||
өнгөрөх дарааллыг тайлбарлахаар сонгон авсан дүрэм бичих арга байгаа юм.</para>
|
||
|
||
<para>Дүрэмтэй ажиллах процесс дүрмийн файлд байгаа хамгийн эхний
|
||
дүрмээр эхлэн цааш дүрмүүдийг нэг нэгээр уншин, файлын төгсгөл хүртэл эсвэл
|
||
пакет аль нэг дүрмийн сонголтын шалгуурт тохирч галт ханыг орхих хүртэл үргэлжилнэ.
|
||
100, 101, 450, 500, ба 510 дугаартай дүрмүүдийн байрлалыг сайн анзаарах хэрэгтэй.
|
||
Эдгээр дүрмүүд нь гадагшаа болон дотогшоо чиглэлтэй пакетуудын хөрвүүлэлтийг
|
||
удирдах бөгөөд ингэснээр keep-state динамик хүснэгтэн дэх тэдгээрт харгалзах
|
||
мөрөнд хувийн LAN IP хаяг бүртгэгдсэн байх нөхцөлийг хангана. Дараа нь,
|
||
бүх зөвшөөрөх болон татгалзах дүрмүүдэд пакетийн явж буй чиглэл (өөрөөр хэлбэл гадагшаа эсвэл дотогшоо)
|
||
ба интерфэйсийг зааж өгсөн байгааг анзаараарай. Мөн гадагшаа сесс эхлүүлэх хүсэлтүүд,
|
||
сүлжээний хаягийн хөрвүүлэлтийн бүх <literal>skipto rule 500</literal>-с эхэлж байгааг анзаарна уу.</para>
|
||
|
||
<para>Нэгэн LAN хэрэглэгч вэб хуудас үзэхийн тулд вэб хөтчийг хэрэглэж байна гэж бодъё.
|
||
Веб хуудсууд 80-р портоор дамждаг. Пакет галт хананд ирнэ,
|
||
гадагшаа чиглэж байгаа тул 100-р дүрмэнд тохирохгүй. 101-р дүрмийг мөн
|
||
өнгөрнө, яагаад гэвэл энэ нь хамгийн анхны пакет тул keep-state
|
||
динамик хүснэгтэнд хараахан бичигдэж амжаагүй байгаа. Пакет эцэст нь
|
||
125-р дүрэм дээр ирж, дүрэмд таарна. Энэ пакет Интернэт уруу харсан
|
||
NIC-р гадагшаа гарч байгаа. пакетийн эхлэл IP хаяг нь хувийн LAN IP хаяг хэвээр байгаа.
|
||
Энэ дүрмэнд таарах үед хоёр үйлдэл хийгдэнэ. <literal>keep-state</literal> тохируулга энэ дүрмийг
|
||
keep-state динамик дүрмийн хүснэгтэнд нэмнэ, мөн зааж өгсөн үйлдлийг гүйцэтгэнэ.
|
||
Үйлдэл нь динамик хүснэгтэд нэмэгдсэн мэдээллийн нэг хэсэг байна. Энэ тохиолдолд
|
||
<literal>skipto rule 500</literal> байна. 500-р дүрэм нь пакетийн IP хаягийг <acronym>NAT</acronym> хийж,
|
||
пакетийг гадагш явуулна. Үүнийг бүү мартаарай, энэ бол маш чухал шүү.
|
||
Энэ пакет өөрийн замаар хүрэх газраа хүрэх бөгөөд хариу пакет үүсч буцаж илгээгдэнэ.
|
||
Энэ шинэ пакет буцаж ирэхдээ мөн л энэ дүрмийн олонлогийг дайрна.
|
||
Энэ үед харин 100-р дүрэмд тохирч, очих IP хаяг нь буцаж харгалзах LAN IP хаяг уруу хөрвүүлэгдэнэ.
|
||
Дараа нь <literal>check-state</literal> дүрмээр гарах ба хүснэгтэнд явагдаж байгаа сесс харилцаанд оролцож байгаа
|
||
гэж тэмдэглэгдсэн тул цааш LAN уруу нэвтрэн орно. Тэгээд өөрийг нь анх явуулсан LAN PC уруу очих ба
|
||
алсын серверээс өөр хэсэг өгөгдлийг авахыг хүссэн шинэ пакетийг явуулна. Энэ удаа энэ пакет
|
||
<literal>check-state</literal> дүрмээр шалгагдах ба түүний гадагшаа урсгалд харгалзах мөр олдох тул харгалзах
|
||
үйлдэл <literal>skipto 500</literal>-г гүйцэтгэнэ. Пакет 500-р мөр уруу үсэрч <acronym>NAT</acronym> хийгдэн цааш
|
||
өөрийн замаар явах болно.</para>
|
||
|
||
<para>Дотогшоо урсгал дээр, идэвхтэй сесс харилцаанд оролцож байгаа
|
||
гаднаас ирж байгаа бүх зүйлс автоматаар <literal>check-state</literal> дүрмээр болон зохих
|
||
<literal>divert natd</literal> дүрмүүдээр шийдэгдэнэ. Энд бидний хийх ёстой зүйл бол
|
||
хэрэггүй пакетуудыг татгалзаж, зөвшөөрөгдсөн үйлчилгээг нэвтрүүлэх юм.
|
||
Галт ханын байгаа машин дээр апачи сервер ажиллаж байна, тэгээд Интернэтээс
|
||
хүмүүс энэ дотоод вэб сайт уруу хандаж байна гэж бодъё. Шинэ дотогшоо сесс эхлүүлэх
|
||
хүсэлтийн пакет 100-р дүрэмд тохирох бөгөөд түүний IP хаяг галт ханын LAN IP
|
||
хаяг уруу оноолт хийгдэнэ. Дараа нь энэ пакет цааш бүх дүрмүүдээр шалгагдан
|
||
эцэст нь 425-р дүрэмд тохирно. Энэ дүрэмд таарах үед хоёр үйлдэл хийгдэнэ.
|
||
Энэ дүрэм keep-state динамик дүрмийн хүснэгтэнд нэмэгдэнэ, мөн зааж өгсөн үйлдлийг гүйцэтгэнэ.
|
||
Гэвч энэ тохиолдолд энэ эхлэл IP хаягнаас эхэлсэн шинэ сесс эхлүүлэх хүсэлтийн тоо 2-оор хязгаарлагдана.
|
||
Энэ нь тодорхой порт дээр ажиллаж байгаа үйлчилгээний хувьд DoS халдлагаас хамгаална.
|
||
Харгалзах үйлдэл нь <literal>allow</literal> тул пакет LAN уруу нэвтэрнэ. Хариу болон үүсгэгдсэн пакетыг
|
||
<literal>check-state</literal> дүрэм идэвхтэй сесс харилцаанд хамаарч байгаа гэж танина. Тэгээд 500-р дүрэм уруу шилжүүлэн,
|
||
пакет тэнд <acronym>NAT</acronym> хийгдээд цааш гадагшаа интерфэйсээр гарна.</para>
|
||
|
||
<para>Жишээ дүрмийн олонлог #1:</para>
|
||
|
||
<programlisting>#!/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 ##################</programlisting>
|
||
|
||
<para>Дараах жишээ дээрхтэй нилээд төстэй боловч туршлагагүй IPFW дүрэм бичигчид зориулан
|
||
дүрмүүд юунд зориулагдсаныг тайлбарласан тайлбартай байгаагаараа онцлог юм.</para>
|
||
|
||
<para>Жишээ дүрмийн олонлог #2:</para>
|
||
|
||
<programlisting>#!/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)
|
||
# Check session start requests originating from behind the
|
||
# firewall on the private network or from this gateway server
|
||
# destined 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)
|
||
# Check packets originating from the public Internet
|
||
# destined 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 ###############################</programlisting>
|
||
</sect3>
|
||
</sect2>
|
||
</sect1>
|
||
</chapter>
|