iptables는 FTP 수신을 허용합니다.

iptables는 FTP 수신을 허용합니다.

들어오는 FTP 트래픽을 허용하고 싶습니다.

CentOS 5.4:

이것은 내 /etc/sysconfig/iptables파일입니다.

# 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

또한 기본적으로 ip_conntrack_netbios_n 모듈이 로드됩니다.

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

하지만 이 모듈을 제거하려고 시도했지만 여전히 성공하지 못했기 때문에 문제는 이 모듈에 있지 않습니다.

iptables를 비활성화하면 백업을 다른 컴퓨터에서 FTP로 전송할 수 있습니다. iptables가 시행되는 경우 전송이 실패합니다.

답변1

FTP 서버에는 데이터를 전송하기 위한 채널이 필요합니다. 포트는 21연결을 설정하는 데 사용됩니다. 따라서 데이터 전송을 가능하게 하려면 포트도 활성화해야 합니다 20. 아래 구성을 보세요

수동 FTP 연결이 거부되지 않도록 먼저 다음 모듈을 로드하십시오.

modprobe ip_conntrack_ftp

21포트에서 들어오고 나가는 FTP 연결을 허용합니다.

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"

20들어오고 나가는 활성 연결에 대해 FTP 포트를 허용합니다.

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"

마지막으로 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"

FTP 및 방화벽 문제에 대한 자세한 내용은 다음을 참조하세요.http://slacksite.com/other/ftp.html#active

편집하다:NEW포트 21 입력 규칙에 추가합니다 .

답변2

나는 여러 블로그 등에서 이러한 광범위한 규칙을 보았고 왜 단순히 사용하지 않는지 궁금했습니다.

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

모듈 과 함께 nf_conntrack_ftp. 이것은 더 간결하고 읽기 쉬우며 일반적으로 특히 방화벽의 경우 좋은 것입니다.

FWIW, 커널 4.7에 변경 사항이 있는 것 같으므로 다음을 net.netfilter.nf_conntrack_helper=1통해 설정하거나 sysctl(예: 에 넣음 /etc/sysctl.d/conntrack.conf) 다음을 사용해야 합니다.

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

(바라보다여기자세한 내용은)

답변3

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

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

클라이언트에서 수동 모드와 활성 모드 간 전환

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

답변4

활성 연결과 수동 연결이 모두 필요하고 ESTABLISHED연결이 이미 승인된 경우, 예를 들면 다음과 같습니다.

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

그런 다음 포트 21을 열고 패시브 포트에 대한 특수 규칙을 추가하기만 하면 됩니다. 포트 20은 ESTABLISHED위의 규칙에 의해 이미 승인되었으므로 규칙이 필요하지 않습니다 .

먼저 새 연결을 수락합니다 port 21.

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

그런 다음 패시브 포트에 대한 CT 도우미를 추가합니다 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

또한보십시오:

노트:1024:FTP 서버에서 다음을 설정 해야 합니다 . FTP 구성에서 기본 수동 포트를 검색합니다. 그렇지 않으면 FTP와 관련되지 않은 포트를 너무 많이 열게 됩니다.

중요한 팁:OUTPUT내 기본 규칙은 이기 때문에 규칙을 추가하지 않았습니다 iptables -P OUTPUT ACCEPT. 이는 내 상자에서 나오는 것을 신뢰한다는 의미입니다. 특히 NAT 설정에서는 이는 좋은 선택이 아닐 수 있습니다.

매우 중요한 참고사항:수동 포트가 숨겨져(암호화되어) iptables올바른 포트를 추측할 수 없기 때문에 FTPS는 이러한 유형의 설정에 적합하지 않습니다. 바라보다수동 포트를 사용하여 TLS를 통한 FTP를 허용하도록 IPTable을 변경합니다.그리고https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

관련 정보