5 간단한 팁으로 리눅스 서버 보호하기

Secure Ubuntu Server Tips 00 Featured Image

리눅스 서버는 현대 인터넷의 중추입니다. 오늘날 웹 브라우저를 통해 접근할 수 있는 거의 모든 웹사이트와 서비스는 리눅스 배포판에서 실행됩니다. 여기서 리눅스 서버를 안전하게 보호하는 방법을 보여드립니다.

목차

    1. 루트 SSH 접근 제거
    1. SSH 접근을 위한 공개 키 쌍 사용
    1. 리눅스 서버의 방화벽 강화
    1. 모든 서비스에 대한 새로운 사용자 생성
    1. 서버의 커널 강화
  • 자주 묻는 질문

주의: 이 튜토리얼은 우분투 서버를 사용해 작성되었지만, 다른 리눅스 배포판 및 로컬 웹 서버에도 적용될 수 있습니다.

1. 루트 SSH 접근 제거

우분투 서버를 보호하는 가장 빠른 방법 중 하나는 루트 SSH 접근을 비활성화하여 SSH 데몬을 보호하는 것입니다. 기본적으로 OpenSSH 서버는 모든 들어오는 연결이 루트 사용자로 로그인할 수 있도록 허용합니다.

예를 들어, 보안이 취약한 서버에서 다음 명령을 실행하면 로그인 프롬프트가 제공됩니다:

Secure Ubuntu Server Tips 04 Insecure Root Login

이것은 문제를 야기할 수 있습니다. 왜냐하면 이는 비밀번호 무작위 대입 공격에 취약한 서버를 열어 두기 때문입니다. 이를 해결하려면 리눅스 서버에 로그인하고 SSH 데몬의 구성 파일을 업데이트합니다.

리눅스 서버에 들어가면 SSH 구성 파일을 수정합니다:

sudonano/etc/ssh/sshd_config

Secure Ubuntu Server Tips 07 Sshd Config Default

GNU Nano에서 Ctrl + W를 눌러 PermitRootLogin 변수를 검색하고 PermitRootLogin을 입력합니다.

Secure Ubuntu Server Tips 08 Permitrootlogin Variable

PermitRootLogin 값을 “yes”에서 “no”로 변경한 후 Ctrl + o를 눌러 파일을 저장하고 Ctrl + x를 눌러 종료합니다.

새 설정을 적용하려면 systemctl을 통해 서버의 SSH 데몬을 다시 시작합니다:

sudo systemctl restart ssh

Secure Ubuntu Server Tips 09 Reload Ssh Server

2. SSH 접근을 위한 공개 키 쌍 사용

리눅스 서버를 보호하는 또 다른 빠른 방법은 로컬 및 SSH 사용자 계정 간에 공개 키 쌍을 생성하는 것입니다. 이 접근법은 비밀번호 로그인 프로세스를 건너뛰고 자동으로 원격 서버에 인증합니다.

공개 키 쌍을 생성하려면 먼저 로컬 머신에서 다음 명령을 실행해야 합니다:

ssh-keygen

keygen 프로그램이 만들고자 하는 키에 대한 여러 세부정보를 요청할 것입니다. 이 옵션들은 기본값으로 안전하게 유지할 수 있으며, Enter를 세 번 눌러 계속 진행합니다.

Secure Ubuntu Server Tips 10 Generate Ssh Key

ssh-copy-id 프로그램을 사용하여 새로운 공개 키 쌍을 원격 서버로 내보냅니다. 이것은 SSH를 통한 공개 키 인증을 위해 로컬 및 원격 머신을 준비하는 간단한 유틸리티입니다.

ssh-copy-id [email protected]

Secure Ubuntu Server Tips 11 Ssh Copy Id Server

다음 명령을 실행하여 원격 머신에 로그인합니다:

SSH에서 로그인 프롬프트를 제거하여 리눅스 서버를 추가로 보호할 수도 있습니다. 다음 명령을 사용하여 데몬의 구성 파일을 엽니다:

sudonano/etc/ssh/sshd_config

PasswordAuthentication 변수를 찾아 값을 “yes”에서 “no”로 변경합니다.

Secure Ubuntu Server Tips 13 Disable Password Authentication

다음 명령을 실행하여 SSH 데몬을 다시 로드합니다:

sudo systemctl restart sshd

3. 리눅스 서버의 방화벽 강화

SSH 접근 제한 외에도 방화벽을 구성하여 리눅스 서버의 보안을 향상시킬 수 있습니다. 기본적으로 새로운 리눅스 머신은 모든 포트에서 모든 들어오는 연결을 수락합니다.

이는 문제가 될 수 있으며, 이는 서버를 포트 스캔 공격에 취약하게 만듭니다. 예를 들어, 악의적인 사용자가 귀하의 머신을 스캔하여 보안이 취약한 포트를 찾고 이를 이용하여 적절한 공격을 감행할 수 있습니다.

Secure Ubuntu Server Tips 14 Sample Port Scanning

이를 해결하는 방법 중 하나는 ufw를 설치하는 것입니다. ufw는 외부 세계에서 사용할 수 있는 포트와 주소를 제어할 수 있는 간단한 방화벽 클라이언트입니다.

우분투에 ufw를 설치하려면 다음 명령을 실행합니다:

sudo apt install ufw

Secure Ubuntu Server Tips 15 Installing Ufw

ufw의 기본 규칙을 설정합니다. 이는 사용자 지정하지 않은 모든 포트에 대해 방화벽이 따를 정책입니다. 모든 들어오는 연결을 차단하는 것이 좋습니다:

sudo ufw default deny incoming  
sudo ufw default allow outgoing

Secure Ubuntu Server Tips 16 Change Default Rules

머신에서 실행할 서비스에 대해 방화벽을 구성합니다. 예를 들어, 다음 명령을 실행하면 SSH로 로그인하고 웹 서버를 호스팅할 수 있습니다:

sudo ufw allow 22  
sudo ufw allow 80  
sudo ufw allow 443

마지막으로, sudo ufw enable 명령을 실행하여 새로운 방화벽 구성을 활성화합니다. 또한 다음 명령을 실행하여 방화벽이 활성화되어 있는지 확인할 수 있습니다:

sudo ufw status

Secure Ubuntu Server Tips 17 Ufw Active Status

4. 모든 서비스에 대한 새로운 사용자 생성

기본적으로 리눅스 시스템의 모든 파일과 프로그램은 특정 사용자 및 그룹에 속합니다. 시스템을 수정하려면 올바른 폴더에 대한 권한이 필요합니다.

리눅스 서버의 보안을 강화하는 방법 중 하나는 새로운 서비스마다 새로운 사용자 계정을 생성하는 것입니다. 이 접근 방식은 각 서비스의 권한을 해당 사용자 계정으로 제한할 수 있습니다.

Secure Ubuntu Server Tips 18 Folder With Multiple Owners

이를 위해 다음 명령을 실행합니다:

sudo useradd -s/bin/bash-d/home/new-service -m-Gsudo new-service  
sudopasswd new-service
  • -s 플래그는 새로운 사용자 계정의 시스템 셸을 설정합니다. 제 경우, 신규 계정은 Bash를 셸로 사용합니다.
  • -d-m 플래그는 새로운 계정의 기본 사용자 디렉토리를 설정합니다.
  • 반면 -G 플래그는 지정한 보조 그룹에 새로운 계정을 추가합니다. 예를 들어, sudo 그룹에 새로운 계정을 추가하면 슈퍼유저 명령을 실행할 수 있습니다.
  • passwd 명령은 새로운 사용자 계정에 대한 새 비밀번호를 설정할 수 있게 해줍니다.

완료되면 현재 계정을 로그오프하거나 su new-service 명령을 실행하여 새로운 사용자 계정을 사용할 수 있습니다.

Secure Ubuntu Server Tips 19 New User Running

5. 서버의 커널 강화

커널은 리눅스 시스템에서 가장 중요한 부분 중 하나로, 머신의 하드웨어와 소프트웨어를 연결하는 역할을 합니다. 예를 들어, 자신만의 리눅스 커널을 컴파일하여 특이한 하드웨어 및 기능에 대한 지원을 활성화할 수 있습니다.

Secure Ubuntu Server Tips 20 Make Menuconfig

그 외에도 커널은 운영 체제의 루트 프로세스로서의 역할을 수행합니다. 커널을 보호하는 것은 리눅스 서버를 보호하는데 있어 가장 중요한 부분 중 하나입니다.

커널을 보호하는 가장 빠른 방법 중 하나는 sysctl을 사용하는 것입니다. 이는 리눅스 커널의 런타임 옵션을 조정할 수 있게 해주는 내장 유틸리티입니다.

Secure Ubuntu Server Tips 21 Sysctl Man Page

그러나 sysctl은 전체 커널 강화 프로세스를 다루지 않으므로, 커널의 보안 수준은 필요한 사항에 따라 달라질 수 있습니다.

이러한 점을 인지하고, 다음 명령을 실행하여 커널이 진단 정보를 보고하지 못하도록 설정할 수 있습니다:

sudo sysctl kernel.kptr_restrict=2  
sudo sysctl kernel.dmesg_restrict=1  
sudo sysctl kernel.kexec_load_disabled=1

Secure Ubuntu Server Tips 22 Sysctl Kernel Tweaks

서버로 보내는 가짜 연결 요청을 접수할 수 없도록 커널에 지시하는 다음 명령도 실행할 수 있습니다:

sudo sysctl net.ipv4.tcp_syncookies=1  
sudo sysctl net.ipv4.tcp_rfc1337=1

Secure Ubuntu Server Tips 23 Sysctl Net Flood Tweak

또한, 다음 명령을 실행하면 커널이 들어오는 각 연결을 검증하도록 강제할 수 있습니다:

sudo sysctl net.ipv4.conf.all.rp_filter=1  
sudo sysctl net.ipv4.conf.default.rp_filter=1

Secure Ubuntu Server Tips 24 Sysctl Net Filter Connections

마지막으로, 다음 명령 세트를 사용하면 어떤 들어오는 연결도 네트워크 트래픽을 다른 게이트웨이로 리디렉션할 수 없도록 막을 수 있습니다. 이렇게 하면 미들맨 공격에 휘말리는 것을 방지할 수 있습니다.

sudo sysctl net.ipv4.conf.all.accept_redirects=0  
sudo sysctl net.ipv4.conf.default.accept_redirects=0  
sudo sysctl net.ipv4.conf.all.secure_redirects=0  
sudo sysctl net.ipv4.conf.default.secure_redirects=0  
sudo sysctl net.ipv6.conf.all.accept_redirects=0  
sudo sysctl net.ipv6.conf.default.accept_redirects=0  
sudo sysctl net.ipv4.conf.all.send_redirects=0  
sudo sysctl net.ipv4.conf.default.send_redirects=0

Secure Ubuntu Server Tips 25 Sysctl Net Mitm Prevention

: 위의 팁 외에도 리눅스 서버를 보호하기 위해 이러한 오픈 소스 도구도 활용할 수 있습니다.

자주 묻는 질문

로컬 머신을 잃어버렸습니다. SSH를 통해 우분투 서버에 로그인할 수 있나요?

대부분의 경우, 공개 키 인증만 사용하는 경우 SSH를 통해 로그인하는 것은 불가능합니다. 그러나 PasswordAuthentication 변수를 비활성화하지 않았다면 SSH 프롬프트에 접근할 수 있는 가능성은 여전히 존재합니다.

그 외에는 물리적으로 머신에 접근하여 “/etc/ssh/sshd_config”를 업데이트하거나 VPS 제공업체의 루트 콘솔에 접근할 수 있습니다.

제 서버는 iptables와 ufw를 모두 가지고 있습니다. 방화벽을 위해 두 가지 모두 구성해야 하나요?

아니요! iptables와 ufw는 동일한 주소 범위와 포트를 제어하는 방화벽 소프트웨어입니다. 리눅스 서버에서 작동하는 방화벽을 갖기 위해서는 둘 중 하나만 구성하면 됩니다.

제가 만든 사용자의 슈퍼유저 권한을 제거할 수 있나요?

네! 기존 사용자를 그룹에서 제거하는 것은 가능합니다. usermod 유틸리티를 사용하세요. 예를 들어, usermod -G video new-service를 실행하면 “new-service” 사용자가 “sudo” 그룹에서 제거되고 “video” 그룹에 추가됩니다.

이미지 출처: Unsplash. 모든 수정 및 스크린샷 제공: Ramces Red.