Gelen FTP'ye izin vermek için iptables


32

Gelen FTP trafiğine izin vermek istiyorum.

CentOS 5.4:

Bu benim /etc/sysconfig/iptablesdosyam.

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

Ayrıca, varsayılan olarak, ip_conntrack_netbios_n modülü yükleniyor.

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

Ama sorun boşalmaya çalıştığım ve hala şansım olmadığı için bu modülde değil.

Eğer iptables'yi devre dışı bırakırsam, yedeklememi başka bir makineden FTP'ye aktarabilirim. Eğer iptables zorlanıyorsa, transfer başarısız oldu.

Yanıtlar:


27

Ftp sunucunuzun veri aktarmak için bir kanala ihtiyacı var. Bağlantı 21kurmak için port kullanılır. Veri aktarımını mümkün kılmak için portu 20da etkinleştirmeniz gerekir . Aşağıdaki konfigürasyona bakın

Önce pasif ftp bağlantılarının reddedilmediğinden emin olmak için aşağıdaki modülü yükleyin

modprobe ip_conntrack_ftp

21Gelen ve giden portta FTP bağlantılarına izin ver

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

20Gelen ve giden aktif bağlantılar için FTP portuna izin ver

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

Sonunda FTP pasif gelen trafiğine izin ver

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

FTP ve güvenlik duvarı sorunları hakkında daha fazla bilgi için bkz. Http://slacksite.com/other/ftp.html#active

Düzenleme: Eklenen NEWnoktası 21 giriş kurala.


2
Ayrıcalıklı olmayan --sport 1024: and --dport 1024:tüm menzili limanları dahil ettiğimizi 1024:32535, yani ayrıcalık erişimi olmayan kullanıcıların uygulamalarını test etmek için bu portları kullanabileceğini belirtmeyi unuttum .
— Valentin Bajrami

@ Gökhan Bey, bu doğru. İstemci bağlantıları için hangi bağlantı noktalarını dinlemesi gerektiğini sunucumuzu kontrol edebiliriz. Ancak pasif bir modda, --sportgüvenlik duvarı sorunlarını özelleştirmek ve istemcilerin sunucuya bağlanmasına izin vermek için ayrıcalıklı olmayan bir mod olmak zorundayız .
— Valentin Bajrami

2
Peki, ekleyebilirsiniz, NEW,ESTABLISHEDancak bu önemli olmamalıdır. Bir bağlantı önce her zaman bir NEWdurumda olur, sonra RELATEDbu bağlantının zaten izin verilen bir bağlantıyla ilgili olduğunu belirtir. Bağlantı ESTABLISHEDdurumu değiştiğinde , her iki tarafta da bir bağlantı kurulduğunu bildirir (sunucu / müşteri). Bunun -m state --state ...yerine deneyebilirsiniz .
— Valentin Bajrami

1
NEWGerçekten önemli mi. Onsuz çalışmak görünmüyor.
— Leandros

1
@ val0x00ff Ben ihtiyacını anlamıyorum --sport 1024:. Müşterinin limanı neden kural için faydalı olsun? Bir bağlantı noktasından 80 sunucunun pasif bağlantı noktalarına bağlanırsa, o da bağlanmasına izin verilmelidir.
— Yvan

15

Bu kadar kapsamlı kuralları zaten birkaç Blog'da vs. gördüm ve neden sadece kullanılmadığını merak ettim.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

nf_conntrack_ftpmodül ile birlikte . Bu daha özlü ve okunabilir, bu genellikle iyi bir şey, özellikle de güvenlik duvarları ile ...

FWIW, orada, kernel 4.7 bir değişiklik oldu sen misin setine ya ihtiyacı görünüyor net.netfilter.nf_conntrack_helper=1yoluyla sysctl(örneğin koyun /etc/sysctl.d/conntrack.conf) veya kullanım

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp

( daha fazla bilgi için buraya bakınız)


1
Çekirdek 4.7 ile ilgili bilgiler hayatımı kurtardı, saatlerce çalışmasını sağlamaya çalışıyordu. Basit echo "1" > /proc/sys/net/netfilter/nf_conntrack_helperve her şey beklendiği gibi çalışıyor.
— Kaleci

1
Harika! 4.7 sorusu sorun değildi Jessie çekirdeği 4.9 çözemedi!
— Arunas Bartisius

@ Jakob, diğer hizmetlere erişmek için kullanılabilecek İLGİLİ bağlantılarla ilgili bir sorun var: home.regit.org/wp-content/uploads/2011/11/… ve github.com/rtsisyk/linux-iptables-contrack-exploit
— Yvan

6

FTP İstemcisi:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

FTP SUNUCUSU:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

İstemci tarafında pasif ve aktif mod arasında geçiş yapmak için

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.

3
Kesinlikle bunun için bazı artıları hak ediyorsun. Nf_conntrack_ftp modülünü yüklemeyi unutmak, pasif FTP bağlantılarını ve iptables bağlantı izlemesini giderirken bir baş ağrısı kaynağıdır. Bu modülün kullanılması, "YENİ" türünü kaldırmanızı sağlar; böylece bu bağlantı noktaları, önceki bir FTP oturumu kurulmadan isteğe bağlı bağlantılardan korunur.
— Ryan Griggs

5

YENİ ekleyerek düzeltti, inanıyorum.

Şimdi, iptables dosyam şöyle gözüküyor ..

# Generated by iptables-save v1.3.5 on Thu Oct  3 22:25:54 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [824:72492]

-A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Oct  3 22:25:54 2013

Cevap olarak yazmak, yorumda çok fazla karakter bulunmasına izin verilmiyor. Yardımlarınız için çok teşekkür ederim.


2
Soğuk işe yaradı ve sizi doğru yöne yönlendirdiğime sevindim. Lütfen kendi cevabınızı çözülmüş olarak işaretleyin, böylece doğru cevabı arayan diğer insanlara yardım edin.
— Valentin Bajrami

Kabul edilen cevapta bir yazım hatası olduğuna inanıyorum. Ben inanıyorum --dport 20:6553565535, yapraklar birçok hizmet açıkça izin sürece muhtemelen olmaması gerektiğini maruz hangi: herhangi bir kaynak bağlantı açık 65535 1024 arasında - 20 tüm portları ayrılıyor. Neyin amaçlandığına inanıyorum--dport 1024:65535
— itnAAnti

0

Hem aktif hem de pasif bağlantılara ihtiyacınız varsa ve zaten ESTABLISHEDgibi bağlantıları kabul ediyorsanız :

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

O zaman sadece 21 numaralı portu açmanız ve pasif portlar için özel bir kural eklemeniz yeterli. Bağlantı noktası 20 için ESTABLISHEDyukarıdaki kural tarafından zaten kabul edilmiş olduğundan, kural gerekmez .

Öncelikle yeni bağlantıları kabul et port 21:

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

Ardından pasif portlar için CT yardımcısını ekleyin 1024::

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

Ayrıca bakınız:

Not:1024: FTP sunucunuzdaki gibi ayarlamalısınız : FTP yapılandırmanızdaki varsayılan pasif bağlantı noktalarını arayın. Aksi takdirde, FTP'ye bağlı olmayan çok fazla bağlantı noktası açarsınız.

Önemli not:OUTPUT Varsayılan ayarlarımın olduğu gibi kural eklemedim iptables -P OUTPUT ACCEPT. Kutumdan çıkanlara güvendiğim anlamına geliyor. Özellikle NAT kurulumunda bu iyi bir seçenek olmayabilir.

Çok önemli not: FTPS, pasif port gizlendiğinden (şifrelenmiş) ayarlandığı için çalışmayacaktır, bu nedenle iptablesiyi portu tahmin etmenin bir yolu yoktur . Bkz TLS üzerinden FTP Pasif Kapıların Kullanımı izin ver iptables değiştirme ve https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.