주소를 차단하는 것과 계정을 잠그는 것은 서로 다른 메커니즘이며 실패하는 방향도 반대입니다. 출처 차단은 한 출처만 멈추고 대상 계정은 다른 곳에서 여전히 접근할 수 있습니다. 계정 잠금은 그 신원을 어디서나 멈추며 정당한 사용자의 노트북에서도 막습니다.

인증을 PAM에 위임하는 VPN에서 세는 것은 PAM 스택이 도달하는 지점이며, 리스너가 기록한 내용이 아닙니다.

두 카운터, 두 종류의 피해자

속도 제한기는 출처를 보고 최근 그곳에서 몇 번 시도했는지 묻습니다. 잠금은 신원을 보고 그 계정이 몇 번 실패를 쌓았는지 묻습니다. 전자는 가용성을, 후자는 자격 증명을 보호하며 어느 것도 다른 것을 대신하지 않습니다.

그래서 다섯 번 실패하면 IP를 차단한다는 문장은 자격 증명 채우기 보고서에 대한 답이 아닙니다. 공격자는 출처를 돌리고 각 출처는 적은 시도만 얻으며 계정은 결코 세어지지 않습니다. 반대로 출처 통제가 없는 잠금은 일부러 실패하게 함으로써 계정을 무기한 잠글 수 있게 합니다.

두 통제는 복구 이야기도 다릅니다. 주소 차단은 아무도 신경 쓰지 않는 타이머로 만료됩니다. 계정 잠금은 관리자, 문서화된 대기 기간 또는 셀프서비스 해제가 필요할 수 있습니다.

이미 집계를 가진 저장소를 찾으십시오

무엇이든 추가하기 전에 실패 저장소가 이미 있는지 확인하십시오. 로컬 Linux 계정, 디렉터리 서비스, 외부 ID 공급자는 각자 집계를 가지며 그 앞에 놓인 PAM 모듈은 첫 번째를 확장하지 않고 두 번째를 만듭니다.

grep -rnE 'faillock|pam_tally|pam_unix' /etc/pam.d/
ls -l /etc/pam.d/ | head -20

VPN이 실제로 지정하는 서비스 파일을 읽고 그 include 줄을 따라가십시오. 많은 배포판에서 VPN 서비스는 공통 파일을 포함하므로 조정하는 집계가 SSH와 로컬 로그인에도 적용됩니다.

디렉터리가 이미 잠금을 강제한다면 유용한 질문은 PAM 대화가 그 결정에 어떻게 도달하는지, VPN이 그것을 어떻게 보고하는지입니다. 위에 더한 로컬 집계는 디렉터리의 카운터가 되지 않으며 두 정책은 해제 시점에서 어긋날 수 있습니다.

pam_faillock의 호출 위치는 하나가 아니라 셋입니다

모듈은 복사한 한 줄이 흐리기 쉬운 세 작업을 나눕니다. 이미 잠겼는지 확인하기, 실패 기록하기, 성공 후 이력 지우기입니다.

오래된 집계 모듈에서 옮길 때 대개 여기서 틀립니다. 동작하는 pam_tally2 예제의 줄을 pam_faillock 스택으로 복사하는 것은 이름 변경이 아닙니다. 문서화된 설정이 다르고, 잘못된 위치의 호출은 실패를 한 번도 확인하지 않고 기록할 수 있습니다.

faillock --user alice
faillock --user alice --reset

검사 도구는 카운터가 진짜인지 보는 가장 빠른 방법입니다. 계정의 기록된 실패를 보여 주고 지울 수도 있습니다. 통제된 실패가 그 출력을 바꾸지 않는다면 호출 위치가 틀린 것입니다.

전용 서비스 이름은 격리가 아닙니다

VPN에 전용 PAM 서비스 파일을 주면 의도한 정책이 보이지만 영향은 한정되지 않습니다. 공통 파일의 include는 그 파일이 하는 일을 그대로 끌어오며 시스템 전체에 걸친 집계도 포함합니다.

잠금이 VPN 접근만 덮는지 같은 계정을 인증하는 모든 서비스를 덮는지 분명히 정하십시오. 두 답 모두 옹호할 수 있습니다. 실패는 하나를 골랐다고 믿으면서 스택이 다른 하나를 구현하는 것입니다.

다음으로 비용을 생각하십시오. 잠금은 공격자가 일으킬 수 있고 고통을 받는 사용자는 그 계정의 소유자입니다. 임계값, 대기 기간, 관리 복구 경로는 모두 정책의 일부이며 복구는 사고 중 VPN 재구성에 의존해서는 안 됩니다.

단일 거부가 아니라 순서를 받아들이십시오

승인된 계획 아래 지정된 신원으로 시험하고 단일 사건이 아니라 연쇄를 시험하십시오. 유효한 계정은 인증되고, 의도적으로 틀린 암호는 카운터를 움직이고, 설정된 잠금이 발동하며, 문서화된 복구가 접근을 되돌립니다.

faillock --user test-vpn-01
journalctl -u openvpn-server@lab -n 30 --no-pager | grep -i 'auth\|pam'

성공 동작도 실패 동작만큼 주의 깊게 보십시오. 성공한 로그인이 이력을 지우지 않으면 평범한 실수가 천천히 쌓인 뒤 계정이 잠깁니다. 모든 서비스에서 모두 지운다면 카운터는 정책의 주장보다 약합니다.

마지막으로 승리를 선언하기 전에 무인 클라이언트를 멈추십시오. 저장된 자격 증명이 배경에서 다시 시도하면 복구 몇 분 뒤 실패를 다시 만들고 계정을 또 잠급니다. 출처 기반 속도 제한은 추가 통제로 남을 수 있지만 그것은 계정 정책이 아닙니다.

관련 글