2009. 9. 19. 15:27

11. SSH 접속 차단 스크립트 ( 5번 패스워드 틀리면 자동 차단)

      1 #!/bin/bash
      2 days=`date +%d`
      3 savedir='/z_bjh/denylist'
      4 for i in $( cat /var/log/secure | grep "Failed password for" | awk '$2 = $days {print $13}' | sort | uniq -c | awk '$1 > 5 {print $2}'); do
      5 denyip=${i#::ffff:}
      6 echo "ALL:$denyip" >> $savedir
      7 done
      8 for a in $( cat /etc/hosts.deny | grep "ALL : " | awk '{print $3}' | sort | uniq -c | awk '{print $2}'); do
      9 echo "ALL : $a" >> $savedir
     10 done
     11 cp /etc/hosts.deny-before /etc/hosts.deny
     12 for b in $( cat $savedir | grep "ALL : " | awk '{print $3}' | sort | uniq -c | awk '{print $2}'); do
     13 echo "ALL : $b" >> /etc/hosts.deny
     14 done
     15 cat $savedir >> /etc/hosts.deny
     16 rm -f $savedir


일단 이 스크립트를 작성하기 전에 한가지ㄱㅏ 필요하다

/etc/hosts.deny 를  /etc/hosts.deny-before 라고 하나 복사해야한다.

그리고 /z_bjh/denylist 라는 파일을 하나 만들어주어야 한다.( 디렉토리는 마음대로 수정 )

하도 예전에 인터넷 여기저기 보고 만들어놓은 것인지라 .

위에서는 라인번호를 같이 표시했다. ( 왜냐하면 저걸 그대로 복사하면 라인이 바뀌게 되고 그럼 스크립트가 실행이 안되므로 ㅋㅋ )

원리는 간단하다 /var/log/secure 파일을 읽어서 접속 Fail 메시지를 count 해서 그 아이피만 추출하여
/etc/hosts.deny 에 등록해주는 것이다.

상용서버에도 돌려봤는데 정말 리눅스 해킹시도는 엄청나다.

이걸 사용하든지 아예 /etc/hosts.deny 에 ALL:ALL 로 해놓고 접속하는 곳의 아이피를 /etc/hosts.allow 에
등록시켜 놓고 사용하는게 편하다 ^^ㅋ


(1) 실사용방법은 위의 스크립트를 deny_ip.sh 라고 작성하여 만들고
(2) /etc/hosts.deny 를 복사하여 /etc/hosts.deny_defore 라고 하나 만들어주고
(3) touch /z_bjh/denylist 라고 하나 만들어줌

사용되다가 실제로 5번이 틀리면 자동으로 /etc/hosts.deny 에 아이피가 등록되고 접속이 아예할 수 없게 된다.
5분마다 /var/log/secure 파일을 검색해서 다시 추가해준다.
만약 secure 파일이 지나가버려서 새로운 secure 파일로 생성될 때에는
초기화가 된다.