Где опции: IPFIREWALL - задействует фильтрацию пакетов DIVERT - позволит нам в дальнейшем использовать NAT DUMMYNET - предоставляет возможности ограничения полосы пропускания IPFIREWALL_VERBOSE - включает режим регистрации IPFIREWALL_VERBOSE_LIMIT=100 - ограничивает размер журнального файла
Опции DIVERT и DUMMYNET здесь описаны не будут, но их включение в состав ядра позволит избежать перекомпиляции ядра при возникновении желания раздавать Интернет локальной сети. После чего компилируем и устанавливаем ядро:
bash-2.05b# config Irish bash-2.05b# cd ../compile/Irish bash-2.05b# make depend bash-2.05b# make bash-2.05b# make install bash-2.05b# shutdown -r now
У нас имеется сетевая карта Realtek 8139 (rl0), которая подсоединена к ADSL модему Zyxel Omni ADSL LAN EE. Для организации связи мы используем PPPoE, поэтому в правилах у нас будет использоваться именно rl0, а не tun0. Опции ppp_enable, ppp_mode и ppp_profile обеспечивают нам доступ в Интернет при загрузке машины, хотя скрипт ppp можно запускать и вручную. Пишем /etc/ppp/ppp.conf:
default:
test: set device PPPoE:xl0 set MTU 1492 set MRU 1492
set dial set crtscts off set speed sync accept lqr
set log Phase LCP IPCP CCP Warning Error Alert set ifaddr 10.0.0.1/0 10.0.0.2/0 0.0.0.0 0.0.0.0 add default HISADDR set login set authname ppp0012345@mtu set authkey your_password
set server /var/run/ppp/ppp.pid "" 0117
Как уже неоднократно говорилось и писалось, что именно будет пропускаться во внешний мир и к чему будет доступ извне - решать только вам, руководствуясь советами и здравым смыслом. Например, /etc/firewall может выглядеть так:
$cmd 00500 check-state #----------------Blocking------------------------ # Block SAMBA $cmd 00110 deny { tcp or udp } from any to any 135,137,138,139,369,445,520,5000
# i'am dont want this $cmd 00120 unreach port { tcp or udp } from any to me 113
# Stop allow IP Packets without (or empty) mss options $cmd 00130 deny log tcp from any to any tcpoptions !mss setup $cmd 00140 add deny log tcp from any to any in tcpflags syn,fin #----------------Darwin------------------------ $cmd 00600 allow tcp from any to me 8000 via $oif $cmd 00610 allow tcp from any to me 554 via $oif #----------------DNS------------------------ $cmd 00700 allow tcp from any to $odns 53 out via $oif setup keep-state $cmd 00710 allow udp from any to $odns 53 out via $oif keep-state #----------------SSH------------------------ $cmd 00800 allow tcp from 172.16.2.20 to me 22 via $oif №-----------------Common----------------------- $cmd 00820 allow ip from me to any $cmd 00830 allow ip from 127.0.0.1 to 127.0.0.1 via lo0 $cmd 00830 allow ip from $oip to $oip via lo0 $cmd 00830 deny ip from 127.0.0.1 to any $cmd 00830 deny ip from any to 127.0.0.1 #---------------PING------------------------ $cmd 00900 allow icmp from any to any icmptypes 0,3,8,11,12,13,14 #----------------Deny all-------------------- $cmd 06000 deny log ip from any to any
В данном примере в мир вещает в мир Darwin Streaming Server, разрешен вход по ssh c работы, причем эта же машина играет роль DNS сервера. Данный набор не является идеальным, но перед ним такая цель и не ставилась. Хороший набор правил для начинающего пользователя находится в /etc/rc.firewall, загружать эти вы можете с помощью опции firewall_type, которая может принимать значения:
open - открыто все client - основные функции защиты локальной машины simple - основные функции защиты локальной сети closed - блокировка всего, за искоючением lo0 UNKNOWN - правила фильтрации не загружаются filename - загружать правила из файла(необходимо указание полного пути)
Вот еще один пример правил фильтрации, наиболее полно подходящий, для использования с ADSL:
#!/bin/sh # the file /etc/firewall - configuration script for ipfw
# already established connections continue going through ipfw add 01000 allow tcp from any to any established
# local adaptors (not tun0 that is). 'rl0' is connected to the DSL modem # for PPPoE. You should # change these to match your own system. If you are not using 'PPPoE' then # you should exclude the entry for the adaptor that is connected to the internet. ipfw add 01100 allow all from any to any via rl0 # don't forget the loopback interface or some things might break ipfw add 01101 allow all from any to any via lo0
# udp access control (all adaptors) ipfw add 02000 allow udp from any to any 1024-65535,domain,daytime,time,echo,discard,chargen
# allow udp access to any port when the packet is outgoing or 'fragment' ipfw add 02001 allow udp from any to any out ipfw add 02500 allow udp from any to any frag
# tcp access control - note that 'ftp-data' must be specified by port number '20' ipfw add 03000 allow tcp from any to any http,https,ftp,20 ipfw add 03000 allow tcp from any to any 1024-65535,ssh,domain,telnet ipfw add 03000 allow tcp from any to any daytime,time,echo,discard
# if you want services such as 'auth' 'pop3' or 'smtp' to be accessed by the outside # world, consider uncommenting the following line # ipfw add 03000 allow tcp from any to any auth,pop3,smtp
# outgoing TCP packets - no filtering at all ipfw add 03001 allow tcp from any to any out
# icmp packets (ping). 'icmptypes' are listed based on recommendations from # the FreeBSD handbook on ipfw. ipfw add 04000 allow icmp from any to any icmptypes 0,3,8,11,12,13,14
# These next 4 entries are needed for VPN. They can be removed if you won't be using it ipfw add 04500 allow esp from any to any ipfw add 04501 allow gre from any to any ipfw add 04502 allow udp from any to any 500 ipfw add 04503 allow tcp from any to any 1023,1723 # note that '1723' was still mentioned here. That is in case you filter it elsewhere
# logging and denying ipfw add 05999 deny log ip from any to any frag
# this next one is by default the last one. You can choose a LARGE number if you # like. I chose '6000', you can pick anything up to 65535. In FreeBSD the rule # for '65535' is initially defined as 'deny all from any to any' when you load ipfw.