SSH bruteforce 중지 / 방지 방법 [닫기]

저는 네트워크 관리에 익숙하지 않으므로 아직 경험이없는 사람이라고 생각하십시오.

플 리스크 패널이있는 Ubuntu 루트 서버가 있습니다.

어제 친구와 저는 TS3의 말하기 품질이 매우 나쁘다는 것을 알았습니다. 서버로 핑을 보냈는데 패킷 손실이 매우 컸습니다. 그 후 나는 조금 googled하고 있다는 것을 발견했다 auth.log. 나는 그것을 다운로드하고 조금 스크롤 한 후 이것을 발견했다.

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

누군가가 SSH를 통해 여러 번 로그인을 시도한 것 같습니다. 나는 약간의 스크롤을 스크롤 하여이 사람이 많은 다른 사용자 이름을 사용하려고한다는 것을 보았습니다.student, tech, psi, news,...

이 로그인 중 수백 개가 파일에 표시되었습니다.

데이터 센터 웹 사이트에서 트래픽 통계를 찾아 보았습니다. 시간당 17MB에 불과했습니다. 100Mbit 백본이 있으므로 데이터 전송 자체가 문제가되지 않는 것 같습니다.

현재 나는 어떤 식 으로든 서버에 액세스 할 수 없습니다.

내 질문은 : 어떻게 다시 액세스 할 수 있습니까, 어떻게이 공격을 억제하고 다음 공격을 막을 수 있습니까?



답변

액세스하는 방법?

왜 계정에 액세스 할 수 없는지 확실하지 않습니다.

컴퓨터가 공격을 받거나 부하가 높은 경우 액세스 제한 (IP 제한) 또는 서버를 오프라인 상태로 만들기 (인터넷 연결 끊기)에 대해 공급자에게 문의해야합니다.

또한 서비스 제공 업체가 도와 줄 수있는 대역 외 액세스가 필요할 수 있습니다.

누군가 서버를 손상시킨 경우 백업에서 복원하거나 복구 이미지를 사용해야합니다.

서버, 특히 SSH에 대한 공격을 방지하는 방법

무차별 강제 로그온을 방지하는 가장 좋은 방법은 무엇입니까?

그들이 처음부터 당신의 기계에 도착하게하지 마십시오! 무차별 대입 시도가 호스트 또는 SSH 수준에 도달하기 전에 중지하는 방법은 많이 있습니다.

그럼에도 불구하고 fail2ban과 같은 것으로 운영 체제를 보호하는 것이 좋습니다. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban은 DenyHosts와 유사하지만 SSH에 중점을 둔 DenyHosts와는 달리, 로그인 시도를 로그 파일에 기록하는 모든 서비스를 모니터링하고 /etc/hosts.deny를 사용하여 IP 주소 / 호스트 만 차단하는 대신 fail2ban을 구성 할 수 있습니다. fail2ban은 Netfilter / iptables 및 TCP Wrappers /etc/hosts.deny를 사용할 수 있습니다.

무차별 대입 로그인을 방지하기 위해 고려해야 할 여러 가지 중요한 보안 기술이 있습니다.

SSH :

  • 루트 로그인을 허용하지 마십시오
  • SSH 비밀번호를 허용하지 않습니다 (개인 키 인증 사용).
  • 모든 인터페이스를 듣지 마십시오
  • SSH에 대한 네트워크 인터페이스 (예 : eth1)를 작성하십시오. 이는 요청을 제공하는 인터페이스와 다릅니다 (예 : eth0).
  • 일반적인 사용자 이름을 사용하지 마십시오
  • 허용 목록을 사용하고 SSH 액세스가 필요한 사용자 만 허용
  • 인터넷 액세스가 필요한 경우 … 유한 한 IP 세트에 대한 액세스를 제한하십시오. 하나의 고정 IP가 이상적이지만 xx0.0 / 16으로 고정하는 것이 0.0.0.0/0보다 낫습니다.
  • 가능한 경우 인터넷 액세스없이 연결하는 방법을 찾으면 SSH에 대한 모든 인터넷 트래픽을 거부 할 수 있습니다 (예 : AWS에서는 인터넷을 우회하는 직접 연결을 얻을 수 있음, 직접 연결이라고 함)
  • fail2ban과 같은 소프트웨어를 사용하여 모든 무차별 대입 공격
  • OS, 특히 보안 및 ssh 패키지가 항상 최신 상태인지 확인하십시오.

신청:

  • 응용 프로그램, 특히 보안 패키지가 항상 최신 상태인지 확인하십시오.
  • 응용 프로그램 ‘관리자’페이지를 잠급니다. 위의 많은 조언은 응용 프로그램의 관리 영역에도 적용됩니다.
  • 웹 콘솔의 htpasswd와 같은 관리자 영역을 보호하여 기본 응용 프로그램 취약점을 예상하고 진입 장벽을 추가로 만듭니다.
  • 파일 권한을 잠급니다. ‘업로드 폴더’는 모든 종류의 불쾌한 것들의 진입 점으로 유명합니다.
  • 애플리케이션을 프라이빗 네트워크 뒤에 배치하고 프론트 엔드로드 밸런서와 점프 박스 만 노출하는 것을 고려하십시오 (VPC를 사용하는 AWS의 일반적인 설정).

답변

이 공격을 어떻게 억제하고 다음 공격을 막을 수 있습니까?

일반적으로 기본 ssh 포트를 22에서 1122와 같은 다른 포트로 변경합니다. 이렇게하면 많은 자동 공격이 봇으로부터 차단되지만 간단한 포트 스캔으로 감지 할 수 있습니다. 어쨌든:

vi /etc/ssh/sshd_config

포트 22포트 1122로 편집 하되 충분하지 않습니다.

bruteforce에 대한 자동 IPTables 규칙

Fail2ban 대신 log2iptables https://github.com/theMiddleBlue/log2iptables 를 사용 합니다. 정규 표현식으로 모든 로그 파일을 구문 분석하고 iptables를 실행하는 간단한 Bash 스크립트이기 때문입니다. 예를 들어 5 개의 일치 항목이 발생하면 log2iptables는 특정 IP 주소를 삭제합니다. Telegram API를 사용하기 때문에 시원하며 문제가 발견되면 휴대 전화로 메시지를 보낼 수 있습니다. 🙂

이것이 도움이되기를 바랍니다!


답변

방금 이것을 정리하고 cronjob 등으로 15 분마다 실행합니다.

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done


답변

이것은 SSH 공격에 대한 대안 솔루션입니다. 아이디어는 사용하지 않으면 SSH 데몬을 계속 닫는 것입니다. 열린 포트 없음 공격 없음. 시도해 볼 수 있습니다. 오픈 소스입니다
https://github.com/indy99/nnet_port_guard


답변

나쁜 행위자를 차단하는 Centos / RHEL을위한 자동화 된 솔루션

다음은 Centos가 유효하지 않은 사용자 계정과 잘못된 계정에 대해 ssh 로그인 실패를 확인하는 스크립트입니다. 소스 IP가 3 번 이상 히트했고 아직 거부 목록에없는 경우 거부 목록에 추가됩니다. 루트의 crontab에서 15 분마다 실행합니다. 또한 ssh를 통한 루트 로그인을 허용하지 않았으므로 조합으로 인해 조용히 유지됩니다.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done


답변