IT쪽 일을 하다 보니 랜섬웨어 감염이라는 끔찍한 일을 겪게 됐고 앞으로 이런 일이 발생하지 않도록 대응책을 찾게 됐다.
물론 애초에 클라우드 아키텍쳐를 보안이 좋도록 서버와 코드 구성 등 많은 부분을 고칠 수 있지만 현재 회사에서는 그런 시도를 자유롭게 할 수 없는 환경이기에 다른 방법들을 찾기 시작했다.
이 포스트에서는 윈도우 서버와 리눅스 서버의 접속 관련 보안 방법인 IP 접속 제한, 계정 접속 시도 횟수 설정, 방화벽 설정 등에 대해 알아본다.
우선 클라우드를 이용하고 있다면 클라우드의 우리 서버까지 도달하기까지 클라우드에서 운영중인 방화벽이 따로 존재한다.
이 방화벽은 경비원과 같은 역활을 한다. 우리 서버가 통신 시 항상 거치는 곳이기 때문에 통신을 제한할 수 있다.
서버로부터 나가는 통신, 서버로 들어오는 통신 등을 설정해 보안을 강화할 수 있다.(여기서 ip 통제)
그리고 보통 이 방화벽을 클라우드 관제센터에서 모니터링하기 때문에 문제 발생도 잡아주기 때문에 좋다.(하지만 모든 클라우드에서 지원해주지는 않음)
우선 고성능의 윈도우 서버에 RDP 구성 시 OS 레벨에서의 접속 보안 방법에 대해 먼저 생각해 보자!
윈도우의 기본 RDP 접속 포트는 3389포트다. 그래서 해킹시도 시 가장 먼저 열려있는 포트를 확인하기 위해 시도해 보게 된다.
그렇기 때문에 남들이 알아차리기 힘든 RDP 접속 포트로 원격 데스크톱의 수신 대기 포트를 변경해 이런 시도를 무산시킬 수 있다.
레지스트리를 변경하여 수행할 수 있는데 아래와 같은 순서로 실행하면 된다.
Get-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp' -name "PortNumber"
예를 들어:다음 PowerShell 명령을 실행하여 RDP 포트를 확인할 수도 있습니다. 이 명령에서는 새 RDP 포트를 3390으로 지정합니다.
$portvalue = 3390
Set-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp' -name "PortNumber" -Value $portvalue
New-NetFirewallRule -DisplayName 'RDPPORTLatest-TCP-In' -Profile 'Public' -Direction Inbound -Action Allow -Protocol TCP -LocalPort $portvalue
New-NetFirewallRule -DisplayName 'RDPPORTLatest-UDP-In' -Profile 'Public' -Direction Inbound -Action Allow -Protocol UDP -LocalPort $portvalue
두번째 보안 방법으로 방화벽을 활용해 IP를 통제하는 방법이다. 그 방법은 아래와 같다.
세번째로 원격 엑세스에 사용하는 계정에 대해 접속 시도 실패 시에 잠금을 설정하는 방법이 있다.
만약 이 설정이 되어 있지 않다면 해커들은 수 많은 경우의 수를 모두 시도해 봐도 계정을 계속 사용할 수 있기 때문에 시간만 주어진다면 언젠가는 접속할 수 있게 된다.(패스워드 복잡도에 따라 그 시간이 큰 차이가 생김)
아무튼 원격 액세스 클라이언트 계정 잠금을 활성화하고 시간을 다시 설정하려면 다음 단계를 수행합니다.
만약 계정이 잠긴 경우 위에서 설정한 ResetTime에 따라 사용자가 다시 로그온 가능하지만 바로 원할 경우 레지스트리 키에서 DomainName:UserName 값을 삭제할 수 있는 방법은 아래와 같다.
---------------------------------------------WINDOW END---------------------------------------------------
여기서부터 리눅스 접속 관련 보안에 대해 생각해 보자!
리눅스 접속 중 SSH에 대해 알아볼 예정인데 SSH 서버 관련 설정은 기본으로 되어 있는 곳이 많다.
카페24, 가비아, AWS, Azure, GCP 등은 모두 SSH 서비스를 기본으로 제공하고 최신판 리눅스들은 대부분 SSH 서버를 기본 탑재하고 있다.
rpm -qa | grep openssh-server 를 터미널에 입력해 설치되어 있는지 체크해 볼 수도 있고, 만약 설치되어 있지 않다면 yum install openssh-server (CentOS, RedHat Enterprise), apt install openssh-server (Ubuntu, Debian) 으로 설치한 뒤 which sshd 를 통해 설치 경로를 확인해 볼 수도 있다. 그런 뒤 방화벽 설정 프로그램에서 tcp 22 포트를 허용해 주면 된다.(root 권한 필요)
그 방법은 아래와 같다.
ssh 설정은 보통 /etc/sshd/sshd_config 여기서 설정할 수 있고 여기서 아래와 같은 설정도 할 수 있다.
설정이 끝나면 service sshd start 또는 systemctl start sshd 를 통해 실행해 주면 된다.
SSH 보안 관련 설정은 /etc/sshd/sshd_config 에서 하게 된다.
우선 리눅스 서버에서 root 권한은 윈도우에서의 관리자 권한처럼 위험하다.
그래서 애초에 root 로 접속하는 것을 막는 것이 보안상 권장된다.
다른 계정으로 접속해 root 권한을 얻어 사용하는 것이 좀 더 바람직하다.
이 때 사용하는 파라미터가 PermitRootLogin 인데 아래와 같은 옵션이 있다.
말했던 것처럼 2번을 사용하면 된다.
그 외에도 윈도우에서 했던 것처럼 접속 시도 실패 횟수를 카운트 해 막아주는 방법은 MaxAuthTries 파라미터를 활용하면 되는데,
MaxAuthTries 6 - 계정 당 최대 연결 시도 횟수로 6인 경우 6번을 뜻하고 6번부터 계정이 막히는 것을 알 수 있다.
그 외에도 LoginGraceTime 2m - 사용자 인증 요청받을 수 있는 최대 시간 설정(2m은 2분)과 MasSessions 10 - SSH 연결 허용할 최대 클라이언트 수 등 여러 파라미터들이 존재하고 보안에 유리하게 조율하면 된다.
Flutter vs React Native 2023 🧑🏻💻 (0) | 2023.06.23 |
---|---|
How to Solve HTTPConnectionPool Error In Python (0) | 2023.06.22 |
How To Move Database Files To New Volume In MSSQL Server (0) | 2023.05.03 |
윈도우 서버 원격 접속 사용자 계정 설정하기(Windows Server Remote Access User Account Settings) (0) | 2023.04.18 |
Introduction to Django Ninja - The Future of Backend Development (0) | 2023.03.23 |
댓글 영역