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
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을 리턴.
#!/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개
20년 전
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
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
20년 전
궁금해서 합니다 위의 스크립이 뭐에 대한 스크립인지? 어떤스토리인지요??? 막는것같긴한데..
어떠게 막냐는거죠?
또 cs.sh 파일아래
exit 0 # 스크립트의 실행이 성공이라면 0을 리턴. <--- 이부분이
cs.sh 파일에 포함되는것인가요? 띄어져 있어서 포함되는지 안되는지 잘모르겠네요 ..
어떠게 막냐는거죠?
또 cs.sh 파일아래
exit 0 # 스크립트의 실행이 성공이라면 0을 리턴. <--- 이부분이
cs.sh 파일에 포함되는것인가요? 띄어져 있어서 포함되는지 안되는지 잘모르겠네요 ..
hanpedro
20년 전
좋은 팁을 공유해주셔서 감사합니다.
19년 전
가장 확실하면서 쉬운 방법, 포트를 바꾸세요.. 22번에서 놀고 있는 다른 포트로 바꾸어 주면 아마 99프로 고피할 수 있을 겁니다..
만약 알려진다면 또 바꾸면 되구요..
만약 알려진다면 또 바꾸면 되구요..
cmpanel
19년 전
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 등도 같이 막을 수 있습니다.
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 등도 같이 막을 수 있습니다.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 530 |
|
19년 전 | 1221 | |
| 529 |
|
19년 전 | 1397 | |
| 528 |
|
19년 전 | 1966 | |
| 527 |
사랑과우정
|
19년 전 | 2384 | |
| 526 | 19년 전 | 2865 | ||
| 525 |
|
19년 전 | 2289 | |
| 524 |
|
19년 전 | 1786 | |
| 523 | 19년 전 | 7023 | ||
| 522 |
|
19년 전 | 3715 | |
| 521 | 19년 전 | 2320 | ||
| 520 | 19년 전 | 2352 | ||
| 519 | 19년 전 | 2839 | ||
| 518 |
|
19년 전 | 5765 | |
| 517 |
|
19년 전 | 5537 | |
| 516 |
|
19년 전 | 2241 | |
| 515 |
|
19년 전 | 3283 | |
| 514 | 19년 전 | 2852 | ||
| 513 | 19년 전 | 2206 | ||
| 512 |
개발자관리자
|
19년 전 | 2720 | |
| 511 |
개발자관리자
|
19년 전 | 1569 | |
| 510 |
개발자관리자
|
19년 전 | 1725 | |
| 509 |
개발자관리자
|
19년 전 | 1822 | |
| 508 |
개발자관리자
|
19년 전 | 1992 | |
| 507 |
개발자관리자
|
19년 전 | 1678 | |
| 506 |
개발자관리자
|
19년 전 | 1795 | |
| 505 |
개발자관리자
|
19년 전 | 1763 | |
| 504 |
개발자관리자
|
19년 전 | 1837 | |
| 503 |
개발자관리자
|
19년 전 | 1511 | |
| 502 |
개발자관리자
|
19년 전 | 2634 | |
| 501 | 19년 전 | 1975 | ||
| 500 | 19년 전 | 3229 | ||
| 499 | 19년 전 | 3250 | ||
| 498 | 19년 전 | 2508 | ||
| 497 | 19년 전 | 2596 | ||
| 496 | 19년 전 | 2431 | ||
| 495 | 19년 전 | 2688 | ||
| 494 | 19년 전 | 2670 | ||
| 493 | 19년 전 | 3151 | ||
| 492 | 19년 전 | 2865 | ||
| 491 | 19년 전 | 5281 | ||
| 490 |
|
19년 전 | 2104 | |
| 489 |
|
19년 전 | 2194 | |
| 488 |
|
19년 전 | 1996 | |
| 487 |
|
19년 전 | 1927 | |
| 486 |
|
19년 전 | 1930 | |
| 485 |
|
19년 전 | 2122 | |
| 484 |
|
19년 전 | 3194 | |
| 483 |
|
19년 전 | 3065 | |
| 482 |
|
19년 전 | 2831 | |
| 481 |
|
19년 전 | 2533 | |
| 480 |
|
19년 전 | 2619 | |
| 479 |
|
19년 전 | 2284 | |
| 478 |
|
19년 전 | 2319 | |
| 477 |
개발자관리자
|
19년 전 | 1578 | |
| 476 |
개발자관리자
|
19년 전 | 2302 | |
| 475 |
개발자관리자
|
19년 전 | 2651 | |
| 474 |
개발자관리자
|
19년 전 | 2645 | |
| 473 |
개발자관리자
|
19년 전 | 2953 | |
| 472 | 19년 전 | 2726 | ||
| 471 | 19년 전 | 1701 | ||
| 470 | 19년 전 | 1806 | ||
| 469 |
|
19년 전 | 2709 | |
| 468 |
|
19년 전 | 2207 | |
| 467 |
|
19년 전 | 3974 | |
| 466 |
|
19년 전 | 2483 | |
| 465 | 19년 전 | 2363 | ||
| 464 | 19년 전 | 3509 | ||
| 463 |
|
19년 전 | 3087 | |
| 462 |
|
19년 전 | 2229 | |
| 461 |
|
19년 전 | 3026 | |
| 460 |
|
19년 전 | 2229 | |
| 459 |
|
19년 전 | 3084 | |
| 458 |
|
19년 전 | 3509 | |
| 457 |
|
19년 전 | 5196 | |
| 456 |
|
19년 전 | 3121 | |
| 455 |
스마일미디어
|
19년 전 | 3113 | |
| 454 |
스마일미디어
|
19년 전 | 2697 | |
| 453 |
스마일미디어
|
19년 전 | 2446 | |
| 452 |
스마일미디어
|
19년 전 | 2703 | |
| 451 |
스마일미디어
|
19년 전 | 2426 | |
| 450 |
스마일미디어
|
19년 전 | 2544 | |
| 449 |
스마일미디어
|
19년 전 | 2342 | |
| 448 |
스마일미디어
|
19년 전 | 2682 | |
| 447 | 19년 전 | 2951 | ||
| 446 |
스마일미디어
|
19년 전 | 3235 | |
| 445 |
스마일미디어
|
19년 전 | 7037 | |
| 444 |
스마일미디어
|
19년 전 | 5158 | |
| 443 |
스마일미디어
|
19년 전 | 2413 | |
| 442 |
스마일미디어
|
19년 전 | 5141 | |
| 441 |
스마일미디어
|
19년 전 | 3087 | |
| 440 |
|
19년 전 | 2437 | |
| 439 | 19년 전 | 2133 | ||
| 438 | 19년 전 | 3559 | ||
| 437 |
|
19년 전 | 2865 | |
| 436 |
|
19년 전 | 3243 | |
| 435 |
|
19년 전 | 2865 | |
| 434 | 19년 전 | 3371 | ||
| 433 |
sjsjin
|
19년 전 | 2694 | |
| 432 |
sjsjin
|
19년 전 | 3447 | |
| 431 |
sjsjin
|
19년 전 | 2404 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기