Продолжая нашу тему, переходим к процессу настройки сервисов.

Настраиваем bind, а давайте как обновим его до версии 9, не забываем подключимся к интернету:
# ppp -ddial inet
# cd /usr/ports/dns/bind9
# make install clean

После чего делаем настройку bind 9 по данной статье.

Далее идем настраивать конфиги для NAT. Делаем два конфига, так как будет 2 NATa.

# cd /usr/local/etc
# mcedit natd_rl0.conf

Доводим до вида:

###interface rl0
use_sockets yes
same_ports yes
unregistered_only yes
###port 8668
#redirect_port tcp 172.16.5.2:3389 3389 #RDP
#redirect_port udp 172.16.5.2:53 53 #dns

# mcedit natd_tun0.conf

Вносим записи:

###interface tun0
use_sockets yes
same_ports yes
unregistered_only yes
###port 8669
#redirect_port tcp 172.16.5.2:3389 3389 #RDP
#redirect_port tcp 172.16.5.2:80 80 #Sayt
#redirect_port tcp 172.16.5.2:53 53 #dns
#redirect_port udp 172.16.5.2:53 53 #dns

Делаем скрипт автопроверки интернета и реконекта. Ложим его в /usr/local/etc/if_ping.sh и делаем его запускаемым, после чего скармливаем его CRONу.
# cat /usr/local/etc/if_ping.sh


#!/bin/sh
###Script_pereconnecta
if ping -c 3 provider.com > /dev/null
then
exit 0
else
##киляем
killall ppp
sleep 37
killall ppp
sleep 5
ppp -ddial inet
#В данном месте можно прописать статические маршруты
#/sbin/route add 121.150.47.11 10.10.10.252
#/sbin/route add 121.190.9.17 10.10.10.252
fi

В принципе данный скрипт не досконален, но как правило быстро наструганный на коленке, врядли потом будет переделываться если он работает :). Его можно доработать, сделав цикл в котором будет проверятся не пропало ли соединение с туннеля, или до появления на консоли «No matching processes were found». Также можно сделать что бы маршруты прописывались не в скрипте, а брались из файла, ну и так далее. Вариантов в общем море..


# echo '*/5 * * * * root /usr/local/etc/scripts/if_ping.sh' >> /etc/crontab

Занесли в крон, с запуском каждые 5 минут.

Теперь приступим к настройке нашего Firewall, статьи на тему его настройки можно посмотреть здесь.

Так, как я хочу привести пример firewalla под 2 NAT, то я вылаживаю его ниже, как он есть со шлюза:

# cat firewall.sh

#!/bin/sh
###Firewall_
######

###Interface_on_PC
InetIf="tun0";
LanInIf="rl0";
LanOutIf="rl1";
LanOutIp="172.16.5.1";
NetMask="24"

###
ipfw="/sbin/ipfw -q"

${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush

#####0.Подсчёт трафика для графиков..
###Iface_inet
${ipfw} add 50 count ip from any to any in via ${InetIf}
${ipfw} add 51 count ip from any to any out via ${InetIf}
###In_Inet
${ipfw} add 52 count ip from any to any in via ${LanInIf}
${ipfw} add 53 count ip from any to any out via ${LanInIf}
###LAN
${ipfw} add 54 count ip from any to any in via ${LanOutIf}
${ipfw} add 55 count ip from any to any out via ${LanOutIf}
###FTP_traffic
${ipfw} add 56 count ip from any to me 20,21
${ipfw} add 57 count ip from me 20,21 to any
###Users_inet
#${ipfw} add 58 count ip from any to ${LanOutIp}/${NetMask} not src-ip me
#${ipfw} add 59 count ip from ${LanOutIp}/{$NetMask} to any not dst-ip me
###Apache
${ipfw} add 62 count ip from me 80 to any
${ipfw} add 63 count ip from any to me 80
##End_0.
${ipfw} add 201 deny ip from me 3306 to any out via ${InetIf}
${ipfw} add 202 deny ip from me 137-139,445 to any via ${InetIf} not dst-ip 10.10.0.0/16, 192.168.0.0/16
${ipfw} add 203 allow ip from me to any established via ${InetIf}
###Настраиваем локальный интерфейс (localhost)
${ipfw} add 901 allow all from any to any via lo0
${ipfw} add 902 deny all from any to 127.0.0.0/8
${ipfw} add 903 deny all from 127.0.0.0/8 to any
####Разрешаем доступ к серверу с мира по ssh
${ipfw} add 907 allow tcp from any to me 22
${ipfw} add 908 allow tcp from me 22 to any
######2.Рубим частные сeти на внешнем интерфейсе локалки
#${ipfw} add 1010 deny ip from any to 10.0.0.0/8 in via ${InetIf}
#${ipfw} add 1011 deny ip from any to 172.16.0.0/12 in via ${InetIf}
#${ipfw} add 1012 deny ip from any to 192.168.0.0/16 in via ${InetIf}
${ipfw} add 1013 deny ip from any to 0.0.0.0/8 in via ${LanInIf}
#рубим автоконфигуреную частную сеть
${ipfw} add 1014 deny ip from any to 169.254.0.0/16 in via ${LanInIf}
#рубаем мультикастовые рассылки
${ipfw} add 1015 deny ip from any to 240.0.0.0/4 in via ${LanInIf}
#рубим фрагментированные icmp
${ipfw} add 1016 deny icmp from any to any frag via ${LanInIf}
#рубим широковещательные icmp на внешнем интерфейсе
${ipfw} add 1017 deny log icmp from any to 255.255.255.255 in via ${LanInIf}
${ipfw} add 1018 deny log icmp from any to 255.255.255.255 out via ${LanInIf}
##По тунелю поднятом в мир (tun0)
#${ipfw} add 1020 deny ip from any to 10.0.0.0/8 in via ${InetIf}
#${ipfw} add 1021 deny ip from any to 172.16.0.0/12 in via ${InetIf}
#${ipfw} add 1022 deny ip from any to 192.168.0.0/16 in via ${InetIf}
${ipfw} add 1023 deny ip from any to 0.0.0.0/8 in via ${InetIf}
${ipfw} add 1024 deny ip from any to 169.254.0.0/16 in via ${InetIf}
${ipfw} add 1025 deny ip from any to 240.0.0.0/4 in via ${InetIf}
${ipfw} add 1026 deny icmp from any to any frag via ${InetIf}
${ipfw} add 1027 deny log icmp from any to 255.255.255.255 in via ${InetIf}
${ipfw} add 1028 deny log icmp from any to 255.255.255.255 out via ${InetIf}
#####End_2.
###4.Теперь включаем NAT . эта штука преобразовует локальные адреса в инет и назад (короче, раздает инет по всем портам)
${ipfw} add 1101 divert 8668 ip from ${LanOutIp}/${NetMask} to any out via ${LanInIf}
${ipfw} add 1102 divert 8668 ip from any to me in via ${LanInIf}
${ipfw} add 1103 divert 8669 ip from ${LanOutIp}/${NetMask} to any out via ${InetIf}
${ipfw} add 1104 divert 8669 ip from any to me in via ${InetIf}
###Настраиваем локальный интерфейс (localhost)
${ipfw} add 1201 allow all from any to any via lo0
${ipfw} add 1202 deny all from any to 127.0.0.0/8
${ipfw} add 1203 deny all from 127.0.0.0/8 to any
####Разрешаем доступ к серверу с мира по ssh
${ipfw} add 1304 allow tcp from any to me 22
${ipfw} add 1305 allow tcp from me 22 to any
######2.Рубим частные сeти на внешнем интерфейсе локалки
#${ipfw} add 1310 deny ip from any to 10.0.0.0/8 in via ${InetIf}
#${ipfw} add 1311 deny ip from any to 172.16.0.0/12 in via ${InetIf}
#${ipfw} add 1312 deny ip from any to 192.168.0.0/16 in via ${InetIf}
${ipfw} add 1313 deny ip from any to 0.0.0.0/8 in via ${LanInIf}
#рубим автоконфигуреную частную сеть
${ipfw} add 1314 deny ip from any to 169.254.0.0/16 in via ${LanInIf}
#рубаем мультикастовые рассылки
${ipfw} add 1315 deny ip from any to 240.0.0.0/4 in via ${LanInIf}
#рубим фрагментированные icmp
${ipfw} add 1316 deny icmp from any to any frag via ${LanInIf}
#рубим широковещательные icmp на внешнем интерфейсе
${ipfw} add 1317 deny log icmp from any to 255.255.255.255 in via ${LanInIf}
${ipfw} add 1318 deny log icmp from any to 255.255.255.255 out via ${LanInIf}
##По тунелю поднятом в мир (tun0)
#${ipfw} add 1320 deny ip from any to 10.0.0.0/8 in via ${InetIf}
#${ipfw} add 1321 deny ip from any to 172.16.0.0/12 in via ${InetIf}
#${ipfw} add 1322 deny ip from any to 192.168.0.0/16 in via ${InetIf}
${ipfw} add 1323 deny ip from any to 0.0.0.0/8 in via ${InetIf}
${ipfw} add 1324 deny ip from any to 169.254.0.0/16 in via ${InetIf}
${ipfw} add 1325 deny ip from any to 240.0.0.0/4 in via ${InetIf}
${ipfw} add 1326 deny icmp from any to any frag via ${InetIf}
${ipfw} add 1327 deny log icmp from any to 255.255.255.255 in via ${InetIf}
${ipfw} add 1328 deny log icmp from any to 255.255.255.255 out via ${InetIf}
#Пускаем сервер в мир
##Разрешаем серверу в локалку
${ipfw} add 1331 allow ip from any to any via ${LanInIf}
##QoS
${ipfw} pipe 1 config bw 220Kbit/s queue 20KBytes
${ipfw} queue 1 config pipe 1 weight 15
${ipfw} queue 2 config pipe 1 weight 35
${ipfw} queue 3 config pipe 1 weight 55
${ipfw} queue 4 config pipe 1 weight 75
${ipfw} queue 5 config pipe 1 weight 95

${ipfw} add 1501 queue 5 udp from any to me 53 via ${InetIf}
${ipfw} add 1502 queue 5 udp from any 53 to any via ${InetIf}
${ipfw} add 1503 queue 5 ip from any to me 53 via ${InetIf}
${ipfw} add 1504 queue 4 udp from any to any 123 via ${InetIf}
${ipfw} add 1505 queue 2 tcp from any to me 20,21 via ${InetIf}
${ipfw} add 1506 queue 4 tcp from any to me 25,110,43,143 via ${InetIf}
${ipfw} add 1507 queue 4 tcp from me 25,110,43,143 to any via ${InetIf}
${ipfw} add 1508 queue 3 tcp from any to me 80 via ${InetIf}
${ipfw} add 1512 queue 3 icmp from any to any via ${InetIf}
${ipfw} add 905 queue 5 tcp from any to any 22 via ${InetIf}
${ipfw} add 906 queue 5 tcp from any 22 to any via ${InetIf}

#####Здесь можно прописать непосредственно порты которые нам нужны, или все сразу
${ipfw} add 1601 allow udp from any to any 53
${ipfw} add 1602 allow udp from any 53 to any
${ipfw} add 1603 allow ip from any to any 53
${ipfw} add 1604 allow udp from any to any 123 via ${InetIf}
${ipfw} add 1605 allow tcp from any to me 20,21 via ${InetIf}
${ipfw} add 1606 allow tcp from any to me 25,110,43,143
${ipfw} add 1607 allow tcp from me 25,110,43,143 to any
${ipfw} add 1608 allow tcp from any to any 80
${ipfw} add 1609 allow tcp from any 80 to any
###End_my_open_ports

${ipfw} add 2001 allow tcp from any to me 49152-65535 via ${InetIf}
${ipfw} add 2002 allow udp from any 49152-65535 to me via ${InetIf}
${ipfw} add 2004 allow icmp from any to any icmptypes 0,8,11 via ${LanInIf}
${ipfw} add 2004 allow icmp from any to any icmptypes 0,8,11 via ${InetIf}
${ipfw} add 2004 allow icmp from ${LanOutIp}/${NetMask} to me icmptypes 0,8,11
##Разрешаем то что уже проходит через сервер
${ipfw} add 3091 allow tcp from any to any established
##Разрешаем серверу в инет
${ipfw} add 3092 allow ip from me to any out xmit ${InetIf}
##########End
${ipfw} add 4002 allow ip from any to me 22
${ipfw} add 4002 allow ip from me 22 to any
${ipfw} add 5005 allow ip from any to 172.16.5.0/24
${ipfw} add 5006 allow ip from 172.16.5.0/24 to any
${ipfw} add 5009 allow ip from any to any established
${ipfw} add 6001 deny ip from any to any

После создания данного Firewallа, делаем еще один скрипт, для запуска NATов.
Можно конечно и прописать запуск через файл /etc/rc.conf, но мне больше нравится так.


# cat /usr/local/etc/rc.d/nat_start.sh

#!/bin/sh
#######
/sbin/natd -p 8668 -f /usr/local/etc/natd_rl0.conf -n rl0
/sbin/natd -p 8669 -f /usr/local/etc/natd_tun0.conf -dynamic -n tun0

/usr/local/etc/firewall.sh

Теперь наша задача, дать права на исполнение данных скриптов и запустить:

# chmod +x /usr/local/etc/firewall.sh
# chmod +x /usr/local/etc/rc.d/nat_start.sh

# /usr/local/etc/rc.d/nat_start.sh

Если не выдало никакой ругани, значит всё суппер.. все должно работать.
Локалка бегает по локалке, а инет, через инет.

Через пару дней родились еще парочку строк для приоритета очередей windows папок, которые были добавлены в firewall:

##QoS
${ipfw} pipe 1 config bw 220Kbit/s queue 20KBytes
${ipfw} queue 1 config pipe 1 weight 15
${ipfw} add 1515 queue 1 tcp from 10.10.0.0/16,192.168.0.0/16,151.16.42.0/24,10.1.15.0/24,193.18.135.0/24 to me 137-138,445 via ${InetIf}

И после того как это правило было портировано и запущено в firewall — визуально интернет (22й, 53й, 80й порты и почта) стали совсем летать (соответственно канала), даже при полной его загрузке sambой.

PS. Для удобства можно еще у себя поставить DHCP сервер и настроить его в свою внутреннюю сеть.
Да, забыл сказать, перед запуском скрипта для Firewallа — нужно пересобрать ядро таким способом, что бы в нем была включена функция данной приблуды, или подгрузить модулем в ядро, но вкомпилить надежнее.. Как пересобирать ядро вкратце приводилось в статье обновление FreeBSD. Как это делать более детально и какие есть способы, я описал в другой статье..

Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:

http://noted.org.ua/?p=240


Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)

Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455

На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел

Add your comment now

You must be logged in to post a comment.