홈 서버 만들기 03. 우분투 서버 18.04 LTS 기본 설정

May 10, 2018Updated on December 8, 2018

우분투 서버를 설치했으면 컴퓨터를 시동하고 로그인을 하는데, 컴퓨터에 키보드와 모니터를 직접 연결해서 로그인해도 되고, 앞서 우분투 서버를 설치하는 과정에서 OpenSSH를 설치했으므로 SSH를 사용해서 원격에서 로그인해도 된다.

SSH로 서버에 접속

SSH는 원격의 시스템에 접속해서 명령을 실행할 수 있게 하는 암호화된 프로토콜이다. stn3g1윈도우 PC에서는 PuTTY라는 SSH 클라이언트 프로그램을 사용해서 접속하면 되고, Mac에서는 macOS에 내장된 터미널을 사용하면 된다.

SSH는 기본적으로 22번 포트를 사용한다. 가정에서 인터넷 공유기를 사용하고 있다면 공유기의 포트 포워딩 기능을 사용해서 TCP 22번 포트가 서버 컴퓨터로 향하도록 열어주어야 집 밖의 외부 네트워크에서 접속이 가능해진다. 그런데 이 fty31w22번 포트는 널리 알려진 포트라서 열어 놓을 경우 외부의 누군가가 무작위로 IP 주소를 대입해서 접속을 시도하는 일이 발생하곤 한다. 이런 무작위 접속 시도를 피하려면 인터넷 공유기에서 포트 포워딩을 설정할 때 외부 22번 포트는 열지 말고, 다른 임의의 숫자의 외부 포트를 열어서 이를 내부 22번 포트로 매핑하고, 이 내부 22번 포트가 서버 컴퓨터로 향하도록 포워딩하는 것이 좋다.

PuTTY를 실행한 화면인데, 인터넷 공유기 하단의 내부 네트워크에서 (즉, 집안에서) 접속한다면 Host Name에 서버 컴퓨터의 내부(사설) IP 주소를 입력하고, Port에는 기본 포트 번호 22를 입력해서 접속하면 된다. 외부 네트워크에서 (즉, 집 밖에서) 접속한다면 Host Name에 서버 컴퓨터의 외부(공인) IP 주소를 입력하고, Port에는 22 또는 다른 포트 번호로 포워딩했다면 ug5ty그 포트 번호를 입력하고 접속하면 된다. 외부(공인) IP 주소에 도메인을 연결했다면 IP 주소 대신에 도메인을 넣어도 된다.

PuTTY로 처음 접속하면 새로운 서버에 대한 보안 관련 안내창이 나타나는데 OK를 누르면 된다. 서버에 로그인하는 화면이 나타나면 계정 이름과 비밀번호를 입력해서 로그인한다.

이런 CLI (Command Line Interface) 환경에서 작업하면 명령어 복사 & 붙여넣기를 자주 사용하게 되는데, PuTTY 화면의 내용을 마우스로 드래그하면 그 내용이 바로 클립보드에 복사된다. 또 PuTTY 화면에서nftn 마우스 오른쪽 클릭을 하면 클립보드의 내용이 바로 붙여 넣어진다. 이 설정은 PuTTY의 WindowsSelection 메뉴에서 변경할 수 있다.

macOS에서는 터미널을 열고 ssh 계정이름@서버ip -p포트번호 로 접속하면 된다.

root 슈퍼유저를 활성화할 것인가

우분투 서버 18.04 버전은 기본적으로 시스템의 모든 권한을 가진 root 슈퍼유저 계정이 잠겨있기 때문에 애초에 root 슈퍼유저 계정이 탈취될 위험이 없다. 그리고 우분투 서버를 설치하는 과정에서 생성하는 사용자는 슈퍼유저의 권한을 빌려올 수 있는 sudo 그룹에 기본적으로 포함되므로 sudo 명령어를 f31sr사용해서 슈퍼유저 권한이 필요한 일들을 수행할 수 있다. 따라서 root 슈퍼유저 계정은 그대로 잠겨 있어도 서버를 운영하는 데에 별다른 문제는 없다. 그럼에도 불구하고 root 슈퍼유저 계정을 활성화해야 한다면 sudo passwd root 명령어로 root 슈퍼유저 계정의 비밀번호를 생성하면 활성화된다. 활성화한 root 슈퍼유저 계정을 다시 잠그고 싶다면 sudo passwd -dl root 명령을 실행하면 된다. 다만 우분투 서버 18.04 버전에 d3t1b5f포함된 OpenSSH 7.6 버전은 SSH로 접속할 때 root 슈퍼유저 계정의 비밀번호 로그인 방식을 차단하는 것이 기본값이기 때문에 SSH를 통해서 로그인하려면 이 설정을 변경하거나 인증키 방식으로 로그인해야 한다.

소프트웨어 패키지 업그레이드

sudo apt-get update
sudo apt-get upgrade

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

참고로, 리눅스의 소프트웨어 패키지 중에는 여러 패키지가 서로 의존하는 경우가 있어서 하나의 패키지가 작동하려면 다른 패키지가 함께 설치되어야 하는 경우가 있다. 앞에서 사용한 sudo apt-get upgrade 명령은 서로 의존하는 패키지가 서로 필요로 하는 버전으로 업데이트된 경우에만 업그레이드하고, 그렇지 않으면 업그레이드하지 않는다. 또 업그레이드 이후에 새롭게 의존하게 된 다른 패키지를 추가로 설치하지도 않고, 더 이상 의존하지 않게 된 다른 패키지를 삭제하지도 않는다. 반면에 의존성을 13btysfbg지능적으로 검사해서 추가로 필요한 패키지를 설치하고, 만약 의존성 충돌이 생길 경우 덜 중요한 패키지를 삭제까지 하는 업그레이드는 sudo apt-get dist-upgrade 명령을 사용한다.

SSH 접속 보안 설정

SSH는 외부에서 서버에 접속하는 통로이므로 특정 사용자만 접속할 수 있도록 설정해서 보안을 강화한다.

sudo nano /etc/ssh/sshd_config

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

AllowUsers varins

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

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

sudo systemctl reload sshd

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

방화벽 설정

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

sudo ufw disable

ufw를 끈다.

sudo apt-get update
sudo apt-get install iptables-persistent

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

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -Z
sudo iptables -F
sudo iptables -X

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

sudo iptables -S

-S는 iptables에 설정된 내용을 출력한다. iptables가 초기화되었다면
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
라고 출력될 것이다.

sudo netfilter-persistent save
sudo netfilter-persistent reload

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

sudo iptables -A INPUT -i lo -j ACCEPT

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

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

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

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

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

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

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

sudo iptables -S

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

sudo netfilter-persistent save
sudo netfilter-persistent reload

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

이제 우분투 서버의 기본적인 설정이 끝났다.

 

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

 

홈 서버 만들기 목차 
https://varins.com/category/server

01. 하드웨어 구성과 전기 요금
02. 우분투 서버 18.04 LTS 설치
03. 우분투 서버 18.04 LTS 기본 설정
04. 파일 복원: Btrfs 스냅샷
05. 네트워크 파일 공유: Samba (SMB)
06. Dynamic DNS: 구글 도메인 + ddclient
07. SSL/TLS 인증서: Let's Encrypt (Wildcard)
08. 웹 서버: Nginx, 서버 블록, https 보안연결
09. 웹사이트: php + MariaDB + WordPress
10. 서버 모니터링: Monitorix + Nginx Proxy
11. FTPS: vsftpd
12. VPN: IKEv2 (strongSwan)
13. Torrent: Transmission
14. 클라우드 스토리지: Nextcloud (Nginx, MariaDB)
15. 온라인 오피스: 온리오피스 (Docker, Nginx)
16. 트랜스코딩: Plex
17. VNC RDP 클라이언트: Guacamole (Docker, Nginx)
18. 가상 머신: QEMU-KVM + libvirt + virt-install
19. 시스템 업그레이드: i3 8300T, 970 EVO 전력 사용량
20. 서버 모니터링: netdata + Nginx Proxy
21. Dynamic DNS: CloudFlare + ddclient
22. SSL/TLS 인증서: Let's Encrypt + CloudFlare (Wildcard + 자동갱신)

Comments (2)

  • Moony

    September 5, 2018 at 8:21 am

    ERROR: problem running ufw-init
    iptables v1.6.0: can’t initialize iptables table `filter’: Table does not exist (do you need to insmod?)
    Perhaps iptables or your kernel needs to be upgraded.
    iptables v1.6.0: can’t initialize iptables table `filter’: Table does not exist (do you need to insmod?)
    Perhaps iptables or your kernel needs to be upgraded.
    iptables v1.6.0: can’t initialize iptables table `filter’: Table does not exist (do you need to insmod?)
    Perhaps iptables or your kernel needs to be upgraded.

    sudo ufw disable 실행 시 위와 같은 오류가 생기는데 관련 자료를 찾기가 어렵네요 혹시 알고 계신 내용이 있을까요?

    1. Varins

      December 9, 2018 at 2:12 am

      에러 메시지에 Perhaps iptables or your kernel needs to be upgraded. 라고 나와있으니 업그레이드를 한 번 진행해보세요.

Leave a comment

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

Prev Post Next Post