출처 : 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


   서비스 재시작. 끝!


+ Recent posts