나는 데비안을 설치했습니다 (내 라즈베리 파이에 있지만 질문은 매우 일반적입니다):
Linux raspberrypi 4.9.28+ #998 Mon May 15 16:50:35 BST 2017 armv6l GNU/Linux
저는 여기에 간단한 익명 및 일반 텍스트(SSL 없음) FTP 서버(vsftpd)를 설정하려고 합니다. TCP 포트는 일반 FTP 포트 21이므로 수동 모드만 허용하겠습니다.
저는 엄격한 방화벽 구성을 원하므로 ssh와 앞서 언급한 FTP 서버만 허용합니다.
이를 위해 나는 이 conntrack
모듈을 사용하여 합법적인 인바운드 연결만 허용합니다. 그래서 모듈 modprobe
을 로드했습니다 nf_conntrack_ftp
.
modprobe nf_conntrack_ftp
내 iptables 구성:
# Generated by iptables-save v1.4.21 on Sat Aug 12 15:50:44 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [108:11273]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Sat Aug 12 15:50:44 2017
이 구성에서는 수동 데이터 연결이 작동할 수 없습니다.
이전 에 tcpdump를 설정하고 -A INPUT j LOG
규칙을 추가했습니다
-A INPUT -j DROP
. Iptablespassive 데이터 연결에 대한 인바운드 패킷이 기록되고 거부되는 것을 명확하게 볼 수 있습니다.
얼마 전에 Centos7 시스템에서 거의 동일한 설정을 수행했는데 제대로 작동했습니다. 제가 뭔가 중요한 것을 놓쳤나요?
도와주셔서 감사합니다 :)
답변1
@meuh가 댓글에서 제안한 대로 호스팅된 문서를 살펴보았습니다.https://home.regit.org/netfilter-en/secure-use-of-helpers/.
"안전성을 향상하기 위해 CT 타겟 사용" 단락에서는 다음을 설명합니다.
도우미의 일반적인 문제는 도우미가 미리 정의된 포트에서 수신 대기한다는 것입니다. 서비스가 표준 포트에서 실행되고 있지 않으면 선언해야 합니다. 2.6.34 이전에는 모듈 옵션을 사용하는 것이 유일한 방법이었습니다. 그러면 선택한 도우미가 추가된 포트의 시스템 확인을 수행하게 됩니다. 이는 분명히 차선책이며, CT 타겟은 2.6.34에 도입되었습니다. 특정 프로세스에서 어떤 도우미가 사용되는지 지정할 수 있습니다. 예를 들어, 포트 2121에서 실행되는 IP 주소 1.2.3.4의 FTP 서버가 있다고 가정합니다.
그것을 선언하기 위해 우리는 간단히 할 수 있습니다
iptables -A PREROUTING -t raw -p tcp --dport 2121 \\ -d 1.2.3.4 -j CT --helper ftp
이것은 내 경우는 아니지만(일반 포트 21을 사용하고 있기 때문에) 누군가 인바운드 연결에 대해 ftp 도우미를 활성화하려는 경우 여전히 작동하는 것 같습니다.
iptables -A PREROUTING -t raw -p tcp -m tcp --dport 21 -j CT --helper ftp
내 (작업) 구성은 다음과 같습니다.
# Generated by iptables-save v1.4.21 on Sat Aug 12 17:39:53 2017
*raw
:PREROUTING ACCEPT [445:37346]
:OUTPUT ACCEPT [375:44051]
-A PREROUTING -p tcp -m tcp --dport 21 -j CT --helper ftp
COMMIT
# Completed on Sat Aug 12 17:39:53 2017
# Generated by iptables-save v1.4.21 on Sat Aug 12 17:39:53 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [169:17775]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Sat Aug 12 17:39:53 2017
방화벽의 동작은 사용자 입력에 따라 달라지므로 문서에서 이 구성에 주의하라고 어떻게 조언하는지 주목할 가치가 있을 것입니다.
이런 식으로 개방형 인터넷에서 FTP 서버에 직면할 때 위험이 있는지 궁금합니다. 일반적으로 FTP는 보안 측면에서 최고의 프로토콜은 아닙니다.