Дозволити 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

1
виправили своє форматування, щоб воно було читабельним.
Avery Payne

я припускаю, що ви використовуєте Rackspace? у підручнику є така вада. Просто дотримуйтесь інструкцій @Evan Anderson
Андрес СК

Відповіді:


41

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

  • Щоб виконати FTP в активному режимі, вам потрібно дозволити вхідні з'єднання з портом 21 TCP та вихідні з'єднання через порт 20.
  • Щоб зробити FTP в пасивному режимі, потрібно дозволити вхідні з'єднання до порту 21 TCP та вхідні з'єднання до випадково згенерованого порту на серверному комп'ютері (необхідне використання модуля conntrack в netfilter)

У вас нічого немає: ваш вихідний ланцюжок у вашій посаді, тому я і тут його включу. Якщо ваш ланцюг OUTPUT є за замовчуванням, то це має значення.

Додайте ці правила до конфігурації 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

Це почне прослуховування мережевих мереж на порту 21 і відлучить до вашої оболонки. З іншого хоста, TELNET до порту 21 вашого сервера і переконайтеся, що ви отримаєте TCP-з'єднання і що ви бачите вихід у оболонці під час введення з'єднання TELNET.

Нарешті, відновіть резервну копію VSFTPD, переконайтеся, що він прослуховується на порту 21, і спробуйте підключитися ще раз. Якщо з'єднання з netcat працювало, то ваші правила iptables прекрасні. Якщо підключення до VSFTPD не працює після того, як Netcat робить, то щось не так у вашій конфігурації VSFTPD.


Дякую за допомогу, висловлені вами пропозиції для пасивного режиму вирішили мою проблему. Я ціную допомогу.
IOTAMAN

Перезапуск iptables видалить будь-які внесені вами зміни, якщо для вас IPTABLES_SAVE_ON_STOP не встановлено "так".
Кевін М

@Kevin: Абсолютно, абсолютно хороший момент! > посміхніться <Я зараз відкинь редагування про це.
Еван Андерсон

@ GLB03: Немає проблем. Я живу на Вини сервера ...> smile <
Еван Андерсон

Ця відповідь не працювала для мене, тому для тих, хто має цю проблему, я зазначу, що цей (а також відкриваючи порт 21 вхід / вихід) працював для мене: linuxquestions.org/questions/linux-security-4 /… -
ehsanul

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

0

У моєму випадку я бракував модуля ядра ip_conntrack_ftp. Його потрібно завантажити. Тож ви можете спробувати це:

modprobe ip_conntrack_ftp

А також додайте ip_conntrack_ftp до / etc / module, щоб він працював після перезавантаження

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.