[Comm] iptables: покритикуйте правила

Eugene Prokopiev =?iso-8859-1?q?john_=CE=C1_rmts=2Edonpac=2Eru?=
Чт Май 13 13:19:38 MSD 2004


Здравствуйте!

Покритикуйте, пожалуйста, следующий набор правил iptables на предмет 
возможных проблем:

#!/bin/sh

# Переменные
EXTERNAL_DEVICE="eth0"
EXTERNAL_ADDRESS=some_ip
INTERNAL_DEVICE="eth1"
LOCAL_DEVICE="lo"
IPTABLES="/sbin/iptables"

# Сбрасываем все в 0
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X

# Правила по умолчанию
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

# Биллинг
$IPTABLES -A FORWARD -j ULOG --ulog-nlgroup 1 --ulog-qthreshold 50 
--ulog-prefix forward
$IPTABLES -A INPUT -j ULOG --ulog-nlgroup 1 --ulog-qthreshold 50 
--ulog-prefix input
$IPTABLES -A OUTPUT -j ULOG --ulog-nlgroup 1 --ulog-qthreshold 50 
--ulog-prefix output

# Цепочки - цели всех правил. То, что отвергается, пишется в лог
$IPTABLES -N inet_input_allowed
$IPTABLES -A inet_input_allowed -j ACCEPT
$IPTABLES -N inet_input_rejected
$IPTABLES -A inet_input_rejected -m limit --limit 3/minute --limit-burst 
6 -j LOG --log-prefix "INET INPUT REJECTED: "
$IPTABLES -A inet_input_rejected -j DROP
$IPTABLES -N forward_allowed
$IPTABLES -A forward_allowed -j ACCEPT
$IPTABLES -N forward_rejected
$IPTABLES -A forward_rejected -m limit --limit 3/minute --limit-burst 6 
-j LOG --log-prefix "FORWARD REJECTED: "
$IPTABLES -A forward_rejected -j DROP

# То, что открыто для входящих пакетов. Разрешены все TCP-пакеты, не 
пытающиеся открыть новое соединение (кроме ssh), все ICMP и некоторые 
UDP (для dns и time)
$IPTABLES -A INPUT ! -i $EXTERNAL_DEVICE -j inet_input_allowed
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -p TCP ! --syn -m state --state 
NEW -j inet_input_rejected
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -p TCP --syn --dport 22 -j 
inet_input_allowed
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -p TCP -m state --state 
ESTABLISHED,RELATED -j inet_input_allowed
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -p UDP --dport 53 -j 
inet_input_allowed
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -p UDP --sport 53 -j 
inet_input_allowed
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -p UDP --dport 123 -j 
inet_input_allowed
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -p UDP --sport 123 -j 
inet_input_allowed
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -p ICMP -j inet_input_allowed
$IPTABLES -A INPUT -i $EXTERNAL_DEVICE -j inet_input_rejected

# Перебираем всех, кому разрешен NAT
for i in `/opt/scripts/make_ldap_filter.pl allowNat`
do
     # Для них разрешаем все исходящие пакеты и все входящие, кроме
     # ТCP-пакетов, пытающихся открыть новое соединение.
     # Еще запрещаем ICMP request
     $IPTABLES -t nat -A POSTROUTING -s $i -j SNAT --to-source 
$EXTERNAL_ADDRESS
     $IPTABLES -A FORWARD -s $i -j forward_allowed
     $IPTABLES -A FORWARD -p TCP --syn -d $i -j forward_rejected
     $IPTABLES -A FORWARD -p ICMP --icmp-type 8 -d $i -j forward_rejected
     $IPTABLES -A FORWARD -d $i -j forward_allowed
     #$IPTABLES -A FORWARD -j forward_rejected
done

# Перенаправляем всех, кого надо, на squid
for i in `/opt/scripts/make_ldap_filter.pl forceProxy`
do
     $IPTABLES -t nat -A PREROUTING -s $i -p TCP --dport 80 -j REDIRECT 
--to-port 3128
done

Нет ли каких-нибудь глупых ошибок?

-- 
С уважением, Прокопьев Евгений




Подробная информация о списке рассылки community