Проблема с чтением ftp каталога

Недавно возникла такая проблема, после авторизации на ftp сервере, не хочет считываться каталог. Что я уже не пробовал, устанавливал различные ftp сервера, игрался с пассивным режим и многое другое, оказалось, что проблема была в iptables, все, что нужно, это включить режим nf_conntrack_ftp. Для этого открываем файл /etc/sysconfig/iptables-config идобавляем модуль:

IPTABLES_MODULES=»nf_conntrack_ftp»

Подключаемся по VPN через iptables nat

Вот, столкнулся с такой ситуацией, пользователи за шлюзом, на шлюзе вся подсеть натиться без ограничений, а вот VPN работать не хочет. Решение оказалось простым, все что нужно, это подгрузить следующие модули — ip_gre, ip_nat_pptp, ip_conntrack_pptp. Подгрузить можно вот так:

modprobe ip_gre
modprobe ip_nat_pptp
modprobe ip_conntrack_pptp

Установка Advanced Policy Firewall

APF это основаный на iptables фаервол созданный специально для защиты Linux серверов. Конфигурирование его информативно и легко. Его основные характеристики:

— подробный и хорошо прокомментировал файл конфигурации
— детализация входящий и исходящий сетевой фильтрации
— фильтрация на основе идетификатора пользователя
— фильтрация на основе приложений
— файл с правилами доверия
— глобальная система доверия, где правила могут быть загружены с центрального сервера управления
— мгновенная адрес блокировка (RAB), следующего поколения в области предупреждения вторжений
— режим отладки для тестирования и конфигурации новых функций
— быстрая загрузка , которая позволяет за 1 сек загрузить более 1000 правил
— входящие и исходящие сетевые интерфейсы могут быть настроены независимо
— возможность гибкой настройки правил для каждого IP отдельно
— лимитирование пакетов, что уменьшает вероятность злоупотребления, например таких пакетов как icmp
— PREROUTING и POSTROUTING правил для оптимальной производительности сети
— поддержка черного списка dshield.org
— поддержка черного списка Spamhaus, что поможет в борьбе против “hijacked zombie” IP-блоков
— любой интерфейс может быть настроен как надежный или нет
— интеллектуальная проверка маршрута для предотвращения ошибок конфигурации
— усовершенствованная проверка поведения трафика
— защита от атак, таких как fragmented UDP, port zero floods, stuffed routing, arp poisoning и многое другое
— возможность настройки приоритетов в зависимсти от типа трафика
— настройки по умолчанию для удовлетворения каждый день установки сервера
— дополнительная фильтрация P2P-приложений
— дополнительная фильтрация частного и зарезервированого адресного пространства IP
— отслеживание количества соединений для маштабирования настроек фаервола под размеры вашей сети
— настройка ядра для усилинения системы против syn-flood атак & routing abuses
— расширенный контроль за сетью, уведомление о заторах и управление переполнением
— вспомогательные цепочки для FTP DATA и SSH соединений, чтобы предотвратить проблемы на стороне клиента
— логирование всех внесенных изменений в фаерволе
— детальная проверка ошибок запуска
— если вы знакомы с Netfilter вы можете создавать свои собственные правила в любом из файлов политики
— возможность использовать QoS алгоритм, предоставляемый вLinux
— потдержка плагинов

Инстоляция достаточно простая. Скачиваем последнию версию APF сайта

wget http://www.r-fx.ca/downloads/apf-current.tar.gz
tar -xvf ./apf-current.tar.gz
cd apf-*
./install.sh

Далее, в конфигурационном файле /etc/apf/apf.conf необходимо сделать некоторые правки.
Каждый параметр в конфигурационном файле достаточно подробно расписан и разобраться за что он отвечает, думаю, не составит особого труда.
Некоторые моменты:

DEVEL_MODE=»1″

включается для проверки работоспособности фаирвола. Если все настроено правильно, данный параметр нужно установить в «0», иначе фаирвол будет остановлен через 5 минут после старта.

Назначаем интерфейс интернета:

IFACE_IN=»eth0″
IFACE_OUT=»eth0″

назначаем внутренний довереный интерфейс:

IFACE_TRUSTED=»eth1″

Описываем входящие порты:

IG_TCP_CPORTS=»20,21,25,47,53,80,110,143,443,465,993,995,1723″

И включаем Spamhaus, Dshield и Honey Pot Project

DLIST_PHP=»1″
DLIST_SPAMHAUS=»1″
DLIST_DSHIELD=»1″

Если вам необходимо добавить какое-то правило PRE или POST routing, откройте файл postrouting.rules или prerouting.rules соответственно и добавьте например:

iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -j MASQUERADE

Если вам нужно добавить общее правило, то отредактируйте файл main.rules. Как пример давайте добавим правила для работы PopTop VPN:

iptables -A INPUT -p tcp —dports 1723 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
iptables -A OUTPUT -p tcp —dports 1723 -m state —state NEW,ESTABLISHED -j ACCEPT

Iptables, записываем log сообщения в отдельный файл

Обычно, сообщения от Iptables записываются в /var/log/messages файл. Хотя, вы можете изменить назначение. Используя специальный файл для хранения логов Iptables вам легче будет проводить последующий анализа.

И так, что бы наши логи писались в отдельный файл, открываем /etc/syslog.conf и добавляем:

kern.warning /var/log/iptables.log

Записываем и перезапускаем syslog:

/etc/init.d/syslog restart

Теперь можно включить логирование в iptables. Например будем логировать весь ssh трафик исходящий с сервера:

-A OUTPUT -p tcp -m tcp —dport 22 -j LOG —log-prefix «outgoing ssh:»

Пробрасываем порты при помощи Iptables

И так, у нас есть шлюз и есть сервисы на внутреннем сервере к которым необходимо дать доступ из вне. Сделать это можно при помощи IPTables. Пускай внутренни IP — 10.10.0.1, а внешний — 80.91.175.92. Тогда нам необходимо выполнить такие команды:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 80.91.175.92 —dport 8000 -j DNAT –to-destination 10.10.0.1:8000
iptables -t nat -A POSTROUTING -p tcp -m tcp –s 10.10.0.1 —sport 8000 -j SNAT –to-source 80.91.175.92:8000

Первое правило, весь входящий трафик на внешний интерфейс в порт 8000 перебрасываем на внутренний ip сервера в тот же порт. Второе правило выводит весь трафик с внутреннего сервера идущий с порта 8000 на внешний интерфейс с порта 8000.

Настройка Iptables для Transparent Proxy

Собственно говоря, ничего сложного в этом всем нет, нам необходимо пробросить весь входящий в 80 порт трафик на внутреннем интерфейсе в порт прокси, например 3128. Есть два способа, первый это при помощи DNAT, он удобен в том случаи если шлюз сети и прокси сервер это у вас разные компьютеры и прокси сервер находиться в сети со рядовыми пользователями. Второй, при помощи REDIRECT, это если наша прокся и шлюз это один и то же сервер. В первом случаи  нам необходимо сделать 3 записи в iptables, первая пробрасывает весь трафик идущий на порт 80 исключая трафик от squid-box(сервер squid) в порт 3128 squid-box. Вторая включает NAT трансляцию для squid-box на нашем шлюзе iptables-box. И последняя разрешает форврадинг пакетов идущих на порт 3128 из локальной сети local-network в squid-box

iptables -t nat -A PREROUTING -i eth0 -s ! squid-box -p tcp —dport 80 -j DNAT —to squid-box:3128
iptables -t nat -A POSTROUTING -o eth0 -s local-network -d squid-box -j SNAT —to iptables-box
iptables -A FORWARD -s local-network -d squid-box -i eth0 -o eth0 -p tcp —dport 3128 -j ACCEPT

Если же у нас ситуация такая, что шлюз и прокси сервер это один и тот же сервер, то достаточно будет простого редиректа:

iptables -A PREROUTING -t nat -i eth0 -p tcp —dport 80 -j REDIRECT —to-port 3128