보안 스 크 립 트 - SSH 연결 실패 최대 횟수 제한 (고가 용 LINUX 서버 구축)

7564 단어 linuxshell
그래, 오늘 일요일 에 회사 에 안 갔 어. 요즘 점점 적은 자본 이 생 겼 는데 일요일 에 회사 에 안 가 다 니!그리고 저녁 에 콜라 와 닭 날 개 를 만 들 었 습 니 다. 처음으로 요 리 를 했 는데 맛 이 괜 찮 았 습 니 다. 서버 를 지 키 고 나 서 마음 을 틈 타 책 을 읽 었 습 니 다. 스 크 립 트 를 보고 적 었 습 니 다. 잘 모 르 겠 지만 하나씩 이해 하 겠 습 니 다.
       좋 습 니 다. 아래 코드 를 설명 하기 시 작 했 습 니 다.
#!/bin/bash
 좋 습 니 다. 저 는 다음 코드 를 잘못 썼 다 는 것 을 인정 합 니 다. 중국어 로 썼 습 니 다. 이것 은 설명 하지 않 겠 습 니 다. 이것 은 바로 제 가 bash 로 해석 기 를 만 들 겠 다 는 것 입 니 다. 셸 은 여러 가지 가 있 기 때문에 문법 이 다 르 기 때문에 이것 은 반드시 있어 야 합 니 다.
#Denyhosts SHELL SCRIPT 
#20121111
그래, 이게 주석 이 야. 빼 빼 로 데 이의 주석.
다음은 우리 가 하나씩 명령 을 내 려 설명 하 겠 습 니 다.
cat /var/log/secure

이 말 은 바로/var/log/secure 아래 의 내용 을 살 펴 보 는 것 입 니 다. 무엇 을 살 펴 보 았 습 니까?당연히 뒤에 명령 을 내 려 야 지..
잠시 만 요. 가상 컴퓨터 를 켤 게 요.
이 명령 이 실 행 된 결 과 는:
Nov  5 18:51:56 jmx sshd[3723]: Connection closed by 127.0.0.1
Nov  5 18:56:56 jmx sshd[3829]: Connection closed by 127.0.0.1
Nov  5 19:01:56 jmx sshd[3922]: Connection closed by 127.0.0.1
Nov  5 19:06:56 jmx sshd[3998]: Connection closed by 127.0.0.1
Nov  5 19:11:56 jmx sshd[4073]: Connection closed by 127.0.0.1
Nov  5 19:16:56 jmx sshd[4139]: Connection closed by 127.0.0.1
Nov  5 19:21:56 jmx sshd[4214]: Connection closed by 127.0.0.1
Nov  5 19:26:56 jmx sshd[4276]: Connection closed by 127.0.0.1
Nov  5 19:31:56 jmx sshd[4343]: Connection closed by 127.0.0.1
Nov  5 19:36:12 jmx sshd[2943]: pam_unix(sshd:session): session closed for user root
Nov  5 19:36:17 jmx polkitd(authority=local): Unregistered Authentication Agent for session /org/freedesktop/ConsoleKit/Session2 (system bus name :1.43, object path /org/gnome/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
Nov  5 19:36:29 jmx sshd[2067]: Received signal 15; terminating.
Nov 10 04:49:09 jmx sshd[2044]: Server listening on 0.0.0.0 port 22.
Nov 10 04:49:09 jmx sshd[2044]: Server listening on :: port 22.
Nov 10 04:49:10 jmx su: pam_unix(su-l:session): session opened for user nagios by (uid=0)
Nov 10 04:49:10 jmx su: pam_unix(su-l:session): session closed for user nagios
Nov 10 04:49:14 jmx polkitd(authority=local): Registered Authentication Agent for session /org/freedesktop/ConsoleKit/Session1 (system bus name :1.26 [/usr/libexec/polkit-gnome-authentication-agent-1], object path /org/gnome/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
Nov 10 04:49:51 jmx sshd[2858]: Accepted password for root from 192.168.220.1 port 49991 ssh2
Nov 10 04:49:52 jmx sshd[2858]: pam_unix(sshd:session): session opened for user root by (uid=0)
Nov 10 04:55:23 jmx sshd[2961]: Connection closed by 127.0.0.1
Nov 10 05:00:23 jmx sshd[3020]: Connection closed by 127.0.0.1
Nov 10 05:05:23 jmx sshd[3109]: Connection closed by 127.0.0.1
Nov 10 05:10:23 jmx sshd[3163]: Connection closed by 127.0.0.1
Nov 10 05:15:23 jmx sshd[3223]: Connection closed by 127.0.0.1
Nov 10 05:20:23 jmx sshd[3277]: Connection closed by 127.0.0.1
Nov 10 05:24:13 jmx sshd[2858]: pam_unix(sshd:session): session closed for user root
Nov 11 04:02:00 jmx sshd[2123]: Server listening on 0.0.0.0 port 22.
Nov 11 04:02:00 jmx sshd[2123]: Server listening on :: port 22.
Nov 11 04:02:02 jmx su: pam_unix(su-l:session): session opened for user nagios by (uid=0)
Nov 11 04:02:03 jmx su: pam_unix(su-l:session): session closed for user nagios
Nov 11 04:02:12 jmx polkitd(authority=local): Registered Authentication Agent for session /org/freedesktop/ConsoleKit/Session1 (system bus name :1.26 [/usr/libexec/polkit-gnome-authentication-agent-1], object path /org/gnome/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
Nov 11 04:02:24 jmx sshd[2869]: Accepted password for root from 192.168.220.1 port 53703 ssh2
Nov 11 04:02:24 jmx sshd[2869]: pam_unix(sshd:session): session opened for user root by (uid=0)

그리고 이 명령 입 니 다.
awk '/Failed/{print $(NF-3)}'
awk 신기 야, 우리 먼저 결 과 를 보 자. 그래, 내 출력 이 비어 있어....................................................................
그리고 출력 꼴찌 세 번 째 열...
sort
이게 정렬 인 데...
uniq -c
이것 이 바로 모든 횟수 를 계산 하 는 것 입 니 다. 유 니 크 는 반복 하 라 는 뜻 입 니 다. - c 야 말로 count 입 니 다.
그다음에 다음.
do
과 아래 의
done
한 쌍 이 야. 이 건 잔소리 안 할 게.
awk '{print $2 "=" $1;}' >/root/black.txt
이 건 표준 형식 으로 출력 한 다 는 뜻 입 니 다.
유사:
192.168.0.1 = 10
그리고 블랙 으로 출력 해 주세요.
DEFINE="10"
그리고 최대 횟수 를 정 의 했 습 니 다.
for i in 'cat /root/black.txt'
이 말 은 하나의 순환 이다.
IP='echo $i |awk -F= '{print $1}''
이 말 은 노자 에 게 첫 줄 을 꺼 내 고 '=' 에 따라 분할 하여 첫 번 째 매개 변 수 를 IP 에 할당 하 는 것 이다.
NUM='echo $i |awk -F= '${print $2}'

같은 횟수 를 NUM 에 할당 합 니 다.
grep $IP /etc/hosts.deny >/dev/null

이곳 은 이전에 hosts. deny 에 게 이 ip 이 있 었 는 지 확인 해 보 세 요. 물론/dev/null 은 쓰레기통 입 니 다. 바닥 이 없습니다.
if [ $? -gt 0 ];
$?상태 코드 입 니 다. 이전 명령 이 실 행 됐 는 지 여부 입 니 다.
즉, grep 결과 가 있 는 지, 이미 존재 한 다 는 설명 이 있 는 지, 설명 이 없 는 지... 없 는 지.
then

안 넣 었 으 면 넣 어.
echo "sshd:$IP" >> /etc/hosts.deny
그리고 끝 if
끝나다
그리고 제 가 집행 하 겠 습 니 다. 문법 같은 거, 빈 칸 같은 거 때문에 문제 가 있 을 것 같 습 니 다.
좋아, 과연 잘못 보고 했다.
./deny.sh: line 17: syntax error near unexpected token `fi'
./deny.sh: line 17: `    fi'
어 지 러 워, 이게 무슨 뜻 이 야?
빈 칸 에 문제 가 있 는 거 아니에요?
할아버지, 한참 동안 알 아 봤 는데 then 이 없어 서...
if [ $NUM -gt 0 ]
그래, 운행 이 안 돼.
./deny.sh: line 10: 'echo $i |awk -F= '${print $2}'': bad substitution
할아버지 의, 9 행 은 잘못 을 보고 하지 않 고 10 행 은 잘못 을 보고 합 니 다.
그래, 인터넷 에서 찾 아 봤 는데 bash 로 바 꾸 겠 다 고 했 어. 문 제 는 내 가 원래 bash 야!!!!좋 습 니 다. awk 문법 에 문제 가 있 는 것 같 습 니 다. 전에 이렇게 쓰 지 않 았 던 것 으로 기억 합 니 다.
그래, 잘 못 했 어.
NUM='echo $i |awk -F "=" '${print $2}''
내 가 이렇게 고 쳐 도 잘못 보고...
좋아, 명령 이 존재 하지 않 는 다 고 9 줄 을 소홀히 했 어.................................................
그래, 도저히 모 르 겠 어...
@ 가죽 은 항상 여 기 를 보 는데, 이 걸 왜 잘못 보 고 했 어 요?
동생 에 게 설명해 주세요.
#!/bin/bash   
#Denyhosts SHELL SCRIPT 
#20121111

cat /var/log/secure |awk '/Failed/{print $(NF-3)}' |sort |uniq -c |awk '{print $2 "=" $1;}' >/root/black.txt
DEFINE="10"
for i in 'cat /root/black.txt'
do
   IP='echo $i |awk -F= '{print $1}''
   NUM='echo $i |awk -F= '${print $2}''
   if [ $NUM -gt 0 ]
    grep $IP /etc/hosts.deny >/dev/null
       if [ $? -gt 0 ];
       then
       echo "sshd:$IP" >> /etc/hosts.deny
       fi
   fi
done

최종 적 으로 잘못 보고 하지 않 은 버 전 은 다음 과 같다.
#!/bin/bash
#Denyhosts SHELL SCRIPT
#20121111

cat /var/log/secure |awk '/Failed/{print $(NF-3)}' |sort |uniq -c |awk '{print $2 "=" $1;}' >/root/black.txt
DEFINE="10"
for i in 'cat /root/black.txt'
do
   IP=`echo $i |awk -F"=" '{print $1 }'`
   NUM=`echo $i |awk -F"=" '{print $2 }'`
   if [[ $NUM -gt 0 ]];
   then
    grep $IP /etc/hosts.deny >/dev/null
       if [ $? -gt 0 ];
       then
       echo " sshd:$IP " >>/etc/hosts.deny
       fi
    fi
done
감사합니다 @ wzk, @ 가죽 총, @ wzp 24, 그리고 매번 문제 가 발생 할 때마다 방해 하 는 @ 서거 fox
마지막 으로 감사합니다. @ 고구마...
국가 에 감사 하고 국민 에 게 감사 하 다.
고 맙 소..

좋은 웹페이지 즐겨찾기