출처 : http://zero-gravity.tistory.com/270
참고 : http://www.happyjung.com/lecture/2471
집에 서버를 구성하고나서 불과 며칠이 지나지 않아 로그인 시도가 7천번 가까이 있었다. ㄷㄷ
/var/log/secure로 접속 아이피를 찾아서 조회해보니 죄다 중국쪽으로 찍힌다..;; 우회한 건지 직접 접속 시도한 건지는 모르겠지만... 중국 정말 싫다 ......
앗 뜨거 하고, 이래선 안되겠다는 생각에 바로 보안 설정에 들어갔다.
1. SSH 포트 & 프로토콜 변경
# vi /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 1234
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
Port 부분을 22에서 다른 번호로 변경한다.
# The default requires explicit activation of protocol 1
Protocol 2
Protocol을 2로 변경한다. (보안상 2로 하는 게 좋다고 한다.)
2. root로 로그인이 불가능하도록 설정
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
MaxAuthTries 6
#MaxSessions 10
PermitRootLogin을 주석 해제하고 no로 기입하면 root로는 직접 로그인이 불가능하다. root로 로그인하고 싶다면, 일반 유저로 로그인한 뒤에 "su - root"로 바꿔줘야 함.
MaxAuthTries는 로그인 시도 횟수를 제한한다. 6으로 해놓을 경우, 6번 로그인 실패하면 자동으로 차단.
# systemctl reload sshd.service
설정을 마치고 SSH 서비스를 재시작한다.
# firewall-cmd --permanent --zone=public --add-port=1980/tcp
# firewall-cmd --reload
마지막으로 1234포트 방화벽 열어주면, 1234 포트로만 SSH 접속이 가능할 것이다.
만약 되지 않는다?
내 경우, 여기까지 했는데 포트가 바뀌지 않았다. ㅡㅡ; 그래서 이것저것 찾아본 결과... 뭔가 더 해줘야 했다.
내껀 semanage로 SSH 포트를 변경해줘야 완벽하게 변경이 됐다.
CentOS를 최소 설치를 하면 "semanage" 명령어가 실행되지 않는데,
# yum install policycoreutils-python
이럴 땐, policycoreutils-python을 설치해준다.
# semanage port -a -t ssh_port_t -p tcp 1234
그리고나서 semanage 명령어로 SSH 포트를 아까 변경해줬던 포트 번호로 설정한다.
# semanage port -l | grep ssh
위 명령어로 확인해보면 22번 포트가 1234로 잘 변경됐음을 확인할 수 있다.
# systemctl restart sshd.service
다시 ssh서비스 재시작을 해주면 완료!
3. Fail2ban 설치 (로그인 시도 아이피 차단)
Fail2ban은 SSH 로그인 시도가 일정 수 이상일 경우 자동으로 차단해주는 녀석이다. 얼른 설치하자!
# yum install fail2ban jwhois
설치만 한다고 해서 다 되는 건 아니고, 몇 가지 설정이 필요하다.
# vi /etc/fail2ban/jail.conf
# External command that will take an tagged arguments to ignore, e.g. <ip>,
# and return true if the IP is to be ignored. False otherwise.
#
# ignorecommand = /path/to/command <ip>
ignorecommand = #123.111.0.444/24 이런식으로 아이피를 적어놓으면 접근 시도를 몇 번을 하든 차단되지 않는다.
# "bantime" is the number of seconds that a host is banned.
bantime = 600 #일정 횟수를 초과하여 접근 시도 시, 접근 거부 시간. 600초
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600 #입력한 시간 사이에 지정 횟수 초과 시 차단. 600초
# "maxretry" is the number of failures before a host get banned.
maxretry = 3 #최대 접근 횟수. 3회를 초과할 경우 접근 차단.
# Provide customizations in a jail.local file or a jail.d/customisation.local.
# For example to change the default bantime for all jails and to enable the
# ssh-iptables jail the following (uncommented) would appear in the .local file.
# See man 5 jail.conf for details.
#
# [DEFAULT]
# bantime = 3600
#
[sshd]
enabled = true #이걸 true로 해줘야 SSH 접근 시도 시, fail2ban이 동작함.
#
# See jail.conf(5) man page for more information
설정을 마쳤으면,
# service fail2ban start
서비스 재시작. 끝!