Настроил ipfw согластно инструкции от lissyara. Спасибо ему ОГРОМНОЕ за проделанную работу!
Теперь по делу... Перешел с natd на kernel nat. Раньше файрвол работал отлично, а сейчас все порты открыты... Не могу ничего закрыть. Фряха пингует внешку и локалку. У юзеров за прокси инет есть. Проброс портов работает. Не работает только закрытие портов.
Вот мои параметры:
rc.conf
Код: Выделить всё
# -- sysinstall generated deltas -- # Sat Apr 28 16:44:13 2012
# Created: Sat Apr 28 16:44:13 2012
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
# -- sysinstall generated deltas -- # Sat Apr 28 12:51:30 2012
ifconfig_alc0="inet 192.168.1.34 netmask 255.255.255.0"
hostname="xxx.ru"
sshd_enable="YES"
gateway_enable="YES" # закоментил для прозрачного режима
#Внешка
ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="NO" # if you want to enable nat for your local network, otherwise NO
ppp_profile="name_of_service_provider"
#MySQL
mysql_enable="YES"
#Apache
apache22_enable="YES"
#DNS
named_enable="YES"
named_program="/usr/sbin/named"
named_flags="-u bind -c /etc/namedb/named.conf"
#Файрвол
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_nat_enable="YES"
firewall_nat_interface="tun0"
#firewall_type="OPEN"
#ProFTPD
proftpd_enable="YES"
proftpd_flags=""
#Webmin
webmin_enable="YES"
#SQUID
squid_enable="YES"
#SAMS
sams_enable="YES"
#Отключаем проверку диска(ов) в фоне
fsck_y_enable="YES"
background_fsck="NO"
#Настраиваем синхронизацию времени
ntpdate_enable="YES"
ntpd_enable="YES"
#Русская консоль
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"
scrnmap="koi8-r2cp866"
keymap="ru.koi8-r"
Код: Выделить всё
# Proxy personal options
options IPFIREWALL # Включаем фаерволл
options IPFIREWALL_VERBOSE # Включаем логирование для фаерволла
options IPFIREWALL_VERBOSE_LIMIT=1000 # Ограничиваем логи кол-вом строк (1000)
options IPFIREWALL_NAT # Включаем поддержку kernel NAT
options IPFIREWALL_FORWARD # Изменение назнчения пакетов
options LIBALIAS # Необходимо для kernel NAT
options ROUTETABLES=2 # Поддержка двух таблиц маршрутизации
options DUMMYNET # Для Kernel NAT + Ограничение пропускной способности
options IPDIVERT
options HZ="1000" # Для DUMMYNET
Код: Выделить всё
FwCMD="/sbin/ipfw" # собственно где лежит бинарник ipfw
LanOut="tun0" # внешний интерфейс
LanIn="alc0" # внутренний интерфейс
IpOut="внешняяIP" # внешний IP адрес машины
IpIn="192.168.1.34" # внутренний IP машины
#IpIn="192.168.1.100" # внутренний IP машины
NetMask="24" # маска сети (если она разная для внешней
# и внутренней сети - придётся вводить ещё
# одну переменную, но самое забавное, что
# можно и забить - оставить 24 - всё будет
# работать, по крайней мере я пробовал -
# работаало на 4-х машинах, в разных сетях,
# с разными масками - настоящими разными! но -
# это неправильно.)
NetIn="192.168.1.0" # Внутренняя сеть
NetOut="83.221.217.0" # Внешняя сеть
# Сбрасываем все правила:
${FwCMD} -f flush
# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add check-state
# Разрешаем весь траффик по внутреннему интерфейсу (петле)
# Вообще я во многих местах читал что без него может ничё не заработать вообще
# и прочие страшилки. Работает - почта, апач, .... А вот squid - не работает :)
# так что без него и правда - никуда.
${FwCMD} add allow ip from any to any via lo0
# рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0 (вот честно - ни
# одного пакета по этим правилам не зарубилось за всё время... Может в этом
# моё счастье? :))
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any
# Вводим запреты:
# режем частные сети на внешнем интерфейсе - по легенде он у нас
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные сeти
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add deny ip from any to 192.168.0.0/16 in via ${LanOut}
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOut}
# рубим автоконфигуреную частную сеть
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}
# рубим фрагментированные icmp
${FwCMD} add deny icmp from any to any frag
# рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut}
# отправляем всех на squid (в данном случае - прокси прозрачный)
#${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
# ядерный NAT
#${FwCMD} nat 1 config ip ${IpOut} unreg_only same_ports log \
#redirect_port tcp 192.168.1.49:25 25 \
#redirect_port tcp 192.168.1.49:143 143 \
#redirect_port tcp 192.168.1.49:110 110 \
#redirect_port tcp 192.168.1.49:3000 3000 \
#redirect_port tcp 192.168.1.198:443 443 \
#redirect_port tcp 192.168.1.201:3389 3389
#25,143,110,3000 - mail
#443 - Bank
#3389 - RDP
#${FwCMD} add nat 1 all from ${NetIn}/${NetMask} to any
#${FwCMD} add nat 1 all from any to ${IpOut}
# рубим траффик к частным сетям через внешний интерфейс
# заметтьте - эти правила отличаются от тех что были выше!
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOut}
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${LanOut}
# рубим автоконфигуреную частную сеть
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add deny ip from 240.0.0.0/4 to any out via ${LanOut}
# разрешаем все установленные соединения (если они установились -
# значит по каким-то правилам они проходили.)
${FwCMD} add allow tcp from any to any established
# разрешаем весь исходящий траффик (серверу-то в инет можно? :))
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}
# разрешаем DNS снаружи (нам же надо узнавать IP по именам машин?)
${FwCMD} add allow udp from any 53 to any via ${LanOut}
# разрешаем DNS входящий снаружи - если на этой машине работает named
# и держит какую-то зону. В остальных случаях - не нужно
${FwCMD} add allow udp from any to any 53 via ${LanOut}
# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}
# разрешаем ftp снаружи (оба правила - для пасивного режима)
# для узнавания портранджа по которому будет работать, лезем в
#/usr/home/lissyara/>sysctl net.inet.ip.portrange.first
# net.inet.ip.portrange.first: 49152
# /usr/home/lissyara/>sysctl net.inet.ip.portrange.last
# net.inet.ip.portrange.last: 65535
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
#Можно изгалиться примерно так, если есть желание, но я предпочитаю руками
#${FwCMD} add allow tcp from any to ${IpOut} \
#`sysctl net.inet.ip.portrange.first | awk '{print $2}'`-\
#`sysctl net.inet.ip.portrange.last | awk '{print $2}'` via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 50000-50100 via ${LanOut}
# разрешаем некоторые типы ICMP траффика - эхо-запрос,
# эхо-ответ и время жизни пакета истекло
${FwCMD} add allow icmp from any to any icmptypes 0,8,11
# разрешаем внутренние адреса на внешнем интерфейсе
#${FwCMD} add allow tcp from any to 192.168.1.49 25 via ${LanOut}
#${FwCMD} add allow tcp from any to 192.168.1.49 143 via ${LanOut}
# открываем снаружи 80 порт - если у нас есть WWW сервер на машине
#${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}
# открываем снаружи 25 порт (SMTP) если на машине крутится почта
${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}
# открываем снаружи 22 порт - если надо будет ходить на машину по ssh
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
# открываем снаружи 143 порт(если надо смотреть почту снаружи по IMAP)
${FwCMD} add allow tcp from any to ${IpOut} 143 via ${LanOut}
# открываем снаружи 110 порт(если надо смотреть почту снаружи по POP)
${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}
# открываем снаружи 443 порт(для Банк-клиента)
${FwCMD} add allow tcp from any to ${IpOut} 443 via ${LanOut}
# открываем снаружи 10000 порт(для Webmin)
#${FwCMD} add allow tcp from any to ${IpOut} 10000 via ${LanOut}
# по поводу следующих трёх правил, для tcp, udp и icmp - их можно
# заменить одним правилом:
#${FwCMD} add allow ip from any to any via ${LanIn}
# но для удобства наладки и контроля происходящего я предпочитаю три отдельных
# правила, хотя могут быть грабли - например протокол gre не пройдёт -
# придётся стругать отдельное правило для него, типа
#${FwCMD} add allow gre from any to any via ${LanIn}
# итак:
# разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow tcp from any to any via ${LanIn}
# разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow udp from any to any via ${LanIn}
# разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow icmp from any to any via ${LanIn}
# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
# автоматически, но всё-же ну его. Лучше сам. Надёжней.
${FwCMD} add deny ip from any to any
Код: Выделить всё
press# ipfw show
00100 0 0 check-state
00200 110 3640 allow ip from any to any via lo0
00300 0 0 deny ip from any to 127.0.0.0/8
00400 0 0 deny ip from 127.0.0.0/8 to any
00500 0 0 deny ip from any to 10.0.0.0/8 in via tun0
00600 0 0 deny ip from any to 172.16.0.0/12 in via tun0
00700 0 0 deny ip from any to 192.168.0.0/16 in via tun0
00800 0 0 deny ip from any to 0.0.0.0/8 in via tun0
00900 0 0 deny ip from any to 169.254.0.0/16 in via tun0
01000 0 0 deny ip from any to 240.0.0.0/4 in via tun0
01100 0 0 deny icmp from any to any frag
01200 0 0 deny log logamount 1000 icmp from any to 255.255.255.255 in via tun0
01300 0 0 deny log logamount 1000 icmp from any to 255.255.255.255 ou t via tun0
01400 47228 14895776 nat 1 ip from 192.168.1.0/24 to any
01500 28434 28637920 nat 1 ip from any to внешняяIP
01600 0 0 deny ip from 10.0.0.0/8 to any out via tun0
01700 0 0 deny ip from 172.16.0.0/12 to any out via tun0
01800 0 0 deny ip from 192.168.0.0/16 to any out via tun0
01900 0 0 deny ip from 0.0.0.0/8 to any out via tun0
02000 0 0 deny ip from 169.254.0.0/16 to any out via tun0
02100 0 0 deny ip from 224.0.0.0/4 to any out via tun0
02200 0 0 deny ip from 240.0.0.0/4 to any out via tun0
02300 0 0 allow tcp from any to внешняяIP established
02400 789 56287 allow ip from внешняяIP to any out xmit tun0
02500 0 0 allow udp from any 53 to any via tun0
02600 0 0 allow udp from any to any dst-port 53 via tun0
02700 0 0 allow udp from any to any dst-port 123 via tun0
02800 0 0 allow tcp from any to внешняяIP dst-port 21 via tun0
02900 0 0 allow tcp from any to внешняяIP dst-port 50000-50100 vi a tun0
03000 1009 56504 allow icmp from any to any icmptypes 0,8,11
03100 0 0 allow tcp from any to внешняяIP dst-port 25 via tun0
03200 0 0 allow tcp from any to внешняяIP dst-port 22 via tun0
03300 0 0 allow tcp from any to внешняяIP dst-port 143 via tun0
03400 0 0 allow tcp from any to внешняяIP dst-port 110 via tun0
03500 0 0 allow tcp from any to внешняяIP dst-port 443 via tun0
03600 26583 28333160 allow tcp from any to any via alc0
03700 222 25477 allow udp from any to any via alc0
03800 6 630 allow icmp from any to any via alc0
65535 47 61001 deny ip from any to any