우분투 서버 기본 설정

July 1, 2019
    우분투 서버를 설치한 다음에는 기본적인 보안 및 방화벽 설정을 먼저 진행한다.

    관리자 권한

    리눅스 시스템의 모든 권한을 가진 사용자는 root이고, root의 권한을 행사할 수 있는 그룹은 sudo 그룹이다. 우분투 서버에서는 기본적으로 root 계정이 잠겨있다. 우분투 서버를 설치하는 과정에서 생성하는 사용자는 sudo 그룹에 포함되므로 root 권한이 필요한 작업은 명령어 앞에 sudo 명령을 추가해서 실행할 수 있다.

    패키지 업그레이드

    sudo apt update
    sudo apt upgrade
    

    리눅스는 설치한 소프트웨어를 개별적으로 하나씩 업그레이드하는 것이 아니라 각종 소프트웨어가 모여있는 ‘패키지 저장소’를 통해서 한 번에 업그레이드하는 방식을 사용한다. sudo apt update 명령으로 패키지 저장소에 있는 최신 소프트웨어 목록을 확인한 다음에, sudo apt upgrade 명령으로 업그레이드한다. 중간에 설치를 계속하겠냐는 질문이 나오면 y를 입력해서 설치한다. 서버 컴퓨터를 재시작할 필요가 있는 경우에는 sudo reboot 명령으로 서버를 재부팅 해준다.

    참고로, 리눅스의 소프트웨어 패키지 중에는 여러 패키지가 서로 의존하는 경우가 있어서 하나의 패키지가 작동하려면 다른 패키지가 함께 설치되어야 하는 경우가 있다. 앞에서 사용한 sudo apt upgrade 명령은 의존 관계에 따라 새로운 패키지를 설치해야 하는 경우에는 업그레이드 하지만, 반대로 의존 관계에 따라 현재 설치되어 있는 패키지를 제거해야 하는 경우에는 업그레이드하지 않는다. 패키지를 제거하더라도 모든 패키지를 업그레이드 하려면 sudo apt full-upgrade 명령을 사용한다.

    SSH 사용자 제한

    서버 보안을 위해서 특정 사용자만 SSH를 통해 서버에 접속할 수 있도록 설정한다.

    sudo nano /etc/ssh/sshd_config

    SSH 설정 파일인 sshd_config 파일을 nano 편집기로 연다.

    AllowUsers varins

    이 항목을 sshd_config 파일에 추가하면 우분투 서버의 여러 사용자 중에서 varins 사용자만 SSH 접속이 가능해진다. varins를 자신의 사용자명으로 바꿔서 추가한다. 여러 사용자를 추가하려면 AllowUsers 사용자명1 사용자명2 형태로 작성한다. 반대로 특정 사용자만 접속하지 못 하도록 설정하려면 DenyUsers 사용자명1 사용자명2 형태로 작성한다. 파일의 어느 부분에 추가하든 상관이 없는데 기억하기 쉽게 파일의 끝부분에 추가하면 된다.

    이제 nano 편집기에서 빠져나오기 위해서 Ctrl키와 x키를 동시에 누르면 수정한 내용을 저장하겠냐고 물어오는데, y를 입력하고, 저장할 위치를 물어오면 표시된 위치에 그대로 엔터키를 눌러서 저장한다.

    sudo systemctl reload sshd

    변경 사항을 적용하기 위해서 SSH를 리로드한다.

    방화벽 설정

    서버 보안을 위해서 방화벽을 설정한다. 우분투 서버는 ufw라는 편리한 방화벽 설정 방법을 제공하는데, 이 ufw는 사실 리눅스의 기본 방화벽인 iptables에 규칙을 만들어 주는 역할에 불과하다. ufw를 사용하기보다는 iptables를 직접 다루는 것이 더 강력하므로 ufw를 끄고 iptables를 직접 설정한다.

    sudo ufw disable

    ufw를 끈다.

    sudo apt update
    sudo apt install iptables-persistent
    

    iptables는 서버 컴퓨터를 재시작하면 설정했던 내용이 초기화되는데, 초기화되지 않고 계속 저장되어 있게 하려면 iptables-persistent를 설치하는 것이 편리하다. sudo apt update 명령으로 먼저 패키지 저장소 정보를 업데이트한 다음에 sudo apt install 명령으로 설치한다. 설치 과정 중에 현재의 IPv4 규칙과 IPv6 규칙을 저장하겠냐고 물어오면 Yes를 선택하면 되는데, 사실 우분투 서버를 처음 설치한 직후의 상태에서는 설정된 규칙이 없고 또 다음 단계에서 한 번 초기화할 것이므로 Yes 또는 No 아무것이나 선택해도 무방하다.

    sudo iptables -F
    sudo iptables -X
    sudo iptables -t nat -F
    sudo iptables -t nat -X
    sudo iptables -t mangle -F
    sudo iptables -t mangle -X
    sudo iptables -P INPUT ACCEPT
    sudo iptables -P FORWARD ACCEPT
    sudo iptables -P OUTPUT ACCEPT
    

    iptables 방화벽 규칙을 생성하기에 앞서 iptables를 초기화한다. -F는 각 체인 안에 설정된 모든 규칙을 삭제한다. -X는 기본 체인을 제외한 모든 체인을 삭제한다. -P는 기본 정책을 설정하는 옵션으로, 세 가지 기본 정책 INPUT, FORWARD, OUTPUT을 모두 허용함 (ACCEPT) 으로 초기화한다.

    sudo iptables -S
    sudo iptables -t nat -S
    sudo iptables -t mangle -S
    

    -S 옵션으로 설정한 내용을 확인해본다.

    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    

    초기화한 iptables를 저장하고 리로드 한다.

    sudo iptables -A INPUT -i lo -j ACCEPT

    localhost 접속을 허용하는 규칙을 생성한다. -A는 규칙을 생성하는 옵션이고, 만약에 규칙을 삭제하려면 -A-D로 바꿔서 입력하면 된다.

    sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

    related와 established 패킷의 접속을 허용하는 규칙을 생성한다.

    sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

    SSH가 사용하는 TCP 22번 포트를 허용하는 규칙을 생성한다.

    sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT
    
    sudo iptables -A INPUT -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACCEPT
    

    만일 특정 IP 주소에서만 TCP 22번 포트 접속을 허용하려면, -D 옵션으로 기존의 IP주소 지정이 없는 규칙을 삭제하고, -s 허용할 IP주소를 추가한 규칙을 생성한다. 개별 IP 주소 뿐만 아니라 123.123.123.0/24 등의 형식으로 IP주소 대역을 지정할 수도 있다.

    sudo iptables -P INPUT DROP
    sudo iptables -P FORWARD DROP
    sudo iptables -P OUTPUT ACCEPT
    

    기본 정책(-P)을 INPUT 차단 (DROP), FORWARD 차단 (DROP), OUTPUT 허용 (ACCEPT) 으로 바꾼다. 이제 앞서 생성한 규칙의 접근만 허용되고 다른 접근은 모두 차단된다.

    sudo iptables -S

    설정한 내용을 확인해본다.

    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    

    설정한 iptables 내용을 저장하고 리로드한다.

     

    본 글의 저작권은 작성자 Varins에게 있습니다.
    Varins의 사전 서면 동의 없이는 본 글의 전부 또는 일부를 무단으로 전재, 게시, 배포하는 것을 금지합니다.
    

Leave a comment

댓글은 관리자의 승인 이후에 게시됩니다.