IPTables로 FTP 허용

IPTables로 FTP 허용

현재 시나리오에는 다양한 규칙을 허용하는 작업이 포함되어 있지만 어디에서나 액세스할 수 있으려면 FTP가 필요합니다. OS는 Cent 5이고 VSFTPD를 사용하고 있습니다. 구문이 정확하지 않은 것 같습니다. 다른 모든 규칙은 올바르게 작동합니다.

## Filter all previous rules
*filter

## Loopback address
-A INPUT -i lo -j ACCEPT

## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT

## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT

##Allow FTP

## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT

다음은 내가 시도한 규칙입니다.

##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT

-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT


-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT

-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT

답변1

FTP 프로토콜을 따를 수 있도록 사람들에게 참조하는 문서는 다음과 같습니다.http://slacksite.com/other/ftp.html

  • 활성 모드 FTP를 수행하려면 TCP 포트 21로 들어오는 연결과 포트 20에서 나가는 연결을 허용해야 합니다.
  • 수동 모드 FTP를 수행하려면 TCP 포트 21로 들어오는 연결과 서버 컴퓨터에서 임의로 생성된 포트로 들어오는 연결을 허용해야 합니다(netfilter에서 conntrack 모듈을 사용해야 함).

귀하의 게시물에는 OUTPUT 체인에 대한 정보가 없으므로 여기에도 포함하겠습니다. OUTPUT 체인이 default-drop인 경우 이것이 중요합니다.

iptables 구성에 다음 규칙을 추가하세요.

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

수동 모드 FTP를 지원하려면 부팅 시 ip_conntrack_ftp 모듈을 로드해야 합니다. /etc/sysconfig/iptables-config 파일에서 IPTABLES_MODULES 줄의 주석 처리를 제거하고 수정하여 다음 내용을 읽습니다.

IPTABLES_MODULES="ip_conntrack_ftp"

iptables 구성을 저장하고 iptables를 다시 시작하십시오.

service iptables save
service iptables restart

VSFTPD가 문제가 되는 것을 완전히 배제하려면 VSFTPD를 중지하고 "netstat -a"를 사용하여 포트 21에서 수신 대기하고 있지 않은지 확인한 후 다음을 실행하십시오.

nc -l 21

그러면 netcat이 포트 21에서 수신 대기를 시작하고 입력 내용을 쉘에 에코합니다. 다른 호스트인 TELNET에서 서버의 포트 21로 연결하고 TCP 연결이 이루어졌는지 확인하고 TELNET 연결을 입력할 때 셸에 출력이 표시되는지 확인합니다.

마지막으로 VSFTPD 백업을 가져와 포트 21에서 수신 대기 중인지 확인한 후 다시 연결을 시도합니다. netcat에 대한 연결이 작동했다면 iptables 규칙은 정상입니다. netcat이 연결된 후 VSFTPD에 대한 연결이 작동하지 않으면 VSFTPD 구성에 문제가 있는 것입니다.

답변2

이 규칙을 시도해 보세요. 참고: $EXTIPFTP 서버의 외부 IP 주소입니다.

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT

답변3

내 경우에는 ip_conntrack_ftp 커널 모듈이 누락되었습니다. 로드해야합니다. 따라서 다음을 시도해 볼 수 있습니다.

modprobe ip_conntrack_ftp

또한 ip_conntrack_ftp를 /etc/modules에 추가하면 다시 시작한 후에도 작동합니다.

관련 정보