지난 포스팅에서는 SSH 설정에서 SSH 접속 포트를 변경하는 방법에 대해 알아보았다. 일반적으로 사용하는 22번 포트 대신, 잘 알려지지 않은 포트(Unknown Port) 중 하나를 사용함으로써, 변경된 포트 정보에 대해 알지못하는 외부인이 함부로 접속하는 것을 막을 수 있다.
포트 변경 외에도, 다른 설정 변경을 통해 안전한 SSH 접속 환경을 꾸밀 수 있다. 이번 포스팅에서는 특정 LAN 인터페이스(LAN 포트, 인터넷 선을 꼽는 포트다), 즉 특정 IP로만 SSH 접속이 가능하도록 설정하는 방법에 대해 알아보려고 한다.
사용자에게 웹 서비스를 제공하는 리눅스 서버의 경우, 여러 개의 LAN 인터페이스를 가지는 경우가 많다. 이는 마치 하나의 건물로 들어가기 위한 문이 여러 개 존재하는 것이라 생각하면 된다. 그리고 이 문들 중, 특정 문에만 SSH 접속이 가능하도록 설정하는 것이라 보면 된다. 아래의 구성도를 보면, 왜 특정 인터페이스로만 SSH 접속을 허용하는 것이 보안에 도움이 되는지 대략적으로 알 수 있을 것이다.
SSH의 경우, 서버 시스템 자체를 변경하는 구성 진행이 가능하기 때문에, 인가받지 않은 사용자들이 함부로 접속하는 것을 막아야 한다. 물론 SSH 접속 시, 등록된 계정과 비밀번호를 모른다면 외부 사용자에게 SSH 연결이 허용되더라도 해킹 당할 위험은 낮지만, 아예 외부 사용자에게는 SSH 접속이 되지 않도록 설정하는 것이 훨씬 안전하다. 그럼, 어떻게 특정 포트로만 SSH 접속이 허용될 수 있도록 설정하는지 알아보도록 하자.
1. ListenAddress (특정 주소로만 SSH 접속 요청을 LIsten하겠다는 의미로 이해하면 된다)
리눅스가 설치된 컴퓨터에 LAN 인터페이스가 1개 뿐이라면, ListenAddress가 sshd_config 파일 내에서 보이지 않을 것이다. 하지만, LAN 인터페이스가 2개 이상이거나, 리눅스가 설치된 VM웨어에 Network Adapter(LAN 인터페이스)가 2개 이상 존재한다면 ListenAddress 항목이 다음과 같이 나타난다.
리눅스 내에 LAN 인터페이스가 2개 이상이라는 말은 리눅스가 통신에 사용할 수 있는 IP 주소를 2개 이상 가지고 있다는 말이다. 그리고 ListenAddress는 2개 이상의 LAN 인터페이스 중, SSH 접속을 허용할 LAN 인터페이스를 지정해 주는 것이라 보면 된다. 아래의 구성도를 잠시 살펴보자.
Linux가 설치된 PC는 HostID가 111, 222인 두 개의 IP를 가지고 있다. 그리고 이 리눅스와 연결된 PC(IP는 172.30.1.5라고 가정하자)는 LAN1과 LAN2를 통해 Linux에 SSH 접속이 가능하다. ListenAddress는 여러 개의 LAN 인터페이스가 존재하는 경우, SSH 접속을 허용할 포트를 지정해주는 것이라 보면 되는데, 기본값은 위에서 본 것처럼 0.0.0.0으로 지정되어 있다. IP주소가 0.0.0.0이라는 것은 모든 IP 주소가 포함된 것이라 보면 되며, 따라서 ListenAddress 0.0.0.0이라는 말은 모든 LAN 인터페이스로 SSH 접속을 허용하겠다는 의미다.
필자의 VM에서 예를 하나 들어보겠다. 필자의 Linux는 한 개의 Network Adaptor만으로 구성되어 있고, 이 LAN 인터페이스에 부여된 IP 주소는 172.30.1.30(공유기에서 할당한 주소)과 172.30.1.111(수동 설정한 secondary 주소) 두 개다. ListenAddress가 설정되어 있지 않은 현재, 필자는 이 두 주소를 통해 SSH 접속이 가능하다. 아래와 같이!
하지만, SSH의 ListenAddress를 172.30.1.111로만 설정할 경우, 30번으로의 SSH 접속은 불가능해진다. 다음과 같이 SSH ListenAddress 번호를 설정하고 sshd 서비스를 재기동한 뒤, 두 IP로 접속을 시도하면 아래와 같이 30번은 접속이 거부됨을 확인할 수 있다.
만약 ListenAddress의 주소가 리눅스에 할당되지 않은 주소라면 어떤 일이 벌어질까? 모든 접속이 중단되리라 생각한 분들이 많겠지만, 그 전에 sshd 서비스 재기동 시 에러가 발생한다.
2. Root로 SSH 접속 금지 설정하기
이전 포스팅에서 살펴본 SSH 접속 포트 변경과, 조금 전 살펴본 특정 인터페이스로의 SSH 접속 허용 설정을 하더라도, 내부 정보를 아는 누군가에 의해 정보가 유출되거나, 정말 벼락맞을 확률의 우연의 일치로 인해, 누군가가 SSH 로그인 화면까지 도달했다고 가정해보자. 그리고 정말 불운하게도, 이 악의적인 목적을 가진 사용자가 접속하려는 리눅스 서버의 root 계정 비밀번호까지 알고 있는 상황이라고 가정한다면... 이 사용자가 리눅스 내부의 모든 파일을 root 권한으로 변조, 위조하거나 삭제하는 등의 행위를 진행할 수 있다.
이를 방지하기 위해, SSH는 root로의 접속이 불가능하도록 설정하는 기능을 제공한다. 이 설정 역시 sshd_config파일에서 확인할 수 있는데, 해당 파일의 21번째 줄을 보면 PermitRootLogin 이라고 작성된 부분이 이와 관련된 설정 문구다.
리눅스에서 해당 설정의 기본 내용은 #PermitRootLogin yes로 설정이 되어 있다. 하지만 필자는 SSH로의 root 로그인을 금지하기 위해 주석(#)을 없애고 뒤의 yes를 no로 바꾸어 설정하였다. 따라서 필자의 경우, root 계정으로 SSH 로그인을 시도하면 다음과 같이 접속이 거부된다.
마치 비밀번호를 틀린것과 같이 나오는데, 실제로 root 로그인이 금지되어 나타나는 현상이다. 만약 필자가 이 설정을 다시 주석처리하고 sshd 서비스 데몬을 재기동한 뒤, root로그인을 시도하면 아래와 같이 root로도 로그인이 가능해지는 것을 볼 수 있다.
참고로, root 로그인 후, 2번의 실패한 root 로그인 시도가 있었다고 나오는데, 이는 필자가 root 로그인이 허용되지 않았을 때 수행한 2번의 root 로그인 시도다.
SSH의 접속 포트 변경이나 특정 LAN 인터페이스만으로의 접속 허용은 인가받지 않은 사용자의 무단 SSH 접속을 어느정도 차단할 수 있지만 완벽한 방법은 아니다. 따라서 원격으로 SSH 접속이 가능하도록 설정된 리눅스 서버는 위의 2개 설정과 더불어 root로의 SSH 접속을 금지하는 설정을 반드시 넣어주는 것이 좋다.
하지만... 이럼에도 불구하고 리눅스 서버의 SSH는 해킹으로부터 위험이 완전히 사라지지는 않는다. 다음 포스팅에서는 SSH 접속에 필요한 특정 인증키를 가지고 있는 사용자만 SSH 접속이 가능하도록 설정하는 방법에 대해 알아보려 한다.
'IT Security > LINUX Basic' 카테고리의 다른 글
20. Linux - 윈도우와 리눅스 사이 파일 이동 시키기(SCP, SFTP) (0) | 2020.06.03 |
---|---|
19. Linux - 공개키를 이용한 SSH 자동 접속 (0) | 2020.05.31 |
17. SSH 설정 변경1 - 리눅스 원격 접속 통신 포트 변경 방법 (0) | 2020.04.28 |
16. 리눅스 IP 변경 및 네트워크 설정 (0) | 2020.04.15 |
15. 리눅스 IP 확인 및 원격 접속 (0) | 2020.03.31 |
댓글