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,678
20년 전 조회 3,058
20년 전 조회 2,578
20년 전 조회 2,246
20년 전 조회 2,825
20년 전 조회 2,513
20년 전 조회 2,575
20년 전 조회 3,835
20년 전 조회 3,302
20년 전 조회 5,039
20년 전 조회 2,446
20년 전 조회 4,545
20년 전 조회 3,139
20년 전 조회 2,914
20년 전 조회 3,776
20년 전 조회 2,680
20년 전 조회 3,757
20년 전 조회 4,042
20년 전 조회 3,466
20년 전 조회 3,512
20년 전 조회 4,126
20년 전 조회 2,386
20년 전 조회 5,114
20년 전 조회 3,674
20년 전 조회 2,626
20년 전 조회 2,306
20년 전 조회 2,777
20년 전 조회 3,053
20년 전 조회 2,819
bbbking
20년 전 조회 5,803
20년 전 조회 2,728
bbbking
20년 전 조회 4,305
20년 전 조회 2,180
20년 전 조회 7,353
20년 전 조회 2,437
20년 전 조회 3,524
20년 전 조회 4,331
20년 전 조회 2,662
20년 전 조회 3,938
20년 전 조회 3,111
20년 전 조회 4,120
20년 전 조회 5,147
20년 전 조회 4,262
20년 전 조회 5,872
20년 전 조회 2,075
20년 전 조회 3,349
20년 전 조회 3,575
20년 전 조회 2,956
20년 전 조회 2,471
20년 전 조회 4,691
20년 전 조회 2,322
20년 전 조회 2,305
20년 전 조회 1,917
20년 전 조회 1,720
20년 전 조회 3,791
20년 전 조회 4,870
20년 전 조회 2,506
20년 전 조회 3,181
20년 전 조회 5,867
20년 전 조회 2,868
20년 전 조회 2,329
20년 전 조회 4,595
20년 전 조회 2,689
20년 전 조회 2,272
20년 전 조회 2,792
20년 전 조회 2,598
20년 전 조회 2,918
20년 전 조회 3,351
20년 전 조회 2,684
20년 전 조회 4,761
20년 전 조회 3,297
20년 전 조회 4,578
20년 전 조회 3,038
20년 전 조회 4,163
20년 전 조회 4,409
20년 전 조회 7,069
20년 전 조회 3,900
20년 전 조회 2,795
20년 전 조회 4,420
20년 전 조회 2,249
20년 전 조회 4,358
20년 전 조회 3,817
20년 전 조회 2,620
20년 전 조회 4,866
bbbking
20년 전 조회 2,567
20년 전 조회 4,527
20년 전 조회 3,588
20년 전 조회 3,602
20년 전 조회 3,848
20년 전 조회 3,238
20년 전 조회 5,948
20년 전 조회 2,964
20년 전 조회 5,873
bbbking
20년 전 조회 2,386
bbbking
20년 전 조회 1,801
bbbking
20년 전 조회 2,166
bbbking
20년 전 조회 3,561
bbbking
20년 전 조회 2,067
bbbking
20년 전 조회 4,433
20년 전 조회 3,395