메뉴 건너뛰기

SayClub.org

리눅스(Linux)

VPN을 통해 ssh를 접속하지 않는 이상 서버를 공개망에서 사용하게 될 경우 ssh 접속은 외부에 노출될 수 밖에 없습니다.

대부분 해외에서 지속적으로 ssh 로그인을 시도하면서 무작위 비밀번호를 대입합니다.

특히, 지난 Brute-force 해킹으로 인한 서버 탈취 사건을 경험한 이후로 SSH 보안의 중요성을 실감했습니다.

0. 보안? 내가 필요할까?

우분투 서버에서 아래 명령어를 실행시키면, 실시간 ssh 로그인 실패기록을 볼 수 있습니다.

journalctl -f

 

 

깜짝 놀랄 수도 있습니다.
실시간으로 계속해서 로그인시도 (공격) 이 발생하고 있습니다.

via GIPHY

먼지와 같은 우리 보안

1. 당장 설치하기.

 

 

Fail2ban은 ssh log파일을 스캔해 수상한 ip를 ban해주는 소프트웨어입니다.

1-1. 설치하기

우분투에서 다음을 실행시킵니다.

apt-get install fail2ban

방화벽을 확인해봅니다.

iptables -L
...
Chain f2b-sshd (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere
...

성공적으로 fail2ban이 추가된 것을 볼 수 있습니다.


1-2. 사용자 설정하기

sudo vim /etc/fail2ban/jail.local

아래 내용을 입력해 입맛에 맞도록 설정해줍니다.

[DEFAULT]

## 차단하지 않을 IP
ignoreip = 127.0.0.1/8 192.168.10.0/24

# 접속을 차단할 시간. 600 = 10분
bantime  = 10800

# 최대 허용 횟수
maxretry = 10

#아래 시간동안 maxretry횟수만큼 실패시 차단
findtime  = 86400

# (선택) 메일 알림기능
destemail = sysadmin@example.com
sender = fail2ban@my-server.com
mta = sendmail
action = %(action_mwl)s

[sshd]
enabled = true

#여러 포트를 사용할 경우 port = ssh,10022
port = 22
filter = sshd
logpath = /var/log/auth.log

위와 같이 저장하면, 아래 규칙으로 동작합니다.

  • 최근 86400분 (60일) 동안
  • 10회의 로그인을 실패하면
  • 10800분 (180시간) 차단

1-3. 서비스 시작하기

service fail2ban restart

주의할 점은, restart할 때마다 벤 목록이 초기화 된다는 점입니다.

2. 기본 사용법

이제 서버에 접속하는 ip를 차단하고 관리할 수 있는 권한이 생겼습니다.

하지만 사용하다가 caps lock이 켜져있을 수도 있고, 비밀번호를 잘못 알려주어 공동작업자가 차단당할 수도 있습니다.

만약, 실수로 차단당했을 때, 푸는 방법을 알아보겠습니다.

2-1. 현재 차단 현황 보기

sudo fail2ban-client status sshd

2-2. 차단 풀어주기

sudo fail2ban-client set sshd unbanip 000.000.000.000
Status for the jail: sshd
|- Filter
|  |- Currently failed:	5
|  |- Total failed:	58
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	25
   |- Total banned:	25
   `- Banned IP list:	106.12.159.235 106.75.141.202 112.30.185.8 112.85.42.195 119.203.240.76 119.207.126.21 124.74.154.66 138.197.183.21 157.7.52.245 165.22.160.32 178.116.159.202 191.191.35.159 191.243.143.170 192.243.215.42 200.70.56.204 223.171.32.56 51.68.143.224 51.77.140.111 68.183.50.149 81.12.159.146 187.32.178.33 150.95.199.179 197.248.16.118 41.78.201.48 101.91.242.119

잠깐사이에 무려 25개의 ip가 밴되어있네요.
fail2ban이 잘 작동하고 있습니다.

결론

간단한 설정만으로 brute-force 공격시도를 방어해보았습니다.
이 외에도 다양한 설정이 가능하니, 공식 메뉴얼을 참고해주세요.

감사합니다!

번호 제목 글쓴이 날짜 조회 수
75 Rocky Linux 및 NetworkManager를 사용한 정적 경로 설정 미르다테 2025.04.03 15
74 Ubuntu 22.04 LTS 패키지 업데이트 시 오류 해결 방법 미르다테 2025.02.19 22
73 우분투 리눅스(Ubuntu Linux)에서 Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. 오류 해결 방법 미르다테 2025.02.09 27
72 연속적으로 명령 실행시키기 (;과 &와 &&의 차이) 미르다테 2025.02.03 37
71 내 공인IP 확인하기(스크립트) 미르다테 2025.02.02 21
70 리눅스 네트워크 설정(Debian 계열, Ubuntu) 미르다테 2025.01.16 25
69 우분투(Ubuntu) 리눅스 apt 패키지 설치 이력 확인 미르다테 2025.01.14 110
68 Rocky Linux 9 고정 라우팅 경로 설정 방법 미르다테 2025.01.10 115
67 Rocky Linux 9에 Webmin 설치하는 방법 미르다테 2025.01.07 107
66 라이믹스(Rhymix) 애드온 '링크 프리뷰' 설치정보 미르다테 2025.01.06 108
65 Rocky Linux 9에 FFmpeg를 설치하는 방법 미르다테 2025.01.06 100
64 Ubuntu 24.04에 Webmin을 설치하는 방법 미르다테 2024.12.31 96
63 Ubuntu 24.04 LTS에 Docker 설치하기 미르다테 2024.12.31 122
62 Rocky Linux Docker, Docker Compose 설치 방법 미르다테 2024.12.30 109
61 라이믹스(Rhymix) 백업 및 복원 방법 미르다테 2024.12.30 117
60 Rocky Linux - 라이믹스(Rhymix) 설치하기 미르다테 2024.12.30 89
59 Rocky Linux 비밀번호 입력 초과로 인한 계정잠김 확인 및 해제 방법 미르다테 2024.12.30 98
58 Arch Linux mirrorlist 갱신하기 미르다테 2024.12.30 112
57 [중요] RedHat 계열 리눅스 서버 취약점 조치 방법 정리 - MirDaTe 미르다테 2024.12.30 102
56 [Arch Linux] pacman을 사용하여 시스템 업그레이드 시 패키지 손상으로 인한 업그레이드 안되는 증상 해결방법 미르다테 2024.12.30 125
위로