[unix] SSH 액세스 시도 기록

전화 또는 랩톱과 같은 원격 시스템에서 명령을 실행하고 연결하기 위해 openssh를 사용하여 우분투 서버를 구성했습니다. 문제는 … 난 아마 유일한 사람이 아니에요.

서버에 대한 모든 로그인 시도를 알 수있는 방법이 있습니까?



답변

Ubuntu 서버에서 파일에 언제 (그리고 어디에서) 로그인 한 사람을 찾을 수 있습니다 /var/log/auth.log. 거기에 다음과 같은 항목이 있습니다.

May  1 16:17:02 owl CRON[9019]: pam_unix(cron:session): session closed for user root
May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)


답변

Fedora / CentOS / RHEL과 같은 Red Hat 기반 배포판에서 파일 내부에 로그인 한 사용자를 확인할 수 있습니다 /var/log/secure.

자세한 정보가 필요하면이 수퍼 유저 Q & A ( SSH 액세스 시도를 기록하고 서버에서 수행중인 SSH 사용자를 추적하는 방법) 라는 제목을 읽으십시오 . .


답변

Ubuntu에서 SSH를 통해 로그인하고 Linux tail 명령을 사용하여 /var/log/auth.log파일 의 마지막 x 줄 수를 표시 할 수 있습니다. SSH를 통해 로그인 한 경우 다음 명령을 사용하여 SSH 로그의 마지막 100 줄을보십시오.

tail /var/log/auth.log -n 100

또는 심지어 클리너

tail -100 /var/log/auth.log | grep 'sshd'


답변

Ubuntu의 기본 구성은 ssh 로그인을 /var/log/auth파일에 기록하지 않는 것 입니다. 이것은 INFO로깅 수준입니다.

로그 파일에 로그인 시도를 포함 시키려면 /etc/ssh/sshd_config파일을 루트로 또는 sudo로 편집 하고 LogLevel에서 INFO를로 변경해야 합니다 VERBOSE.

그런 다음 sshd 데몬을 다시 시작하십시오.

sudo service rsyslog restart

그런 다음 ssh 로그인 시도가 /var/log/auth.log파일에 로그인됩니다 .


답변

내 추천은 auditd 를 사용하는 것 입니다. 이것은 리눅스 커널의 감사 서브 시스템을 사용하여 로깅 하고 있으며 제 생각에는 진지한 경우 그것을 수행하는 올바른 방법입니다. 그리고 {security related} 질문의 특성상 PAM 도 사용해야합니다 . 감사PAM을 설치 한 기본 수준에서는 audit.log 파일에 성공 및 실패한 모든 SSH 시도가 자동으로 기록됩니다. 따라서 실제로 아무것도 구성 할 필요가 없으며 감사PAM 만 설치하면됩니다. 나는 SLES의 첫 손을 알고 있습니다. 그리고 RHEL과 다른 엔터프라이즈 버전의 Linux도 비슷하게 작동합니다.

http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html

에 의해 생성 된 원시 감사 로그에서 인 auditd 당신은 하나를 사용하고 뭔가를 사용하고자 할 수 있습니다 aureport에 설명되어 그것을 필터링 인 auditd의 맨 페이지를 자신의 텍스트 파서를 작성하거나 VI를 사용하여 키워드를 검색합니다.

여기 /var/log/audit/audit.log내 리눅스 서버에 ssh’ing 하는 내 파일을 제외하고 있습니다.

node=shark type=CRED_DISP msg=audit(1480622612.317:2211277): user pid=117768 uid=0 auid=23456 ses=2201 msg='op=PAM:setcred acct="ron" exe="/usr/sbin/sshd" (hostname=abc415.mycompany.us, addr=172.16.152.5, terminal=ssh res=success)'
  • 위의 서버 이름은 shark 입니다.
  • 이와 같은 많은 행이 audit.log에 있습니다. exe = “/ usr / sbin / sshd”를 기반으로합니다.
  • ssh’d되는 계정의 uid는 auid의 값이며이 예에서는 23456입니다.
  • auid와 연관된 사용자 계정 이름은 acct = “ron”으로 지정됩니다.
  • 대부분의 경우 감사 시스템은 연결하려는 시스템의 DNS 호스트 이름을 기록하지만 항상 IP 주소를 갖습니다.
  • 에포크 시간에있는 항목의 날짜이므로 date --date @1480622612.317결과 Thu Dec 1 15:03:32 EST 2016를 내 서버에 넣을 때와 같은 것을 통해 변환해야 합니다.

시는 res=failed이 사용자 이름을 시도한에서, 시스템이 연결을 시도했는지보고 해당 IP 주소 및 호스트 이름을 조사 할 때입니다. 그리고 성공적인 ssh는 시스템에서 일어나는 일을 이해하려고 시도합니다. 예를 들어 hostname = bobscomputer 및 ip address = 192.168.5.5; 예를 들어 어제 오전 2시 ip 주소 10.10.5.6의 사용자 이름으로 ssh 시도가 성공하면 bob과 대화하여 조사하는 것이 가장 좋습니다. 다른 사람이 해킹을 시도 할 수 있습니까? 그리고 얼마 후에 bob의 계정에서 감사 로그를 근절하려는 시도가 있습니까?

당신이 반복적 볼 때 res=failedauid=0acct=root그 루트 계정으로 상자에 ssh를 시도하는 사람은, 그리고 당신이 수정할 때입니다 /etc/hosts.denySSHD에 대한 해당 IP 주소로.


답변

나는 이것이 오래되었다는 것을 알고 있지만 성공하고 실패한 ssh 연결 / 시도를 모니터링하기 위해 무언가를 썼습니다. sshguard를 사용하는 경우 금지 된 IP뿐만 아니라 이 소프트웨어는 Python으로 작성되었습니다. 누군가가 ssh를 통해 성공적으로 연결하거나 누군가가 ssh 비밀번호를 잘못 얻거나 시도가 실패하여 누군가가 금지 된 경우 이메일을 보내드립니다. 잘하면 이것은이 문제를 검색하고 내 코드를 찾는 미래의 누군가를 도울 것입니다!

https://github.com/amboxer21/SSHMonitor

파이썬 스크립트의 경우 프로세스를 모니터링하는 bash 스크립트를 작성했습니다. 루트 크론 작업을 통해 매분 실행되고 있는지 확인합니다. 실행 중이 아니면 다른 프로세스를 시작합니다. 이것은 매분마다 루트 크론 작업에 의해 호출됩니다 .


답변

SSH 명령 로깅에 대해 내가 본 가장 좋은 것은 rootsh입니다.이 도구를 사용하면 관리자가 광범위한 로깅 수준의 모든 세션에서 모든 명령을 얻을 수 있습니다.

우분투와 CentOS / RHEL에서 ROOTSH를 설치하고 구성하는 스크립트를 작성했습니다

github에서 다운로드하십시오 여기에 링크가 있습니다

https://gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh