IPTables로 FTP 허용


26

현재 시나리오에는 다양한 규칙을 허용하지만 어디에서나 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
읽을 수 있도록 서식을 수정했습니다.
에이버리 페인

Rackspace를 사용한다고 가정합니까? 튜토리얼에는 그 결점이 있습니다. @Evan Anderson의 지시를 따르십시오.
Andres SK

답변:


41

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

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

게시물에 OUTPUT 체인이 없기 때문에 여기에도 포함시킬 것입니다. OUTPUT 체인이 기본 드롭 인 경우이 문제가 중요합니다.

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

그러면 포트 21에서 netcat 수신이 시작되고 입력이 쉘로 에코됩니다. 다른 호스트에서 TELNET을 사용하여 서버의 포트 21에 연결 한 다음 TELNET 연결을 입력 할 때 TCP 연결이 있고 쉘에 출력이 표시되는지 확인하십시오.

마지막으로 VSFTPD를 백업하고 포트 21에서 수신 대기 중인지 확인한 후 다시 연결하십시오. netcat에 대한 연결이 작동하면 iptables 규칙에 문제가 없습니다. netcat 이후 VSFTPD 연결이 작동하지 않으면 VSFTPD 구성에 문제가있는 것입니다.


패시브 모드에 대한 개요가 제 문제를 해결 한 헬프 맨에게 감사합니다. 도움을 주셔서 감사합니다.
IOTAMAN

iptables를 다시 시작하면 IPTABLES_SAVE_ON_STOP을 "yes"로 설정하지 않은 경우 변경 한 내용이 모두 지워집니다.
Kevin M

@Kevin : 물론 좋은 지적입니다! > smile <이제 편집 내용을 삭제하겠습니다.
Evan Anderson

@ GLB03 : 문제 없습니다. 나는 서버 오류에 살고 ...> smile <
Evan Anderson

이 답변은 저에게 효과적이지 않으므로이 문제가있는 다른 사람에게는 이것이 (그리고 포트 21 입 / 출력 열기) 저에게 효과적이라고 지적 합니다 : linuxquestions.org/questions/linux-security-4 / ... -
ehsanul

0

이 규칙을 시도하십시오. 참고 : $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

0

제 경우에는 ip_conntrack_ftp 커널 모듈이 없습니다. 로드해야합니다. 그래서 당신은 이것을 시도 할 수 있습니다 :

modprobe ip_conntrack_ftp

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.