[unix] ssh 무차별 로그인 공격 자동으로 막기

아래글 참고해서 해봤는데..
횟수제한을 둘 수 있으면 좋겠음..
예를 들어.. 아래의 경우 한시간 마다 비교를 하는데.. 누적시도횟수가 50번이상이면 등록을 한다거나..
왜냐면.. 내가 작업을 하다가.. 서버를 헷갈려서 잘못된 로그인을 할 수도 있기에…
내가 실수해서 내 ip가 막혀버리면 안되잖아.. -_-;;;
uniq에 해당 옵션이 있나 살펴보고 있는데 아직 못찾았음.
하여튼.. 위와 같은 이유때문에.. 아직까지 내 서버에는 적용 못하고 있음.

–> 어거지로 해서.. 일단 50번 미만이면 무시하도록 하긴 했는데.. 하여튼.. 몇가지 좀 수정하고 했음.
참고)
uniq -c


## 주의 ##
이 스크립트는 공개를 원칙으로 하나 재판매시는 허락을 받아야 합니다.
즉, 업체에서 이 스크립트를 이용하여 타 서버에 설정을 해주고
비용을 받을시에는 저작권에 침해됩니다.

안녕하세요 후비고닷컴(http://hubgo.com)의 이진명입니다.

ssh의 무차별 공격을 막기위해 시스템의 로그를 자동분석하여

공격을 막아주는 스크립트를 소개합니다.

2005년 2월 8일에 작성한 스크립트로서 이에 관련해

제가 알기론 뻥좀보태서 세계에서 가장 빨리 작성되지 않았나 싶습니다. ㅋ

문자열치환은 스크립트로 치환하도록 하였습니다.
(sed로 안에 포함시킬수 있지만 여러개 만들다 보면.. )

아래의 스크립트를 /etc/cron.hourly에 넣으면 한시간에 한번씩 실행됩니다.

스크립트 생성후

$ chmod 700 /etc/cron.hourly/ssh_defense.sh

해주셔야 실행됩니다.

잘 쓰셔서 아주 단순한 기법에 해킹당하는 일이 없도록 하세요.. ㅋㅋ

그리고 패쓰워드는 항상 영문과 특수문자의 조합으로..

$ vi /etc/cron.hourly/ssh_defense.sh
#!/bin/sh
#############
# 2005/02/08 
# http://hubgo.com 이진명
# 아래 ch.sh라는 치환스크립트를 /var/log 에 옮겨놓아야 합니다.
# cron.hourly 에 등록하여 사용합니다.
# 제가 알기론 아래 링크 사이트도 후비고닷컴보다 릴리즈 날짜가 느리고
# 세계최초쯤 되지 않을까 싶네요..
#############
cd /var/log
#grep “anonymous” secure | egrep -v ‘127.0.0.1|218.54.191.21|220.95.230.222’ | awk ‘{ print $17}’ > anonymous_login
#grep “no such user” secure | egrep -v ‘127.0.0.1|218.54.191.21|220.95.230.222’ | awk ‘{print $17}’ >> anonymous_login
#grep illegal secure | egrep -v ‘127.0.0.1|218.54.191.21|220.95.230.222’ | awk ‘{print $12 $13 }’ > illegal
grep “anonymous” secure | egrep -v ‘127.0.0.1|192.168.1.’ | awk ‘{ print $17}’ > anonymous_login
grep “no such user” secure | egrep -v ‘127.0.0.1|192.168.1.’ | awk ‘{print $17}’ >> anonymous_login
grep  invalid secure | grep -v input_userauth_request | egrep -v ‘127.0.0.1|192.168.1.’ | awk ‘{print $12 $13 }’ > illegal

## 문자 치환작업
#sh ch.sh ‘\]’ ” anonymous_login >> temp2
sh ch.sh ‘\]’ ” anonymous_login > temp2
sh ch.sh ‘\[‘ ALL: temp2 > anonymous_login
#sh ch.sh from ALL: illegal >> anonymous_login
sh ch.sh from::ffff: ALL: illegal >> anonymous_login

#sort anonymous_login | uniq >> /etc/hosts.deny
#sort anonymous_login | uniq -c | egrep -v ‘ [0-9]{1,2} ‘ | awk ‘{print $2}’  >> /etc/hosts.deny
sort anonymous_login | uniq -c | egrep -v ‘ [1-4]{0,1}[0-9] ‘ | awk ‘{print $2}’  >> /etc/hosts.deny
sort /etc/hosts.deny | uniq > temp
cat temp > /etc/hosts.deny
$ vi /var/log/ch.sh
#!/bin/bash
### ch.sh
# “subst”, 파일에서 어떤 패턴을 다른 패턴으로 바꿔주는 스크립트.
# 즉, “subst Smith Jones letter.txt”.

ARGS=3
E_BADARGS=65 # 필요한 인자가 빠져있음.

if [ $# -ne “$ARGS” ]
# 스크립트로 넘겨진 인자의 갯수를 확인(항상 이렇게 하세요).
then
  echo “사용법: basename $0 old-pattern new-pattern filename”
  exit $E_BADARGS
fi

old_pattern=$1
new_pattern=$2

if [ -f “$3” ]
then
  file_name=$3
else
  echo “\”$3\” 은 없는 파일입니다.”
  exit $E_BADARGS
fi

# 여기가 가장 중요한 부분입니다.
sed -e “s/$old_pattern/$new_pattern/g” $file_name
# ‘s’는 sed의 치환(substitution) 명령어이고,
# /pattern/ 은 주소 매칭을 실행시킵니다.
# 전역(global) 플래그인 “g”를 쓰면 단지 첫번째 일치하는 $old_pattern만
#+ 치환시키지 않고 각 줄에서 일치하는 “모든” $old_pattern을 치환시킵니다.
# 더 자세한 설명은 ‘sed’ 문서를 읽어보세요.

exit 0 # 스크립트의 실행이 성공이라면 0을 리턴.

그리고 마지막으로…. 하나더..

레드헷계열 리눅스는 설치후 아무런설정을 하지 않았다면

root로 ssh를 로그인 가능합니다.

그러므로 root의 직접적인 ssh login은 막고

일반계정으로 접속후 su – root 를 통해 root권한을 획득하여 작업하도록 합니다.

ssh 설정화일을 아래와 같이 열어 PermitRootLogin yes를 no로 변경합니다.

$ vi /etc/ssh/sshd_config
PermitRootLogin no

변경후 /etc/init.d/sshd restart 하여

sshd를 재시작 해줍니다.

여러분은 이것으로 기초적이지만 강력한 보안설정을 하셨습니다.

참고로 OS별 로그가 다를수 있습니다.
(Invalid, illegal 등)

자세한것은 제 홈페이지로 로그와 함께 문의주시면 수정해드리겠습니다.

감사합니다.

아참.. 디자이너분들이 제 홈피를 보시면 디자인좀 부탁드리겠습니다.

비영리 사이트이기 때문에 물론 무상으로요..

제글을 읽고 도움이 되셨다면 여러분들도 도와주세요.. ㅋ

리눅스~? 윈도우~? 다~ 후벼버리겠다~~ ㅋ
————————————————-
http://hubgo.com

 


아랫글도 참고해보세요~

[linux],[펌] ssh dictionary attack 막기 ver.2

Loading