vsftp 서버에 대한 무차별 대입 공격은 로그에 인증 실패를 표시하지 않습니다.

vsftp 서버에 대한 무차별 대입 공격은 로그에 인증 실패를 표시하지 않습니다.

내 서버는 Debian 8을 실행 중이고 vsftpd 버전은 3.0.2-17입니다. 최근 내 vsftpd.log는 다음과 같이 채워졌습니다.

vsftpd.log

Mon Mar  7 18:13:44 2016 [pid 13499] CONNECT: Client "::ffff:xxx.xxx.xx.xx"
Mon Mar  7 18:13:45 2016 [pid 13501] CONNECT: Client "::ffff:xxx.xxx.xx.xx"
Mon Mar  7 18:13:46 2016 [pid 13503] CONNECT: Client "::ffff:xxx.xxx.xx.xx"
Mon Mar  7 18:13:47 2016 [pid 13505] CONNECT: Client "::ffff:xxx.xxx.xx.xx"
...
...

이는 모두 동일한 IP 주소에서 6000개 이상의 줄에 걸쳐 진행됩니다(로그 파일 조각에서 IP를 난독화했습니다). 기본 vsftpd.conf 파일을 사용하여 실행 중인 fall2ban(버전 0.8.13-1) 감옥이 있지만 인증 실패가 기록되지 않으므로 금지가 없습니다. 참고용 필터는 다음과 같습니다.

fall2ban vsftpd.conf 정규식

failregex = ^%(__prefix_line)s%(__pam_re)s\s+authentication failure; logname=\S* uid=\S* euid=\S* t$
        ^ \[pid \d+\] \[.+\] FAIL LOGIN: Client "<HOST>"\s*$

이것은 내 vsftpd 구성 파일입니다.

vsftpd.conf

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=<path to .pem file>
rsa_private_key_file=<path to key file>
ssl_enable=YES
ssl_tlsv1=YES
ssl_ciphers=HIGH
pasv_min_port=XXXX
pasv_max_port=XXXX

무슨 일이 일어나고 있는지 이해하도록 도와줄 수 있는 사람이 있나요? 로그에 실패한 로그인 시도가 없는 이유는 무엇입니까? 누군가가 실제로 시스템에 접근했다는 다른 증거를 찾을 수 없습니다.

그런데 내 의도는 내가 필요할 때만 vsftpd 서비스를 시작하고 중지하는 것이었지만 시작에서 서비스를 제거하지 못했기 때문에 다시 시작했을 때 다음에 시작되었다는 사실을 깨닫지 못한 채 다시 켜졌습니다. 문제를 해결했지만 여전히 문제와 이 경우에 Fail2ban을 작동시키는 방법을 이해하고 싶습니다.

답변1

연결 작업과 로그인 작업은 동일하지 않습니다.

인터넷의 일부 봇은 FTP 서버가 활성 상태인지 확인하고 로그인을 시도하지 않고도 연결을 끊을 수 있습니다(때로는 귀하의 경우처럼 루프에서). 이것은 정상입니다. 여기에는 문제가 없습니다.

직접 시도해 볼 수 있습니다. 그냥 실행하세요:

$ telnet whatever-domain.com 21
Trying 999.9.9.9...
Connected to whatever-domain.com.
Escape character is '^]'.
220 (vsFTPd 3.0.2)
^]
telnet> Connection closed.

확인하면 vsftpd log원하는 행만 나타나야 하며 CONNECT그 이상은 나타나지 않습니다.

답변2

나는 귀하의 입력을 조금 가지고 놀았고 fail2ban-regex다음 줄을 다음과 일치시킬 수 있었습니다 failregex.

failregex = ^%(__prefix_line)s\s*\[pid\s*\d*\]:\s*CONNECT:\s*Client\s*\"<HOST>\"

더 구체화할 수 있다고 확신합니다. 그러나 핵심은 기본값이 단지 가 아닌 has로 인해 혼동될 수 있으므로 __prefix_line접두사를 로컬에서 수정하거나 정규식 본문에 pid 부분을 포함해야 한다는 것입니다. .[pid 13499][13499]

임계값을 너무 낮게 설정하지 않는 한, 이는 원하는 동작을 제공합니다. 즉, 짧은 시간 내에 반복적으로 연결하는 사람을 차단하는 것입니다.

관련 정보