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″]