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