sshd의 도메인 및 https 연결 시도를 검색하는 방법은 무엇입니까?

sshd의 도메인 및 https 연결 시도를 검색하는 방법은 무엇입니까?

난 내 일을 하고 있어sshd(8)청취domain그리고 https항구. (이 포트에서는 또 무엇이 실행될 수 있나요? :)

분명히 실제 DNS(TCP로 폴백하는 경우) 및 HTTPS 클라이언트는 이러한 포트를 수신하는 SSH 서버에 연결을 시도할 수 있습니다. DNS/TCP 및 HTTPS/TCP 클라이언트로부터 수신된 연결 시도 횟수를 어떻게 알 수 있나요? 예를 들어, DNS/TCP 클라이언트 또는 SSH 서버와 통신하는 HTTPS/TCP 클라이언트에 고유한 서버 로그를 검색할 수 있는 패턴이 있습니까? 이것을 쉽게 표시할 수 있는 웹 도구가 있습니까?

저는 OpenBSD 이상에 대해 링크를 걸었기 /etc/services때문에 sshdOpenBSD에서 이 작업을 수행하는 방법에 주로 관심이 있습니다. 그러나 이를 수행하는 크로스 플랫폼 방법이 있고 단일 운영 체제에만 국한되지 않는 경우 이를 포함하십시오.

답변1

콘텐츠 기반 방화벽 규칙을 추가하여 들어오는 연결의 처음 몇 바이트를 분석할 수 있습니다. 예를 들어 Linux에서는 iptables를 사용합니다.

iptables -N notssh
iptables -A input -p tcp --dport 443 -m string --algo bm --from 0 --to 7 ! --string SSH-2.0 -j notssh

규칙의 카운터는 규칙 notssh이 생성된 이후 또는 재설정 카운터가 사용된 이후 규칙이 실행된 횟수를 제공합니다 iptables -Z notssh. 개별 규칙에 대한 카운터도 있습니다.

이는 TCP 연결의 첫 번째 패킷이 7바이트 미만을 포함하는 SSH 프로토콜에 대한 연결을 잘못 계산하지만 실제로는 그런 경우가 거의 없습니다.

답변2

TCP 클라이언트의 DNS는 다음과 같이 시뮬레이션할 수 있습니다.dig(1)다음과 같습니다( 박스 자체에서는 포트가 번역되지 않을 수 있으므로 22명시 적으로 포트를 사용합니다 ).domain

dig @example.org -p22 +tcp example.org

아니면 이렇게:

dig @example.org -p22 axfr example.org

다음 항목이 발생하는 것 같습니다 /var/log/authlog.

Jan 10 15:08:41 example sshd[21075]: Did not receive identification string from 64.124.xxx.xx
Jan 10 15:08:51 example sshd[22052]: Did not receive identification string from 64.124.xxx.xx
Jan 10 15:09:01 example sshd[24980]: Did not receive identification string from 64.124.xxx.xx

그리고 https,

curl https://example.org:22/

다음 항목이 생성되는 것으로 보입니다(시도당 항목 수는 브라우저마다 다르지만).

Jan 10 15:25:06 example sshd[9203]: Bad protocol version identification '\\026\\003\\001' from 64.124.xxx.xx

일부 HTTPS 연결 시도도 문자가 하나 적어지는 것으로 보입니다.

Bad protocol version identification '\\026\\003' from

가능한 다른 모든 변형을 식별할 수 있습니다.

% fgrep " sshd[" /var/log/authlog | cut -d" " -f7-12 | grep ^Bad | sort | uniq -c | sort -rn | head
 351 Bad protocol version identification '\\026\\003\\001' from
 110 Bad protocol version identification '\\026\\003\\001\\001E\\001' from
  91 Bad protocol version identification '\\026\\003\\002' from
  63 Bad protocol version identification '\\026\\003\\001\\001=\\001' from
  52 Bad protocol version identification '\\026\\003\\001\\002' from
  44 Bad protocol version identification '\\026\\003\\003' from
  21 Bad protocol version identification '\\026\\003\\001\\001?\\001' from
  16 Bad protocol version identification '\\026\\003\\001\\001B\\001' from
  13 Bad protocol version identification '\\026\\003\\001\\0017\\001' from
  10 Bad protocol version identification '\\026\\003' from

가능한 요청 수도 확인할 수 있습니다 domain.

% fgrep " sshd[" /var/log/authlog | cut -d" " -f7-12 | grep ^Did | sort | uniq -c
 227 Did not receive identification string from

답변3

이는 더 복잡한 솔루션이지만 시도해 볼 수 있습니다.sslh SSL/SSH 멀티플렉서하지만 DNS 패킷 검사를 수동으로 추가해야 하고 sslh원래 클라이언트의 주소( viewDNS, allow/deny웹 서버 및 from=SSH authorized_keys)가 필요한 경우 투명 모드에서 구성해야 합니다.

관련 정보