SHELL 스 크 립 트 로 SSH 와 vsftpd 의 폭력 해 소 를 방지 합 니 다 (② 버 전)

최근 에 출시 된 FTP 백업 서버 에서/var/log/secure 로 그 를 정기 적 으로 검사 할 때 많은 sshd 와 vsftpd 가 인증 에 실패 한 정 보 를 발 견 했 습 니 다. 폭력 해독 도구 로 비밀 번 호 를 훔 치 려 는 사람 이 분명 하기 때문에 보안 스 크 립 트 를 만들어 야 합 니 다.
스 크 립 트 요 구 는 다음 과 같 습 니 다. 이 SHELL 스 크 립 트 는 crontab 계획 작업 에 놓 여 있 습 니 다. 6 시간 마다 (이 시간 은 실제 상황 에 따라 정의 합 니 다)/var/log/secure 스 크 립 트 를 읽 고 꺼 내 서 IP 를 악의 적 으로 추측 합 니 다. 단위 시간 내 (일주일) 연결 수가 하나의 밸브 값 보다 높 으 면 100 (이 밸브 값 도 실제 상황 에 따라 정의 할 수 있 습 니 다).이 밸브 값 보다 낮 으 면 이 IP 를 무시 합 니 다.
/var/log/secure         :
Nov 28 10:18:08 centos2 sshd[7556]: Connection closed by 222.216.30.109
Nov 28 10:18:08 centos2 sshd[7557]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.216.30.109 user=root
Nov 28 10:18:09 centos2 sshd[7559]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.216.30.109 user=root
Nov 28 10:18:10 centos2 sshd[7551]: Failed password for root from 222.216.30.109 port 2391 ssh2
Nov 28 10:18:10 centos2 sshd[7552]: Connection closed by 222.216.30.109
Nov 28 10:18:10 centos2 sshd[7553]: Failed password for root from 222.216.30.109 port 2397 ssh2
Nov 28 10:18:10 centos2 sshd[7554]: Connection closed by 222.216.30.109
Nov 28 10:18:11 centos2 sshd[7557]: Failed password for root from 222.216.30.109 port 2401 ssh2
Nov 28 10:18:11 centos2 sshd[7558]: Connection closed by 222.216.30.109
Nov 28 10:18:11 centos2 sshd[7559]: Failed password for root from 222.216.30.109 port 2403 ssh2
Nov 28 10:18:11 centos2 sshd[7560]: Connection closed by 222.216.30.109
Nov 28 10:37:01 centos2 vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Nov 28 10:37:01 centos2 vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=hello rhost=centos1.cn7788.com
Nov 28 10:37:01 centos2 vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user hello
Nov 28 10:37:19 centos2 vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Nov 28 10:37:19 centos2 vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=yhc rhost=centos1.cn7788.com
Nov 28 10:37:19 centos2 vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user yhc
Nov 28 10:37:36 centos2 vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Nov 28 10:37:36 centos2 vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=yuhongchun rhost=centos1.cn7788.com
Nov 28 10:37:36 centos2 vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user yuhongchun
Nov 28 10:42:44 centos2 vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Nov 28 10:42:44 centos2 vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=yuhongchun rhost=114.112.169.70
Nov 28 10:42:44 centos2 vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user yuhongchun
Nov 28 10:42:56 centos2 vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Nov 28 10:42:56 centos2 vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=andrewyu rhost=114.112.169.70
Nov 28 10:42:56 centos2 vsftpd: pam_succeed_if(vsftpd:auth): error retrieving information about user andrewyu

우 리 는 다음 과 같이/var/log/secure 파일 폴 링 특징 을 관찰 합 니 다.
ls -lsart secure.*
512 -rw------- 1 root root 516379 11-04 01:31 secure.4
660 -rw------- 1 root root 668192 11-11 00:05 secure.3
304 -rw------- 1 root root 306589 11-17 10:33 secure.2
484 -rw------- 1 root root 488620 11-25 02:33 secure.1

기본적으로/var/log/secure 파일 은 요일 을 폴 링 주기 로 합 니 다. 안전 에 대한 요구 가 엄격 한 친 구 는 '놓 치지 않 는 다' 는 원칙 에 따라 위의 오래된 secure 악성 IP 를 캡 처 하여/etc/hosts. deny 파일 에 던 질 수 있 습 니 다.다음은 이러한 악성 IP 를 효율적으로 캡 처 할 방법 을 강구 해 야 합 니 다. 원본 버 전의 SHELL 스 크 립 트 작성 법 을 참고 하면 secure 로그 의 수사 vsftpd 및 sshd 를 캡 처 해 야 합 니 다.
서비스의 IP 주 소 는 다음 과 같은 명령 을 사용 할 수 있 습 니 다. 명령 은 다음 과 같 습 니 다.
cat /var/log/secure | awk '/Failed/{print $(NF-3)}'| sort| uniq -c| awk '{print $2"="$1;}'

분명 한 것 은 vsftpd 가 실패 한 IP 값 을 찾 을 수 없습니다. sshd 로그 실패 정 보 는 vsftpd 로그 실패 정보 와 다 릅 니 다. 저 는 몇 가지 awk 혼합 sed 방법 을 써 서 효율 을 테스트 했 습 니 다. awk 스 크 립 트 속도 가 가장 빠 른 것 같 습 니 다. 여러분 도 몇 가 지 를 쓸 수 있 습 니 다. time 명령 으로 테스트 할 수 있 습 니 다.마지막 으로 코드 를 간소화 하여 전체 스 크 립 트, 발 을 완성 하 였 습 니 다.
본 내용 은 다음 과 같다.
#!/bin/bash
awk '{for(i=1;i<=NF;i++){if($i ~ /rhost/)print substr($i,7)}}' /var/log/secure | sort | uniq    -c>/root/black.txt
DEFINE="100"
cat     /root/black.txt |    while read LINE
do
               NUM=`echo $LINE |awk '{print $1}'`
               host=`echo $LINE    |awk '{print $2}'`
               if [ $NUM -gt $DEFINE ];
               then
                grep $host    /etc/hosts.deny > /dev/null
                   if [ $? -gt 0 ];
                   then
                   echo "sshd:$host"     >> /etc/hosts.deny
                   echo "vsftpd:$host" >> /etc/hosts.deny
                   fi
               fi
done

스 크 립 트 가 한 동안 실 행 된 후에 우 리 는 이 스 크 립 트 와 관련 된 일부 파일 을 관찰 할 수 있 습 니 다. 예 를 들 어/root/black. txt, 결 과 는 다음 과 같 습 니 다.
cat /root/black.txt
               2 113.17.144.156
               4 114.112.51.208
               4 114.112.69.170
           169 118-163-227-50.hinet-ip.hinet.net
               8 119.188.7.200
               8 122.70.130.11
            61 124.248.32.246
            12 183.203.14.121
               3 189.26.255.11
            56 199.204.237.60
               3 199.30.53.220
               5 201.236.80.4
               6 220.172.191.31
            30 222.216.30.109
            60 222.253.159.111
            58 223.4.180.23
           166 58.221.42.178
               1 61.132.4.85
           152 61.142.106.34
            22 61.167.33.222
               7 85.126.166.83
           166 www.b-nets.com

/etc/hosts. deny 스 크 립 트 내용 은 다음 과 같 습 니 다.
sshd:124.248.32.246
vsftpd:124.248.32.246
sshd:199.204.237.60
vsftpd:199.204.237.60
sshd:222.253.159.111
vsftpd:222.253.159.111
sshd:223.4.180.23
vsftpd:223.4.180.23
sshd:58.221.42.178
vsftpd:58.221.42.178
sshd:61.142.106.34
vsftpd:61.142.106.34
sshd:118-163-227-50.hinet-ip.hinet.net
vsftpd:118-163-227-50.hinet-ip.hinet.net
sshd:www.b-nets.com
vsftpd:www.b-nets.com

마지막 으로, 우 리 는 이 셸 스 크 립 트 를 crontab 에 넣 고 6 시간 마다 한 번 씩 실행 합 니 다. 명령 은 다음 과 같 습 니 다.
* */6 * * * root /bin/bash /root/hostsdeny.sh >> /dev/null 2>&1

/var/log/secure 로 그 는 주 단위 로 문의 하기 때문에 이 스 크 립 트 의 실행 빈 도 는 스스로 설정 할 수 있 습 니 다. 서버 가 자주 검색 되 는 것 같 으 면 실행 빈도 간격 을 짧게 설정 할 수 있 고 반대로 길 게 설정 할 수 있 습 니 다.첨부: SSH 의 폭력 적 인 해 소 를 방지 하기 위해 서 라면 이 스 크 립 트 는 업데이트 할 필요 가 없습니다. 제 원래 의 SHELL 스 크 립 트 (즉, 원본 버 전) 를 받 아들 일 수 있 습 니 다. 이 업데이트 스 크 립 트 는 FTP 가 있 는 네트워크 기기 에 배치 하기에 적합 합 니 다. 현재 테스트 는 비교적 안정 적 이지 만 완벽 하지 않 은 부분 이 있 습 니 다. 여러분 의 편지 교 류 를 환영 합 니 다[email protected]).

좋은 웹페이지 즐겨찾기