The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"iptables >>> ipfw"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"iptables >>> ipfw"  
Сообщение от Аноним email(??) on 29-Сен-08, 21:43 
Вообще использую линукс. Но в порядке эксперимента поставил на домашний шлюз FreeBSD.
Если не учитывать, что ядро и все остальное компилилось очень долго, система понравилась.
Настроил ipfw+natd+trafd+mysql+вебфейс (инфу брал с http://www.lissyara.su/?id=1007). Плюс поставил MRTG+snmp и mrtg-total. Все работает. Но! Немного недопонимаю как работает ipfw.

Уже прочитал http://ipfw.ism.kiev.ua/ и https://www.opennet.ru/base/net/ipfw_flow_map.txt.html

В линуксе в качетсве базы для настройки iptables я использовал скрипт из iptables tutorial. (http://gazette.linux.ru.net/rus/articles/iptables-tutorial.h...)

Доворачивал его под себя: в FORWARD фильтр по портам и ip и т.п.

В freebsd наваял следующее:

###########################################################################
#
# Интернет интерфейс.
#
INET_IP="10.10.0.2"
INET_IFACE="xl0"
#
# LAN интерфейс.
#
LAN_IP="192.168.5.1"
LAN_IP_RANGE="192.168.5.0/29"
LAN_IFACE="em0"
#
# Конфигурация Localhost.
#
LO_IFACE="lo0"
LO_IP="127.0.0.1/8"
#
# Конфигурация IPFW.
#
IPFW="/sbin/ipfw"
###########################################################################
#
# Очистка всех правил
#
$IPFW -f flush
#
# Проверка - соответствует ли пакет динамическим правилам:
#
$IPFW add check-state
#
# Правила интерфейса lo
#
$IPFW add allow ip from any to any via $LO_IFACE
$IPFW add deny ip from any to $LO_IP
$IPFW add deny ip from $LO_IP to any
#
# Запрет частной сети MS на интернет интерфейсе
#
$IPFW add deny ip from any to 169.254.0.0/16 in via $INET_IFACE
$IPFW add deny ip from 169.254.0.0/16 to any out via $INET_IFACE
#
# Запрет мультикаста на интернет интерфейсе
#
$IPFW add deny ip from any to 240.0.0.0/4 in via $INET_IFACE
$IPFW add deny ip from 224.0.0.0/4 to any out via $INET_IFACE
#
# Запрет фрагментированных ICMP
#
$IPFW add deny icmp from any to any frag
#
# Запрет широковещательных ICMP на внешнем интерфейсе
#
$IPFW add deny log icmp from any to 255.255.255.255 in via $INET_IFACE
$IPFW add deny log icmp from any to 255.255.255.255 out via $INET_IFACE
#
# Включение NAT
#
$IPFW add divert natd ip from 192.168.5.3 to any out via $INET_IFACE
$IPFW add divert natd ip from 192.168.5.4 to any out via $INET_IFACE
$IPFW add divert natd ip from 192.168.5.5 to any out via $INET_IFACE
$IPFW add divert natd ip from any to $INET_IP in via $INET_IFACE
#
# Разрешены все установленные соединения (если они установились значит по каким-то правилам они проходили.)
#
$IPFW add allow tcp from any to any established
#
# Разрешено серверу выходить в интернет
#
$IPFW add allow ip from $INET_IP to any out xmit $INET_IFACE
$IPFW add allow udp from any 53 to any via $INET_IFACE
$IPFW add allow udp from any 123 to any via $INET_IFACE
$IPFW add allow udp from any 10201 to any via $INET_IFACE
#
# Разрешены подключения к серверу из интернета
#
$IPFW add allow tcp from any to $INET_IP 22 via $INET_IFACE #SSH
$IPFW add allow tcp from any to $INET_IP 80 via $INET_IFACE #HTTP
#
# Проброс DNAT (фильтрация natd)
#
$IPFW add allow tcp from any to 192.168.5.3 3389 via $INET_IFACE #RDP
$IPFW add allow tcp from any to 192.168.5.3 5900 via $INET_IFACE #VNC
$IPFW add allow tcp from any to 192.168.5.3 13774 via $INET_IFACE #Torrent
#
# Разрешен ICMP до сервера
#
$IPFW add allow icmp from any to any icmptypes 0,8,11
#
# Разрешен любой трафик на LAN интерфейсе
#
$IPFW add allow tcp from any to any via $LAN_IFACE
$IPFW add allow udp from any to any via $LAN_IFACE
$IPFW add allow icmp from any to any via $LAN_IFACE
#
# Запрет любого другого трафика
#
$IPFW add deny ip from any to any


Смутило следующее: с машин перечисленных в divert я не мог ходить по ntp (udp\123)
пока не добавил правило, но в то же время http\https\ftp\pop3\smtp ходит нормально, без
правил?

И возможно ли что-нить написанное уже наподобие rc.firewall.iptables?
Где можно было бы отдельно фильтровать in\out до сервера и форвард с машин локалки?

Например в iptables это выглядело так(привожу кусок моего rc.firewall):

#tcp_packets - это подцепочка INPUT
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed #Разрешен ssh к серверу
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed #Разрешено к httpd на сервере

и FORWARD:
#Разрешено машинам локалки ходить до почтового сервера
$IPTABLES -A FORWARD -s $LAN_IP_RANGE -d xx.xx.xx.xx -p tcp --dport 110 -j ACCEPT
$IPTABLES -A FORWARD -s $LAN_IP_RANGE -d xx.xx.xx.xx -p tcp --dport 25 -j ACCEPT


Как это правильно описать в ipfw?
Не могу понять - где в ipfw forward, а где input\output.


Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • iptables >>> ipfw, Аноним, 22:26 , 29-Сен-08, (1)  
    • iptables >>> ipfw, Аноним, 23:01 , 29-Сен-08, (2)  
  • iptables >>> ipfw, billybons2006, 13:53 , 30-Сен-08, (3)  

Сообщения по теме [Сортировка по времени | RSS]


1. "iptables >>> ipfw"  
Сообщение от Аноним (??) on 29-Сен-08, 22:26 
1) divert-а не вижу в конфиге.
2) сначала разрешать, потом диверт, а потом денай
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "iptables >>> ipfw"  
Сообщение от Аноним email(??) on 29-Сен-08, 23:01 
>1) divert-а не вижу в конфиге.
>2) сначала разрешать, потом диверт, а потом денай

#
# Включение NAT
#
$IPFW add divert natd ip from 192.168.5.3 to any out via $INET_IFACE
$IPFW add divert natd ip from 192.168.5.4 to any out via $INET_IFACE
$IPFW add divert natd ip from 192.168.5.5 to any out via $INET_IFACE
$IPFW add divert natd ip from any to $INET_IP in via $INET_IFACE
#

На примере, прошу.

т.е. можно как обычно сделать?

1. профильтровать input на сервер
2. профильтровать in на компы локалки
3. профильтровать out  с компов локалки
4. профильтровать out с сервера
5. диверт.

так?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "iptables >>> ipfw"  
Сообщение от billybons2006 email(ok) on 30-Сен-08, 13:53 
Ниже привожу пример рабочего конфига (у меня расположен в файле /usr/local/etc/rc.d/firewall.sh, не забудьте 'chmod +x firewall.sh'):

#!/bin/sh

# macroses
pif="xl0"
cmd="ipfw -q add"
skip="skipto 5000"

remote_IP=”25.25.25.25”

# Flush out the list before we begin.
ipfw -q -f flush

# BEGIN of FIREWALL
$cmd 0010 allow all from any to any via lo0

# Allow all
#$cmd 0050 allow log all from any to any via $pif

# Input SSH
$cmd 0160 allow tcp from $remote_IP to me 22 in via $pif
$cmd 0161 allow tcp from me 22 to $remote_IP out via $pif

# NAT
$cmd 0200 divert natd ip from any to any in via $pif
$cmd 0201 check-state

$cmd 0202 allow gre from any to any
$cmd 0204 allow log tcp from $remote_IP to me 1723 via $pif
$cmd 0205 allow log tcp from me 1723 to $remote_IP via $pif

#$cmd 0206 allow all from any to any
#$cmd 0210 $skip log all from any to any out via $pif setup keep-state

# DNS
$cmd 0220 $skip log udp from me to any 53 out via $pif keep-state
$cmd 0230 $skip log udp from any to any 53 out via $pif keep-state

# Allow out non-secure standard pop3/smtp/imap function
$cmd 0320 $skip tcp from any to any 25 out via $pif setup keep-state
$cmd 0330 $skip tcp from any to any 110 out via $pif setup keep-state
$cmd 0340 $skip tcp from any to any 143 out via $pif setup keep-state
$cmd 0345 $skip tcp from any to any 995 out via $pif setup keep-state

# WWW (HTTP/HTTPS/..)
$cmd 0350 $skip tcp from any to any 80 out via $pif setup keep-state
$cmd 0360 $skip tcp from any to any 443 out via $pif setup keep-state

# Allow out FreeBSD (make install & CVSUP) functions
# Basically give user root "GOD" privileges.
$cmd 0410 $skip tcp from me to any out via $pif setup keep-state uid root

# Allow out Time
$cmd 0450 $skip tcp from any to any 37 out via $pif setup keep-state

# Allow out whois
$cmd 0460 $skip tcp from any to any 43 out via $pif setup keep-state

# Allow ntp time server
$cmd 0470 $skip udp from any to any 123 out via $pif keep-state

# DENY
# Deny all inbound traffic from non-routable reserved address spaces
$cmd 1300 deny all from 192.168.0.0/16  to any in via $pif  #RFC 1918 private IP
$cmd 1301 deny all from 172.16.0.0/12   to any in via $pif  #RFC 1918 private IP
$cmd 1302 deny all from 10.0.0.0/8      to any in via $pif  #RFC 1918 private IP
$cmd 1303 deny all from 127.0.0.0/8     to any in via $pif  #loopback
$cmd 1304 deny all from 0.0.0.0/8       to any in via $pif  #loopback
$cmd 1305 deny all from 169.254.0.0/16  to any in via $pif  #DHCP auto-config
$cmd 1306 deny all from 192.0.2.0/24    to any in via $pif  #reserved for docs
$cmd 1307 deny all from 204.152.64.0/23 to any in via $pif  #Sun cluster
$cmd 1308 deny all from 224.0.0.0/3     to any in via $pif  #Class D & E multicast

# Deny ident
$cmd 1315 deny tcp from any to any 113 in via $pif

# Deny all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
$cmd 1320 deny tcp from any to any 137 in via $pif
$cmd 1321 deny tcp from any to any 138 in via $pif
$cmd 1322 deny tcp from any to any 139 in via $pif
$cmd 1323 deny tcp from any to any 81  in via $pif

# Deny any late arriving packets
$cmd 1330 deny all from any to any frag in via $pif

# Deny ACK packets that did not match the dynamic rule table
$cmd 1332 deny tcp from any to any established in via $pif

# Reject & Log all unauthorized incoming connections from the public Internet
$cmd 1400 deny log all from any to any in via $pif

# Reject & Log all unauthorized out going connections to the public Internet
$cmd 1450 deny log all from any to any out via $pif

# This is skipto location for outbound stateful rules
$cmd 5000 divert natd ip from any to any out via $pif
$cmd 5001 allow ip from any to any

# deny and log all packets that fell through to see what they are
$cmd 10000 deny log all from any to any
#############################################

Сначала разершаю то, что хочу разрешить до DIVERT (он же nat), потом включаю DIVERT (правило 200), после чего правила типчала разершаю то, что хочу разрешить до DIVERT (он же nat), потом включаю DIVERT (правило 200), после чего правила типа:

$cmd 0350 $skip tcp from any to any 80 out via $pif setup keep-state

направляет запросы на порт 80 через правило 5000 (которое и выполняет функции nat). Ну а все остальное, что не подошло под разные правила, отбрасывается правилом 1400 или 1450.

Ммм, довольно сумбурно, но хоть что-то.

В /etc/rc.conf добавить

# Enable natd.
natd_enable="YES"
natd_interface="xl0"   # your public network interface

Ну и в ядре опции поставить (приведены опции для FreeBSD 7 на моем роутере)

# IPFW options
options        IPFIREWALL
options        IPDIVERT
options        IPFIREWALL_VERBOSE
options        IPFIREWALL_VERBOSE_LIMIT=100
options        IPFIREWALL_FORWARD #enable transparent proxy support
#options    TCP_DROP_SYNFIN
options        DUMMYNET
______________________________________________________________________________
PS:
Могу сказать, что когда я после FreeBSD стал пытаться понять iptables, чуть с ума не сошел, даже книженцию купил :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру