메뉴 건너뛰기

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 우분투(Ubuntu) 서버 / Nginx, PHP, MariaDB 설치하고 설정하기 미르다테 2024.12.30 17
74 워드프레스 미디어 업로드 용량 제한 오류 해결 미르다테 2024.12.30 18
73 Nginx Reverse Proxy 사용시 IP 주소 전달 문제 해결하기 미르다테 2024.12.30 21
72 우분투(Ubuntu) 서버에 삼바(SAMBA) 설치하기 미르다테 2024.12.30 33
71 만자로(Manjaro) 리눅스 설치 후 초기 세팅 미르다테 2024.12.30 28
70 만자로(Manjaro) 리눅스 Pacman 사용법 미르다테 2024.12.30 23
69 Nginx Proxy Manager SSL 자동 갱신하기 미르다테 2024.12.30 29
68 우분투(Ubuntu) 서버 한글 폰트 설치하기 미르다테 2024.12.30 43
67 우분투(Ubuntu) 서버 지역시간설정(tzdata) 및 로케일(locale) 설정하기 미르다테 2024.12.30 56
66 우분투(ubuntu) 서버 유저명, 홈경로, 그룹명 변경 방법 미르다테 2024.12.30 41
65 CentOS 리눅스 YUM 사용법 미르다테 2024.12.30 48
64 CentOS 서비스 자동시작 설정 및 해제 미르다테 2024.12.30 67
63 CentOS 7에서 Docker 및 Docker Compose 설치하기 미르다테 2024.12.30 84
62 칼리 리눅스(Kali Linux)에 크롬(Chrome) 설치하기 미르다테 2024.12.30 69
61 우분투(Ubuntu)에서 일괄 업데이트하기 (불필요한 패키지 자동 삭제) 미르다테 2024.12.30 57
60 우분투(Ubuntu) 서버 보안 자동 업데이트 방법 미르다테 2024.12.30 71
59 CPU Governor 종류 미르다테 2024.12.30 85
58 그누보드5 게시판의 첨부파일 용량 제한과 관련된 PHP 설정 미르다테 2024.12.30 79
57 리눅스 로그파일 utmp, wtmp, btmp, last log, sulog 미르다테 2024.12.30 51
56 Virtualbox Centos 7 게스트확장설치 미르다테 2024.12.30 61
위로