서버 로그를 열어보면 밤사이 SSH 로그인 시도가 수백 건씩 쌓여 있는 경우가 흔해요. 대부분 사람이 아니라 자동화된 봇이 22번 포트를 훑고 지나간 흔적입니다. 다행히 설정 몇 가지만 손봐도 이런 시도 대부분은 서버 앞에서 걸러낼 수 있어요.
22번 포트를 그대로 쓰고 있다면
22번은 SSH 기본 포트라 스캐닝 공격이 가장 먼저 두드리는 문입니다. /etc/ssh/sshd_config에서 1024번 이상의 비표준 포트로 바꿔주는 것만으로도 무작위 대입 시도가 눈에 띄게 줄어요. 포트 변경은 근본적인 방어라기보다 소음을 줄이는 조치에 가깝지만, 로그가 깨끗해지면 진짜 위험한 신호를 알아보기 훨씬 쉬워집니다.
주의할 점은 방화벽입니다. 포트를 바꿔놓고 방화벽에 새 포트를 열지 않으면 그대로 접속이 막혀버려요. 설정을 바꾼 뒤에는 기존 세션을 끊지 말고 새 터미널로 접속이 되는지 먼저 확인하는 습관을 들이면 안전합니다.

root 직접 로그인은 막아두세요
PermitRootLogin no로 root 계정의 SSH 직접 접속을 차단하는 건 기본 중의 기본이에요. 공격자 입장에서는 계정명을 이미 아는 상태라 비밀번호만 맞히면 끝인데, 이 문을 닫아두면 계정명부터 다시 알아내야 하니 난이도가 확 올라갑니다. 평소에는 일반 계정으로 접속하고 필요할 때 sudo로 권한을 올리는 방식이 훨씬 안전해요.
여기에 더해 비밀번호 인증 자체를 끄고 SSH 키 인증만 허용하는 걸 권합니다. 키는 사람이 외울 수 있는 비밀번호와는 비교가 안 될 만큼 길고 복잡해서, 무차별 대입으로 뚫는 건 사실상 불가능해요. 키 파일 관리만 잘하면 보안과 편의를 동시에 챙길 수 있습니다.

실패한 IP는 자동으로 걸러내기
설정을 아무리 조여도 시도 자체를 막을 수는 없어요. 이때 쓰는 게 fail2ban입니다. 로그인 실패가 정해진 횟수를 넘으면 해당 IP를 일정 시간 자동으로 차단해줘서, 반복적인 대입 공격을 사람 손 안 대고 끊어낼 수 있습니다.
접속 위치가 고정돼 있다면 한 걸음 더 나가도 좋아요. firewalld나 iptables에서 특정 IP 대역만 SSH 접속을 허용하면 그 외의 시도는 서버까지 도달하지도 못합니다. 재택이나 외부 출장이 잦다면 VPN을 경유하게 만들어 두는 것도 방법이에요.

마지막으로 챙기면 좋은 것들
중요한 서버라면 OTP 같은 2단계 인증을 붙여두면 키가 유출되는 최악의 상황에도 한 겹이 더 남습니다. 유휴 세션이 오래 열려 있는 것도 위험 요소라, 일정 시간이 지나면 자동으로 끊기도록 타임아웃을 걸어두면 좋아요.
사실 이 설정들은 한 번 잡아두면 끝이 아니라, 로그를 주기적으로 들여다보는 습관이 함께 가야 의미가 있습니다. 서버를 직접 관리할 여력이 없다면 관제와 보안 설정을 함께 맡아주는 서버관리 서비스를 활용하는 것도 현실적인 선택이에요.


