리눅스에서는 서버에 접속실패 정보와 접속정보를 기록하고 있다. 해커의 공격이나 침입 흔적을 찾기 위해서 로그 파일을 점검해 보자.
접속 실패 로그 확인
ssh 접속 시도 실패 로그는 “/var/log/btmp” 파일에 특수하게 저장된다. 이 파일을 보기 위해서는 “last -f” 명령을 이용하여 확인할 수 있다.
root:~$last -f /var/log/btmp root ssh:notty 116.31.116.15 Tue Nov 1 06:26 - 06:26 (00:00) root ssh:notty 116.31.116.15 Tue Nov 1 06:26 - 06:26 (00:00) root ssh:notty 116.31.116.15 Tue Nov 1 06:26 - 06:26 (00:00) root ssh:notty 116.31.116.15 Tue Nov 1 06:26 - 06:26 (00:00) root ssh:notty 116.31.116.15 Tue Nov 1 06:26 - 06:26 (00:00)접속정보 기록 확인
접속정보 기록은 로그인 했던 정보를 파일로 저장하며 “/var/log/wtmp” 파일에 저장된다.
root:~$last -f /var/log/wtmp guest pts/0 175.209.89.250 Tue Nov 1 14:41 still logged in guest pts/0 175.209.89.250 Tue Nov 1 11:51 - 11:51 (00:00) guest pts/0 175.209.89.250 Tue Nov 1 11:41 - 11:42 (00:00) guest pts/0 175.209.89.250 Tue Nov 1 11:29 - 11:40 (00:11)last 명령어
서버용으로 사용되는 시스템의 관리자는 어떤 사용자가 언제 로그인했는지 확인할 필요가 있다. last, lastlog 라는 명령어로 확인할 수 있다. 먼저 last 명령어에 대해 알아보자.
last 명령어로 알 수 있는 정보
- 접속계정명
- 접속장치명
- 접속한 IP주소
- 접속시간
- 시스템 재부팅 정보
lastlog 명령어
각 사용자들이 언제 마지막으로 접속하였는가에 대한 각 사용자들의 최근 접속정보를 확인할 수 있다. 그리고 “/etc/passwd” 파일에 정의되어 있는 모든 사용자들의 마지막 접속정보를 확인하는 명령어이다. 또한 last는 “/var/log/wtmp” 파일의 내용을 출력해주지만 lastlog는 “/var/log/lastlog” 파일의 정보를 출력해준다.
root:~$lastlog -u userid //사용자의 마지막 접속 정보 root:~$lastlog -b N //N일 이전에 접속한 정보 root:~$lastlog -t D //D일 부터 현재까지 접속한 정보롯사 by IT feedback
안녕하세요 롯사입니다.
이번 포스팅은 리눅스 서버에 원격 접속할 때 사용하는 명령어에 대해서 알아보겠습니다.
기본적으로 네트워크 통신에 제약이 없는 로컬 pc에서 접속 툴을 이용해서도 접속이
가능하고 리눅스 터미널 환경에서 다른 리눅스 서버로도 접속이 가능합니다.
이 시간에 다룰 내용은 리눅스 터미널 환경에서 다른 리눅스 서버로 접속하는 부분에
대해서 먼저 다루어보겠습니다.
what is ssh?
보안적으로 취약했던 기존 rsh, rlogin, telnet 등을 대체하기 위해 설계되었고 ( Secure shell )의
약자입니다. 기본 22번 port를 사용해서 네트워크로 연결돼 다른 리눅스 서버로 접속할 때 사용하는
프로토콜로써 기본 암호화 방식을 지원하고 중간에 암호를 해킹을 당해도 원본을 알 수 없고 강력한
인증 방식을 지원하기 때문에 보안적으로 우수한 프로토콜이라고 할 수 있겠습니다.
ssh 서버 실행 파일 : /etc/sbin/sshd
ssh 클라이언트 실행 파일 : /etc/bin/ssh
그럼 본론으로 들어가서 사용방법에 대해서 알아보겠습니다.
1. openssh-server 설치
* rpm -qa | grep sshd* ( ssh 설치 확인 )
전 이미 설치가 되어있습니다.
* yum install openssh-server ( ssh 설치 )
이미 설치가 되어있지만 편의를 위해서 진행했습니다.
* systemctl enable sshd ( 재부팅 후 자동등록 )
* systemctl start sshd ( 서비스 시작 )
* systemctl status sshd ( 서비스 상태 확인 )
* ps -ef | grep sshd ( 프로세스 상태 확인 )
다음과 같이 서비스 시작과 상태를 확인합니다.
정상적으로 잘 동작하고 있네요.
2. /etc/ssh/sshd_config 설정 및 확인 ( ssh 접속 시 규칙을 정의합니다 )
* vi /etc/ssh/sshd_config
vi/vim /etc/ssh/sshd_config 파일을 편집기로 열어서 필요한 부분만 정책에 맞게 수정해줍니다.
#Port 22 : ssh 기본 접속 port는 22번입니다. 임의의 port 번호를 지정해서 사용하고 계신 환경이라면
번호 지정 후에 주석을 해제합니다.
#ListenAddress 0.0.0.0 : 기본 default 값은 주석이 처리되어 있어서 정책이 동작하지 않지만
주석을 해제하고 특정 ip를 지정하면 해당하는 ip에서만 접속이 허용됩니다.
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
: ssh 접속을 할 때 필요한 암호화 키가 저장되는 위치로 기본으로 default
ECDSA_KEY 암호화 방식을 사용합니다.
#PermitRootLogin no : root 계정으로 원격 접속 시 허용 여부를 정의합니다.
허용하려면 주석을 해제하고 no --> yes로 바꿔 주시면 root로 접속이 허용됩니다.
보안상 리스크가 있기 때문에 권장드리지는 않습니다.
* systemctl restart sshd ( ssh 서비스 재시작 )
위의 설정 파일의 내용을 변경하였다면 ssh 서비스 재시작을 해줍니다.
3. 방화벽 설정
* firewall-cmd --zone=public --add-port=22/tcp --permanent ( centos 7 이상 )
firewall-cmd --permanent --zone=public --add-port=22/tcp ( 위와 동일 )
firewall-cmd --reload
* iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT ( iptables )
centos 7 이상 환경에서 방화벽 (firewalld)와 iptables를 운영하고 계신다면 필수적으로 22번 port를
허용해줍니다.
4. ssh 접속 ( 원격지 접속 )
* ssh [사용자 계정]@[원격지 ip]
ssh
exit
다음과 같은 형식으로 192.168.159.129 원격지 서버에 접속을 할 수 있습니다.
해당 서버의 password를 입력하고 접속이 성공하게 되면 원격 호스트의 쉘을 사용하게 됩니다.
exit를 누르고 logout 하면 원래의 쉘로 돌아오게 됩니다.
*~. ssh/know_hosts (홈 디렉터리의. sss/known_hosts)
위와 같이 한번 원격 접속이 이루어지고 나면 사용자 홈 디렉터리의. ssh/know_hosts 파일에
원격지(192.168.159.129) 접속에 필요한 키 값이 생성되게 됩니다.
특정 옵션을 제외하고 많이 사용하지는 않지만 ssh 접속 시 사용하는 옵션도 한번 체크해 보시고
넘어가시기 바랍니다.
옵션 | 내요 |
-a | 인증 에이전트 전송을 불허 |
-e | 세션에 대한 이스케이프 문자를 설정 |
-f | 인증과 전송이 설정된 후에 백그라운드에서 ssh를 설정 |
-l | 원격 시스템에 사용할 로그인 이름을 설정 |
-p | 원격 호스트에 연결할 포트를 지정 |
-v | 디버깅모드 자세한 정보 표시 모드를 활성 |
-x | X11 전송을 불가능하게 설정 |
-L | 지정된 원격 호스트와 포트에 전송할 로컬 포트 설정 |
-R | 로컬 호스트와 지정된 포트로 전송될 원격 포트 설정 |
ex ) ssh [원격 계정]@[원격지_ip] -p [변경할 포트] ( 포트 변경 시 지정해서 접속 )
ssh [원격 계정]@[원격지_ip] netstat -ntl ( 원격 접속 후 바로 수행할 명령문 입력도 가능합니다.)
이만 포스팅을 마치겠습니다.
모두 열공하세요 ^^