Начало > BSD > FreeBSD + PF (Packet Filter)

FreeBSD + PF (Packet Filter)

Как, чрез FreeBSD платформа да имаме интернет на машините във вътрешната мрежа, въпреди, че isp-тo го забранява. TTL-ът на върнатите от доставчика пакети e 1 и след като минат през рутера не достигат машината към която трябва да отидат. Какво да правим ?
Дифолтния кърнел на FreeBSD няма съпорт за pf, затова трябва да се прекомпилира кърнела с 3 допълнителни значещи реда реда:

#Packet Filter
device pf # Support for OpenBSD’s Packet Filter
device pflog # Enables logging the network traffic
device pfsync # Monitor “State Changes”

Отваряме за едит /etc/rc.conf и вътре за pf ни трябва:

pf_enable=”YES”
pf_rules=”/etc/pf.conf”
pf_flags=”“
pflog_enable=”YES”
pflog_logfile=”/var/log/pflog”
pflog_flags=”“

Следващата стъпка е основното – правилата в /etc/pf.conf. Тук е малко по-особеното – трябва да се деасемблират пакетите, да се сетне нужната ни дължина, да се асемблират обратно и тогава да се изпратят. Дадените примери са за една машина, която ще се връзва и един ethernet interface, но не е проблем да са повече лан-картите, или пък от една лан-карта да отива кабел в switch, друг router или някакъво друго мрежо-capable дивайсче
Ето какво ни трябва в /etc/pf.conf:

#######################################
## PACKETS MODIFYING #######################
scrub in on $ext_if all min-ttl 25 max-mss 1400 fragment reassemble
scrub out on $ext_if all min-ttl 65 max-mss 1400 fragment reassemble

scrub in
scrub in all fragment reassemble
scrub in on $ext_if all no-df fragment reassemble

#######################################
## NAT ##################################
# Internal Machines rules
nat on $all_if from to any -> ($ext_if)

Последните 2 реда са за пример – за всеки запис – нов нат като предходните. Ето краткото обяснение на горенаписаното:

scrub-овете служат да си поиграем с пакетите. Накратко какво става: на изходящите пакети слагаме TTL 65, а на входящите – 25. Така сме сигурни, че входящите пакети ще пристигнат до машината, която ги чака и няма да бъдат загубени по трасето.

nat-овете map-ват пакетите и след като се получи отговор се пращат до машината, която ги е изпратила първоначално. Идеята с няколко думи е, че ако машина М1 изпрати пакет до сървър S1, mинаващ през рутер R1, то nat-ът на R1 изпраща пакета “от негово име” като прави таблица, в която се пази информацията, че резултатът ще се препрати обратно до М1. S1 отговаря на R1 и nat-ът пренасочва пакета към M1.

И за променливите: $ext_if е лан-картата с жицата от доставчика. $all_if – списък с всички интерфейси, с които искам да работя. Изглежда по този начин: all_if=”{ rl0 re0 lo0 }”. int_machines> е таблица с IP-тата на всички машини от вътрешната мрежа. Ето как се създава подобна таблица:
table {\
,\
\
}
Трябва да се обърне внимане на предпоследния ред – няма запетая накрая ;)
също е таблица, изглежда по същия начин като (с други ип-та вътре естествено :>). За мое улеснение в таблицата с IP-тата на машините във вътрешната мрежа не съм набил IP-тата вътре. Предварително са създадени променливи с името на всяка от машините и нейното IP и после тези променливи са написани в таблицата. Още един плюс за таблиците – динамично може да се вкарват IP-та, но това е тема на друг разговор…
Бием един рестарт заради кърнела и сме готови :)
Статията е взета от ТУК.

Сподели с приятели:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • blogmarks
  • MySpace
  • PDF
  • RSS
  • Socialogs
  • Webnews.de
  • Add to favorites
  • Live
  • MyShare
  1. Все още няма коментар
  1. 0 trackbacks