FTP를 허용하기 위해 다음 규칙을 시도했습니다.
# The following two rules allow the inbound FTP connection
iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
# The next 2 lines allow active ftp connections
iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
# These last two rules allow for passive transfers
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
수동 FTP 연결을 허용했음에도 불구하고 서버에 연결하려고 하면 "수동 모드로 전환 중입니다"라는 메시지와 함께 FTP 클라이언트가 중단됩니다.
모든 아웃바운드 연결을 허용한 후:
iptables -P OUTPUT ACCEPT
작동하기 시작했습니다.
뭐가 문제 야?
답변1
패시브 모드에서는 사용될 포트 중 하나만 알 수 있습니다. 연결이 설정된 후 서버는 클라이언트에게 사용할 다른 포트를 알려주고 클라이언트는 두 번째 포트를 열어야 합니다. 나는 귀하의 1024 규칙이 서버가 클라이언트에게 1024를 사용하라고만 지시한다는 것을 알고 있는 경우에만 작동한다고 믿습니다.
더 정확하게:http://slacksite.com/other/ftp.html
수동 모드 FTP에서 클라이언트는 서버에 대한 두 가지 연결을 시작하여 서버에서 클라이언트로 들어오는 데이터 포트 연결을 필터링하는 방화벽 문제를 해결합니다. FTP 연결을 열 때 클라이언트는 두 개의 권한이 없는 무작위 포트를 로컬로 엽니다(N > 1023 및 N+1). 첫 번째 포트는 포트 21을 통해 서버에 연결하지만 PORT 명령을 실행하고 서버가 데이터 포트에 다시 연결하도록 허용하는 대신 클라이언트가 PASV 명령을 실행합니다. 그 결과 서버는 권한이 없는 임의의 포트(P > 1023)를 열고 PASV 명령에 대한 응답으로 P를 클라이언트에 다시 보냅니다. 그런 다음 클라이언트는 데이터를 전송하기 위해 포트 N+1에서 서버 포트 P로 연결을 시작합니다.