Продолжая нашу тему, переходим к процессу настройки сервисов.
Настраиваем 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. Как это делать более детально и какие есть способы, я описал в другой статье..
Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:
Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)
Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455
На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел