SSH 액세스 시도 기록


60

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

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


비표준 포트에서 sshd를 실행하는 것도 고려해야합니다. 또한 단일 IP가 1 분 안에 새로운 ssh 연결을 X 번 시도하는 경우 새 연결 시도를 거부하도록 iptables를 설정할 수 있습니다.
Ivanivan

나에게이 문제는 fail2ban이 아니라 sshguard, 내가 들어 본 적이없는 것
Ray Foss

답변:


55

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)

2
호기심, 우분투가 않습니다 명령을 ? lastb
Bratchley

1
@JoelDavis My Ubuntu 12.04는 출력하지만 출력과 전혀 다르게 보이는 단일 행입니다. 구성해야 할 수도 있습니다.
Anthon


우분투 서버 14.04 이상에서이 읽어야합니다/var/log/auth.log
서지 Stroobandt에게

29

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

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


1
/var/log/secure내 우분투 시스템 에는 없습니다 .
Anthon

@Anthon, 놀랍게도 /var/log/auth내 시스템 에는 없습니다 . 그래서 답변을 게시하기 전에 /var/log/secureUbuntu 서버이기도 한 시스템에 있는지 확인했습니다.
Ramesh

14.04, 12.04 및 8.04 미만의 오래된 시스템을 확인했습니다. 어떤 버전을 사용하고 있습니까? 그 파일을 얻기 위해 특별한 것을 했습니까?
Anthon

@Anthon, 내가 테스트 한 서버는 RHEL이었습니다. 그러나 내가 제공 한 링크의 대답은 우분투에 대한 것이 었습니다 /var/log/secure.
Ramesh

6
/var/log/secureFedora / CentOS / RHEL ism입니다.
slm

8

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'

7

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

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

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

sudo service rsyslog restart

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


4

내 추천은 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 주소로.


2

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

https://github.com/amboxer21/SSHMonitor

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


-2

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

나는 이것이 github 프로파일을 홍보하는 나쁜 방법이라고 생각합니다 ... 기본적으로 웹에서 스크립트를 다운로드하고 루트를 사용하여 실행하도록 요청합니다. 하향식
UserK

나는 내 github 프로필을 홍보하지 않습니다. 프로필 다운을 홍보하기 위해 저를 투표하면 사람들이 위와 같이 간단하게하려고했습니다. 또한 스택 교환의 규칙 안내서에서 개인 저장소의 코드 파일을 공유 할 수 없다는 것과 같은 것은 작성되지 않았습니다.
만수르 알리

나의 유머 감각을 용서해주세요. 우선 Mansur의 답변에 감사드립니다. downvote는 루트 사용자로서 알려지지 않은 명령을 실행하도록 요청한다는 사실에서 비롯됩니다. 지난번에 내부에 'rm -R 슬래시'가있었습니다.
UserK

1
그건 그렇고, 스택 교환으로 긴 코드를 허용하지 않으므로 스크립트를 내 대답에 넣었습니다. 리눅스는 매우 간단합니다.
Mansur Ali
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.