들어오는 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
또한보십시오:
- https://github.com/rtsisyk/linux-iptables-contrack-exploit
- http://home.regit.org/wp-content/uploads/2011/11/secure-conntrack-helpers.html
메모:FTP 서버에서와 같이 설정해야 합니다 1024:
. 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