В фаерволе простые правила
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
После включения у части людей не работает доступ ни в активном ни в пассивном режиме, у меня доступ работает, но в пассивном режиме наблюдается лаг в 10 секунд при получении списка файлов при входе на фтп, выключаю фаер все работает у всех, у меня лага нет.
При пассивном у людей вылетает вот так
Command: LIST
Error: Connection timed out
Error: Failed to retrieve directory listing
При активном
Response: 200 Switching to Binary mode.
Command: PORT 192,168,123,104,227,59
Response: 500 Illegal PORT command.
Error: Failed to retrieve directory listing
На сервере два интерфейса eth0 eth1
НА eth0 висит через алиасы 25 ip адресов(eth0:1, eth0:2, eth0:3 и тд)
На eth1 висит один приватный ip.
Все ходит через eth0.
Поправился, в правилах порт 21, а не 22.
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
Зачем задавать пассивные порты?
Входящие на все открытые соединения разрешены.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Напоминаю второй раз — Вы так и не поняли как работает FTP. Я написал Вам как сделать, и это будет работать. Если же хотите сделать по своему, то читайте внимательно и перечитывайте, как же, все-таки, работает FTP.
Входящие NEW должны быть разрешены на пассивные порты, так как это новое соединение. Демон сообщает на каком порту он примет данные, но не открывает соединение. поэтому ESTABLISHED тут не катит.
Я не понимаю, Вы написали вопрос что-бы спорить, или что-бы решить проблему? Если хотите решить проблему, сделайте как Вам написали. Если хотите спорить и доказывать как Вы хорошо понимаете работу файрвола, то продолжайте спорить с самим собой и доказывать это самому себе.
А Вы часом не добавляли в правила свой IP в ACCEPT?
Если действительно хотите понять почему и как, надо просто внимательно прочитать про FTP-протокол в обоих режимах и про iptables, начальный уровень.
Дискуссии могут быть при спорных вопросах. Но если стоит вопрос непонимания одним из оппонентов сути, это никак не может быть дискуссией. Тем более, что по теме, более чем достаточно доков в нете для прояснения ситуации.
>почему тогда не работает в активном режиме у людей
Ниже я описал Вам как все работает. Возможно потому что люди, которые пытаются работать в активном режиме, находятся за NAT-ом, а у Вас белый IP.
Свой не добавлял.
Почитал и про то и про это. Все равно не могу понять почему на моем компьютере работает, а на других нет.
Именно с этими правилами.
Не могу понять откуда берется лаг в 10 секунд. Ни про iptables ни про ftp про такой лаг не написано.
21 порт это для управления. Данные же ходят по Х порту(-ам). Нужно в настройках своего ftp сервера найти настройку отвечающую за это, задать там эти порты и продырявить их в фаере.
Обычно ftp сервер при работе в пассивном режиме сам случайным образом назначает порт для данных, сообщает его через 21-ый клиенту, в дальнейшем клиент использует его, но запрос этот тормозится фаерволом, поэтому ни чего и не работает.
И что? ftp сервер открывает временный порт, сообщает о нем клиенту через 21-ый порт. Соединение при этом находится в LISTEN, а не ESTABLISHED! В ESTABLISHED оно быть еще не может ибо трехстороннего рукопожатия на этой паре сокетов нет (и не будет, из-за таких правил фаервола). В общем тут полезно понимать работу не только ftp протокола, но и уровень tcp/ip.
При работе по протоколу FTP между клиентом и сервером устанавливается два соединения — управляющее (по нему идут команды) и соединение передачи данных (по нему передаются файлы). Управляющее соединение одинаково для Активного и Пассивного режима. Клиент инициирует TCP-соединение с динамического порта (1024-65535) к порту номер 21 на FTP-сервере и говорит «Привет! Я хочу подключится к тебе. Вот мое имя и мой пароль». Дальнейшие действия зависят от того, какой режим FTP (Активный или Пассивный) выбран.
В Активном режиме, когда клиент говорит «Привет!» он так же сообщает серверу номер порта (из динамического диапазона 1024-65535) для того, чтобы сервер мог подключиться к клиенту для установки соединения для передачи данных. FTP-сервер подключается к заданному номеру порта клиента используя со своей стороны номер TCP-порта 20 для передачи данных. Для клиента такое соединение является входящим, так что зачастую работа в активном режиме клиентов, находящихся за файрволлом или NAT затруднена или требует дополнительных настроек.
В Пассивном режиме, после того как клиент сказал «Привет!», сервер сообщает клиенту номер TCP-порта (из динамического диапазона 1024-65535), к которому можно подключится для установки соединения передачи данных. При этом, как легко заметить, порты в таком соединении как со стороны клиента, так и со стороны сервера оказываются произвольными. В пассивном режиме клиент легко может работать с сервером сквозь свой файрволл, но зачастую для поддержки пассивного режима сервером требуется соответствующая настройка файрволла уже на стороне сервера.
Главное отличие между Активным режимом FTP и Пассивным режимом FTP — это сторона, которая открывает соединение для передачи данных. В Активном режиме клиент должен суметь принять это соединение от FTP-сервера. В Пассивном режиме клиент всегда инициирует это соединение сам, и принять его должен уже сервер.
>А если фтп в активном режиме?
Да не важно. При активном в состоянии LISTEN висит сокет на клиенте, на сервере он будет в SYN_SENT первоначально, но до ESTABLISHED не дойдет, ибо фаер ему это не даст сделать.
В общем я крайне рекомендую прочесть книгу "UNIX: разработка сетевых приложений" Стивенсона. Имхо, гениальный труд который одинаково хорошо использовать и как учебник, и как справочник.