설치성공기
HOME > 커뮤니티 > 설치성공기

[프로그램] SSH 접속시도 아이피중 여러차례 접속거부된 아이피 차단 스크립트

 글쓴이 : winxcom
작성일 : 12-01-23 21:11    조회 : 8,357  
#!/bin/bash
# # SSH 접속시도 아이피중 여러차례 접속거부된 아이피 차단 스크립트
# 하루에 한번 실행(crontab으로 23:59분에 실행시켜 주세요.)
ADMIN_EMAIL=***@***       #보고 받을 이메일 주소
REFUSED_IP_LIST='refused_ip_list.txt'    #접속거부된 아이피 리스트
SAVE_DIR='/root/refused_ip'        #기록될 디렉토리
INPUT_IPTABLES='input_iptables_list'    #차단 아이피 리스트(iptables에 리스트업 대상)
COUNT=5                    #거절횟수정의
onCE="Y"                #오늘의 거절 리스트 유/무 확인 변수
#저장될 디렉토리 생성
mkdir -p $SAVE_DIR           
#저장될 디렉토리가 없다면
if [ -z  `/usr/bin/find $SAVE_DIR -name $REFUSED_IP_LIST` ]; then
    touch $SAVE_DIR/$REFUSED_IP_LIST
    touch $SAVE_DIR/$INPUT_IPTABLES
fi
# 오늘날짜
DATE="$(date +%Y-%m-%d)"
TODAY="$(date '+%b %e')"
#오늘 실행 여부 확인(중복 실행 방지)
CHECK_TODAY=`/bin/grep "$DATE" $SAVE_DIR/$REFUSED_IP_LIST`
#오늘 처음실행 했다면(한번만 실행 하도록 체크)
if [ "$CHECK_TODAY" != "$DATE" ]; then
    #messages 로그에서 거절된 IP 찾기
    REFUSED_LIST=`/bin/grep "$TODAY" /var/log/messages |grep ssh |grep refused |awk '{print $9}'`
    if [ "$REFUSED_LIST" == "" ]; then
        exit 0
    fi
    echo $DATE >> $SAVE_DIR/$REFUSED_IP_LIST
    for i in $REFUSED_LIST
        do
            #거절횟수 카운터
            IP_COUNT=`/bin/grep -c $i $SAVE_DIR/$REFUSED_IP_LIST`
            #접속거부된 아이피 리스트에 없다면
            if  ! /bin/grep $i $SAVE_DIR/$REFUSED_IP_LIST ;then
                #허가된 아이피가 아니라면
                if (! /bin/grep $i /etc/hosts.allow) && (! /bin/grep $i /etc/hosts) ;then
                    #접속차단 아이피 리스트에 기록
                    echo $i >> $SAVE_DIR/$REFUSED_IP_LIST
                fi
            else
                #지정된 거부 횟수를 초과한다면
                if (($IP_COUNT > $COUNT - 1));then
                    #접속차단 아이피 리스트에 없다면
                    if (! grep $i $SAVE_DIR/$INPUT_IPTABLES) && (! grep $i $SAVE_DIR/INPUT_IPTABLES_TEMP) ;then
                        #날짜기록을 위해 한번만 실행
                        if [ "$onCE" = "Y" ];then
                            echo "" >> $SAVE_DIR/INPUT_IPTABLES_TEMP
                            /bin/date >> $SAVE_DIR/INPUT_IPTABLES_TEMP
                            echo "=============================" >> $SAVE_DIR/INPUT_IPTABLES_TEMP
                        fi
                        #임시 접속차단 리스트에 기록
                        echo iptables -A INPUT -i eth0 -p tcp -s $i --dport 22 -j DROP >> $SAVE_DIR/INPUT_IPTABLES_TEMP
                        #iptables에 기록(※주의:스크립트로 자동 등록은 권장하지 않습니다.그래서 주석처리 했씀다.)
                        #/sbin/iptables -A INPUT -i eth0 -p tcp -s $i --dport 22 -j DROP
                        export onCE="N"
                    fi
                else
                    #접속거부 아이피 리스트 기록
                    echo $i >> $SAVE_DIR/$REFUSED_IP_LIST
                fi
            fi       
        done
    #접속 차단된 아이피가 있다면 메일 발송
    if [ "$onCE" = "N" ];then
        cat $SAVE_DIR/INPUT_IPTABLES_TEMP >> $SAVE_DIR/$INPUT_IPTABLES
        /bin/mail -v $ADMIN_EMAIL -s "$DATE Today's refused IP Lists log" < $SAVE_DIR/INPUT_IPTABLES_TEMP
        rm -rf $SAVE_DIR/INPUT_IPTABLES_TEMP
    fi
fi

 


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기

ppcm 13-06-28 06:44
 
괜찮네요...
이 아이디어가 좋아 보입니다...
여러번 비밀번호 에러로 차단된 것은 아예 그 ip를 차단해버리는 생각은
정말 잘 한 것 같습니다.
sample gra… 13-12-22 17:58
 
자유 소프트웨어 프로젝트는 공동 방식으로 개발하지만, 종종 서로 독립적으로 생성된다.소프트웨어 라이센스가 명시 적으로 재배포 할 수있게 허용한다는 사실은, 그러나, 한 번에 모두 리눅스 배포판의 형태로 독립 실행 형 프로젝트에 의해 생성 된 소프트웨어를 수집하고 사용할 수 있도록 더 큰 규모의 프로젝트를위한 기초를 제공한다.
http://www.graduateschoolpersonalstatement.net/personal-statement-writing-requirements/personal-statement-example-2/