On Thu, Jun 05, 2008 at 11:26:07PM +0400, Artem Chuprina wrote:
> Eugene Berdnikov -> debian-russian@lists.debian.org  @ Thu, 5 Jun 2008 
> 21:50:52 +0400:
> 
>  >> А если у кого действительно сложные правила файрвола, то ему вынужденно
>  >> придется пользоваться промежуточным языком.
> 
>  EB>  Можно пример сложного правила?
> 
> Любой набо правил, задействующий limit или TARPIT, если его надо
> одинаково применить к нескольким интерфейсам или тем более - к
> нескольким адресам и/или портам по отдельности.

 Генетика ipchains даёт возможность строить довольно сложные переходы
 между цепочками, в том числе включать в цепочки блоки с общими
 правилами. Например, по интерфейсам можно объединить так:

 iptables -N fw:int
 iptables -N fw:dmz
 iptables -N fw:ext

 iptables -N fw::limit
 ...
 iptables -A FORWARD -i int -j fw:int
 iptables -A FORWARD -i dmz -j fw:dmz
 iptables -A FORWARD -i ext -j fw:ext
 ...
 iptables -A fw:int <какие-то условия> -j fw::limit
 iptables -A fw:dmz <какие-то условия> -j fw::limit
 iptables -A fw:ext <какие-то условия> -j fw::limit
 ...
 iptables -A fw::limit <какое-то групповое ограничение лимитов>
 ...

 Спасаем. Вуаля! Особых резонов писать скрипты я здесь не нахожу.

 Другое дело, если интерфейсы динамические, например, vpn-сервер,
 хотя в ряде случаев это решается шаблонами вида ppp+, tun+.

>  И то же самое - с
> многоствольным роутингом, хотя это уже не файрвол.

 Там где многостволка, так и файрвол обычно...
 Хотя маршрутами да, приходится в up/down рулить.

> Т.е. когда на каждое содержательно одно правило приходится несколько
> строк iptables или ip, и это более чем в одном экземпляре.
> 
>  EB>  Зато я могу сказать, чем плох любой скриптовый язык для fw: тем,
>  EB>  что невозможно текущую конфигурацию спасти в терминах этого языка,
> 
> Это да.  trade-off.  Между "уметь спасти" и "уметь прочесть".  Я в этой
> сделке "уметь прочесть" полагаю краевым условием.  То бишь если я в
> сохраненном один хрен запутаюсь и нужного не найду, то уметь спасти уже
> не требуется.  Все равно потом с нуля писать.

 В качестве примера -- снимок с натуры:

# iptables -nvL INPUT
Chain INPUT (policy DROP 40993 packets, 3333K bytes)
 pkts bytes target     prot opt in     out     source               destination 
        
 866K 5914M in:loop    0    --  lo     *       0.0.0.0/0            0.0.0.0/0   
        
  20M   24G in:lmtp    tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:24 
  91M 6651M in:ssh     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:22 
  45M 6119M in:imap    tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:143 
  10M 1700M in:imaps   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:993 
5105K  217M in:pop3    tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:110 
29460 1545K in:pop3s   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:995 
 2388  326K in:dns     udp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        udp dpt:53 
    0     0 in:dns     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:53 
  803 86564 in:seive   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:2000 
 2981  346K in:icmp    icmp --  *      *       0.0.0.0/0            0.0.0.0/0   
        
  902 54120 in:ident   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        tcp dpt:113 
 1293  143K in:trace   udp  --  *      *       0.0.0.0/0            0.0.0.0/0   
        udp dpts:33434:33534 
  51M   14G in:acct    0    --  *      *       0.0.0.0/0            0.0.0.0/0   
        state RELATED,ESTABLISHED 
  11M 1369M in:alarm   0    --  *      *       0.0.0.0/0            0.0.0.0/0  
         
 Вряд ли здесь можно запутаться. Конечно, боевой файрвол сложнее
 почтового сервачка, но принцип тот же. У меня как-то сложилось FORWARD
 во всех таблицах первым делом делить по интерфейсам, получается сверху
 совсем короткая линейка. Возможно, кому-то будет удобнее другое деление.

 Конечно, "уметь прочесть" из running такой подход требует обязательно.
-- 
 Eugene Berdnikov


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Ответить