FTP 수신을 허용하는 Iptables

FTP 수신을 허용하는 Iptables

들어오는 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

또한보십시오:

메모:FTP 서버에서와 같이 설정해야 합니다 1024:. FTP 구성에서 기본 수동 포트를 검색하세요. 그렇지 않으면 FTP 관련 포트가 아닌 포트를 너무 많이 열게 됩니다.

중요 사항:OUTPUT기본값 이 iptables -P OUTPUT ACCEPT. 이는 내 상자에서 나오는 것을 신뢰한다는 의미입니다. 특히 NAT 설정에서는 이는 좋은 옵션이 아닐 수 있습니다.

매우 중요한 참고사항:iptablesFTPS는 수동 포트가 숨겨져(암호화되어) 이러한 설정에서는 작동하지 않으므로 올바른 포트를 추측할 방법이 없습니다 . 보다수동 포트를 사용하여 TLS를 통한 FTP를 허용하도록 IPTable 변경그리고https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

관련 정보