T

ssh 무차별 로그인 공격 막기

안녕하세요 후비고닷컴(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

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

sort anonymous_login | uniq >> /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 등)

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

감사합니다.

[이 게시물은 관리자님에 의해 2011-10-31 17:30:25 Apache에서 이동 됨]
|

댓글 5개

FeLLEN (2005년 09월 01일 오전 11:29)
sed: -e expression #1, char 10: unterminated `s' command
실행했더니 이런 오류가 나는 군요..ㅜ.ㅡ


--->>

이진명 (2005년 09월 02일 오후 08:08)
아~ 무슨 에러인지 알겠습니다.
저도 시스템에 따라 그런에러가 발생한적이 있었는데..
수정을 안했군요... ㅋㅋ

치환부분을 아래와 같이 수정하시면 될듯 싶습니다.
그래도 안되시면 다시 문의주세요.. ^^
http://hubgo.com

sh ch.sh '\]' '' anonymous_login >> temp2
sh ch.sh '\[' ALL: temp2 > anonymous_login
sh ch.sh from ALL: illegal >> anonymous_login
궁금해서 합니다 위의 스크립이 뭐에 대한 스크립인지? 어떤스토리인지요??? 막는것같긴한데..

어떠게 막냐는거죠?

또 cs.sh 파일아래

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

cs.sh 파일에 포함되는것인가요? 띄어져 있어서 포함되는지 안되는지 잘모르겠네요 ..
좋은 팁을 공유해주셔서 감사합니다.
가장 확실하면서 쉬운 방법, 포트를 바꾸세요.. 22번에서 놀고 있는 다른 포트로 바꾸어 주면 아마 99프로 고피할 수 있을 겁니다..
만약 알려진다면 또 바꾸면 되구요..
1시간 간격이면 수천, 수만번 공격을 할 수 있는 충분한 시간입니다. 포트변경역시 의미가 없습니다.

1) /etc/hosts.deny 을 열어서 아래처럼 변경하여 줍니다. sshd: ALL 은 모든 ssh 로그인을 금지한다는 것입니다. 설사 아이디 및 비번이 맞아도 접근이 되지 않습니다.

#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap! sshd : ALL
sshd : ALL

2) 다음에 /etc/hosts.allow 을 열어서 아래처럼 변경합니다. 아래에 등록된 IP 만 접속이 가능합니다. 그 외는 접속자체가 불가 합니다.

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
sshd : 111.111.111.111: ALLOW
sshd : 111.111.111.112: ALLOW
sshd : 111.111.111.113: ALLOW

3) 위처럼 한 다음 아래처럼 ssh 를 재 시작하면 완료됩니다

# service sshd restart


=======================================
참고사항: 후비고닷컴의 이진명 님의 스크립을 crontab 에서 1분이든.. 간격을 줄이면 좋습니다.

또한 apf (advanced policy based firewall ) 과 bfd (brute force detection) 을 적절히 사용하면 Software 방화벽 및 매우 진보된 SSH 공격뿐 아니라 Web, FTP 등도 같이 막을 수 있습니다.
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
20년 전 조회 2,674
20년 전 조회 3,055
20년 전 조회 2,575
20년 전 조회 2,245
20년 전 조회 2,824
20년 전 조회 2,511
20년 전 조회 2,575
20년 전 조회 3,832
20년 전 조회 3,301
20년 전 조회 5,035
20년 전 조회 2,444
20년 전 조회 4,541
20년 전 조회 3,137
20년 전 조회 2,912
20년 전 조회 3,774
20년 전 조회 2,678
20년 전 조회 3,756
20년 전 조회 4,040
20년 전 조회 3,464
20년 전 조회 3,510
20년 전 조회 4,126
20년 전 조회 2,383
20년 전 조회 5,111
20년 전 조회 3,672
20년 전 조회 2,624
20년 전 조회 2,304
20년 전 조회 2,776
20년 전 조회 3,052
20년 전 조회 2,815
bbbking
20년 전 조회 5,798
20년 전 조회 2,725
bbbking
20년 전 조회 4,302
20년 전 조회 2,178
20년 전 조회 7,350
20년 전 조회 2,434
20년 전 조회 3,520
20년 전 조회 4,329
20년 전 조회 2,659
20년 전 조회 3,936
20년 전 조회 3,108
20년 전 조회 4,117
20년 전 조회 5,144
20년 전 조회 4,257
20년 전 조회 5,870
20년 전 조회 2,073
20년 전 조회 3,348
20년 전 조회 3,573
20년 전 조회 2,954
20년 전 조회 2,469
20년 전 조회 4,687
20년 전 조회 2,321
20년 전 조회 2,305
20년 전 조회 1,916
20년 전 조회 1,720
20년 전 조회 3,789
20년 전 조회 4,866
20년 전 조회 2,505
20년 전 조회 3,178
20년 전 조회 5,862
20년 전 조회 2,867
20년 전 조회 2,328
20년 전 조회 4,594
20년 전 조회 2,684
20년 전 조회 2,271
20년 전 조회 2,789
20년 전 조회 2,594
20년 전 조회 2,918
20년 전 조회 3,349
20년 전 조회 2,681
20년 전 조회 4,758
20년 전 조회 3,295
20년 전 조회 4,575
20년 전 조회 3,034
20년 전 조회 4,160
20년 전 조회 4,406
20년 전 조회 7,067
20년 전 조회 3,900
20년 전 조회 2,793
20년 전 조회 4,419
20년 전 조회 2,247
20년 전 조회 4,356
20년 전 조회 3,815
20년 전 조회 2,618
20년 전 조회 4,865
bbbking
20년 전 조회 2,564
20년 전 조회 4,525
20년 전 조회 3,586
20년 전 조회 3,599
20년 전 조회 3,848
20년 전 조회 3,237
20년 전 조회 5,943
20년 전 조회 2,960
20년 전 조회 5,871
bbbking
20년 전 조회 2,384
bbbking
20년 전 조회 1,799
bbbking
20년 전 조회 2,164
bbbking
20년 전 조회 3,559
bbbking
20년 전 조회 2,064
bbbking
20년 전 조회 4,432
20년 전 조회 3,392