IPFW

Простейшие правила IPFW

  1. в rc.conf втыкаем:
    firewall_enable="YES"
    firewall_type="/path/to/ipfw.conf"

    где ipfw.conf - файл (не скрипт) с правилами ipfw;

  2. создаем ipfw.conf (или скачиваем файл ниже) и кладем его в соответствующее место, согласно пути, котрый мы напишем в /etc/rc.conf

принятые обозначения

service.ip.addr - ip адрес, на котором работает служба или jail для нее.

lo.ca.l.ne/t - наша локалка, например 192.168.5.1/24

К примеру, у нас все шары лежат на 192.168.5.100, WebServer крутится в jail на адресе 192.168.5.106 и transmission в jail-e на 192.168.5.107

Тогда share.ip.addr заменяем на 192.168.5.100, web.ip.addr заменяем на 192.168.5.106, а transmission.ip.addr заменяем на 192.168.5.107

Предполагаем, что порт форвардинг на роутере настроен на соответствующие ip-адреса

Также пердполагаем, что правил для IPFW нет совсем.

Однако, до прописывания файла ipfw.conf и изменений в rc.conf, пробуем запустить файервол:

service ipfw onestart

Оно должно выдать нечто вроде

Flushed all rules.
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00400 deny ip from any to ::1
00500 deny ip from ::1 to any
00600 allow ipv6-icmp from :: to ff02::/16
00700 allow ipv6-icmp from fe80::/10 to fe80::/10
00800 allow ipv6-icmp from fe80::/10 to ff02::/16
00900 allow ipv6-icmp from any to any ip6 icmp6types 1
01000 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
  • Строка с номером 00100 показывает, что rc.firewall отрабатывает как положено;
  • Строки с номерами 00200-00300 сделаны для пресечения попытки подключения к localhost из сети; это не мешает машине работать нормально, т.к. подключение к localhost должно происходить через внутренний интерфейс lo0.
  • Строки с номерами 00400-01000 появятся в случае, если файервол настроен на работу с IPv6
  • Если строка allow ip from any to any via lo0 не появилась (номер может быть не 00100, а другой), то в ipfw.conf надо ставить первой строкой
    add 00100 allow all from any to any via lo0

  • Если строка allow ip from any to any via lo0 появилась, но у нее другой номер, то номера следующих строк надо выставить так, чтобы это правило имело наименьший номер
  • Если вылезли правила для IPv6, то рекомендуется следить за нумерацией правил, чтобы эти номера были меньше номера первого правила для IPv6
  • Надо иметь в виду, что номер последнего в списке правила 65530 менять не надо - пускай оно остается таким.

Simple IPFW rules

Первая строка закоментирована, так как скорее всего, она у вас появляется сама. Не появилась – снимаем знак # вначале первой строки

ipfw.conf
add 00100 allow all from any to any via lo0
add 00101 check-state 
add 00102 allow ip from me to any out established
add 00103 allow ip from any to me in established
add 00111 allow tcp from lo.ca.l.ne/t to me in setup keep-state
add 00112 allow tcp from me to lo.ca.l.ne/t out setup keep-state
add 00115 allow udp from lo.ca.l.ne/t to { me or 255.255.255.255 } in keep-state
add 00116 allow udp from me to lo.ca.l.ne/t out keep-state
add 00121 allow udp from any to transmission.ip.addr 51413 in keep-state
add 00122 allow tcp from any to transmission.ip.addr 51413 in setup keep-state
add 00123 allow udp from transmission.ip.addr 51413 to any out keep-state
add 00124 allow tcp from transmission.ip.addr to any 1024-65535 out setup keep-state
add 00130 allow udp from me to any 53,123 out keep-state
add 00131 allow udp from me to 255.255.255.255 out keep-state
add 00140 allow udp from me 5353 to { lo.ca.l.ne/t or 224.0.0.1/24 or 255.255.255.255 } 5353 in keep-state
add 00141 allow udp from me 5353 to { lo.ca.l.ne/t or 224.0.0.1/24 } 5353 out
add 00150 allow tcp from any to web.ip.addr 80 in setup keep-state
add 00201 allow icmp from me to any icmptypes 8 out keep-state
add 00202 allow icmp from any to any icmptypes 3,0,11 keep-state
add 00203 allow tcp from me to any 80 out setup keep-state
add 65500 deny ip from any to any 

Замените переменные в строках 00111, 00112, 00115, 00121, 00122, 00123, 00124, 00140, 00141, 00150 !!

Описание строк

  • 00101 проверяет, установлено ли правило (кажется).
  • 00102 разрешает серверу подключаться к другим машинам по уже установленным соединениям (чтобы программа фаервола не бежала дальше проверять правила)
  • 00103 разрешает другим подключаться к серверу по уже установленным правилам
  • 00111 устанавливает тправило, разрешающее из локалки подключаться к серверу по TCP
  • 00112 устанавливает тправило, разрешающее серверу подключатья к локальным компам по TCP
  • 00115 устанавливает тправило, разрешающее из локалки подключаться к серверу, включая broadcast по UDP
  • 00116 устанавливает тправило, разрешающее серверу подключатья к локальным компам по UDP
  • 00121 устанавливает тправило, разрешающее любой машине подключаться к службе transmission по UDP на порт 51413
  • 00122 устанавливает тправило, разрешающее любой машине подключаться к службе transmission по TCP на порт 51413
  • 00123 устанавливает тправило, разрешающее серверу transmission подключатья к любым торрент-машинам по UDP
  • 00124 устанавливает тправило, разрешающее серверу transmission подключатья к любым торрент-машинам по TCP
  • 00130 устанавливает тправило, разрешающее серверу запрашивать у чужих серверов услуги DNS и NTP
  • 00131 устанавливает тправило, разрешающее серверу запрашивать у broadcast по UDP сведения о том, кто вокруг нуждается в услугах сервера
  • 00140 устанавливает тправило, разрешающее серверу объявлять о себе через Bonjour (Rendezvois) порт 5353. Чтобы работало и по IPv6, выражение { lo.ca.l.ne/t or 224.0.0.1/24 or 255.255.255.255 } надо заменить на простое any
  • 00141 разрешает получать запросы Bonjour (Rendezvois) порт 5353. Чтобы работало и по IPv6, выражение { lo.ca.l.ne/t or 224.0.0.1/24 } надо заменить на простое any
  • 00150 разрешает всем подключаться к веб-серверу
  • 00601-00602 устанавливает тправило, разрешающее серверу пинговать и отвечать на пинги.
  • 00203 устанавливает тправило, разрешающее серверу подключаться к тракерам и к www-серверам для загрузки с них обновлений или других файлов

Простейший фаервольский скрипт с NAT

Предполагается, что ядро собрано с опциями

options IPFIREWALL

эта строка включит поддержку пакетного фильтра TCP/IP, который нам очень понадобится.

options IPDIVERT

эта строка необходима для работы демона NAT, она позволит пакетному фильтру отправлять некоторые пакеты на “переработку”.

При необходимости пересоберите ядро. Для этого, находясь в каталоге /usr/src/sys/<ARCH>/config нужно ввести следующие команды:

config MYROUTER
cd ../../compile/MYROUTER
make depend
make 
make install

Конфигурирование.

В файл /etc/rc.conf нужно дописать следующие строки:

firewall_enable="YES"
firewall_script="/usr/local/billing/rc.firewall"
natd_enable="YES"
natd_interface="rl0"
gateway_enable="YES"

Этими строчками мы укажем, что мы хотим сделать наш сервер роутером, хотим использовать NAT, и хотим использовать пакетный фильтр. В параметре firewall_script мы указываем, что при загрузке системы хотим самостоятельно сконфигурировать firewall, а значение rl0 в параметре natd_interface указывает сетевую карту, которая подключена к провайдеру (грубо говоря - c какой стороны у нас интернет подключен).

Теперь осталось только создать скрипт, который автоматически сконфигурирует пакетный фильтр при загрузке системы. Для этого нам нужно создать исполняемый файл rc.firewall с правами 0700. В файл rc.firewall запишем:

ipfw='/sbin/ipfw -q'
${ipfw} -f flush
${ipfw} add divert natd all from any to any via rl0
${ipfw} add allow all from any to any

где rl0 - наша внешняя сетевая карта. Еще раз все проверили, и можно перезагружаться… командой shutdown -r now.

Еще одна версия IPFW + NATD

Advanced IPFW+NAT

Чуток посложнее. С НАТ-ом Advanced IPFW rules

Подробное описание IPFW

Здесь только ссылка. Оригинал - на Лисяре. Ркомндую :) Подробное руководство по ipfw nat

security_lab/ipfw.txt · Last modified: 2017/08/26 20:25 by rybario
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5