홈서버 구축기#1

우분투 설치와 고급 보안 설정

Author: Han Damin
Tags: server ubuntu security ssh iptables
Published: 2024/09/08 15:00 Series: 홈서버 구축기

홈서버 구축기#1

우분투 설치하기

홈서버의 첫 걸음은 OS 설치다. 필자는 안정성과 커뮤니티 지원이 좋은 우분투 22.04 LTS를 선택했다.

  1. 우분투 ISO 다운로드: 우분투 공식 사이트에서 22.04 LTS 버전 ISO를 받는다.
  2. 부팅 USB 만들기: Rufus나 Etcher로 부팅 USB를 만든다.
  3. BIOS 설정: 서버로 쓸 컴퓨터의 BIOS에 들어가 부팅 순서를 USB 먼저로 바꾼다.
  4. 설치 시작: USB로 부팅하고 'Install Ubuntu Server'를 선택한다.
  5. 언어 및 키보드 설정: 편한 언어로 설정한다. 필자는 영어로 했다.
  6. 네트워크 설정: DHCP를 쓰거나 고정 IP를 설정한다.
  7. 저장소 설정: 전체 디스크를 사용할 건지, 파티션을 나눌 건지 선택한다.
  8. 계정 설정: 루트 계정과 일반 사용자 계정을 만든다.
  9. SSH 설정: OpenSSH server 설치를 선택한다.
  10. 설치 완료: 재부팅하고 USB를 제거한다.

이렇게 하면 기본적인 우분투 서버가 설치된다. 이제 보안 설정을 해보자.

고급 보안 설정

서버를 인터넷에 연결하기 전에 꼭 해야 할 보안 설정들이 있다. 필자는 이것들을 하나씩 적용해봤다.

1. 업데이트 및 업그레이드

가장 먼저 할 일은 시스템을 최신 상태로 만드는 거다.

sudo apt update
sudo apt upgrade -y

이 명령어들은 패키지 목록을 업데이트하고, 설치된 모든 패키지를 최신 버전으로 업그레이드한다. -y 옵션은 모든 질문에 자동으로 '예'라고 답하게 해준다.

2. SSH 보안 강화

SSH는 원격 접속의 기본이지만, 그만큼 공격 대상이 되기 쉽다.

sudo nano /etc/ssh/sshd_config

이 명령어로 SSH 설정 파일을 연다. nano는 간단한 텍스트 편집기다.

파일에서 다음 설정들을 변경하자:

  • PermitRootLogin no: 루트 계정으로 직접 로그인하는 걸 막는다.
  • PasswordAuthentication no: 비밀번호 인증을 비활성화하고 키 기반 인증만 허용한다.
  • Port 22222: SSH 포트를 기본값인 22에서 다른 번호로 바꾼다.

변경 후 SSH 서비스를 재시작한다:

sudo systemctl restart sshd

이 명령어는 SSH 데몬을 재시작해서 변경사항을 적용한다.

3. iptables 설정

iptables를 사용해 방화벽을 설정해보자.

# 기본 정책 설정
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

이 명령어들은 기본 정책을 설정한다. 들어오는 트래픽은 기본적으로 차단하고, 나가는 트래픽은 허용한다.

# 로컬호스트 통신 허용
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

이건 로컬호스트 내부 통신을 허용하는 규칙이다.

# 설정한 SSH 포트 허용
sudo iptables -A INPUT -p tcp --dport 22222 -j ACCEPT

이 규칙은 우리가 변경한 SSH 포트(22222)로의 접속을 허용한다.

# 설정 저장
sudo apt install iptables-persistent
sudo netfilter-persistent save

이 명령어들은 iptables 설정을 영구적으로 저장한다.

4. Fail2Ban 설치

Fail2Ban은 반복된 로그인 실패를 감지하고 해당 IP를 차단한다.

sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

이 명령어들로 Fail2Ban을 설치하고 설정 파일을 연다.

jail.local 파일에서 SSH 설정을 다음과 같이 수정한다:

[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

이 설정은 SSH에 대해 3번의 실패 시도 후 1시간(3600초) 동안 해당 IP를 차단한다.

설정 후 Fail2Ban을 재시작한다:

sudo systemctl restart fail2ban

5. 자동 업데이트 설정

보안 패치를 자동으로 적용하도록 설정하자.

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

6. 로그인 배너 설정

서버에 접속하려는 사람에게 경고 메시지를 보여주자.

sudo nano /etc/issue.net

파일에 다음과 같은 내용을 추가한다:

*******************************************************************
                            경고!
이 시스템은 권한이 있는 사용자만 접근할 수 있습니다.
모든 활동은 모니터링되고 기록됩니다.
무단 접근 시도는 법적 처벌을 받을 수 있습니다.
*******************************************************************

그리고 SSH 설정 파일을 수정한다:

sudo nano /etc/ssh/sshd_config

다음 줄을 추가 또는 수정한다:

Banner /etc/issue.net

SSH 서비스를 재시작한다:

sudo systemctl restart sshd

7. 파일 시스템 보안 강화

중요한 파일들의 권한을 제한하자.

sudo chmod 700 /etc/shadow
sudo chmod 700 /etc/gshadow
sudo chmod 644 /etc/group
sudo chmod 644 /etc/passwd

8. 네트워크 보안 강화

IP 스푸핑과 같은 공격을 방지하기 위해 커널 파라미터를 수정하자.

sudo nano /etc/sysctl.conf

다음 내용을 추가한다:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.all.accept_redirects=0
net.ipv6.conf.all.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv6.conf.all.accept_source_route=0

변경사항을 적용한다:

sudo sysctl -p

마치며

여기까지 따라오느라 고생 많으셨다. 필자도 이걸 처음 설정할 때는 머리가 좀 아팠다. 특히 iptables 부분은 아직도 완전히 이해했다고 말하기 어렵다. 하지만 이런 과정을 거치면서 조금씩 배워가는 게 홈서버의 매력이 아닐까?

솔직히 말하면, 이 정도만 해도 일반적인 공격은 막을 수 있을 거다. 하지만 보안은 끝이 없는 영역이라고 하더라. 필자도 앞으로 더 공부해 나가면서 서버를 계속 업데이트할 생각이다.

필자는 이 과정에서 수없이 삽질했다. 그래도 그 과정에서 배운 게 정말 많았다. 어차피 집에서 노는 서버니까, 망가뜨려도 다시 설치하면 그만이다. 이런 시행착오가 다 공부가 되는 거라고 생각한다.