Как в 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