Пакетный фильтр в FreeBSD: ipfw, IP-Filter

Как в FreeBSD перебросить соединение через NAT во внутреннюю сеть

Вот реализация для ipfw:
if1IP=»ип_смотрящий_в_инет», if1=»интерфейс_смотрящий_в_инет»
ifLIP=»ип_на_который хотим делать редирект»
ipfw add divert natd tcp from any to ${if1IP} 80 via ${if1}
ipfw add divert natd ip from any to ${ifLIP} to any via ${if1}
ipfw add allow tcp from any to ${if1IP} 80 via any
natd -n ${if1} -redirect_port tcp ${ifLIP}:80 80


Решение от miaso :
tproxy -s 80 -r nobody -l /var/log/transparent_proxy.log [int_ip] 80

Как разрешить или запретить выполнение следующих ipfw правил после встречи dummynet pipe

Завершить выполнение цепочки ipfw правил после попадания в pipe:
sysctl -w net.inet.ip.fw.one_pass=1
Продолжить выполнение следующих ipfw правил после попадания в pipe:
sysctl -w net.inet.ip.fw.one_pass=0

Как правильно зафильтровать ICMP через FreeBSD ipfw

Расшифровка кодов ICMP сообщений:
echo reply (0), destination unreachable (3), source quench (4), redirect (5), echo request (8), router adver-tisement (9), router solicitation(10), time-to-live exceeded (11), IP header bad (12), timestamp request (13), timestamp reply (14), information request (15), information reply (16), address mask request (17) and address mask reply (18).
${fwcmd} add 00300 allow icmp from any to внешний_IP in via внешний_интерфейс icmptype 0,3,4,11,12
${fwcmd} add 00301 allow icmp from внешний_IP to any out via внешний_интерфейс icmptype 3,8,12
${fwcmd} add 00304 allow icmp from внешний_IP to any out via внешний_интерфейс frag
${fwcmd} add 00305 deny log icmp from any to any in via внешний_интерфейс

Как организовать редирект порта на внутреннюю машину через ipnat в FreeBSD

man 5 ipnat в /etc/ipnat.conf:
rdr fxp0 205.15.63.3/32 port 80 -> 192.168.1.1 port 80 tcp
# Базансировка нагрузки между 2 IP:
rdr le0 203.1.2.3/32 port 80 -> 203.1.2.3,203.1.2.4 port 80 tcp round-robin

Как у ipfilter обнулить статистику без перезагрузки ?

ipf -z -f my_ipfilter_rules_file

Пример ограничения полосы пропускания трафика в FreeBSD

Собираем ядро с опциями:
options DUMMYNET
options IPFIREWALL
Ограничиваем трафик для сеток 1.1.1.0/24 и 3.3.3.0/24 на 14000 кбит/с:
ipfw add pipe 50 tcp from any to 1.1.1.0/24 via fxp0
ipfw add pipe 50 tcp from any to 3.3.3.0/24 via fxp0
ipfw pipe 50 config bw 14Kbit/s
Для внесения задержки на N ms, используйте delay N после config.
Для установки веса данного пайпа по отношению к другим пайпам используйте weight вес.
Для WF2Q ограничения трафика используйте ipfw queue
(queue N config [pipe pipe_nr] [weight weight] [queue {slots | size})
PS (комментарий от gara@mail.ru):
Если возникает необходимость организовать «канал» для каждого пользователя из данной сети то пишем:
ipfw pipe 10 config mask dst-ip 0x000000ff bw 1024bit/s queue
ipfw add pipe 10 tcp from any to 1.1.1.0/24 via fxp0
Теперь каждый хост из сети 1.1.1.0/24 имеет свой канал 1024bit/s

Можно ли отфильтровывать пакеты (вести лог) в зависимости от UID пользователя ?

Для FreeBSD:
ipfw add count tcp from any to not 192.168.1.0/24 uid 231
uid user (или gid group) — под правило попадают все TCP или UDP пакеты посланный или принятые пользователем user (группой group).
В Linux в ядрах 2.4.x в iptables можно использовать модуль owner.

Как запретить открывать более 30 соединений с одного IP

Запретим более 30 коннектов для 80 порта сервера 1.2.3.4.
ipfw add allow tcp from any to 1.2.3.4 80 limit src-addr 30
ipfw add allow tcp from any to 1.2.3.4 80 via fxp0 setup limit src-addr 10
Вместо src-addr можно использовать src-port, dst-addr, dst-port
Конструкция работает в последних версиях FreeBSD 4.x ветки.

Как обеспечить работу active FTP режима в FreeBSD NAT

В ipnat воспользуйтесь модулем ftp proxy:
map fxp0 0/0 -> 0/32 proxy port ftp ftp/tcp
map rl0 172.16.33.0/24 -> 212.46.231.50/32 proxy port ftp ftp/tcp
не забудьте поместить правило трансляции ftp перед общим правилом трансляции, порядок следования правил важен.

Как запустить трансляцию адресов (NAT) под FreeBSD

В /etc/rc.conf:
ipnat_enable=»YES»
В /etc/ipnat.rules:
map ppp0 172.16.1.0/24 -> 194.46.124.53/32
Перечитать: ipnat -CF -f /etc/ipnat.rules

Как организовать Policy Routing на FreeBSD

ipfw add 100 fwd 10.0.0.2 ip from 10.0.2.0/24 to any

Если нужно использовать 2 шлюза, то можно воспользоваться:
ipfw add fwd $ext_gw_ip ip from $ext_net to any out xmit $ext_int

Автоматическая нумерация правил ipfw в FreeBSD

Для автоматической нумерации правил ipfw мы применяем следующий несложный прием:
$C=300 # начальное значение
$STEP=100 # Шаг увеличения
ipfw add $C $(C=$(($C+$STEP))) allow ip from 10.128.0.0/16 to
10.128.0.0/16
ipfw add $C $(C=$(($C+$STEP))) allow ip from 195.131.31.0/24 to
195.131.31.0/24

Share