URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 3233
[ Назад ]

Исходное сообщение
"после ipfw в iptables есть непонятка в правилах"

Отправлено billybons2006 , 02-Апр-07 14:42 
Всем привет. После правил ipfw (FreeBSD) есть вопрос по iptables.

Например, если во FreeBSD делать нат, то схема простая:
1. включаем нат (диверт нат через внешний интерфейс)
2. ставим правила (одним правилом разрешаю www, например).

А в iptables я что-то не совсем догоняю. Вот мой конфиг:

# script vars
ext_if="eth1"
ext_ip="мой внешний ip"
local_if="eth0"
local_net="моя локальная сеть"
iptbls="/sbin/iptables"

# Delete and flush
$iptbls --flush
$iptbls --table nat --flush
$iptbls --delete-chain
$iptbls --table nat --delete-chain

# deny by default
$iptbls -P INPUT DROP
$iptbls -P OUTPUT DROP
$iptbls -P FORWARD DROP

# Loopback
$iptbls -A INPUT -i lo -j ACCEPT
$iptbls -A OUTPUT -o lo -j ACCEPT

# Local network
$iptbls -A INPUT -i $local_if -j ACCEPT
$iptbls -A OUTPUT -o $local_if -j ACCEPT

# Anti spoofing
$iptbls -A INPUT -i $ext_if -s 192.168.0.0/16 -j DROP
$iptbls -A INPUT -i $ext_if -s 172.16.0.0/12 -j DROP
$iptbls -A INPUT -i $ext_if -s 10.0.0.0/8 -j DROP
$iptbls -A INPUT -i $ext_if -s 127.0.0.0/8 -j DROP
$iptbls -A INPUT -i $ext_if -s 0.0.0.0/8 -j DROP
$iptbls -A INPUT -i $ext_if -s 169.254.0.0/16 -j DROP
$iptbls -A INPUT -i $ext_if -s 192.0.2.0/24 -j DROP
$iptbls -A INPUT -i $ext_if -s 204.152.64.0/16 -j DROP
$iptbls -A INPUT -i $ext_if -s 224.0.0.0/3 -j DROP

# DNS
$iptbls -A INPUT -p UDP -s 0/0 --sport 53 -i $ext_if -m state --state ESTABLISHED -j ACCEPT
$iptbls -A OUTPUT -p UDP -d 0/0 --dport 53 -o $ext_if -m state --state NEW,ESTABLISHED -j ACCEPT

# Forward traffic from local net
$iptbls -A FORWARD -p TCP -s $local_net -o $ext_if --dport 25 -i $local_if -j ACCEPT
$iptbls -A FORWARD -p TCP -s $local_net -o $ext_if --dport 110 -i $local_if -j ACCEPT
$iptbls -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# NAT
$iptbls -t nat -A POSTROUTING -s $local_net -o $ext_if -j SNAT --to $ext_ip

Маршрутизация включена.
Вот такой конфиг позволяет из локалки получать/отправлять почту.

Меня собственно интересует - а почему, собственно, цепочки INPUT и OUTPUT в данном случае для получения только почты не нужны?

Я, собственно, понимаю, rtfm, man и все такое. Но может кто просто мне сможет объяснить схему? Или ХОРОШИЙ материал для изучения подскажет? Мне же не только конкретную задачу решать, но и дальше жить надо.


Содержание

Сообщения в этом обсуждении
"после ipfw в iptables есть непонятка в правилах"
Отправлено Kliver , 06-Апр-07 17:45 
>Всем привет. После правил ipfw (FreeBSD) есть вопрос по iptables.
>
>Например, если во FreeBSD делать нат, то схема простая:
>1. включаем нат (диверт нат через внешний интерфейс)
>2. ставим правила (одним правилом разрешаю www, например).
>
>А в iptables я что-то не совсем догоняю. Вот мой конфиг:
>
># script vars
>ext_if="eth1"
>ext_ip="мой внешний ip"
>local_if="eth0"
>local_net="моя локальная сеть"
>iptbls="/sbin/iptables"
>
># Delete and flush
>$iptbls --flush
>$iptbls --table nat --flush
>$iptbls --delete-chain
>$iptbls --table nat --delete-chain
>
># deny by default
>$iptbls -P INPUT DROP
>$iptbls -P OUTPUT DROP
>$iptbls -P FORWARD DROP
>
># Loopback
>$iptbls -A INPUT -i lo -j ACCEPT
>$iptbls -A OUTPUT -o lo -j ACCEPT
>
># Local network
>$iptbls -A INPUT -i $local_if -j ACCEPT
>$iptbls -A OUTPUT -o $local_if -j ACCEPT
>
># Anti spoofing
>$iptbls -A INPUT -i $ext_if -s 192.168.0.0/16 -j DROP
>$iptbls -A INPUT -i $ext_if -s 172.16.0.0/12 -j DROP
>$iptbls -A INPUT -i $ext_if -s 10.0.0.0/8 -j DROP
>$iptbls -A INPUT -i $ext_if -s 127.0.0.0/8 -j DROP
>$iptbls -A INPUT -i $ext_if -s 0.0.0.0/8 -j DROP
>$iptbls -A INPUT -i $ext_if -s 169.254.0.0/16 -j DROP
>$iptbls -A INPUT -i $ext_if -s 192.0.2.0/24 -j DROP
>$iptbls -A INPUT -i $ext_if -s 204.152.64.0/16 -j DROP
>$iptbls -A INPUT -i $ext_if -s 224.0.0.0/3 -j DROP
>
># DNS
>$iptbls -A INPUT -p UDP -s 0/0 --sport 53 -i $ext_if -m
>state --state ESTABLISHED -j ACCEPT
>$iptbls -A OUTPUT -p UDP -d 0/0 --dport 53 -o $ext_if -m
>state --state NEW,ESTABLISHED -j ACCEPT
>
># Forward traffic from local net
>$iptbls -A FORWARD -p TCP -s $local_net -o $ext_if --dport 25 -i
>$local_if -j ACCEPT
>$iptbls -A FORWARD -p TCP -s $local_net -o $ext_if --dport 110 -i
>$local_if -j ACCEPT
>$iptbls -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
>
># NAT
>$iptbls -t nat -A POSTROUTING -s $local_net -o $ext_if -j SNAT --to
>$ext_ip
>
>Маршрутизация включена.
>Вот такой конфиг позволяет из локалки получать/отправлять почту.
>
>Меня собственно интересует - а почему, собственно, цепочки INPUT и OUTPUT в
>данном случае для получения только почты не нужны?

Потому что, транзитные пакеты не попадают в цепочки INPUT и OUTPUT таблицы filter. Они попадают только в FORWARD
см.
http://www.opennet.me/docs/RUS/iptables/


"после ipfw в iptables есть непонятка в правилах"
Отправлено billybons2006 , 06-Апр-07 22:48 
>Потому что, транзитные пакеты не попадают в цепочки INPUT и OUTPUT таблицы
>filter. Они попадают только в FORWARD

угу. Сенкс :) Вроде разобрался. Спасибо за ответ! Я просто поначалу слово FORWARD с натом связывал, поэтому и понять не мог разницу. Сейчас уже разобрался.