Разрешение FTP с IPTables

26

Мой текущий сценарий предполагает использование различных правил, но мне нужно, чтобы ftp был доступен из любого места. ОС Cent 5 и я использую VSFTPD. Я не могу получить правильный синтаксис. Все остальные правила работают правильно.

## Filter all previous rules
*filter

## Loopback address
-A INPUT -i lo -j ACCEPT

## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT

## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT

##Allow FTP

## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT

Ниже приведены правила, которые я пробовал.

##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT

-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT


-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT

-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
IOTAMAN
источник
1
исправил форматирование, чтобы оно было читабельным.
Эйвери Пейн
я предполагаю, что вы используете Rackspace? учебник имеет этот недостаток. Просто следуйте инструкциям @Evan Anderson.
Андрес С.К.

Ответы:

41

Вот документ, к которому я отсылаю людей, чтобы они могли следовать протоколу FTP: http://slacksite.com/other/ftp.html

  • Чтобы сделать FTP в активном режиме, вам нужно разрешить входящие соединения с TCP-портом 21 и исходящие соединения с порта 20.
  • Для работы в пассивном режиме FTP необходимо разрешить входящие подключения к TCP-порту 21 и входящие подключения к случайно сгенерированному порту на компьютере сервера (что требует использования модуля conntrack в netfilter)

У вас ничего нет: ваша цепочка OUTPUT в вашем посте, так что я включу это и здесь. Если ваша цепочка OUTPUT является default-drop, то это имеет значение.

Добавьте эти правила в вашу конфигурацию iptables:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

Для поддержки пассивного режима FTP вам необходимо загрузить модуль ip_conntrack_ftp при загрузке. Раскомментируйте и измените строку IPTABLES_MODULES в файле / etc / sysconfig / iptables-config следующим образом:

IPTABLES_MODULES="ip_conntrack_ftp"

Сохраните конфигурацию iptables и перезапустите iptables.

service iptables save
service iptables restart

Чтобы полностью исключить VSFTPD как проблему, остановите VSFTPD, убедитесь, что он не прослушивает порт 21 с «netstat -a», а затем выполните:

nc -l 21

Это запустит прослушивание netcat через порт 21 и отобразит ввод вашей оболочки. С другого хоста, TELNET, на порт 21 вашего сервера и убедитесь, что вы получаете соединение TCP и что вы видите вывод в оболочке при вводе соединения TELNET.

Наконец, восстановите резервную копию VSFTPD, убедитесь, что он прослушивает порт 21, и повторите попытку подключения. Если подключение к netcat сработало, то с вашими правилами iptables все в порядке. Если соединение с VSFTPD не работает после netcat, значит, что-то не так с вашей конфигурацией VSFTPD.

Эван Андерсон
источник
Спасибо за помощь, предложения, которые вы изложили для пассивного режима, устранили мою проблему. Я ценю помощь.
IOTAMAN
Перезапуск iptables уничтожит все внесенные вами изменения, если для IPTABLES_SAVE_ON_STOP не установлено значение «да».
Кевин М
@Kevin: Абсолютно, очень хороший момент! > улыбнись <Я сейчас добавлю изменения.
Эван Андерсон
@ GLB03: нет проблем. Я живу с ошибкой сервера ...> улыбка <
Эван Андерсон
Этот ответ не сработал для меня, поэтому для всех, у кого есть эта проблема, я укажу, что это (а также открытие порта 21 ввода / вывода) сработало для меня: linuxquestions.org/questions/linux-security-4 /… -
ехсанул
0

Попробуйте это правило. Примечание: $EXTIPваш внешний IP-адрес для FTP-сервера.

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT
Matt
источник
0

В моем случае мне не хватало модуля ядра ip_conntrack_ftp. Это должно быть загружено. Так что вы можете попробовать это:

modprobe ip_conntrack_ftp

А также добавьте ip_conntrack_ftp в / etc / modules, чтобы он работал после перезапуска

Корнель
источник