메뉴 닫기

SSH 포트22번 불량 접속 시도 IP 자동 막기

SSH를 돌리면 /var/log/secure 에 22번포트로 접속시도가 많이 보인다. 부적절하게 접속시도하는 IP 들을 자동으로 차단하는 스크립트를 만들어 보겠다.

과정은 /var/log/secure 에서 불량 ssh 접속 ip를 추려내서 /etc/hosts.deny 에 등록된다.

 

# grep “Failed password for” /var/log/secure | egrep -v “invalid user” | egrep -v “{USERID}|{LOGINIP}” | awk ‘{ print $11}’ | uniq | sed “s/^/all:/” > /root/ssh-login-ip
# grep “Failed password for invalid user” /var/log/secure.1 | awk ‘{ print $13}’ | uniq | sed “s/^/all:/” >> /root/ssh-login-ip

 

[위의 명령어 설명]    USERID=관리자 ssh 접속계정  LOGINIP=관리자 ssh접속계정의 공인 ip  :  직접 입력해야함.

————————————————————————————————————-

grep “Failed password for” /var/log/secure     : /var/log/secure 파일 내에서 “Failed password for” 문장이 들어간 행만 뽑아냄

egrep -v “invalid user”   : 위 결과에서 “invalid user” , “USERID” , “LOGINIP” 가 들어간 부분은 제외

egrep -v “{USERID}|{LOGINIP}”   : 위 결과에서 관리상 필요에 의해 접속했던 계정, IP는 제외

awk ‘{print $11}’    : 위 결과에서 각 행마다 11번째 문장을 뽑아냄  -> 비정상 IP

uniq     : 중복된 문장을 하나씩만 출력

sed “s/^/all:/” > /root/ssh-login-ip   : 각 행의 맨 앞에 “all:” 을 입력 후 /root/ssh-login-ip 파일에 저장

 

grep “Failed password for invalid user” /var/log/secure.1     : var/log/secure.1 파일에서 “Failed …. user” 문장이 들어간 행만 추출

awk ‘{print $13}’     : 각 행마다 11번째 문장만 뽑아냄  ->  비정상 IP

>> /root/ssh-login-ip     : 위의 /root/ssh-login-ip 파일에 뒤이어 내용을 첨가함

————————————————————————————————————-

 

# cat /root/ssh-login-ip /etc/hosts.deny | sort  | uniq >> /root/hosts.deny      : hosts.deny에 블럭킹할 ip 등록

 

 

▶crontab 등록

# crontab -e

——————————————————————————————————————

05,15,25,35,45,55 * * * * grep “Failed password for” /var/log/secure | egrep -v “invalid user” | egrep -v “{USERID} | {LOGINIP}” | awk ‘{ print $11}’ | uniq | sed “s/^/all:/” > /root/ssh-login-ip

06,16,26,36,46,56 * * * * cat /root/ssh-login-ip /etc/hosts.deny | sort | uniq > /root/hosts.deny

07,17,27,37,47,57 * * * * cp /root/hosts.deny /etc/hosts.deny

——————————————————————————————————————-

 

 

[polldaddy rating=”7739789″]