Zezwalanie na FTP za pomocą IPTables

26

Mój obecny scenariusz obejmuje dopuszczanie różnych reguł, ale potrzebuję ftp, aby był dostępny z dowolnego miejsca. System operacyjny to Cent 5 i używam VSFTPD. Nie mogę uzyskać poprawnej składni. Wszystkie pozostałe reguły działają poprawnie.

## 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

Oto zasady, które wypróbowałem.

##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
źródło
1
naprawiono formatowanie, aby było czytelne.
Avery Payne,
zakładam, że używasz Rackspace? samouczek ma tę wadę. Postępuj zgodnie z instrukcjami @Evan Anderson.
Andres SK

Odpowiedzi:

41

Oto dokument, do którego odsyłam ludzi, aby mogli przestrzegać protokołu FTP: http://slacksite.com/other/ftp.html

  • Aby wykonać FTP w trybie aktywnym, musisz zezwolić na połączenia przychodzące do portu TCP 21 i połączenia wychodzące z portu 20.
  • Aby wykonać FTP w trybie pasywnym, musisz zezwolić na połączenia przychodzące do portu TCP 21 i połączenia przychodzące do losowo generowanego portu na komputerze serwera (co wymaga użycia modułu conntrack w netfilter)

Nie masz nic na temat: łańcucha WYJŚĆ w swoim poście, więc też to tu zamieszczę. Jeśli Twój łańcuch OUTPUT jest domyślnie upuszczany, to ma to znaczenie.

Dodaj te reguły do ​​konfiguracji iptables:

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

Aby obsługiwać tryb pasywny FTP, musisz załadować moduł ip_conntrack_ftp podczas rozruchu. Odkomentuj i zmodyfikuj wiersz IPTABLES_MODULES w pliku / etc / sysconfig / iptables-config, aby przeczytać:

IPTABLES_MODULES="ip_conntrack_ftp"

Zapisz konfigurację iptables i zrestartuj iptables.

service iptables save
service iptables restart

Aby całkowicie wykluczyć VSFTPD jako problem, zatrzymaj VSFTPD, sprawdź, czy nie nasłuchuje na porcie 21 z „netstat -a”, a następnie uruchom:

nc -l 21

To zacznie nasłuchiwać na porcie 21 przez netcat i wyśle ​​echo do twojej powłoki. Z innego hosta, TELNET do portu 21 serwera i sprawdź, czy otrzymujesz połączenie TCP i czy widzisz dane wyjściowe w powłoce po wpisaniu połączenia TELNET.

Na koniec uruchom kopię zapasową VSFTPD, sprawdź, czy nasłuchuje na porcie 21, i spróbuj połączyć się ponownie. Jeśli połączenie z netcat działało, twoje reguły iptables są w porządku. Jeśli połączenie z VSFTPD nie działa po wykonaniu netcat, oznacza to, że coś jest nie tak z konfiguracją VSFTPD.

Evan Anderson
źródło
Dziękuję za pomoc, sugestie przedstawione w trybie pasywnym naprawiły mój problem. Doceniam pomoc.
IOTAMAN
Ponowne uruchomienie iptables usunie wszelkie zmiany, które wprowadziłeś, jeśli IPTABLES_SAVE_ON_STOP nie jest ustawiony na „tak”.
Kevin M,
@Kevin: Absolutnie, całkowicie dobra uwaga! > uśmiech <Teraz dodam do tego edycję.
Evan Anderson
@ GLB03: Nie ma problemu. Żyję z powodu błędu serwera ...> uśmiech <
Evan Anderson
Ta odpowiedź nie działała dla mnie, więc dla każdego, kto ma ten problem, zaznaczę , że to (a także otwarcie wejścia / wyjścia portu 21) działało dla mnie: linuxquestions.org/questions/linux-security-4 /… -
ehsanul
0

Wypróbuj tę zasadę. Uwaga: $EXTIPto twój zewnętrzny adres IP dla serwera 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
źródło
0

W moim przypadku brakowało mi modułu jądra ip_conntrack_ftp. Musi zostać załadowany. Możesz więc spróbować:

modprobe ip_conntrack_ftp

Dodaj także ip_conntrack_ftp do / etc / modules, aby działał po ponownym uruchomieniu

Kornel
źródło