SSH 보안을 강화시키기 위한 여러가지 설정을 정리
리눅스를 OS로 사용하는 서버에 접속하고자 할 때 SSH를 이용
이에 SSH를 통한 해킹시도(계정탈취)를 차단하기 위한 보안설정을 정리
SSH 란?
Secure Shell의 줄임말, 원격 호스트에 접속하기 위해 사용되는 네트워크 프로토콜, 컴퓨터 간의 통신을 할 때 보안적으로 안전하게 통신을 위해 암호화기능을 제공
※ Shell : 커널과 사용자 간의 다리 역할을 하는 인터페이스
Telnet을 이용한 원격접속에서 SSH를 이용한 접속으로 변경
☞ 이유는 보안강화 측면, Telnet은 암호화를 제공하지 않아 보안상 취약, 이를 보완한 것(암호화)이 SSH
🎯 적용대상: CentOS, Rocky, Alma Linux 를 대상
이하의 설정방법을 정리해두고자 함.
- 접속포트 변경
- root 계정 원격접속 차단
- 세션 타임아웃
- 로그인 시도 횟수 제한
이유
🤦🏻♂️ ssh 접속의 default 포트는 22, default 포트는 익히 알려져 많은 접속시도에 노출
포트변경을 통해 무분별한 접속시도를 회피하고자 함
☞ nmap 등의 툴을 이용하면 포트확인 가능
How to
1. ssh 설정파일 수정
2. SELinux 설정
3. 방화벽 설정
4. ssh daemon 재시작
5. 포트 open여부 확인
6. 재접속
Step 1. ssh 설정 파일 수정
설정파일(sshd_config) 내의 port를 변경하고자 하는 포트번호로 변경 & 저장
22222 포트로 변경하는 예)
# vi /etc/ssh/sshd_config
#Port 22
Port 22222
Step 2. SELinux 설정
SELinux를 활성화상태 내 포트 허용
# semanage port -a -t ssh_port_t -p tcp 22222
Step 3. 방화벽 설정
방화벽 내 22222 포트 허용 및 정책 적용
# firewall-cmd --permanent --zone=public --add-port=22222/tcp
# firewall-cmd --reload
Step 4. ssh 재실행
# systemctl restart sshd.service
Step 5. 설정한 포트가 열려있는지 확인
$ netstat -nap | grep 22222
Step 6. 재접속
$ ssh root@xxx.xxx.xxx.xxx -p 22222
이유 및 목적
root 계정은 기본적으로 생성되는 관리자 계정
ssh 기본설정에서는 root 로그인이 허용상태이며 공격자로부터 무분별한 root 계정을 통한 ssh 접속시도 가능성 존재, 이를 방지하기 위해 root 계정을 통한 접속차단 설정
How to
1. root 이외 접속계정 생성
2. ssh 설정파일(sshd_config) 수정
3. ssh daemon 재시작
4. 확인
Step 1. root 이외 접속계정 생성
$ adduser user1
Step 2. ssh 설정파일(sshd_config) 수정
# vi /etc/ssh/sshd_config
ssh-key를 이용한 로그인을 허용하는 경우: prohibit-password
root 로그인자체를 막는 경우: no
#PermitRootLogin prohibit-password
PermitRootLogin prohibit-password # ssh-key 로그인 허용
#PermitRootLogin prohibit-password
PermitRootLogin no # root 계정을 통한 원격로그인 차단
Step 3. ssh daemon 재시작
# systemctl restart sshd.service
Step 4. 확인
$ ssh user1@xxx.xxx.xxx.xxx -p 22222
📣 참고
rocky, alma linux의 경우, 이하의 파일 설정을 변경해야함❗️
이하의 파일내용 확인 및 변경
/etc/ssh/sshd_config.d/01-permitrootlogin.conf
[변경 전]
PermitRootLogin yes
↓
[변경 후]
PermitRootLogin no
설정내용 확인
# sshd -T
이유 및 목적
ssh를 연결해 놓으면 사용자가 연결을 끊지 않는 이상, 계속 연결된 상태
연결이 유지된 상태는 보안상 위험하므로, 일정 시간이 지나면 자동으로 연결이 끊어지도록 설정해서 보안을 강화
How to (ssh설정변경을 이용)
1. ssh 설정파일(sshd_config) 수정
2. ssh daemon 재시작
3. 확인
Step 1. ssh 설정파일(sshd_config) 수정
# vi /etc/ssh/sshd_config
sshd_config 파일 내부
[변경 전]
#ClientAliveInterval 0
#ClientAliveMax 3
↓
[변경 후]
ClientAliveInterval 100
ClientAliveCountMax 3
ClientAliveInterval: 클라이언트 살아있는지 확인하는 간격
ClientAliveCountMax: 클라이언트 응답 없어도 접속 유지하는 횟수
참고) ClientAliveInterval = 100, ClientAliveCountMax = 3 이면 300초(5분) 후 접속 끊김
최대접속유지시간 = ClientAliveInterval × ClientAliveCountMax
= 100 × 3
= 300 초
Step 2. ssh daemon 재시작
# systemctl restart sshd.service
Step 3. 확인
# cat /etc/ssh/sshd_config | grep Client
💡 참고) 다른방법: profile 내 세션 타임아웃을 설정(10초)
profile 내 세션타임(10초)을 설정
# vi /etc/profile
export TMOUT=10
profile을 적용
# source /etc/profile
이유 및 목적
로그인 시도횟수를 제한함으로써 보안성 강화
How to
1. ssh 설정파일(sshd_config) 수정
2. ssh daemon 재시작
3. 확인
Step 1. ssh 설정파일(sshd_config) 수정
# vi /etc/ssh/sshd_config
sshd_config 파일 내부
[변경 전]
#MaxAuthTries 6
↓
[변경 후]
MaxAuthTries 3
Step 2. ssh daemon 재시작
# systemctl restart sshd.service
Step 3. 확인
# cat /etc/ssh/sshd_config | grep MaxAuthTries