Найти ошибку в правиле IPTABLES

Автор saifuddin, 06 марта 2016, 12:25:22

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

saifuddin

Доброго времени суток!
Помогите найти ошибку в правиле IPTABLES. Как то, все не очевидно получается. По логике должно работать, а все не работает.


#!/bin/sh
# для удобства, особенно если интерфейсов несколько
INET_IFACE="
eth0
"
# доверенные сервера
PRIV_IP="
192.168.0.102
192.168.0.103
"
# перечень портов только для разрешённых диапазонов. ограничение до 15 портов.
TCP_PORTS_PRIV="873,1379,3306,4567,4568,4444"
UDP_PORTS_PRIV=""
# перечень портов в кавычках через запятые пробелов, которые нужно разрешить (отдельно TCP и UDP)
TCP_PORTS="80,123,22,53"
TCP_PORTS_OUT="80,123,22,53,25"

# тоже для удобства
IPTABLES="/sbin/iptables"
IPTABLES6="/sbin/ip6tables"
# стандартные действия
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
#IP6 полностью блокируем. Он нам не нужен.
$IPTABLES6 -P INPUT DROP
$IPTABLES6 -P OUTPUT DROP
$IPTABLES6 -P FORWARD DROP

# удаляем все имеющиеся правила
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
$IPTABLES -Z
$IPTABLES -t nat -Z
$IPTABLES -t mangle -Z

# tcp, прошедшие основную проверку
$IPTABLES -N allowed
# открыты для всех порты
$IPTABLES -N allowed_ports_in
# открыты для всех порты OUTPUT
$IPTABLES -N allowed_ports_out

# все пакеты соотв. протоколов таблицы INPUT
$IPTABLES -N tcp_packets_in
$IPTABLES -N tcp_packets_out

# Доверенные IP
$IPTABLES -N trust_ip_in
$IPTABLES -N trust_ip_out




# принимаем все пакеты, относящиеся к уже установленным соединениям
$IPTABLES -A allowed -p TCP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -j RETURN


for ip in $PRIV_IP;
do
        $IPTABLES -A trust_ip_in -s $ip -i $INET_IFACE -p TCP -m multiport --dports $TCP_PORTS_PRIV -j RETURN
        $IPTABLES -A trust_ip_in -i $INET_IFACE -p TCP -j DROP
done


for ip in $PRIV_IP;
do
        $IPTABLES -A trust_ip_out -d $ip -o $INET_IFACE -p TCP -m multiport --sports $TCP_PORTS_PRIV -j RETURN
        $IPTABLES -A trust_ip_out -o $INET_IFACE -p TCP -j DROP
done

#Разрешенные порты для всех
$IPTABLES -A allowed_ports_in -p TCP -m multiport --dports $TCP_PORTS -j ACCEPT
$IPTABLES -A allowed_ports_in -p TCP -j RETURN

#Разрешенные порты для всех OUTPUT
$IPTABLES -A allowed_ports_out -p TCP -m multiport --sports $TCP_PORTS_OUT -j ACCEPT
$IPTABLES -A allowed_ports_out -p TCP -j RETURN

# здесь отрываем порты для всех наших серверов
# INPUT tcp_packets_in
$IPTABLES -A tcp_packets_in -p TCP -j allowed_ports_in
$IPTABLES -A tcp_packets_in -p TCP -j trust_ip_in
$IPTABLES -A tcp_packets_in -p TCP -j ACCEPT
# OUTPUT tcp_packets_out
$IPTABLES -A tcp_packets_out -p TCP -j allowed_ports_out
$IPTABLES -A tcp_packets_out -p TCP -j trust_ip_out
$IPTABLES -A tcp_packets_out -p TCP -j ACCEPT


$IPTABLES -A INPUT -p ALL -i $INET_IFACE -j allowed



Это вырезка из всего кода. Тут проблема заключается в этих двух циклах. Там на отказ не хочется подключаться указанный в переменной $PRIV_IP сервер к порту, указанному в $TCP_PORTS_PRIV. Стоит Galera cluster вроде все это его порты. Так же пробую подключиться по telnet (Так быстрее можно определить, открыт порт или нет).  telnet 192.168.0.104 3306 не подключается. 192.168.0.104 это сервер, на котором запускается этот скрипт(iptables)

Помогите разобраться в чем проблема!?

Malaheenee

#1
Замудрено с логикой. У Вас все новосозданные цепочки никуда не подключены. Что-то вроде такого надо. Т.е. завернуть OUTPUT и INPUT на tcp_packets_out и tcp_packets_in соответственно.

Для примера - фрагмент нашей борьбы с дураками, не включившими шифрование в торрентах (потом приходит "письмо счастья" раздающему):
# P2P blocking chain
iptables -N block_p2p

# Block tcp
iptables -A block_p2p -p tcp -m ipp2p --bit -j DROP

# Block udp
iptables -A block_p2p -p udp -m ipp2p --bit -j DROP

# Block by string
iptables -A block_p2p -m string --algo bm --string "BitTorrent" -j REJECT

# Try to block encrypted connections
iptables -A block_p2p -p udp -m string --hex-string "|7F FF FF FF AB|" \
  --algo kmp --from 40 --to 44 -j DROP

# Redirect all forwarded packets to blockchain
iptables -A FORWARD -j block_p2p

Все мы где-то, когда-то и в чем-то были новичками.