Прежде всего мне нужно организовать доступ в сеть интернет. Сначала на самом шлюзе, а затем и во всей локальной сети.
PPPoE
Для этого я подниму PPPoE соединение.
В FreeBSD PPP «из коробки», осталось только настроить:
Конфиг для PPP распологается в /etc/ppp.
Сохраняю пример конфигурационного файла:
# cp /etc/ppp/ppp.conf /etc/ppp/ppp.conf.sample
Редактирую конфиг
# ee /etc/ppp/ppp.conf
У меня файл ppp.conf выглядит следующим образом:
default: set log Phase Chat LCP IPCP CCP tun command ident user-ppp VERSION (built COMPILATIONDATE) vt: set device PPPoE:rl0 set authname LOGIN set authkey PASSWORD set mru 1492 set mtu 1492 set dial set login add default HISADDR
Где LOGIN и PASSWORD выдаются провайдером
Для того чтобы линк поднимался при загрузке системы прописываем rc.conf следущее:
# ppp_enable="YES" >> /etc/rc.conf
# ppp_mode="ddial" >> /etc/rc.conf
# ppp_profile="vt" >> /etc/rc.conf
# ppp_nat="NO" >> /etc/rc.conf
ppp_mode — тип ppp соединения
ppp_profile — профиль по которому производить соединение (см. ppp.conf)
ppp_nat — отключаю встроенный в ppp NAT. Буду использовать ipfw.
Теперь при включении системы будет подниматься интерфейс tun0, через который у меня будет интернет.
Настройка IPFW и NAT
Следующим шагом я создам правила для firewall′а, которые разрешать ходить интернет машинам из моей локальной домашней сети.
Создаю файл для правил и устанавливаю на него права (исполняемый файл, у которого владелец root:wheel)
# touch /etc/ipfw.rules && chmod 750 /etc/ipfw.rules && chown root:wheel /etc/ipfw.rules
Начиная с FreeBSD 7 в системе появился NAT в ipfw, который я и буду использовать, вместо демона natd
Для того, что бы это было возможно, в ядре должны быть прописаны следующие опции:
options IPFIREWALL # firewall options IPFIREWALL_VERBOSE # firewall log options IPFIREWALL_VERBOSE_LIMIT=1000 # firewall log limit options IPFIREWALL_FORWARD # ipfw forwarding options DUMMYNET # shaping options IPFIREWALL_NAT # ipfw nat options LIBALIAS # for ipfw nat or ng_nat
Правила firewall’a
# cat /etc/ipfw.rules
#!/bin/sh FwCMD="/sbin/ipfw -q " LanOut="tun0" LanIn="fxp0" IpIn="192.168.100.1" NetIn="192.168.100.0/24" ${FwCMD} -f flush ${FwCMD} add 100 check-state ${FwCMD} add 101 allow ip from any to any via lo0 ${FwCMD} add 102 deny ip from any to 127.0.0.0/8 ${FwCMD} add 103 deny ip from 127.0.0.0/8 to any ${FwCMD} add 160 allow tcp from any to any established ${FwCMD} add 170 allow icmp from any to any icmptypes 0,3,8,11 ${FwCMD} add 180 allow ip from me to any out xmit ${LanOut} # NAT ${FwCMD} nat 1 config log if ${LanOut} reset same_ports deny_in ${FwCMD} 150 add nat 1 all from ${NetIn} to not ${NetIn} out via ${LanOut} ${FwCMD} 150 add nat 1 all from any to me in via ${LanOut} ${FwCMD} add 200 allow ip from ${NetIn} to ${NetIn} via ${LanIn} ${FwCMD} add 64990 allow ip from any to any
Это самый простой вариант firewall’а. Практически же нет ничего кроме NATа. Однако, мне для начала вполне достаточно.