Необычная проблема с пассивным режимом фтп, при политике запрета в 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_ftpip_filter_start() {
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROPiptables -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
>[оверквотинг удален]
> ;;
>'stop')
> ip_filter_stop
> ;;
>'restart')
> ip_filter_restart
> ;;
>*)
> echo "usage $0 start|stop|restart"
>esacТак что за проблема-то? Ошибки в логах какие?
>Так что за проблема-то? Ошибки в логах какие?Соединение происходит, логин пароль спрашивает, авторизует, но после команды dir или ls через некоторое время просиходит разрыв связи.
Уточнение, пробовал на нескольких фтп серверах в инете.
В счетчиках дропнутых пакетов в iptables в цепочке FORWARD увеличиваются, хотя выше правила как бы разрешают всё что требуется для соединения.
> # 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 поддерживаться должен ядром.
>[оверквотинг удален]
> ;;
>'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: "
и посматрите логи
>добавте правило:
>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
>>добавте правило:
>>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Тут фтп соединений вообще не видно.
>[оверквотинг удален]
>>>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 более других строк нету кроме как что я написал вышк.
Понимаю что пост старый, но вдруг кому еще надо будет, ибо у меня была подобная проблемаОбычно ставлю 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.....