Собственно проблема не новая. Есть в Интернете ftp-сервера. Есть локальная сеть, есть proxy (squid+clamav+iptables). И есть задача, как сделать доступ к ftp-серверам из традиционных бровсеров (IE, FireFox). Собственно открыть 21й порт проблем нет. А вот как поймать ftp-data, который в общем случае может быть вообще на произвольных портах? Да еще на вирус входящий трафик проверить?
Настрока iptables для FTP
ftp-data это 20-й порт.
Cruiser78, see /etc/services , grep ftp-data /etc/services
ftp-data это 20-й порт.
Я, наверное, не совсем четко задачу поставил. Я ни разу не спрашивал, какой именно порт ftp-data.
Это я уже лет 15 как знаю. А то и все 20, наверное. Более того, я прекрасно знаю, что передача данных по 20му порту не есть полностью ftp. Есть еще и passive FTP, в котором..., ну да все это и так хорошо знают...
Я спрашивал иное - как используя iptable+squid+clamav прокинуть ftp-трафик юзерей локальной сети к внешним, интернетным ftp-серверам через прокси с проверкой качаемого на вирус. Всё, что мне удалось найти в Инете - это как настроить МЭ для доступа на мой FTP-сервер. А мне этого не требуется. Мне нужно прокинуть трафик наружу. Для начала - только прокинуть через FORWARD наружу. Ну а потом - завернуть его и во сквид...
И здесь я чего-то не соображу, что надо в правилах FORWARDа с NUT'ом писать. Ведь здесь соединение идет в обратную сторону, из Инета в мою локалку. Вот про это расскажите (просто с прокси-сервера поработать с ftp я умею, а вот прокинуть трафик насквозь, да еще с натом - не соображу)
Я спрашивал иное - как используя iptable+squid+clamav прокинуть ftp-трафик юзерей локальной сети к внешним, интернетным ftp-серверам через прокси с проверкой качаемого на вирус
Если юзаешь прокси, то приседания с МЭ не нужны. Твои юзеры ломятся на проксю, та в свою очередь ломится в интернет на фтп. Т.е. достаточно из внутренней локалки разрешить порт прокси-сервера, а с внешнего интерфейса разрешить выход на 21 и 20 порт.
Т.е. достаточно из внутренней локалки разрешить порт прокси-сервера, а с внешнего интерфейса разрешить выход на 21 и 20 порт.
Голосом кота Матроскина - Заработало!!! :-)
Нет. Не заработало. Точнее как-то через раз. Рывками... Один файл берет, на другом по таймауту обламывается...
Причем в лог сквид пишет, что делает GET на нужный файл. А вот клиенту, юзеру, лотерея выходит, а не запрошенный файл. А может оно и не работает, а файло берет из какого-то кэша? Завтра буду разбираться...
а что за прокси, который фтп сканит на антивирус? squid?
iptables -A INPUT -p TCP --dport ftp -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Нет. Не заработало.
на правило фаервола которое рубит всё включи протоколирование и парсь лог по адресу на который пытаешься зайти по фтп.
У меня были проблемы с iptables+ftp до тех пор, пока я не подгрузил модуль ipt_ftp_conntrack (по-моему так называется)
[quote=Cruiser78]Нет. Не заработало.
на правило фаервола которое рубит всё включи протоколирование и парсь лог по адресу на который пытаешься зайти по фтп.[/quote]
Да так и сделал. Тестируемый ftp-сервер принципиально хочет установить tcp-соединение с моим динамическим (>1024) портом. Рубили пакеты правила форвардига. Решил, пока, следующим образом (в обход сквида)
#
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троки вида
$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
Явно недостаточно. "Соединение" не устанавливается. Надо еще как-то динамические порты пробросить по этому пути. Но как?
И еще вопрос - просветите - зачем нужно (и нужно ли вообще) следующее:
# Загружаем модули, для корректной работы VPN, Active ftp, DCC in IRC которые будут идти через нат.
modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
Взято копипастом, но понимания сути этой записи не имею.
разреши на фаерволе все пакеты без флага SYN на порты выше 1024 на внешний адрес твоего сервера.
разреши на фаерволе все пакеты без флага SYN на порты выше 1024 на внешний адрес твоего сервера.
Так?
$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
Увы, не заработало. Отлетает по таймауту. Работает, пока, только через чистый форвардинг. А вот как завернуть в сквид?
У меня были проблемы с iptables+ftp до тех пор, пока я не подгрузил модуль ipt_ftp_conntrack (по-моему так называется)
Кстати, у меня modprobe дает warning:
WARNING: Deprecated config file /etc/modprobe.conf, all config files belong into /etc/modprobe.d/.
Чего ему надо -то? Как победить? Или забить на этот варнинг?