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.