> ## Content Index
> Fetch the complete content index at: https://appsworld.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# Ubuntu 서버 기본 설정 매뉴얼
- URL: https://appsworld.kr/ubuntu-seobeo-gibon-seoljeong-maenyueol/
- Published: 2026-10-14T07:14:25.000Z
- Updated: 2026-10-14T07:14:25.000Z
- Author: Nullull

Ubuntu 24.04 서버를 준비하고 SSH, 방화벽, Nginx, HTTPS를 설정하는 절차입니다. FTP 서버 설정은 필요한 경우에만 진행합니다.

## 1\. 사전 확인

- 클라우드 콘솔에서 서버의 공인 IP와 SSH 키를 확인합니다.
- 클라우드 방화벽/보안 목록에서 사용할 포트를 허용할 수 있는지 확인합니다. 서버 내부 방화벽과 클라우드 방화벽은 별도로 관리됩니다.
- 아래 명령의 `<서버_IP>`, `<키_파일>` 및 도메인을 실제 환경에 맞게 바꿉니다.
- SSH 설정이나 방화벽을 변경하기 전 현재 SSH 세션을 유지하고, 가능하면 클라우드 콘솔 접속 수단도 준비합니다.

## 2\. 최초 접속 및 시스템 업데이트

로컬 컴퓨터에서 SSH 키를 이용해 접속합니다.

```bash
ssh -i <키_파일> ubuntu@<서버_IP>

```

서버에서 패키지 목록과 설치 패키지를 갱신하고 기본 도구를 설치합니다.

```bash
sudo apt update
sudo apt upgrade -y
sudo apt install -y vim net-tools

```

`net-tools`는 `ifconfig` 등 구형 네트워크 명령이 필요한 경우에만 설치하면 됩니다. 최신 Ubuntu에서는 `ip` 명령 사용을 권장합니다.

## 3\. SSH 포트 변경 (선택)

SSH 포트 변경은 무단 접속 시도를 줄이는 보조 조치이며, 인증 키 사용을 대체하지 않습니다. SSH 설정을 바꾸기 전에 새 포트를 클라우드 방화벽과 서버 방화벽에서 먼저 허용합니다.

SSH 설정 파일을 엽니다.

```bash
sudoedit /etc/ssh/sshd_config

```

파일에서 기존 `Port` 항목을 확인한 뒤 다음처럼 설정합니다. `sshd_config` 문법은 `Port=2022`가 아니라 공백을 사용하는 `Port 2022`입니다.

```text
Port 2022

```

문법을 확인한 다음 SSH 서비스를 재시작합니다.

```bash
sudo sshd -t
sudo systemctl restart ssh
sudo systemctl status ssh --no-pager

```

현재 세션을 닫기 전에 새 터미널에서 새 포트로 접속되는지 확인합니다.

```bash
ssh -i <키_파일> -p 2022 ubuntu@<서버_IP>

```

새 연결이 확인된 뒤에만 기존 포트 허용 규칙을 정리합니다. SSH 포트 변경이 필요 없다면 기본 포트 22를 유지해도 됩니다.

## 4\. 방화벽 및 포트

원본 메모는 `iptables`를 사용합니다. 규칙은 `INPUT` 체인의 기존 `REJECT` 규칙보다 앞에 있어야 하며, 서버에 따라 기본 규칙과 번호가 다를 수 있으므로 먼저 현재 규칙을 확인합니다.

```bash
sudo iptables -L INPUT -v -n --line-numbers

```

예를 들어 SSH를 2022번으로 변경했고 웹 서버를 운영한다면 필요한 포트만 허용합니다. 다음은 `REJECT` 앞에 규칙을 삽입하는 예입니다. 적용 위치가 환경의 기존 규칙과 맞는지 확인하십시오.

```bash
sudo iptables -I INPUT 5 -p tcp --dport 2022 -j ACCEPT
sudo iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT

```

MySQL과 FTP 포트는 원격 사용이 꼭 필요한 경우에만 별도로 허용합니다. MySQL은 가능하면 허용 대상 IP를 제한하고, 전체 인터넷에 포트를 공개하지 마십시오.

규칙을 다시 확인하고 영구 저장 패키지를 설치·저장합니다.

```bash
sudo iptables -L INPUT -v -n --line-numbers
sudo apt install -y iptables-persistent
sudo netfilter-persistent save

```

저장된 IPv4 규칙을 복원하는 예:

```bash
sudo iptables-restore < /etc/iptables/rules.v4

```

`iptables -F`는 현재 방화벽 규칙을 모두 지우므로 원격 서버에서 실행하면 접근 제어가 의도와 다르게 바뀔 수 있습니다. 규칙 초기화 목적으로 무심코 실행하지 마십시오.

## 5\. Nginx 설치 및 확인

```bash
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx --no-pager

```

브라우저에서 `http://<도메인>` 또는 `http://<서버_IP>`로 접속해 기본 응답을 확인합니다. 도메인을 사용할 경우 DNS의 A/AAAA 레코드가 서버를 가리켜야 합니다.

Nginx 설정을 변경한 뒤에는 문법을 확인하고 설정을 다시 불러옵니다.

```bash
sudo nginx -t
sudo systemctl reload nginx

```

## 6\. HTTPS 인증서 발급

도메인이 서버를 가리키고 외부에서 TCP 80/443 포트에 접근할 수 있는지 확인합니다.

```bash
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d <도메인>

```

안내에 따라 이메일 주소와 서비스 약관 동의 여부를 입력합니다. 발급이 완료되면 `https://<도메인>`으로 접속합니다.

자동 갱신 점검:

```bash
sudo certbot renew --dry-run

```

실패하면 Certbot과 Nginx 로그, DNS, 방화벽의 80/443 포트 및 도메인 설정을 확인합니다.

## 7\. FTP 서버 설정 (선택)

FTP가 꼭 필요한 경우에만 진행합니다. FTP는 계정 정보가 평문으로 전송될 수 있으므로 가능하면 SSH 기반 SFTP를 사용하십시오. SFTP는 SSH 서비스가 제공하므로 보통 별도의 FTP 서버 설치가 필요 없습니다.

vsftpd 설치 및 서비스 활성화:

```bash
sudo apt install -y vsftpd
sudo systemctl enable --now vsftpd
sudo systemctl status vsftpd --no-pager

```

설정 파일을 편집합니다.

```bash
sudoedit /etc/vsftpd.conf

```

수동/수동형 FTP가 필요한 경우의 설정 예입니다. 포트는 SSH 포트와 겹치지 않도록 합니다.

```text
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50010

```

원본 메모의 `listen_port=2022`는 SSH를 2022번으로 설정한 경우 포트 충돌을 일으킵니다. FTP를 비표준 포트로 운영해야 한다면 SSH와 다른 포트를 선택하고, FTP 클라이언트 및 방화벽 설정도 일치시킵니다. 수동형 FTP 사용 시 TCP 21과 설정한 수동형 포트 범위를 클라우드·서버 방화벽 양쪽에 허용해야 합니다. NAT 환경에서는 공인 IP에 맞는 추가 설정이 필요할 수 있습니다.

설정 확인 및 재시작:

```bash
sudo systemctl restart vsftpd
sudo systemctl status vsftpd --no-pager

```

## 8\. 기본 점검 명령

```bash
sudo systemctl --failed
sudo journalctl -u nginx -n 50 --no-pager
sudo journalctl -u ssh -n 50 --no-pager
sudo ss -lntp

```

클라우드 방화벽, Ubuntu 방화벽, 서비스의 수신 포트, DNS가 모두 일치해야 외부에서 서비스에 연결할 수 있습니다.