내 서버가 지속적으로 공격을 받고 있습니다.


32

나는 시스템 관리 분야에 익숙하지 않다. 최근에 응용 프로그램을 작업하고 있으며 응용 프로그램 서버 로그를 확인할 때 무차별 강제로 내 서버에 ssh하려는 다양한 IP 주소를 지속적으로 얻습니다. 내 서버 로그의 예는 다음과 같습니다.

Feb 14 04:07:20 foodwiz3 sshd[1264]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Feb 14 04:07:21 foodwiz3 sshd[1264]: reverse mapping checking getaddrinfo for coenamor.columbiansabbatical.com [23.249.167.223] failed - POSSIBLE BREAK-IN ATTEMPT!
Feb 14 04:07:21 foodwiz3 sshd[1264]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=23.249.167.223  user=root
Feb 14 04:07:23 foodwiz3 sshd[1264]: Failed password for root from 23.249.167.223 port 32997 ssh2
Feb 14 04:07:23 foodwiz3 sshd[1264]: Received disconnect from 23.249.167.223: 11: Bye Bye [preauth]
Feb 14 04:13:04 foodwiz3 sshd[1289]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Feb 14 04:13:05 foodwiz3 sshd[1289]: reverse mapping checking getaddrinfo for coenamor.columbiansabbatical.com [23.249.167.223] failed - POSSIBLE BREAK-IN ATTEMPT!
Feb 14 04:13:05 foodwiz3 sshd[1289]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=23.249.167.223  user=root
Feb 14 04:13:07 foodwiz3 sshd[1289]: Failed password for root from 23.249.167.223 port 41562 ssh2

이것은 꽤 정상적인 것입니까, 아니면 걱정하거나해야 할 일입니까?


3
포트 번호를 변경하고 포트 번호가 지속되는지 확인하십시오. 그들이 당신을 구체적으로 타겟팅하지 않는다면 아마 아닐 것입니다.
goldilocks

13
가장 좋은 해결책은 SSH에서 비밀번호 인증을 비활성화하는 것입니다.
Willem


3
@Willem-아니요. 비밀번호 인증을 비활성화해도 공격이 중지 되지 않습니다 . 침입자 만 실패하게됩니다 (공격자는 암호 인증이 비활성화되었음을 인식하지 못하고 계속 시도합니다).
Martin Vegter

답변:


59

인터넷의 놀라운 세계에 오신 것을 환영합니다.

그러나 정답은 다음과 같습니다. 그렇습니다. 이는 정상적인 것입니다 . BotNet Maffia는 항상 잘못 보호 된 몇 개의 추가 서버를 사용할 수 있습니다 ...


1
나는 거친 인터넷에 SSH를 사용하지 않는 것을 선호합니다. +1
Rui F Ribeiro

2
ssh의 기본 포트를 변경하는 것 외에도 포트 노킹이 있습니다.
Pablo A

15

플러딩 로그를 만들기에 충분한 로그인 시도 횟수를 갖는 것이 일반적입니다.

SSH 포트를 변경하는 것은 '불확실성에 의한 보안'유형의 솔루션이지만, 홍수에 도움이됩니다. 나는 그것이 우아하지 않다고 강조한다. 서비스를위한 사실상의 포트가 있습니다.

기본적으로 켜져 있어야하지만 루트로 서버에 SSH 할 수 없는지 확인하십시오. 서버간에 상당히 일관된 사용자 이름이므로 암호 무차별 로그인 시도의 주요 대상입니다. 다음 줄을 사용하여 설정을 시행하십시오 sshd_config.

PermitRootLogin no

또한 fail2ban반복 위반자에 대한 sshd 로그를 모니터하는 것으로 조사하십시오 . 예를 들어, 특정 IP에서 3 분 동안 5 번의 로그인에 실패하면 해당 IP가 10 분 동안 차단됩니다. 로그 스팸을 성공적으로 줄이기 위해 금지 시간을 24 시간으로 늘 렸습니다. :)


1
apt-get install fail2ban은 기본적으로 적용됩니다
Willem

7
"로그 스팸을 더욱 줄이기 위해 금지 시간을 24 시간으로 늘 렸습니다." 서버에 실제로 액세스 할 수 없다면 언젠가는 후회할 것입니다. ;)
다니엘

8

몇 가지 작업을 수행하도록 제안합니다.

  1. ssh가 수신 대기중인 포트 (1024 이상)를 변경하고 프로토콜 버전 1을 사용하지 않아야합니다.

/ etc / ssh / sshd_config

# What ports, IPs and protocols we listen for
Port 50022
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
  1. 설치 fail2ban-기존 방화벽 규칙 ( iptables) 을 업데이트하여 로그 파일을 모니터링하고 오류가 발생하기 쉬운 주소를 일시적으로 또는 지속적으로 금지합니다 .

  2. 신뢰할 수있는 위치를 허용 목록에 추가하십시오.


7

예, 걱정하십시오 . 화상을 입을 수는 없지만 IT 모범 사례를 따라야합니다. 죄송합니다보다 더 안전.

저는 병원의 네트워크 관리자입니다. 상자를 인터넷에 직접 연결하는 것은 항상 나쁜 생각입니다. 현재보고있는 것은 인터넷의 취약점을 검색하는 수천 개의 자동 스캐너입니다. 모든 종류의 소프트웨어 (ssh, telnet, ftp 등)에 대한 이러한 모든 것 (포트 스캔, 알려진 취약성 테스트)이 ID 상자에 표시되는 것을 확인
하십시오. 컴퓨터는 방화벽 / NAT 솔루션 뒤에 있어야합니다. 인터넷에 필요한 포트를 포트 포워드합니다 (80, 443 등). 비교적 쉽습니다.
어떤 이유로 든 해당 서버의 SSH / telnet 소프트웨어에 버그가있는 경우 자동화 된 봇이 하트 비트에서이를 감지하기 때문에 managemnt (SSH telnet)에 사용할 수있는 것을 갖는 것은 인터넷을 향한 나쁜 생각입니다. 그리고 당신은 망할거야. 소프트웨어의 버그는 항상 발생하며 패치를 릴리스하거나 패치를 기억하는 데 시간이 걸릴 수 있습니다.

원격으로 관리해야하는 경우 VPN 솔루션과 같은 것을 설정하거나 Windows를 사용하는 경우 원격 데스크톱을위한 터미널 서비스 게이트웨이를 설정하십시오. 소규모 상점이라면 VPN과 NAT에 대한 라우팅 및 원격 액세스를 설정하기 위해 2 개의 NIC가있는 별도의 Linux 또는 Windows 상자를 사용할 수 있다는 것을 알고 있습니다. 그렇지 않으면 Cisco와 같은 공급 업체에는 하드웨어 방화벽 / NAT 솔루션 (Cisco ASA)이 있습니다.

요약하면 머신을 NAT 뒤에 배치하십시오. 서비스 목적을 수행하는 데 필요한 포트만 포트 전달하십시오. 관리사용되는 서비스 를 인터넷으로 포팅하지 말고 원격 관리를 위해 VPN을 살펴보십시오.

PS SSH 포트를 변경하면 로그 볼륨에 도움이 될 수 있지만 실제로 SSH에 대한 액세스를 차단하지는 않습니다. 수천 개의 자동화 된 취약점 탐지기 중 하나가 포트 검색을 수행하여 어떤 포트가 어떤 서비스를 수신하고 있는지 확인할 수 있습니다. nmap 이라는 도구를 사용하여 직접 할 수 있습니다 .


7
실제로 VPN 솔루션은 SSH 서버보다 안전하지 않습니다. 그들은 올바르게 구현되고 서비스가 올바르게 구성된 암호화 프로토콜에 의존합니다. 다른 수단을 통해 정확히 동일한 수준의 보안을 제공한다고 말하고 싶습니다. 그런 다음 잘 이해하면 VPN 뒤에 SSH를 넣은 다음 한 단계 더 안전합니다.
lgeorget

그렇습니다 당신은 내가 옳은 말이 맞습니다. VPN을 사용하여 방화벽 / NAT를 통과 한 다음 서버로 ssh
person

1
대부분의 VPN 설정은 여러 계층의 클라이언트 인증을 거치며 단일 지점 외부 트래픽이 내부 네트워크에 도달 할 수 있도록합니다. 많은 노드가있는 것과 비교합니다. VPN 집중 장치는 일반적으로 sshd인스턴스를 수용하는 서버와 비교하여 흥미로운 대상이 아닙니다 . ssh jumpbox 대부분의 VPN 구성만큼 안전 수 있지만 일반적으로 작동하지 않습니다.
Bratchley

5

iptables로 커널의 내부 방화벽을 구성 할 수 있습니다 . 따라서 일부 시스템 만 서버에 ssh하고 다른 IP 패키지를 제거 할 수 있습니다. 자세한 내용 man iptables은 참조하십시오.

예를 들어, 192.168.1.67이 ssh의 호스트 인 경우 서버에서 다음을 입력하십시오.

sudo iptables -A INPUT -p tcp --dport ssh -s 192.168.1.67 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport ssh -j DROP
sudo iptables-save

2
원격 관리가 유일한 옵션 인 경우 심각하게 조여 질 수 있습니다. 대부분의 IP는 반영구적입니다. 하드웨어를 바꾸면 화상을 입을 수 있습니다.
돛대

3

인터넷에 서버가 정말로 필요합니까? 인터넷에서 실제로 사용하려면 인터넷에 연결하기 전에 안전한지 확인하십시오.

포트를 변경하는 것은 모호함을 통한 보안입니다. 공격자가 스크립트를 실행하는 것보다 더 정교하다면 도움이되지 않습니다.

이미 언급 한 몇 가지 사항은 다음과 같습니다.

  1. Fail2Ban에 동의하며 올바르게 구성하면 스크립트와 가장 정교한 해커를 막을 수 있습니다.
  2. PermitRootLogin을 no로 설정해야합니다.
  3. 방화벽을 구성하십시오. 나는 보통 iptables 규칙을 편집하지만 UFW 또는 firehol과 같은 것이 작동합니다.

적절하게 해결되지 않은 것으로 생각되는 두 가지가 있기 때문에이 커뮤니티에 가입했습니다.

  • 방화벽 설정에서 완전히 필요하지 않은 모든 것을 완전히 차단 / 비활성화하십시오. 포트를 열기 전에 "인터넷에서이 서비스가 정말로 필요합니까?" 열려있는 모든 포트 / 서비스는 누군가가 악용 할 수있는 또 다른 잠재적 벡터가됩니다. 해당 서비스에 서버에 대한 루트 액세스 권한을 얻을 수있는 버그가있는 경우 서버의 모든 항목에 액세스 할 수 있습니다. 보안은 가장 약한 링크만큼 강력합니다.
  • 이제 마지막으로 가장 중요합니다. ssh에 액세스하려는 스크립트는 시간이 지남에 따라 비밀번호를 추측 할 수 있습니다. Fail2Ban은 속도를 늦출 수 있지만 여전히 추측 할 수 있습니다. 그렇다면 액세스 가능한 서비스에서 2 단계 인증 을 원합니다 . 이를 위해 Duo Security의 무료 계정을 권장합니다. https://www.duosecurity.com/docs/duounix

1
포트를 변경하면 로그 파일을 정리할 수 있다는 장점이 있습니다. 스크립트 키드는 대부분 기본 포트가 아닌 포트를 공격하지 않기 때문에 모든 로그 항목이 심각한 위협임을 나타냅니다.
Mark

포트 변경은 실제 위협에 대한 제로 사용이 아닙니다. 스피드 범프는 벽이 많지 않지만 여전히 스피드 범프이며, 이것을 더 큰 스피드 범프로 만들 수있는 방법이 있습니다. 또한 2 단계 인증은 가능할 때마다 사용하는 것이 좋으며 거의 항상 가능 해야하지만, 가장 좋은 경우가 있습니다. 특정 최소 시간이 있다면 Fail2Ban이 암호를 지연시킬 것임을 확신 할 수 있으며, 암호를 자주 변경하면 암호를 더 자주 다시 시작하여 절대 끝나지 않습니다.
Matthew Najmon

2

SSH 서버에서 연속적인 "시도"를 금지하려는 경우 @cff에 대한 또 다른 예는 다음과 같습니다.

sudo iptables -A INPUT -p tcp -m tcp --dport ssh -m state --state NEW -m recent --update --seconds 600 --hitcount 4 --name DEFAULT --mask 255.255.255.255 --rsource -j DROP
sudo iptables -A INPUT -p tcp -m tcp --dport ssh -m state --state NEW -m recent --set --name DEFAULT --mask 255.255.255.255 --rsource
sudo iptables-save

이 하나의 '태그'연결이 시도되고 600 초 (10 백만)에서 4 개 이상이 발생하면 원점이 '금지'됩니다. 더 안전하기 때문에 @cff 솔루션 대신 이것을 사용하십시오 (자신을 잠그면 1000 만 기다렸다가 다시 시도하십시오).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.