URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 80732
[ Назад ]

Исходное сообщение
"Необычная проблема с passive ftp и iptables "

Отправлено Alexander , 13-Июн-08 13:22 
Необычная проблема с пассивным режимом фтп, при политике запрета в iptables по умолчанию цепочки FORWARD.

SuSe 10.3, iptables 1.3.8, 1,4,1.

1 карта 192.168.13.108 смотрит во внутренню сеть с 192.168.13.0/24, 2 карта с 192.168.0.108 смотрит в dmz со шлюзом в инет 192.168.0.201.

Вспомогательные модули подргужены:
# lsmod |grep ftp
nf_nat_ftp              7296  0
nf_conntrack_ftp       13696  1 nf_nat_ftp
nf_nat                 21912  2 nf_nat_ftp,iptable_nat
nf_conntrack           61684  7 xt_conntrack,nf_nat_ftp,nf_conntrack_ftp,xt_state,iptable_nat,nf_nat,nf_conntrack_ipv4

Правила iptables такие:
#!/bin/sh

. /etc/rc.status

  echo 1 > /proc/sys/net/ipv4/ip_forward

  MB="/sbin/modprobe"
  $MB ip_conntrack
  $MB iptable_nat
  $MB ip_conntrack_ftp
  $MB ip_nat_ftp

ip_filter_start() {

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

    iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED  -j ACCEPT
    iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED  -j ACCEPT
    iptables -A FORWARD -m state --state NEW,RELATED,ESTABLISHED  -j ACCEPT

    # passive ftp
    iptables -A FORWARD -p tcp --sport 1024:65535 --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -p tcp --sport 21 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -p TCP --dport 20  -j ACCEPT
    iptables -A FORWARD -p TCP --sport 20  -j ACCEPT
    iptables -A FORWARD -p TCP --dport 21  -j ACCEPT
    iptables -A FORWARD -p TCP --sport 21  -j ACCEPT

}

ip_filter_stop() {
    iptables -t nat -F
    iptables -F
}

# Restart IP packet forwarding:
ip_filter_restart() {
  ip_filter_stop
  sleep 1
  ip_filter_start
}

case "$1" in
'start')
  ip_filter_start
  ;;
'stop')
  ip_filter_stop
  ;;
'restart')
  ip_filter_restart
  ;;
*)
  echo "usage $0 start|stop|restart"
esac


Содержание

Сообщения в этом обсуждении
"Необычная проблема с passive ftp и iptables "
Отправлено skgennady , 13-Июн-08 13:28 
>[оверквотинг удален]
>  ;;
>'stop')
>  ip_filter_stop
>  ;;
>'restart')
>  ip_filter_restart
>  ;;
>*)
>  echo "usage $0 start|stop|restart"
>esac

Так что за проблема-то? Ошибки в логах какие?


"Необычная проблема с passive ftp и iptables "
Отправлено Alexander , 13-Июн-08 13:34 
>Так что за проблема-то? Ошибки в логах какие?

Соединение происходит, логин пароль спрашивает, авторизует, но после команды dir или ls через некоторое время просиходит разрыв связи.
Уточнение, пробовал на нескольких фтп серверах в инете.
В счетчиках дропнутых пакетов в iptables в цепочке FORWARD увеличиваются, хотя выше правила как бы разрешают всё что требуется для соединения.


"Необычная проблема с passive ftp и iptables "
Отправлено skgennady , 13-Июн-08 14:57 
>    # passive ftp
>    iptables -A FORWARD -p tcp --sport 1024:65535 --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
>    iptables -A FORWARD -p tcp --sport 21 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
>    iptables -A FORWARD -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
>    iptables -A FORWARD -p TCP --dport 20  -j ACCEPT
>    iptables -A FORWARD -p TCP --sport 20  -j ACCEPT
>    iptables -A FORWARD -p TCP --dport 21  -j ACCEPT
>    iptables -A FORWARD -p TCP --sport 21  -j ACCEPT

У вас набор правил вообще странноватый. Я бы так сделал:
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A FORWARD -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -m state --state NEW --dport 21 -j ACCEPT
iptables -A FORWARD -p tcp -m state --state NEW --sport 20 -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
Ну и маскарадить нужно соответствующие пакеты. По-моему, этого достаточно, если ваши внутренние клиенты наружу по фтп ходить хотят. А если нужно разрешить подключение к вашему серверу, то в цепочке INPUT соответствующие правила добавить. Кстати, там еще модуль conntrack поддерживаться должен ядром.



"Необычная проблема с passive ftp и iptables "
Отправлено aaa , 13-Июн-08 14:34 
>[оверквотинг удален]
>  ;;
>'stop')
>  ip_filter_stop
>  ;;
>'restart')
>  ip_filter_restart
>  ;;
>*)
>  echo "usage $0 start|stop|restart"
>esac

добавте правило:
iptables -A FORWARD -p tcp -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "
и посматрите логи


"Необычная проблема с passive ftp и iptables "
Отправлено Alexander , 13-Июн-08 14:55 
>добавте правило:
>iptables -A FORWARD -p tcp -j LOG --log-level DEBUG --log-prefix "IPT FORWARD
>packet died: "
>и посматрите логи

Jun 13 11:45:12 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=25229 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00
ACK URGP=0
Jun 13 11:45:15 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=64 TOS=0x08 PREC=0x00 TTL=63 ID=25230 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00
ACK URGP=0
Jun 13 11:45:21 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=64 TOS=0x08 PREC=0x00 TTL=63 ID=25231 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00


"Необычная проблема с passive ftp и iptables "
Отправлено skgennady , 13-Июн-08 14:59 
>>добавте правило:
>>iptables -A FORWARD -p tcp -j LOG --log-level DEBUG --log-prefix "IPT FORWARD
>>packet died: "
>>и посматрите логи
>
>Jun 13 11:45:12 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=25229 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00
> ACK URGP=0
>Jun 13 11:45:15 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=64 TOS=0x08 PREC=0x00 TTL=63 ID=25230 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00
> ACK URGP=0
>Jun 13 11:45:21 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=64 TOS=0x08 PREC=0x00 TTL=63 ID=25231 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00

Тут фтп соединений вообще не видно.


"Необычная проблема с passive ftp и iptables "
Отправлено Alexander , 13-Июн-08 16:07 
>[оверквотинг удален]
>>>packet died: "
>>>и посматрите логи
>>
>>Jun 13 11:45:12 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=25229 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00
>> ACK URGP=0
>>Jun 13 11:45:15 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=64 TOS=0x08 PREC=0x00 TTL=63 ID=25230 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00
>> ACK URGP=0
>>Jun 13 11:45:21 linux-h3wk kernel: IPT FORWARD packet died: IN=eth1 OUT=eth2 SRC=192.168.163.67 DST=<cut> LEN=64 TOS=0x08 PREC=0x00 TTL=63 ID=25231 DF PROTO=TCP SPT=42140 DPT=59461 WINDOW=183 RES=0x00
>
>Тут фтп соединений вообще не видно.

Не видно по тому нет соединений по 20, 21 портам ?
Дык лог попало из цепочки FORWARD то что дропнулось, а 21 и 20 порты прошли по разрешающим правилам как я понял, тем более в /var/log/firewall более других строк нету кроме как что я написал вышк.


"Необычная проблема с passive ftp и iptables "
Отправлено OldDiesel , 09-Апр-09 13:53 
Понимаю что пост старый, но вдруг кому еще надо будет, ибо у меня была подобная проблема

Обычно ставлю iptables -P OUTPUT ACCEPT, но это кому как нравиться


Правила ниже перекрывают все порты(поэтому остальные правила содержащие RELATED,ESTABLISHED не нужны), и даже делают дырку.... ибо NEW в инпуте, и остальных цепочках означает что вы открыли всем и вся
>>iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED  -j ACCEPT
>>iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED  -j ACCEPT
>>iptables -A FORWARD -m state --state NEW,RELATED,ESTABLISHED  -j ACCEPT

Насколько я понимаю эти правила равны таким:
iptables -A INPUT -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT
:D

Предлагаю следующее:

#Ставим политики запрещение везде кроме OUTPUT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

Разрешаем уже установленные(ESTABLISHED) и форкнутые(RELATED) соединения.
iptables -A INPUT -m state --state RELATED,ESTABLISHED  -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED  -j ACCEPT
Делаем мы это для фтп даты, данное соединение считается RELATED, форкается на другой порт, отличный от командного 21 порта.

Открываем командный порт фтп для проходящего трафика
iptables -A FORWARD -p tcp --dport 21 -j ACCEPT
Если нужны более жесткие рамки, то указываем на какой конкретно хост можно, и откуда и т.д.

Ну и конечно необходимо чтоб были загружены два модуля:
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp

на счет nf_conntrack_ftp не могу ничего сказать, вроде в ядре это еще эксперементальный модуль, поэтому думаю лучше юзать ip_conntrack_ftp.....