동적 포트를 사용하여 수동 FTP에 대한 방화벽 규칙을 만드는 방법은 무엇입니까?

동적 포트를 사용하여 수동 FTP에 대한 방화벽 규칙을 만드는 방법은 무엇입니까?

다음 두 가지 규칙은 수동 전송을 허용하며 이를 FTP 서버에 대한 방화벽 규칙으로 추가했습니다.

//The following two rules allow the inbound FTP connection
iptables -A INPUT -s $hostIP -p tcp --dport 21 -i eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d $hostIP -p tcp --sport 21 -o eth0 -m state --state ESTABLISHED -j ACCEPT

// The following two rules allow for passive transfers
iptables -A INPUT -s $hostIP -p tcp --dport 1024:65535 -i eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d $hostIP  -p tcp --sport 1024:65535 -o eth0 -m state --state ESTABLISHED -j ACCEPT

내 FTP 서버는 "1024:65535" 범위에 수동 포트를 할당하여 구성되었으며 위의 규칙이 작동합니다. 그러나 이제 FTP 서버는 고정 포트 범위 대신 사용 가능한 포트에 바인딩하도록 구성되었습니다. 그러면 위의 두 규칙에 어떤 변경이 필요합니까?

편집하다 답변에 언급된 수동 FTP 연결에 대한 세 가지 규칙을 적용한 후 다음 순서로 규칙을 설정했는데 이제 작동이 중지되어 클라이언트가 연결되었지만 원격 디렉터리를 검색할 수 없습니다.

//The following two rules allow the inbound FTP connection
iptables -A INPUT -s $hostIP -p tcp --dport 21 -i eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d $hostIP -p tcp --sport 21 -o eth0 -m state --state ESTABLISHED -j ACCEPT

iptables  -A PREROUTING -t raw -p tcp -s $hostIP --dport 21 -j CT --helper ftp
iptables  -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -s $hostIP -p tcp -j ACCEPT
iptables  -A OUTPUT -m conntrack --ctstate ESTABLISHED -m helper --helper ftp -d $hostIP -p tcp -j ACCEPT

작업 규칙

iptables -A PREROUTING -t raw -p tcp -s $hostIP --dport 21 -j CT --helper ftp
iptables -A INPUT  -i eth0 -p tcp -s $hostIP -m conntrack --ctstate RELATED,ESTABLISHED -m helper --helper ftp -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -d $hostIP -m conntrack --ctstate ESTABLISHED -m helper --helper ftp -j ACCEPT

답변1

$hostIP귀하의 규칙에서 귀하가 의미하는 것은 FTP 액세스를 허용하려는 호스트라고 가정합니다 . 그렇지 않으면 귀하의 기존 규칙이 나에게 이해되지 않습니다.

암호화되지 않은 FTP를 사용하는 경우 완전 개방형 FTP 데이터 연결 규칙을 연결 추적으로 바꿔야 합니다.

먼저 FTP 연결 추적 도우미를 수신 FTP에 연결하는 규칙을 추가합니다.주문하다연결하다:

iptables -A PREROUTING -t raw -p tcp -s $hostIP --dport $ftpCMDport -d $ftpServerIP -j CT --helper ftp

이는 $ftpCMDport로컬 FTP 서버가 로그인을 허용하는 포트입니다. 일반적으로 포트 21입니다.

(이력: 예전에는 TCP 포트 21에서 자동으로 발생했지만 자동 할당을 남용할 수 있다는 사실이 밝혀져 Linux 커널 3.5에서는 연결 추적 도우미 자동 할당이 선택 사항이 되었고 나중에 자동 할당 기능이 제거되었습니다. 전적으로.)

CT 도우미가 FTP 명령 연결을 모니터링하면 방화벽은 합법적인 FTP 데이터 연결을 위해 어떤 포트가 허용되어야 하는지를 "알게" 됩니다. 들어오는 데이터 연결을 허용하기 위해 이 정보를 실제로 사용하려면 두 가지 규칙이 더 필요합니다.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -m helper \
   --helper ftp -s $hostIP -d $ftpServerIP -p tcp -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -m helper \
   --helper ftp -s $ftpServerIP -d $hostIP -p tcp -j ACCEPT

이 세 가지 규칙은 함께 기존의 두 가지 FTP 데이터 연결 규칙을 완전히 대체해야 합니다. FTP 서버가 두 가지 유형을 모두 허용하는 경우 활성 연결과 수동 연결 모두에 적합합니다. 수동 FTP 데이터 연결만 허용하려면 RELATEDOUTPUT 규칙을 제거해야 할 수도 있습니다.

이는 다음을 기반으로 합니다.https://home.regit.org/netfilter-en/secure-use-of-helpers/


SSL/TLS를 사용하여 FTP를 암호화하는 경우 연결 추적 도우미는 암호화된 FTP 명령 트래픽을 이해할 수 없으므로 FTP 서버가 무료 포트의 데이터 연결을 수락하면 방화벽 트래픽 전체를 효과적으로 차단할 수 없습니다. 모든 TCP 포트는 특정 연결에 대해 FTP 데이터 포트가 될 수 있기 때문입니다. 그렇다면 유일한 가능성은 IP 주소로 트래픽을 제한하는 것입니다.

iptables -A INPUT -s $hostIP -p tcp -i eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d $hostIP  -p tcp -o eth0 -m state --state ESTABLISHED -j ACCEPT

--dport이는 기본적으로 및 옵션이 제거된 기존 규칙입니다 --sport.

관련 정보