LinuxForum.Fans
Тема

Настрока iptables для FTP

Автор: Cruiser78 13 сообщений 14484 просмотров
#15925

Собственно проблема не новая. Есть в Интернете ftp-сервера. Есть локальная сеть, есть proxy (squid+clamav+iptables). И есть задача, как сделать доступ к ftp-серверам из традиционных бровсеров (IE, FireFox). Собственно открыть 21й порт проблем нет. А вот как поймать ftp-data, который в общем случае может быть вообще на произвольных портах? Да еще на вирус входящий трафик проверить?

#15966

ftp-data это 20-й порт.

#15976

Cruiser78, see /etc/services , grep ftp-data /etc/services

#16038
Loky написал:
ftp-data это 20-й порт.

Я, наверное, не совсем четко задачу поставил. Я ни разу не спрашивал, какой именно порт ftp-data.
Это я уже лет 15 как знаю. А то и все 20, наверное. Более того, я прекрасно знаю, что передача данных по 20му порту не есть полностью ftp. Есть еще и passive FTP, в котором..., ну да все это и так хорошо знают...
Я спрашивал иное - как используя iptable+squid+clamav прокинуть ftp-трафик юзерей локальной сети к внешним, интернетным ftp-серверам через прокси с проверкой качаемого на вирус. Всё, что мне удалось найти в Инете - это как настроить МЭ для доступа на мой FTP-сервер. А мне этого не требуется. Мне нужно прокинуть трафик наружу. Для начала - только прокинуть через FORWARD наружу. Ну а потом - завернуть его и во сквид...
И здесь я чего-то не соображу, что надо в правилах FORWARDа с NUT'ом писать. Ведь здесь соединение идет в обратную сторону, из Инета в мою локалку. Вот про это расскажите (просто с прокси-сервера поработать с ftp я умею, а вот прокинуть трафик насквозь, да еще с натом - не соображу)

#16064
Cruiser78 написал:
Я спрашивал иное - как используя iptable+squid+clamav прокинуть ftp-трафик юзерей локальной сети к внешним, интернетным ftp-серверам через прокси с проверкой качаемого на вирус

Если юзаешь прокси, то приседания с МЭ не нужны. Твои юзеры ломятся на проксю, та в свою очередь ломится в интернет на фтп. Т.е. достаточно из внутренней локалки разрешить порт прокси-сервера, а с внешнего интерфейса разрешить выход на 21 и 20 порт.

#16065
Loky написал:
Т.е. достаточно из внутренней локалки разрешить порт прокси-сервера, а с внешнего интерфейса разрешить выход на 21 и 20 порт.

Голосом кота Матроскина - Заработало!!! :-)

Нет. Не заработало. Точнее как-то через раз. Рывками... Один файл берет, на другом по таймауту обламывается...
Причем в лог сквид пишет, что делает GET на нужный файл. А вот клиенту, юзеру, лотерея выходит, а не запрошенный файл. А может оно и не работает, а файло берет из какого-то кэша? Завтра буду разбираться...

#16090

а что за прокси, который фтп сканит на антивирус? squid?

#16490

iptables -A INPUT -p TCP --dport ftp -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#16556
Cruiser78 написал:
Нет. Не заработало.

на правило фаервола которое рубит всё включи протоколирование и парсь лог по адресу на который пытаешься зайти по фтп.

#16577

У меня были проблемы с iptables+ftp до тех пор, пока я не подгрузил модуль ipt_ftp_conntrack (по-моему так называется)

#16583
Loky написал:
[quote=Cruiser78]Нет. Не заработало.

на правило фаервола которое рубит всё включи протоколирование и парсь лог по адресу на который пытаешься зайти по фтп.[/quote]

Да так и сделал. Тестируемый ftp-сервер принципиально хочет установить tcp-соединение с моим динамическим (>1024) портом. Рубили пакеты правила форвардига. Решил, пока, следующим образом (в обход сквида)

#

text
 FTP
$IPT  -A FORWARD -i $LOCAL_IF -p tcp --dport 21 -m state --state NEW -j ACCEPT
# PASSIVE FTP
$IPT  -t filter -A FORWARD  -p tcp -m tcp --dport $UNPRIPORTS -m state --state NEW -j ACCEPT
$IPT  -t filter -A FORWARD  -p udp -m udp --dport $UNPRIPORTS -m state --state NEW -j ACCEPT

Теперь задача - как всё это в сквид завернуть... Хотя бы с целью регистрации GET'ов.
Cтроки вида

text
$IPT -t nat -A PREROUTING -i $LOCAL_IF -s 192.168.43.0/24 -p tcp -m multiport --dport 21,80 -j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i $LOCAL_IF -s 192.168.43.0/24 -p udp -m multiport --dport  21,80 -j REDIRECT --to-port 3128

Явно недостаточно. "Соединение" не устанавливается. Надо еще как-то динамические порты пробросить по этому пути. Но как?

И еще вопрос - просветите - зачем нужно (и нужно ли вообще) следующее:

text

# Загружаем модули, для корректной работы VPN, Active ftp, DCC in IRC которые будут идти через нат.
modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc

Взято копипастом, но понимания сути этой записи не имею.

#16586

разреши на фаерволе все пакеты без флага SYN на порты выше 1024 на внешний адрес твоего сервера.

#16607
Loky написал:
разреши на фаерволе все пакеты без флага SYN на порты выше 1024 на внешний адрес твоего сервера.

Так?

text
$IPT -t nat -A PREROUTING -i $LOCAL_IF -s 192.168.43.0/24 -p tcp -m multiport --dport 21,80 -j REDIRECT --to-port 3128
$IPT -t nat -A PREROUTING -i $LOCAL_IF -s 192.168.43.0/24 -p udp -m multiport --dport 21,80 -j REDIRECT --to-port 3128

$IPT -A INPUT -i $EXT_IF -p tcp ! --syn --dport $UNPRIPORTS -j ACCEPT

Увы, не заработало. Отлетает по таймауту. Работает, пока, только через чистый форвардинг. А вот как завернуть в сквид?

forkostya написал:
У меня были проблемы с iptables+ftp до тех пор, пока я не подгрузил модуль ipt_ftp_conntrack (по-моему так называется)

Кстати, у меня modprobe дает warning:

text
WARNING: Deprecated config file /etc/modprobe.conf, all config files belong into /etc/modprobe.d/.

Чего ему надо -то? Как победить? Или забить на этот варнинг?

Войдите или зарегистрируйтесь, чтобы ответить.