LINUX.ORG.RU
решено ФорумAdmin

Iptables, FTP, неадекватный провайдер, нестандартные порты.

 ,


0

1

Приветствую. Тут проблема небольшая возникла... У провайдера перекрыты многие стандартные порты на вход, в том числе и 20:25 Как при таком раскладе сделать нормальный доступ к FTP? То что будет ftp://IP:port не страшно. Пробовал Вместо 21 порта юзать левый, например 33, но что-то ничего не работает. Клиент логинется, но чего-то не хватает... на FTP не зайти. ip_conntrack_ftp работает при таком раскладе? FTP стоит в самом роутере (под CentOS). В Iptables сейчас:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -s 192.168.1.0/24 ! -d 192.168.1.0/24  -j SNAT --to-source 11.22.33.44
COMMIT

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:localnet_ssh - [0:0]
:localnet_rules - [0:0]
:wan_icmp - [0:0]
:wan_rules - [0:0]
:fwd_rules_out - [0:0]
:fwd_rules_in - [0:0]
:rate_limit - [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth1 -j localnet_rules
-A INPUT -i eth0 -j wan_rules

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i eth1 -o eth0  -j fwd_rules_out
-A FORWARD -i eth0 -o eth1  -j fwd_rules_in

-A fwd_rules_out -p tcp -m tcp -m multiport --dports 21,53,80,443,465,993,995 -j ACCEPT
-A fwd_rules_out -p udp -m udp -m multiport --dports 53,123 -j ACCEPT
-A fwd_rules_out -j DROP

-A fwd_rules_in -j RETURN

-A localnet_rules -p tcp --dport 22 -j localnet_ssh
-A localnet_rules -m state --state NEW -j ACCEPT

-A localnet_ssh -s 192.168.1.105 -j ACCEPT
-A localnet_ssh -j DROP

-A wan_rules -p tcp -m tcp --dport 33 -m state --state NEW,ESTABLISHED -j rate_limit
-A wan_rules -p tcp -m tcp --dport 44000:44100 -m state --state ESTABLISHED -j ACCEPT
-A wan_rules -p icmp -j wan_icmp

-A rate_limit -p tcp --dport 33 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
-A rate_limit -p icmp --icmp-type echo-request -m limit --limit 3/sec -j ACCEPT
-A rate_limit -j LOG --log-prefix "IN DROP: "
-A rate_limit -j DROP

-A wan_icmp -p icmp --icmp-type address-mask-request -j DROP
-A wan_icmp -p icmp --icmp-type timestamp-request -j DROP
-A wan_icmp -p icmp --icmp-type echo-request -j rate_limit
-A wan_icmp --fragment -j DROP
-A wan_icmp -j ACCEPT
COMMIT

eth0 - wan (11.22.33.44) eth1 - lan (192.168.1.0/24)

Что в такой ситуации делать?

[Add]: Iptables специально для мессаги подправил, поэтому возможно что-то лишнее отстрелил... Но вроде то что надо осталось.

fallschirm
() автор топика
Ответ на: комментарий от fallschirm

FTP-client выдает:

Status:	Connecting to 11.22.33.44:33...
Status:	Connection established, waiting for welcome message...
Response:	220 (vsFTPd 2.2.2)
Command:	USER test
Response:	331 Please specify the password.
Command:	PASS *****************
Response:	230 Login successful.
Command:	OPTS UTF8 ON
Response:	200 Always in UTF8 mode.
Status:	Connected
Status:	Retrieving directory listing...
Command:	PWD
Response:	257 "/"
Command:	TYPE I
Response:	200 Switching to Binary mode.
Command:	PASV
Response:	227 Entering Passive Mode (11,22,33,44,172,49).
Command:	LIST
Error:	Connection timed out
Error:	Failed to retrieve directory listing

fallschirm
() автор топика

Получилось так:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -s 192.168.1.0/24 ! -d 192.168.1.0/24  -j SNAT --to-source 11.22.33.44
COMMIT

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:localnet_ssh - [0:0]
:localnet_rules - [0:0]
:wan_icmp - [0:0]
:wan_rules - [0:0]
:fwd_rules_out - [0:0]
:fwd_rules_in - [0:0]
:rate_limit - [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth1 -j localnet_rules
-A INPUT -i eth0 -j wan_rules

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i eth1 -o eth0  -j fwd_rules_out
-A FORWARD -i eth0 -o eth1  -j fwd_rules_in

-A fwd_rules_out -p tcp -m tcp -m multiport --dports 21,53,80,443,465,993,995 -j ACCEPT
-A fwd_rules_out -p udp -m udp -m multiport --dports 53,123 -j ACCEPT
-A fwd_rules_out -j DROP

-A fwd_rules_in -j RETURN

-A localnet_rules -p tcp --dport 22 -j localnet_ssh
-A localnet_rules -m state --state NEW -j ACCEPT

-A localnet_ssh -s 192.168.1.105 -j ACCEPT
-A localnet_ssh -j DROP

-A wan_rules -p tcp -m tcp --dport 2121 -m state --state NEW,ESTABLISHED -j rate_limit
-A wan_rules -p tcp -m tcp --dport 44000:44100 -j ACCEPT
-A wan_rules -p icmp -j wan_icmp

-A rate_limit -p tcp --dport 2121 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
-A rate_limit -p icmp --icmp-type echo-request -m limit --limit 3/sec -j ACCEPT
-A rate_limit -j LOG --log-prefix "IN DROP: "
-A rate_limit -j DROP

-A wan_icmp -p icmp --icmp-type address-mask-request -j DROP
-A wan_icmp -p icmp --icmp-type timestamp-request -j DROP
-A wan_icmp -p icmp --icmp-type echo-request -j rate_limit
-A wan_icmp --fragment -j DROP
-A wan_icmp -j ACCEPT
COMMIT

+ к этому сделал: modprobe ip_conntrack_ftp ports=21,2121 Не нравится только вот это: -A wan_rules -p tcp -m tcp --dport 44000:44100 -j ACCEPT Все напрочь открыто. Как это дело грамотно обставить?

В очередной раз вот такой монолог вышел... :)

fallschirm
() автор топика
Ответ на: комментарий от fallschirm

У вас vsftpd в пассивном режиме работает. Поэтому, помимо открытого порта для управляющего соединения, нужны открытые порты для передачи данных.

iptables -A INPUT -p tcp --dport 26000:26050 -m conntrack --ctstate NEW -m connlimit ! --connlimit-above 5 -j ACCEPT

# global options
listen=YES
listen_port=26050
pasv_enable=YES
pasv_min_port=26000
pasv_max_port=26049

Вот пример конфигурации с управляющим соединением на порту 26050 и портами 26000-26049 для данных.

cchr
()
Ответ на: комментарий от cchr

У меня ровно так и сделано все:

# global options
listen=YES
listen_port=2121
pasv_enable=YES
pasv_min_port=44000
pasv_max_port=44100

Номера портов только другие. Я знаю как правильно вот это: -A wan_rules -p tcp -m tcp --dport 44000:44100 -j ACCEPT сделать. У меня в итоге все отлично работает, только теперь надо закрыть все лишнее.

fallschirm
() автор топика

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 33021 -j DNAT --to-destination 10.10.15.13:21

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 33022 -j DNAT --to-destination 10.10.15.13:22

у меня вот это в автозагрузке стоит

НО. на ftp ко мне могут зайти только из локальной сети провайдера, из интернетов - никак нет (у меня белый IP). sftp и http - откуда угодно

Ford_Focus ★★★★★
()
Ответ на: комментарий от Ford_Focus

Не, мне это не подходит. У меня FTP не за роутером, а прямо в нем, ни какого NAT.

fallschirm
() автор топика
Ответ на: комментарий от cchr
iptables -A INPUT -p tcp --dport 26000:26050 -m conntrack --ctstate NEW -m connlimit ! --connlimit-above 5 -j ACCEPT

Да, так тоже работает. Но тут тоже NEW и куча открытых портов не нравиться. Хоть и "! --connlimit-above 5"

fallschirm
() автор топика
Ответ на: комментарий от fallschirm

У меня, как видите, тоже все дата-порты открыты и я не испытываю никаких проблем по поводу этого. Единственное, что стоит, это ограничение на открытие новых соединений в iptables и ограничение на общее число соединений в конфиге vsftpd.

cchr
()
Ответ на: комментарий от fallschirm

Можно заметить NEW на ESTABLISHED или RELATED, не помню точно, и nf_conntrack_ftp должен сам разобраться, что это соединения для ftp. Лучше вам погуглить на эту тему, я могу помнить неправильно давно это было.

cchr
()
Ответ на: комментарий от fallschirm
Plasma ~ # modinfo nf_conntrack_ftp
filename:       /lib/modules/3.2.11-hardened-Plasma/kernel/net/netfilter/nf_conntrack_ftp.ko
alias:          nfct-helper-ftp
alias:          ip_conntrack_ftp
description:    ftp connection tracking helper
author:         Rusty Russell <rusty@rustcorp.com.au>
license:        GPL
depends:        nf_conntrack
intree:         Y
vermagic:       3.2.11-hardened-Plasma SMP mod_unload modversions KERNEXEC_BTS UDEREF REFCOUNT CONSTIFY_PLUGIN STACKLEAK_PLUGIN GRSEC
parm:           ports:array of ushort
parm:           loose:bool

Смотреть на alias. Это одно и то же.

cchr
()
Ответ на: комментарий от cchr

Может оно будет работать и вообще без этого правила... :) Может где в другом месте порты открыты? А без nf_conntrack_ftp не работает?

fallschirm
() автор топика
Ответ на: комментарий от fallschirm

Может весь косяк в том, что у меня в /etc/sysconfig/iptables-config сделано: IPTABLES_MODULES=«ip_conntrack_ftp» без всяких портов? И после рестарта iptables настройки оттуда беруться?

fallschirm
() автор топика
Ответ на: комментарий от fallschirm

Без указания параметра ports модулю, замена NEW на ESTABLISHED,RELATED (ожидаемо) не приводит к нужному результату.

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

cchr
()
Ответ на: комментарий от cchr

Сейчас у меня сделано так: в /etc/rc.d/rc.local добавлено - modprobe ip_conntrack_ftp ports=21,2121

А файла /etc/modprobe.d/modprobe.conf у меня не было, создал, добавил. Сейчас протестирую.

fallschirm
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.