Косяк в правилах к IPTABLES: пускает всех по 22-порту и не пускает никого по 21,80, хотя должно быть наоборот (Не могу найти косяк!)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Косяк в правилах к IPTABLES: пускает всех по 22-порту и не пускает никого по 21,80, хотя должно быть наоборот

Сообщение yamah »

Есть шлюз с Mandriva 2009.1.
Есть скрипт, который переписывает правила IPTABLES

Код: Выделить всё

#!/bin/sh

# Константы
        INET_IF="eth1"
        INETIP="<белый IP>
        NET_IF="eth0"
        LANIP="<IP в локальной сети>"
        INET_NET="0/24"
        NET_NET="192.168.0.0/24"

        BASEPORTS="20,21,22,25,43,70,79,80,110,123,143,210,443"
        CLOSEPORTS="630,640,783,3310,10000"
        NETSERVISPORTS="53,67,68,113"
        UNPRIVPORTS="1024:65535"
        TORRENTSPORTS="<Порты>"
        MAILPORTS="25,110,143"
        IMPORTS="5190,5222,5223,5269,5280"
        SERVISPORTS="2049,3306,10000"
        RDPPORTS="3389"
        VNCPORTS="5900:5906,"
        XPORTS="6000:6063"
        NFSPORTS="111,2049"
                DNS_SERVER1="<IP>"
        DNS_SERVER2="<IP>"

        CORPSERVER="<IP>"
        CORPINJCOMP="<IP>"
        GLAVBUHG="<IP>"

        SYSADMIN="<IP домашнего ПК сисадмина>"  # В данном случае шлюза, за которым сидит админ.
        LOCAL_ADMINS=( "<IP в локальной сети>" "<IP в локальной сети>" "<IP в локальной сети>" )

        ELCOM="<IP почтового сервера>"

        POP3_YA=( "87.250.250.37" "87.250.251.37" "93.158.134.37" "213.180.204.37" )
        SMTP_YA=( "77.88.21.38" "87.250.250.38" "93.158.134.38" "213.180.204.38" )


        KONTUR="193.169.239.19"
        KONTUR_A="91.142.140.80"
        KONTUR_E="91.142.140.68"

        POP3_1GB=( "81.177.24.21" "81.177.24.22" "81.177.24.23" "81.177.24.24" "81.177.24.85" "81.177.24.86" "81.177.24.87" "81.177.24.88" "81.176.226.28" "81.176.226.29" "81.176.226.30" "81.176.226.31" )
        SMTP_1GB=( "81.176.226.20" "81.176.226.21" "81.176.226.22" "81.176.226.14" "81.176.69.157" "81.176.69.158" "81.176.69.159" "81.176.69.160" "81.176.226.24" "81.176.226.25" "81.176.226.26" "81.176.226.27" "81.176.226.28" "81.176.226.29" "81.176.226.30" "81.176.226.31" )

# Запускаем модули ядра!
        modprobe iptable_nat
        modprobe ip_nat_ftp
        modprobe ip_conntrack_ftp

# Включить перенаправление пакетов через ядро.
        echo "1" > /proc/sys/net/ipv4/ip_forward

# Сбросить правила и удалить цепочки.
        iptables -F
        iptables -t nat -F
        iptables -t mangle -F
        iptables -t nat -F PREROUTING
        iptables -t nat -F POSTROUTING

        iptables -X
        iptables -t nat -X
        iptables -t mangle -X

# Политики по умолчанию.
        iptables -F INPUT
        iptables -F FORWARD
        iptables -F OUTPUT

        iptables -P FORWARD DROP
        iptables -P INPUT DROP
        iptables -P OUTPUT DROP

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
        iptables -A INPUT   -m state --state INVALID -j DROP
        iptables -A FORWARD -m state --state INVALID -j DROP

# Защита от некоторых видов атак
        iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset

        iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
        iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

        iptables -A INPUT -p UDP -s 0/0 --destination-port 137 -j DROP
        iptables -A INPUT -p UDP -s 0/0 --destination-port 138 -j DROP
        iptables -A INPUT -p UDP -s 0/0 --destination-port 113 -j REJECT
        iptables -A INPUT -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT
#       iptables -A INPUT -p UDP -j RETURN     # При раскомменченной строчке с этой машины не идут запросы на DNS,
# За NAT-ом машины получают DNS запросы через этот шлюз.
#       iptables -A OUTPUT -p UDP -s 0/0 -j ACCEPT

        iptables -A INPUT --fragment -p ICMP -j DROP
        iptables -A OUTPUT --fragment -p ICMP -j DROP

        iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
        iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
        iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
        iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
        iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
        iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
        iptables -A INPUT -p tcp --tcp-option 64 -j DROP
        iptables -A INPUT -p tcp --tcp-option 128 -j DROP

        iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
        iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

# Запрет полный и обязательный
        iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 23 --sport $UNPRIVPORTS -j ACCEPT
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIVPORTS --sport 23 -j ACCEPT ! --syn

        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $XPORTS -j DROP --syn

# Разрешаем  ICMP соединение.
        iptables -A INPUT -p icmp -m icmp -i $INET_IF --icmp-type source-quench -j ACCEPT
        iptables -A OUTPUT -p icmp -m icmp -o $INET_IF --icmp-type source-quench -j ACCEPT
        iptables -A INPUT -p icmp -m icmp -i $NET_IF --icmp-type source-quench -j ACCEPT
        iptables -A OUTPUT -p icmp -m icmp -o $NET_IF --icmp-type source-quench -j ACCEPT

# Разрешаем передачу пакета - некорректный параметр
        iptables -A INPUT -p icmp -m icmp -i $INET_IF --icmp-type parameter-problem -j ACCEPT
        iptables -A OUTPUT -p icmp -m icmp -o $INET_IF --icmp-type parameter-problem -j ACCEPT

# Ставим ловушки.
#       iptables -A INPUT -p tcp -m tcp -j TARPIT # Не находит какую-то либу, поэтому закомменчено, что бы пока не мешалось.

# Прописываем порты, которые открыты в системе, но которые не должны быть открыты на сетевых интерфейсах:
        iptables -A INPUT -p tcp -m tcp -m multiport -i $INET_IF -j DROP --destination-ports $CLOSEPORTS

# Принимать ответы по уже установленным соединениям
        iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Иной вариант того же действия
       # iptables -A INPUT -d $INETIP -p TCP --dport $UNPRIVPORT -m state --state ESTABLISHED,RELATED -j ACCEPT
       # iptables -A FORWARD -p TCP -m state --state ESTABLISHED,RELATED -m multiport --sport $UNPRIVPORT -j ACCEPT

# Разрешаем прохождение любого трафика по интерфейсу обратной петли.
        iptables -A INPUT -i lo -j ACCEPT
        iptables -A OUTPUT -o lo -j ACCEPT

        iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
        iptables -A INPUT -p ALL -s $LANIP -i lo -j ACCEPT
        iptables -A INPUT -p ALL -s $INETIP -i lo -j ACCEPT
        iptables -A OUTPUT -p ALL -d 127.0.0.1 -o lo -j ACCEPT
        iptables -A OUTPUT -p ALL -s $INETIP -j ACCEPT
        iptables -A OUTPUT -p ALL -s $LANIP -j ACCEPT
        iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT

# Открытые порты из Глобала
        iptables -A INPUT -s $INET_NET -p TCP -d $INETIP -m multiport --dports 21,80 -j ACCEPT
# Иной вариант того же действия
        #iptables -A INPUT -p tcp -m tcp -i $INET_IF -m multiport --dport 20,21,80,443 --sport $UNPRIVPORTS -j ACCEPT
        #iptables -A OUTPUT -p tcp -m tcp -o $INET_IF -m multiport --dport $UNPRIVPORTS --sport 20,21,80,443 -j ACCEPT ! --syn

# Разрешаем торренты :-)
        iptables -A INPUT -s $INET_NET -p TCP -d $INETIP -m multiport --dport $TORRENTSPORTS -j ACCEPT
        iptables -A INPUT -s $INET_NET -p UDP -d $INETIP -m multiport --dport $TORRENTSPORTS -j ACCEPT

# Для VPN // Пока не нужно
        #iptables -A INPUT -p 47 -m state --state ESTABLISHED,RELATED -i $INET_IF -j ACCEPT
        #iptables -A OUTPUT -p TCP --dport 1723 -o eth0 -j ACCEPT
        #iptables -A OUTPUT -p 47 -o eth0 -j ACCEPT

# Для RDP
        iptables -t nat -A PREROUTING -p tcp -s $SYSADMIN -d $INETIP  --dport 3389 -j DNAT --to-destination $CORPINJCOMP
        iptables -t nat -A POSTROUTING -o $NET_IF= -j SNAT --to-source $INETIP
        iptables -t nat -A POSTROUTING -p tcp -d $CORPINJCOMP --dport 3389 -j SNAT --to-source $LANIP
# Иной вариант того же действия
        # iptables -A FORWARD -p TCP -s $NET_NET -d $CORPINJCOMP --dport 3389 -j ACCEPT
# Иной вариант того же действия
        #iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 13389 -j DNAT --to-destination $CORPINJCOMP:3389
        #iptables -A FORWARD -p TCP -d $CORPINJCOMP --dport 3389 -j ACCEPT

# Для почты
        #iptables -A OUTPUT -p tcp -m tcp -o $INET_IF -m multiport --dports $MAILPORTS --sports $UNPRIPORTS -j ACCEPT
        #iptables -A INPUT -p tcp -m tcp -i $INET_IF -m multiport --dports $UNPRIPORTS --sports $MAILPORTS -j ACCEPT ! --syn

        iptables -A FORWARD -s $NET_NET -d $ELCOM -p TCP --dport 110 -j ACCEPT
        iptables -A FORWARD -s $NET_NET -d $ELCOM -p TCP --dport 25 -j ACCEPT

        index=0
        while [ "$index" -lt  "${#POP3_1GB[@]}" ]
        do
                iptables -A FORWARD -s $NET_NET -d ${POP3_1GB[$index]} -p TCP --dport 110 -j ACCEPT
                let "index = $index + 1"
        done

        index=0
        while [ "$index" -lt  "${#SMTP_1GB[@]}" ]
        do
                iptables -A FORWARD -s $NET_NET -d ${SMTP_1GB[$index]} -p TCP --dport 25 -j ACCEPT
                let "index = $index + 1"
        done

        index=0
        while [ "$index" -lt  "${#POP3_YA[@]}" ]
        do
                iptables -A FORWARD -s $NET_NET -d ${POP3_YA[$index]} -p TCP --dport 110 -j ACCEPT
                let "index = $index + 1"
        done

        index=0
        while [ "$index" -lt  "${#SMTP_YA[@]}" ]
        do
                iptables -A FORWARD -s $NET_NET -d ${SMTP_YA[$index]} -p TCP --dport 25 -j ACCEPT
                let "index = $index + 1"
        done

# Для Жаббера
        iptables -A OUTPUT -p tcp -m tcp -m multiport --dports $IMPORTS -j ACCEPT
        iptables -A INPUT -p tcp -m tcp -m multiport --sports $IMPORTS -j ACCEPT

# NTP (обновление времени).
        iptables -A INPUT -p udp --sport 123 --dport 123 -j ACCEPT

# Открытые порты из локалки
        # iptables-A INPUT -i $NET_IF -j ACCEPT
        iptables -A INPUT -s $NET_NET -p TCP -d $LANIP -m multiport --dport 3128,53 -j ACCEPT
        iptables -A INPUT -s $NET_NET -p TCP -d $LANIP -m multiport --dport $IMPORTS -j ACCEPT

# Разрешаем только ответы DNS и DHCP сервера  на запросы/
        #iptables -A OUTPUT -p udp -m udp -o $INET_IF --dport 53 --sport $UNPRIVPORTS -j ACCEPT
        #iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 53 --sport $UNPRIVPORTS -j ACCEPT

        iptables -A INPUT -p UDP -s $DNS_SERVER1 -m state --state ESTABLISHED --sport 53 -j ACCEPT
        iptables -A INPUT -p TCP -s $DNS_SERVER1 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT
        iptables -A INPUT -p UDP -s $DNS_SERVER2 -m state --state ESTABLISHED --sport 53 -j ACCEPT
        iptables -A INPUT -p TCP -s $DNS_SERVER2 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT

        iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT
        iptables -A FORWARD -p UDP -s $DNS_SERVER1 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
        iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT

        iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT
        iptables -A FORWARD -p UDP -s $DNS_SERVER2 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
        iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT

        # iptables -A OUTPUT -p udp -m udp -o $INET_IF --dport 67 --sport 68 -j ACCEPT
        # iptables -A INPUT -p udp -m udp -i $INET_IF --dport 68 --sport 67 -j ACCEPT

# Доступ админам наружу
        index=0
        while [ "$index" -lt  "${#LOCAL_ADMINS[@]}" ]
        do
                iptables -A INPUT -s ${LOCAL_ADMINS[$index]} -i $NET_IF -j ACCEPT
                #iptables -A INPUT -s ${LOCAL_ADMINS[$index]} -p TCP -j ACCEPT
                #iptables -A INPUT -s ${LOCAL_ADMINS[$index]} -p UDP -j ACCEPT
                iptables -A FORWARD -s ${LOCAL_ADMINS[$index]} -p TCP -j ACCEPT
                iptables -A FORWARD -s ${LOCAL_ADMINS[$index]} -p UDP -j ACCEPT
                let "index = $index + 1"
        done

# Сисадмину доступ
        iptables -A FORWARD -p TCP -d $SYSADMIN -m multiport --dports $UNPRIVPORTS -j ACCEPT
        iptables -A FORWARD -p TCP -s $SYSADMIN -m multiport --sports $UNPRIVPORTS -j ACCEPT

        iptables -A FORWARD -p UDP -d $SYSADMIN -m multiport --dports $UNPRIVPORTS -j ACCEPT
        iptables -A FORWARD -p UDP -s $SYSADMIN -m multiport --sports $UNPRIVPORTS -j ACCEPT

        iptables -A FORWARD -p TCP -d $SYSADMIN -m multiport --dports $BASEPORTS -j ACCEPT
        iptables -A FORWARD -p TCP -s $SYSADMIN -m multiport --sports $BASEPORTS -j ACCEPT

        iptables -A FORWARD -p UDP -d $SYSADMIN -m multiport --dports $BASEPORTS -j ACCEPT
        iptables -A FORWARD -p UDP -s $SYSADMIN -m multiport --sports $BASEPORTS -j ACCEPT

# Главбуху доступ
        # iptables -A FORWARD -p TCP -d $GLAVBUHG --dport 25, -j ACCEPT
        # iptables -A FORWARD -p TCP -s $GLAVBUHG --sport $UNPRIVPORTS -j ACCEPT

        iptables -A FORWARD -s $GLAVBUHG -d $KONTUR -p TCP -m multiport --dports 80,443 -j ACCEPT
        iptables -A FORWARD -s $GLAVBUHG -d $KONTUR_A -p TCP -m multiport --dports 80,443 -j ACCEPT
        iptables -A FORWARD -s $GLAVBUHG -d $KONTUR_E -p TCP -m multiport --dports 80,443 -j ACCEPT

 # Разрешен исходящий пинг, ограничен входящий.
        iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 2 -j ACCEPT
        iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
        iptables -A OUTPUT -p icmp --icmp-type echo-reply -m icmp  -j ACCEPT
        iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 2 -j ACCEPT
        iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP
        iptables -A INPUT -p icmp -j ACCEPT
        iptables -A FORWARD -p icmp -j ACCEPT
        iptables -A OUTPUT -p icmp -j ACCEPT

        #iptables -A INPUT -p icmp -m icmp -i $INET_IF --icmp-type echo-reply -j ACCEPT
        #iptables -A OUTPUT -p icmp -m icmp -o $INET_IF --icmp-type echo-request -j ACCEPT

# Разрешены исходящие AUTH-запросы, входящие запрещены.
        iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 113 --sport $UNPRIVPORTS -j ACCEPT
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIVPORTS --sport 113 -j ACCEPT ! --syn
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport 113 -j DROP

# Разрешаем finger, whois, gorper, wais. Traceroute только исходящий.
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIVPORTS --sport 20 -j ACCEPT
        iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 20 --sport $UNPRIVPORTS -j ACCEPT ! --syn
        iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport $UNPRIVPORTS --sport $UNPRIVPORTS -j ACCEPT
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIVPORTS --sport $UNPRIVPORTS -j ACCEPT ! --syn
        iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 79 --sport $UNPRIVPORTS -j ACCEPT
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIVPORTS --sport 79 -j ACCEPT ! --syn
        iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 43 --sport $UNPRIVPORTS -j ACCEPT
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIVPORTS --sport 43 -j ACCEPT ! --syn
        iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 70 --sport $UNPRIVPORTS -j ACCEPT
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIVPORTS --sport 70 -j ACCEPT ! --syn
        iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 210 --sport $UNPRIVPORTS -j ACCEPT
        iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIVPORTS --sport 210 -j ACCEPT ! --syn
        # iptables -A OUTPUT -p udp -m udp -o $INET_IF --dport 33434:33523 --sport 32769:65535 -j ACCEPT

# Перебрасываем порты
        iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 10021 -j DNAT --to-destination $CORPSERVER:21
        iptables -A FORWARD -p TCP -d $CORPSERVER --dport 21 -j ACCEPT
        iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 10022 -j DNAT --to-destination $CORPSERVER:22
        iptables -A FORWARD -p TCP -d $CORPSERVER --dport 22 -j ACCEPT
        iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 10080 -j DNAT --to-destination $CORPSERVER:80
        iptables -A FORWARD -p TCP -d $CORPSERVER --dport 80 -j ACCEPT
        iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 16000 -j DNAT --to-destination $CORPSERVER:6000
        iptables -A FORWARD -p TCP -d $CORPSERVER --dport 6000 -j ACCEPT

# Включаем NAT
        iptables -t mangle -A PREROUTING -i $INET_IF -j TTL --ttl-set 64
        iptables -t nat -A POSTROUTING -o $INET_IF -j SNAT --to-source $INETIP

        # iptables -t nat -A POSTROUTING -o $INET_IF -j MASQUERADE

Из локалки все как положено работает. Хотя я и не проверял как шлюз пропускает трафик с админских компов наружу, но коннект на 80 и 22 порты точно есть и работа по ним тоже.
Почта работает только та, что нужна, DNS запросы проходят нормально. Эхо запросы из локальной сети наружу нормально идут. WEB-трафик из локалки идет только через прокси.
А вот из глобала есть проблема: никого не пускает по 80 и 21 портам. Зато всех пускает по 22-му.
Торренты, на удивление, раздаются нормально при этом.

Вот что говорит iptables -L

Код: Выделить всё

Chain INPUT (policy DROP)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere            state INVALID
REJECT     tcp  --  anywhere             anywhere            tcp flags:SYN,ACK/SYN,ACK state NEW reject-with tcp-reset
DROP       tcp  --  anywhere             anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN state NEW
DROP       udp  --  anywhere             anywhere            udp dpt:netbios-ns
DROP       udp  --  anywhere             anywhere            udp dpt:netbios-dgm
REJECT     udp  --  anywhere             anywhere            udp dpt:auth reject-with icmp-port-unreachable
ACCEPT     udp  --  anywhere             anywhere            udp spt:bootps dpt:bootpc
DROP       icmp -f  anywhere             anywhere
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,PSH,URG
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,ACK,URG
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE
DROP       tcp  --  anywhere             anywhere            tcp flags:SYN,RST/SYN,RST
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN/FIN,SYN
DROP       tcp  --  anywhere             anywhere            tcp option=64
DROP       tcp  --  anywhere             anywhere            tcp option=128
DROP       tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh recent: UPDATE seconds: 20 name: DEFAULT side: source
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh recent: SET name: DEFAULT side: source
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:telnet dpts:1024:65535 flags:!FIN,SYN,RST,ACK/SYN
DROP       tcp  --  anywhere             anywhere            tcp dpts:x11:6063 flags:FIN,SYN,RST,ACK/SYN
ACCEPT     icmp --  anywhere             anywhere            icmp source-quench
ACCEPT     icmp --  anywhere             anywhere            icmp source-quench
ACCEPT     icmp --  anywhere             anywhere            icmp parameter-problem
DROP       tcp  --  anywhere             anywhere            tcp multiport dports 630,640,783,3310,10000
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  sgshm                anywhere
ACCEPT     all  --  <Локальный IP>        anywhere
ACCEPT     all  --  <Глобальный IP>      anywhere
ACCEPT     tcp  --  default/24           <Глобальный IP>      multiport dports ftp,http
ACCEPT     tcp  --  default/24           <Глобальный IP>     multiport dports 49160:49300
ACCEPT     udp  --  default/24           <Глобальный IP>      multiport dports 49160:49300
ACCEPT     tcp  --  anywhere             anywhere            tcp multiport sports 5190,xmmp,xmmps,xmpps2s,5280
ACCEPT     udp  --  anywhere             anywhere            udp spt:ntp dpt:ntp
ACCEPT     tcp  --  192.168.0.0/24       <Локальный IP>       multiport dports squid,domain
ACCEPT     tcp  --  192.168.0.0/24       <Локальный IP>       multiport dports 5190,xmmp,xmmps,xmpps2s,5280
ACCEPT     udp  --  <DNS1 прова>             anywhere            state ESTABLISHED udp spt:domain
ACCEPT     tcp  --  <DNS1 прова>            anywhere            tcp spt:domain dpts:1024:65535 state ESTABLISHED
ACCEPT     udp  --  <DNS2 прова>           anywhere            state ESTABLISHED udp spt:domain
ACCEPT     tcp  --  <DNS2 прова>            anywhere            tcp spt:domain dpts:1024:65535 state ESTABLISHED
ACCEPT     all  --  SysAdMin.local       anywhere
ACCEPT     all  --  server               anywhere
ACCEPT     all  --  <SAPR.local>        anywhere
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request limit: avg 1/sec burst 2
DROP       icmp --  anywhere             anywhere            icmp echo-request
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:auth dpts:1024:65535 flags:!FIN,SYN,RST,ACK/SYN
DROP       tcp  --  anywhere             anywhere            tcp dpt:auth
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:ftp-data dpts:1024:65535
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpts:1024:65535 flags:!FIN,SYN,RST,ACK/SYN
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:finger dpts:1024:65535 flags:!FIN,SYN,RST,ACK/SYN
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:nicname dpts:1024:65535 flags:!FIN,SYN,RST,ACK/SYN
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:gopher dpts:1024:65535 flags:!FIN,SYN,RST,ACK/SYN
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:z39.50 dpts:1024:65535 flags:!FIN,SYN,RST,ACK/SYN

Chain FORWARD (policy DROP)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere            state INVALID
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  192.168.0.0/24       <Почта прова>         tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       <Почта прова>         tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s14.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s14.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s14.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s14.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s19.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s19.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s19.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s19.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       s24.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s24.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s24.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s24.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       mail.1gb.ru         tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s5.in-solve.ru      tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s5.in-solve.ru      tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s5.in-solve.ru      tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       s27.in-solve.ru     tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       pop.yandex.ru       tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       pop.yandex.ru       tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       pop.yandex.ru       tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       pop.yandex.ru       tcp dpt:pop3
ACCEPT     tcp  --  192.168.0.0/24       smtp.yandex.ru      tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       smtp.yandex.ru      tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       smtp.yandex.ru      tcp dpt:smtp
ACCEPT     tcp  --  192.168.0.0/24       smtp.yandex.ru      tcp dpt:smtp
ACCEPT     udp  --  192.168.0.0/24       <DNS1 прова>           udp dpt:domain
ACCEPT     udp  --  <DNS1 прова>            192.168.0.0/24      udp spt:domain state ESTABLISHED
ACCEPT     tcp  --  192.168.0.0/24       <DNS1 прова>           tcp dpt:domain
ACCEPT     udp  --  192.168.0.0/24       <DNS2 прова>          udp dpt:domain
ACCEPT     udp  --  ns.imex.ru           192.168.0.0/24      udp spt:domain state ESTABLISHED
ACCEPT     tcp  --  192.168.0.0/24       <DNS2 прова>          tcp dpt:domain
ACCEPT     tcp  --  SysAdMin.local       anywhere
ACCEPT     udp  --  SysAdMin.local       anywhere
ACCEPT     tcp  --  server               anywhere
ACCEPT     udp  --  server               anywhere
ACCEPT     tcp  --  SAPR.local       anywhere
ACCEPT     udp  --  SAPR.local        anywhere
ACCEPT     tcp  --  anywhere             <Домашний ПК Админа> multiport dports 1024:65535
ACCEPT     tcp  --  <Домашний ПК Админа>  anywhere            multiport sports 1024:65535
ACCEPT     udp  --  anywhere             <Домашний ПК Админа> multiport dports 1024:65535
ACCEPT     udp  --  <Домашний ПК Админа>  anywhere            multiport sports 1024:65535
ACCEPT     tcp  --  anywhere             <Домашний ПК Админа> multiport dports ftp-data,ftp,ssh,smtp,nicname,gopher,finger,http,pop3,ntp,imap,z39.50,https
ACCEPT     tcp  --  <Домашний ПК Админа>  anywhere            multiport sports ftp-data,ftp,ssh,smtp,nicname,gopher,finger,http,pop3,ntp,imap,z39.50,https
ACCEPT     udp  --  anywhere             <Домашний ПК Админа> multiport dports ftp-data,ftp,ssh,smtp,nicname,gopher,finger,http,pop3,ntp,imap,z39.50,https
ACCEPT     udp  --  <Домашний ПК Админа>  anywhere            multiport sports ftp-data,ftp,ssh,smtp,nicname,gopher,finger,http,pop3,ntp,imap,z39.50,https
ACCEPT     tcp  --  <ПК Буха>        193.169.239.19      multiport dports http,https
ACCEPT     tcp  --  <ПК Буха>        91.142.140.80       multiport dports http,https
ACCEPT     tcp  --  <ПК Буха>        91.142.140.68       multiport dports http,https
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request limit: avg 1/sec burst 2
DROP       icmp --  anywhere             anywhere            icmp echo-request
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             server              tcp dpt:ftp
ACCEPT     tcp  --  anywhere             server              tcp dpt:ssh
ACCEPT     tcp  --  anywhere             server              tcp dpt:http
ACCEPT     tcp  --  anywhere             server              tcp dpt:x11

Chain OUTPUT (policy DROP)
target     prot opt source               destination
DROP       tcp  --  anywhere             anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN state NEW
DROP       icmp -f  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpt:telnet
ACCEPT     icmp --  anywhere             anywhere            icmp source-quench
ACCEPT     icmp --  anywhere             anywhere            icmp source-quench
ACCEPT     icmp --  anywhere             anywhere            icmp parameter-problem
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             sgshm
ACCEPT     all  --  <Глобальный IP>      anywhere
ACCEPT     all  --  <Локальный IP>       anywhere
ACCEPT     all  --  sgshm                anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp multiport dports 5190,xmmp,xmmps,xmpps2s,5280
ACCEPT     icmp --  anywhere             anywhere            icmp echo-reply icmp any
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpt:auth
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpt:ftp-data flags:!FIN,SYN,RST,ACK/SYN
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpts:1024:65535
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpt:finger
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpt:nicname
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpt:gopher
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:1024:65535 dpt:z39.50


Как убедить iptables пускать снаружи всех по 80-му и 21-му портам и только с избранного IP по 22-му?
В чем косяк скрипта?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
alex_suse
Сообщения: 204
ОС: Debian, openSUSE, Gentoo

Re: Косяк в правилах к IPTABLES: пускает всех по 22-порту и не пускает никого по 21,80, хотя должно быть наоборот

Сообщение alex_suse »

А что там на $CORPSERVER?
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Косяк в правилах к IPTABLES: пускает всех по 22-порту и не пускает никого по 21,80, хотя должно быть наоборот

Сообщение Alex2ndr »

Вот, блин, наверчено... Есть ощущение, что это откуда-то понадергано кусками, но целиком ни разу не тестировалось.
Поэтому совет такой. Начать все с записи политики безопасности на листочке и только потом реализовывать ее в iptables. Причем с нуля(а не дергая с разных хавтушек). И только после того как все реализуете - вот тогда и занимайтесь украшательствами типа "Защита от некоторых видов атак". Сейчас этому скрипту не хватает общей продуманности и единой идеи.

Насчет 22 - я конечно не сильно копался в ваших константах, но имхо он открыт только в одном месте -

Код: Выделить всё

        iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
        iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

Зато сразу для всех, ломящихся на гейт. Правила с ESTABLISHED,RELATED его гармонично дополняют.

Насчет 80 и 21 - чтобы что-то точно сказать надо знать где там у вас http и ftp сервера располагаются, т е схему сети. Вроде на самом шлюзе открыто:

Код: Выделить всё

# Открытые порты из Глобала
        iptables -A INPUT -s $INET_NET -p TCP -d $INETIP -m multiport --dports 21,80 -j ACCEPT
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Косяк в правилах к IPTABLES: пускает всех по 22-порту и не пускает никого по 21,80, хотя должно быть наоборот

Сообщение yamah »

alex_suse писал(а):
15.10.2010 10:37
А что там на $CORPSERVER?

Локальный сайт, фтп-шник, самба файлсервер, svn-ка, СУБД на основе mysql.
На 6000 порту висит ftp-шник, который я использую как внешний диск для обмена разными данными. Ну лень мне с флэшками возиться! :-)
(Ну плюс маленькая лазейка мимо коллег по отделу.)

Нашел где ssh открыт для всех.
Но вот никак не могу найти, где 80 порт для всех закрыт.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Косяк в правилах к IPTABLES: пускает всех по 22-порту и не пускает никого по 21,80, хотя должно быть наоборот

Сообщение yamah »

Alex2ndr писал(а):
15.10.2010 11:06
Вот, блин, наверчено... Есть ощущение, что это откуда-то понадергано кусками, но целиком ни разу не тестировалось.

Надергано кусками. Кусками и тестировалось на трех машинах.

Alex2ndr писал(а):
15.10.2010 11:06
Поэтому совет такой. Начать все с записи политики безопасности на листочке и только потом реализовывать ее в iptables. Причем с нуля(а не дергая с разных хавтушек).

Постараюсь прислушаться к вашему совету.
Привычка писать все сразу на живую, особенно с копипастой, появилась на втором курсе института на занятиях по программированию в TurboPascal-е. :blush:
Alex2ndr писал(а):
15.10.2010 11:06
И только после того как все реализуете - вот тогда и занимайтесь украшательствами типа "Защита от некоторых видов атак"

К сожалению, иногда еще приходиться с коллегами по работе делиться написанным. Отсюда так много комментариев: "а эти строчки нужны для того, что бы юный ксакеп убился апстену".
Alex2ndr писал(а):
15.10.2010 11:06
Сейчас этому скрипту не хватает общей продуманности и единой идеи.

Работа коллективного разума, как выясняется не всегда дает положительный результат. Принято.
Alex2ndr писал(а):
15.10.2010 11:06
Насчет 22 - я конечно не сильно копался в ваших константах, но имхо он открыт только в одном месте -

Код: Выделить всё

        iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
        iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

Зато сразу для всех, ломящихся на гейт. Правила с ESTABLISHED,RELATED его гармонично дополняют.

Тоже увидел. Но прямо перед вашим сообщением.
Еще один пример работы коллективного разума. Эту часть скрипта даже не догадался посмотреть раньше. Увидел в выводе таблицы и то поиском по слову "ssh"
Alex2ndr писал(а):
15.10.2010 11:06
Насчет 80 и 21 - чтобы что-то точно сказать надо знать где там у вас http и ftp сервера располагаются, т е схему сети. Вроде на самом шлюзе открыто:

Код: Выделить всё

# Открытые порты из Глобала
        iptables -A INPUT -s $INET_NET -p TCP -d $INETIP -m multiport --dports 21,80 -j ACCEPT

Тут оба этих сервера работают на этой же машине. Небольшой неоффициальный сайтик для файлообмена (одностороннего). Причем FTP-сервер даже еще не поднят.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
alex_suse
Сообщения: 204
ОС: Debian, openSUSE, Gentoo

Re: Косяк в правилах к IPTABLES: пускает всех по 22-порту и не пускает никого по 21,80, хотя должно быть наоборот

Сообщение alex_suse »

Да не понятна схема, у Вас открыты 21, 22 и 80 с цепочке INPUT, т.е. для доступа к локальной машине.
А вот проброшены с 100хх на некий $CORPSERVER, который я так догадываюсь сидит в локалке.
Так как из инета подключаетесь (на какие порты) и куда хотите попасть? И что там с портами на $CORPSERVER?

А вообще Alex2ndr прав, слишком много всего, решайте задачи поэтапно.

Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Косяк в правилах к IPTABLES: пускает всех по 22-порту и не пускает никого по 21,80, хотя должно быть наоборот

Сообщение Alex2ndr »

yamah писал(а):
15.10.2010 11:44
К сожалению, иногда еще приходиться с коллегами по работе делиться написанным. Отсюда так много комментариев: "а эти строчки нужны для того, что бы юный ксакеп убился апстену".

Я имел в виду не комментарии а именно правила за комментариями. Ведь сейчас вы не под атакой, так зачем такие правила. Они конечно не помешают, но только после того как общая логика будет реализована и оттестирована.

yamah писал(а):
15.10.2010 11:44
Тут оба этих сервера работают на этой же машине. Небольшой неоффициальный сайтик для файлообмена (одностороннего). Причем FTP-сервер даже еще не поднят.

Понял. Тогда попробуйте ваше правило заменить на такое:

Код: Выделить всё

iptables -A INPUT -p TCP -d $INETIP -m multiport --dports 21,80 -j ACCEPT


И вообще - зачем вам такая переменная - INET_NET="0/24"? Вы чего ей добиться то хотите? Если хотите сказать что с любого ip, то просто не указывайте критерий по ip адресу.
Спасибо сказали: