Автор Тема: Найти ошибку в правиле IPTABLES  (Прочитано 1096 раз)

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

Оффлайн saifuddin

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 21
Найти ошибку в правиле IPTABLES
« : 06 Март 2016, 12:25:22 »
Доброго времени суток!
Помогите найти ошибку в правиле IPTABLES. Как то, все не очевидно получается. По логике должно работать, а все не работает.

Код: (javascript) [Выделить]
#!/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

  • Ветеран
  • *****
  • Сообщений: 2565
  • Учтите, мы можем дать и вредный совет.
Re: Найти ошибку в правиле IPTABLES
« Ответ #1 : 06 Март 2016, 15:39:27 »
Замудрено с логикой. У Вас все новосозданные цепочки никуда не подключены. Что-то вроде такого надо. Т.е. завернуть 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
« Последнее редактирование: 06 Март 2016, 15:45:22 от Malaheenee »
Все мы где-то, когда-то и в чем-то были новичками.
 

Теги:
 

Не могу найти некоторые программы

Автор kuguar

Ответов: 5
Просмотров: 2285
Последний ответ 05 Март 2011, 12:11:35
от kuguar
[Решено] E: Не удалось найти пакет ...

Автор mcherenkov

Ответов: 1
Просмотров: 3773
Последний ответ 23 Февраль 2015, 22:36:40
от Leo
Не могу найти пакет noip2

Автор TTATPuOT

Ответов: 9
Просмотров: 2329
Последний ответ 09 Апрель 2012, 18:15:44
от Malaheenee
Вирус для сайтов в системе. Как найти и удалить?

Автор lamokk

Ответов: 5
Просмотров: 2419
Последний ответ 07 Ноябрь 2018, 07:22:06
от endru
как найти библеотеку ?

Автор sharabdin

Ответов: 6
Просмотров: 3137
Последний ответ 05 Апрель 2011, 09:35:02
от sharabdin