Iptables cho phép FTP đến


32

Tôi muốn cho phép lưu lượng FTP đến.

CentOS 5.4:

Đây là /etc/sysconfig/iptablestập tin của tôi .

# 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

Ngoài ra, theo mặc định, mô-đun ip_conntrack_netbios_n đang được tải.

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

Nhưng vấn đề không nằm ở mô-đun đó, vì tôi đã thử dỡ nó và vẫn không gặp may.

Nếu tôi tắt iptables, tôi có thể chuyển bản sao lưu của mình từ máy khác sang FTP. Nếu iptables thi hành, thì chuyển không thành công.

Câu trả lời:


27

Máy chủ ftp của bạn cần một kênh để truyền dữ liệu. Cổng 21được sử dụng để thiết lập kết nối. Vì vậy, để thực hiện chuyển dữ liệu, bạn cũng cần phải bật cổng 20. Xem cấu hình sau

Trước tiên hãy tải mô-đun sau để đảm bảo các kết nối ftp thụ động không bị từ chối

modprobe ip_conntrack_ftp

Cho phép kết nối FTP trên cổng 21đến và đi

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"

Cho phép cổng FTP 20cho các kết nối hoạt động đến và đi

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"

Cuối cùng, cho phép lưu lượng truy cập thụ động FTP

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"

Để biết thêm về các vấn đề về FTP và tường lửa, hãy xem: http://slacksite.com/other/ftp.html#active

Chỉnh sửa: Đã thêm NEWvào quy tắc đầu vào cổng 21.


2
Tôi quên đề cập đến điều đó --sport 1024: and --dport 1024:có nghĩa là chúng tôi bao gồm tất cả các cổng trong phạm vi 1024:32535là các cổng không có đặc quyền, nghĩa là người dùng không có quyền truy cập đặc quyền có thể sử dụng các cổng này để kiểm tra ứng dụng của họ.
Valentin Bajrami

@Bying Gokul, đúng rồi. Chúng tôi có thể kiểm soát máy chủ của mình trên các cổng mà nó nên lắng nghe cho các kết nối máy khách. Tuy nhiên, trong chế độ thụ động, chúng ta phải sử dụng --sportđể trở thành chế độ không có đặc quyền đối với các sự cố tường lửa riêng tư và cho phép khách hàng kết nối với máy chủ.
Valentin Bajrami

2
Vâng, bạn có thể thêm NEW,ESTABLISHEDnhưng điều đó không quan trọng. Một kết nối đầu tiên luôn ở NEWtrạng thái sau đó nhảy đến RELATEDchỉ ra rằng kết nối này có liên quan đến kết nối đã được cho phép. Khi kết nối thay đổi thành ESTABLISHEDtrạng thái, nó thông báo cho chúng tôi rằng kết nối đã được thiết lập ở cả hai bên (máy chủ / máy khách). Bạn có thể thử -m state --state ...thay thế.
Valentin Bajrami

1
Điều NEWnày thực sự quan trọng. Nó dường như không hoạt động mà không có nó.
Leandros

1
@ val0x00ff Tôi không hiểu nhu cầu --sport 1024:. Tại sao cổng của khách hàng sẽ hữu ích cho quy tắc? Nếu anh ta kết nối từ một cổng 80 đến các cổng thụ động của máy chủ, anh ta cũng phải được phép kết nối.
Yvan

15

Tôi đã thấy các quy tắc rộng lớn như vậy đã có trong một số Blog, v.v. và tự hỏi tại sao không sử dụng

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

cùng với các nf_conntrack_ftpmô-đun. Điều này ngắn gọn và dễ đọc hơn, nói chung là một điều tốt, đặc biệt là với tường lửa ...

FWIW, có vẻ như đã có một sự thay đổi trong kernel 4.7, do đó bạn cần phải đặt net.netfilter.nf_conntrack_helper=1qua sysctl(ví dụ: đặt nó vào /etc/sysctl.d/conntrack.conf) hoặc sử dụng

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

(xem tại đây để biết thêm chi tiết)


1
Thông tin về kernel 4.7 đã cứu mạng tôi, đã cố gắng hàng giờ để làm việc này. Một đơn giản echo "1" > /proc/sys/net/netfilter/nf_conntrack_helpervà mọi thứ hoạt động như mong đợi.
Keeper

1
Tuyệt quá! 4.7 là vấn đề tôi không thể giải quyết trên kernel Jessie 4.9!
Arunas Bartisius

@Jakob có một vấn đề với các kết nối liên quan có thể được sử dụng để truy cập các dịch vụ khác: home.regit.org/wp-content/uploads/2011/11/...github.com/rtsisyk/linux-iptables-contrack-exploit
Yvan

6

Máy khách FTP:

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

MÁY CHỦ FTP:

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

Để chuyển đổi giữa chế độ thụ động và hoạt động ở phía máy khách

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

3
Bạn chắc chắn xứng đáng với một số upvote cho điều này. Việc quên tải mô-đun nf_conntrack_ftp là một vấn đề đau đầu khi xử lý sự cố kết nối FTP thụ động và theo dõi kết nối iptables. Sử dụng mô-đun này cho phép bạn loại bỏ loại "MỚI" để các cổng này được bảo vệ khỏi các kết nối tùy ý mà không cần thiết lập phiên FTP trước đó.
Ryan Griggs

5

Thêm MỚI đã sửa nó, tôi tin.

Bây giờ, tập tin iptables của tôi trông như thế này ..

# 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

Nhập nó dưới dạng câu trả lời, vì quá nhiều ký tự không được phép bình luận .. Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn.


2
Thật tuyệt, nó làm việc và vui mừng khi tôi chỉ cho bạn đi đúng hướng. Vui lòng đánh dấu câu trả lời của riêng bạn là câu trả lời để bạn giúp những người khác tìm kiếm câu trả lời đúng.
Valentin Bajrami

Tôi tin rằng có một lỗi đánh máy trong câu trả lời được chấp nhận. Tôi tin rằng --dport 20:65535sẽ để tất cả các cổng từ 20 - 65535 mở từ bất kỳ cổng nguồn nào trong khoảng 1024: 65535, điều này khiến nhiều dịch vụ bị lộ mà có lẽ không nên, trừ khi được cho phép rõ ràng. Tôi tin rằng những gì đã được dự định là--dport 1024:65535
itnAAnti

0

Nếu bạn cần cả kết nối chủ động và thụ động, và đã chấp nhận ESTABLISHEDkết nối, chẳng hạn như:

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

Sau đó, bạn chỉ cần mở cổng 21 và thêm một quy tắc đặc biệt cho các cổng thụ động. Không có quy tắc nào là cần thiết cho cổng 20 vì nó đã được chấp nhận bởi ESTABLISHEDquy tắc trên.

Đầu tiên chấp nhận kết nối mới trên port 21:

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

Sau đó thêm trình trợ giúp CT cho các cổng thụ động 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

Xem thêm:

Lưu ý: bạn phải đặt 1024:như trong máy chủ FTP của mình: tìm kiếm các cổng thụ động mặc định trong cấu hình FTP của bạn. Khác bạn sẽ mở quá nhiều cổng có thể không liên quan đến FTP.

Lưu ý quan trọng: Tôi đã không thêm OUTPUTquy tắc khi mặc định của mình đi cùng iptables -P OUTPUT ACCEPT. Có nghĩa là tôi tin tưởng những gì đang đi ra khỏi hộp của tôi. Đó có thể không phải là một lựa chọn tốt, đặc biệt là trong thiết lập NAT.

Lưu ý rất quan trọng: FTPS sẽ không hoạt động với thiết lập như vậy, vì cổng thụ động bị ẩn (được mã hóa), do đó không có cách nào iptablesđể đoán cổng tốt. Xem Thay đổi IPTables để cho phép FTP qua TLS bằng cổng thụ độnghttps://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.