서버에서 사용자를 감사하고 SSH에 대한 액세스 시도를 어떻게 감사합니까?


28

나는 내 서버에 몇 가지 보안 문제가 있었고, 일부 SSH 사용자는 일명 문제를 일으키는 화재를 설정했습니다.

나는 다음과 같이하고 싶다 :

  • 사용자 로그인 및 로그 아웃 추적
  • 악의적 인 활동을 발견하기 위해 이러한 SSH 활동을 추적
  • 사용자가 로그를 삭제하지 못하도록 방지

나는 많은 시스템 관리자가 아니며이 문제에 대해 경험이 풍부하지 않으므로 어떤 조언도 환영하고 매우 도움이 될 것입니다. :)

답변:


27

SSH 서버에 대해 이야기하고 있으므로 명령 줄 솔루션을 제공합니다.

  • 사용자 로그인 및 로그 아웃을 추적하십시오. 파일 /var/log/auth.log에는이 정보가 있어야합니다.

  • 해당 사용자의 활동 추적 : 사용자가 상당히 결백 한 경우 .bash_history홈 디렉토리에서 파일 을 확인할 수 있습니다 . 실행 한 명령 목록이 표시됩니다. 문제는 물론이 파일을 삭제하거나 편집 할 수 있다는 것입니다.

  • 사용자가 로그를 삭제하지 못하도록 방지 : 사용자는을 터치 할 수 없습니다 auth.log. 그들과 놀지 못하게하려면 .bash_history몇 가지 트릭 을해야합니다 .

  • 사용자가 루트 액세스 권한을 얻으려면 어떻게해야합니까? : 넌 망했어. 그들이 실수하지 않으면 모든 발자국을 숨길 수 있습니다.


사용자가 unset HISTFILEbash 안에 입력하는 것을 막을 방법이 없으며 bash 기록이 기록되지 않습니다.
Gilles 'SO- 악 그만해라'

@Gilles, 트릭 링크를 읽으십시오. .profile에서 HITSFILE을 읽기 전용 변수로 설정합니다.
Javier Rivera

제한되지 않은 bash에서 읽기 전용 변수를 설정 해제 할 수 있다고 생각했지만 그렇지 않았습니다. 이렇게하면 다른 쉘 (읽지 않을 것 ~/.bash_history또는 ~/.bashrc)을 시작하면에 표시 되기 때문에 추적 성이 약간 향상 됩니다 $HISTFILE. 그러나 그 자체로 완벽하게 합법적 일 수 있습니다 (예 : 사용자가 실행 zsh하기를 원하거나 다른 옵션으로 자신의 옵션을 설정하려고 함 bashrc).
Gilles 'SO- 악마 그만'

1
예. 그를 bash 또는 다른 쉘로 제한 할 수 있습니다. 결국 모든 보안은 단지 경주입니다.
Javier Rivera

"사용자가 루트 액세스 권한을 얻기 위해 관리하는 경우"모든 단계를 숨길 수 있다는 것은 사실이 아닙니다. 감사를 위해 항상 외부 서버를 사용할 수 있습니다. 여기에서 루트 단계를 포함하여 모든 단계가 기록됩니다.
Petr

6

[면책 조항] 나는 파티에 늦었다는 것을 알고 있지만, 다른 질문에 대한 답변을 붙여 넣기를 원합니다. 독자에게 좋은 통찰력을 줄 수 있다고 생각하기 때문에이 질문은가는 것 같습니다. 기본 ssh 정보를위한 장소입니다.

AskUbuntu 에서이 질문 을 읽고 VPS를 확인한 후에도 무차별 대대적 인 공격 시도 만 보인 비슷한 문제가있었습니다 . 그때 내가 행동하기로 결정했습니다.

이제 내가 연결 한 질문에 따라 ssh를 통해 컴퓨터에서 로그인 시도가 실패한 것을 보려면 (무차별 대입 시도 또는 기타 일 수 있음) 다음을 입력하십시오.

grep sshd.\*Failed /var/log/auth.log | less

출력이 여러 줄로 구성되는 경우 (특히 짧은 간격 사이에 발생한 경우) 많은 무차별 대입 시도가 발생하면 다음과 같은 조치를 수행 할 수 있습니다.

ssh 구성 파일 변경

이렇게하려면 / etc / ssh / sshd_config 에있는 파일을 좋아하는 편집기로 엽니 다 (예 :)vim /etc/ssh/sshd_config .

1. 포트 22에서 ssh를 이동 시키십시오 . 이제 다음과 같은 행을 찾으십시오.

# What ports, IPs and protocols we listen for
Port 22

포트 22를 주석 처리하고 원하는 사람을 사용하십시오. 예:

# What ports, IPs and protocols we listen for
# Port 22
Port 28934

1024 미만의 포트에는 특별한 (루트) 권한이 필요합니다. 나는 이것이 어떻게 그것을 방해 할 수 있는지 모르겠지만 그냥 말하고 있습니다.

2. ssh를 통한 루트 로그인 비활성화 : 루트 사용자 이름을 예측할 수 있고 시스템에 대한 완전한 액세스를 제공하므로 SSH를 통해이 계정에 무제한 액세스를 제공하는 것은 현명하지 않습니다. PermitRootLogin 행을 찾아서 no로 설정하십시오 .

PermitRootLogin no

3. 비밀번호 인증 비활성화 : SSH 키생성하고 사용 하여 시스템에 로그인합니다. 암호를 사용하지 않으면 공격자는 서버에 액세스하기 위해 SSH 개인 키를 추측 (또는 도용)해야합니다. 매우 어려운 것. PasswordAuthentication 을 읽는 행을 찾아서 no로 설정하십시오.

PasswordAuthentication no

!경고! 그렇게하기 전에,이 설명서를 참조하십시오 이상 여기에 인증서 인증을 설정하는 방법에 대한.

참고 : 변경 한 후에는를 사용하십시오 sudo /etc/init.d/ssh restart. ssh를 통해 다른 포트에 연결하려면 다음을 사용하십시오 ssh username@hostname.com -p <port_number>.

방화벽 설정

Linux, IPTables에 통합 된 매우 강력하고 효과적인 방화벽을 설정하는 방법에 대한 이 안내서 를 확인하십시오 .

보안에 도움이되는 설정 스크립트

개인적으로 빠르게 사용하는 것은 Fail2Ban 입니다. Fail2ban은 로그인 시도 실패에 대한 로그 파일을 모니터합니다. IP 주소가 최대 인증 시도 횟수를 초과하면 네트워크 수준에서 차단되고 이벤트가 로그인됩니다 /var/log/fail2ban.log. 설치하려면 :sudo apt-get install fail2ban

ssh를 통해 명령 내역 확인

라는 리눅스 명령이 있는데 history,이 시점까지 어떤 명령이 입력되었는지 확인할 수 있습니다. history해당 지점까지 모든 명령을 보려면 터미널에 입력 하십시오. 당신이 뿌리면 도움이 될 수 있습니다 .

특정 명령검색 하려면 다음을 수행하십시오 .history | grep command-name

ssh 이후의 모든 명령나열 하려면 다음 을 수행 하십시오 .fc -l ssh

vi를 사용하여 명령을 편집 할 수도 있습니다 (vim을 시도하지는 않았지만 잘 작동한다고 가정합니다).fc -e vi

당신은 또한 역사를 삭제할 수 있습니다 :history -c

참고 : 명령의 팬이 아닌 경우 history홈 디렉토리 ( cd ~)에 .bash_history (bash를 사용하는 경우 )라는 파일 cat이 있으며 bash 쉘에 입력 된 모든 파일을 볼 수 있습니다 .


아주 좋은 답변입니다. 또한 askubuntu.com/a/3906/59250
Cerber


3
  1. Javier는 이미 다음과 같이 답변했습니다 : /var/log/auth.log
  2. 나는 이것에 관한 좋은 기사를 여기 에서 발견했다 .
  3. 사용자가 루트에 액세스 할 수 없으면 로그 파일이 안전해야합니다. sudoers 파일에서 일부 사용자 정의 규칙을 작성하여 사용자가 액세스 할 수있는 내용과 방법을 제한 할 수 있습니다. 또한 sshd 데몬의 로그 수준을 높일 수 있습니다.

3

로그인 자체 이외에도 사용자가 로그인 한 후 사용자 작업을 추적 / 로그인하는 안전한 방법은 없습니다. 기본 Linux 지식이 있다고 가정하면 쉘 로깅을 비활성화하거나 다른 쉘 (예 : python)에서 명령을 실행할 수 있습니다.

대신 ssh 액세스를 제공하는 데 보수적이어야합니다. 정말로 필요합니까? 쉘 제공 비즈니스에 있지 않는 한 ssh 액세스 권한을 부여하는 것은 흔하지 않습니다.

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