우수한 소프트웨어와 실용적인 튜토리얼
Ubuntu 서버 구성 방법, 보안 구성을 위한 초보자 가이드
Ubuntu 서버를 처음 사용하는 경우, 기본 보안 구성만으로도 일반적인 네트워크 위협으로부터 시스템을 보호하는 데 도움이 될 수 있습니다. 보안 구성에는 기본 SSH 포트 변경, 로그인 사용자 제한, 방화벽 규칙 설정, 시스템 패치 정기 업데이트, Fail2Ban과 같은 보안 도구 활성화 등이 포함됩니다. 이러한 기본적인 조치는 서버 무차별 대입 공격 및 무단 접근 위험을 줄일 뿐만 아니라 서버의 견고한 보안 기반을 구축하는 데에도 도움이 됩니다.
네트워크 보안은 매우 중요합니다. 특히 초보자가 보안 설정을 전혀 하지 않고 운영 체제를 설치하는 경우, 해커에게 문을 열어주는 것과 같기 때문에 더욱 그렇습니다.
Ubuntu의 기본 운영 체제 설정만으로는 서버 보안을 보장하기에 충분하지 않습니다. 이 글에서는 Ubuntu 22.04에서 서버 보안을 강화하기 위해 보안을 구성하는 방법을 설명합니다.
루트 사용자로 전환
SSH 터미널에서 다음 명령을 입력하여 루트 사용자로 전환합니다.
sudo -i
사용자 비밀번호를 입력한 후 root 계정에 접속하여 다음 명령을 입력하여 root 비밀번호를 설정합니다.
sudo passwd root
시스템을 업데이트하세요
시스템을 설치한 후 첫 번째 단계는 시스템을 업데이트하여 시스템의 소프트웨어를 최신 상태로 유지하는 것입니다.
sudo apt update && sudo apt upgrade -y
시스템을 최신 상태로 유지하려면 자동 업데이트를 활성화하세요.
sudo apt install 무인 업그레이드
sudo dpkg-reconfigure --priority=low 무인 업그레이드
최신 보안 패치를 설치하세요
sudo apt autoremove -y
정기적인 업데이트 및 패치 관리: Ubuntu 시스템과 설치된 모든 패키지를 정기적으로 업데이트하여 보안 패치가 적시에 적용되도록 합니다.
이러한 메시지는 일반적으로 시스템 업데이트 또는 보안 검사 보고서에 나타나며, 시스템 상태가 양호함을 나타냅니다. 구체적인 의미는 다음과 같습니다.
- 다시 시작할 필요가 있는 컨테이너가 없습니다. 현재 다시 시작할 필요가 있는 컨테이너가 없습니다. 즉, 모든 컨테이너가 최신 코드나 구성을 실행하고 있음을 나타냅니다.
- 어떤 사용자 세션도 오래된 바이너리를 실행하지 않습니다. 어떤 사용자 세션도 오래된 바이너리를 실행하지 않으므로 사용자가 최신 프로그램을 사용하고 보안 취약점을 피할 수 있습니다.
- 이 호스트에는 오래된 하이퍼바이저(qemu) 바이너리를 실행하는 VM 게스트가 없습니다. VM 게스트가 오래된 QEMU(하이퍼바이저) 바이너리를 사용하지 않으므로 가상화 환경의 보안이 보장됩니다.
전반적으로 이는 시스템의 컨테이너, 사용자 세션 및 가상 머신이 업데이트되었으며 재시작이나 추가 작업이 필요하지 않음을 나타내며, 이는 "정상적인" 메시지입니다.
중국어 언어 팩 설치
중국어 언어 팩은 그래픽 인터페이스나 명령줄을 통해 설치할 수 있습니다.
명령줄을 통해:
패키지 목록을 업데이트하고 언어 팩을 설치하세요.
sudo apt 업데이트
sudo apt install 언어팩-zh-hans -y
설치가 완료되면 시스템의 로캘을 설정합니다.
sudo 업데이트-로케일 LANG=zh_CN.UTF-8
새로운 언어 설정을 적용하려면 시스템을 다시 시작하거나 로그아웃하세요.
시간대 조정
시간대는 명령줄이나 그래픽 인터페이스를 통해 변경할 수 있습니다.
예를 들어 시간대를 중국 표준시(아시아/상하이)로 설정하려면 다음과 같이 시간대를 설정합니다.
sudo timedatectl set-timezone Asia/Shanghai
스왑 파일 설정(선택 사항)
시스템 메모리가 작으면 스왑 파일을 만들면 시스템 성능을 향상시킬 수 있습니다.
sudo fallocate -l 2G /swapfile
sudo chmod 600 /스왑파일
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
기본 툴킷 설치
일반적으로 사용되는 툴킷과 개발 도구를 설치합니다.
sudo apt install -y build-essential curl wget git vim unzip htop
네트워크 도구, 네트워크 디버깅 및 관리 도구를 설치합니다.
sudo apt install -y net-tools dnsutils traceroute telnet nload
Python과 도구를 설치하세요. Python은 널리 사용되는 스크립팅 언어이며, 많은 애플리케이션이 Python을 사용합니다.
sudo apt install -y python3 python3-pip python3-venv
Node.js와 npm을 설치하세요. Node.js는 서버 측 JavaScript 런타임 환경이고, npm은 Node.js의 패키지 관리자입니다.
sudo apt install -y nodejs npm
Snap을 설치하고 더 많은 애플리케이션을 설치하세요. Snap은 Ubuntu의 패키지 관리자로, 다양한 애플리케이션을 설치하는 데 사용할 수 있습니다.
sudo apt install -y snapd
개발 관련 도구를 설치하세요. Java의 경우 OpenJDK(예: OpenJDK 11 또는 17)를 설치하세요.
sudo apt install -y openjdk-17-jdk
C/C++ 개발을 위해 build-essential 외에도 몇 가지 일반적인 라이브러리와 도구를 설치하세요.
sudo apt install -y cmake gdb
이미지 처리 도구와 몇 가지 일반적인 이미지 처리 및 변환 도구를 설치합니다.
sudo apt install -y imagemagick ffmpeg
텍스트 처리 도구를 설치합니다. 일반적으로 사용되는 텍스트 처리 도구를 설치합니다.
sudo apt install -y jq silversearcher-ag 트리
다음 명령을 사용하면 더 이상 필요하지 않은 설치 패키지와 종속성을 정리할 수 있습니다.
sudo apt autoremove -y
sudo apt autoclean
다양한 요구 사항에 따라 설치를 선택하세요. 이러한 작업을 완료하면 시스템은 일반적인 개발, 운영 및 유지 관리 환경에 필요한 도구를 갖추게 됩니다.
여러 개의 IP 주소 추가
IP 구성 파일 보기
ls /etc/netplan/
IP 구성 파일 편집
vi /etc/netplan/50-cloud-init.yaml
새로운 프로필을 적용하세요
sudo netplan 적용
포트 바인딩 IP 보기
ip a show eno1
하드 디스크를 확인하고 새 하드 디스크를 /home에 마운트합니다.
현재 디스크 상태 확인
수도 fdisk -l
parted를 사용하여 새 하드 드라이브를 분할합니다.
sudo parted /dev/sdb
sdb는 서버의 두 번째 하드 디스크입니다. 일반적으로 첫 번째 하드 디스크인 sda는 시스템 디스크로, sdb는 데이터 디스크로 사용됩니다.
SSH 보안 구성
Linux 서버에 대한 SSH 접속 보안을 강화하려면 /etc/ssh/sshd_config 파일을 구성하여 로그인 시도 횟수, 로그인 간격, 허용 또는 거부 사용자 수를 제한할 수 있습니다. 구체적인 단계는 다음과 같습니다.
로그인 시도 횟수와 로그인 실패 간격을 설정합니다.
/etc/ssh/sshd_config 파일을 편집합니다.
sudo vi /etc/ssh/sshd_config
MaxAuthTries 구성
MaxAuthTries: 이 매개변수는 연결이 끊어지는 최대 인증 시도 횟수를 설정하는 데 사용됩니다.
기본값은 일반적으로 6이며, 보안을 강화하려면 3 이하로 설정할 수 있습니다.
최대 인증 시도 횟수 3
DenyUsers 및 AllowUsers 지시문을 사용하여 사용자 액세스 제한
DenyUsers 지시문 구성
DenyUsers: SSH를 통해 로그인하는 것이 금지된 사용자 목록을 지정하는 데 사용됩니다.
형식: DenyUsers 사용자 이름 1 사용자 이름 2
예를 들어, testuser 및 guest 사용자가 SSH를 통해 로그인하는 것을 금지하려면 다음을 수행합니다.
DenyUsers 테스트 사용자 게스트
AllowUsers 지시문 구성
AllowUsers: SSH를 통해 로그인이 허용되는 사용자 목록을 지정하는 데 사용됩니다(이러한 사용자만 로그인이 허용됩니다).
형식: AllowUsers 사용자 이름 1 사용자 이름 2
예를 들어, 관리자만 SSH를 통해 로그인하도록 허용하려면 다음을 실행합니다.
AllowUsers 관리자 사용자
참고: AllowUsers와 DenyUsers는 혼용하여 사용할 수 없습니다. AllowUsers를 사용하면 목록에 있는 사용자만 로그인이 허용되며, DenyUsers에 없는 사용자는 로그인할 수 없습니다.
작업이 끝나면 파일을 저장하고 닫은 다음 SSH 서비스를 다시 시작하세요.
sudo systemctl restart sshd
Fail2Ban과 같은 도구를 사용하세요
Fail2Ban 설치
로그인 로그를 모니터링하고 여러 번 실패한 IP 주소를 자동으로 차단하여 보안을 더욱 강화하세요. Fail2Ban을 사용하면 IP 주소를 자동으로 차단할 수 있습니다.
Fail2Ban은 실패한 SSH 로그인 시도를 모니터링하고 반복적으로 실패한 IP 주소를 자동으로 차단하는 매우 효과적인 도구입니다. Fail2Ban을 설치하고 구성하면 유사한 지연 효과를 얻을 수 있습니다.
sudo apt install fail2ban
Fail2Ban 구성
/etc/fail2ban/jail.local 파일을 편집하세요
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
참고: jail.local이 존재하지 않으면 jail.conf 내용을 복사하여 jail.local을 생성할 수 있습니다.
sudo vi /etc/fail2ban/jail.local
SSH 모니터링을 설정하려면 SSHD 옵션에 다음을 추가하세요.
[sshd] 활성화 = true 포트 = ssh 최대 재시도 = 3 금지 시간 = 6000 찾기 시간 = 60
maxretry: 설정파인드타임 허용되는 최대 실패 횟수(초).
금지 시간: 금지 시간(초)을 설정합니다. 필요에 따라 늘릴 수 있습니다.
Fail2Ban 시작하기
구성 파일을 저장한 후 Fail2Ban 서비스를 다시 시작합니다.
sudo systemctl restart fail2ban
구성이 효과적인지 확인하세요
sudo fail2ban-client 상태
다음과 같이 표시되면 구성이 성공한 것을 의미합니다.
상태 |- 감옥 수: 1 `- 감옥 목록: sshd
/etc/ssh/sshd_config를 구성하고, MaxAuthTries, DenyUsers, AllowUsers 매개변수를 설정하고, Fail2Ban을 설치하면 SSH 로그인 시도 횟수와 허용 사용자를 효과적으로 제한할 수 있어 무차별 대입 공격의 위험을 줄일 수 있습니다.
Fail2Ban 구성완료 후에는 서버를 무차별 대입 공격으로부터 효과적으로 보호할 수 있습니다. 또한, 특정 요구 사항에 따라 더 많은 감옥(Jack)이나 사용자 지정 규칙을 활성화할 수도 있습니다.
루트 사용자를 사용하지 않고 SSH 로그인
보안을 강화하려면 루트 사용자로 서버에 직접 로그인하는 대신, sudo 권한을 가진 일반 사용자를 생성하여 관리자 작업을 수행하는 것이 좋습니다. 설정 및 구성 과정은 다음과 같습니다.
새 사용자 만들기
다음 명령을 사용하여 새 사용자를 만들고 sudo 권한을 부여합니다.
sudo adduser 새 사용자 이름
sudo usermod -aG sudo 새 사용자 이름
명령을 실행한 후 다음을 확인하세요.새로운 사용자 이름sudo 그룹에 추가되었습니다:
그룹 새 사용자 이름
명령으로 반환된 그룹 목록에 sudo가 포함되어 있으면 추가가 성공한 것입니다.
다시 로그인: 사용자의 그룹 정보는 세션 시작 시 로드되므로 변경 사항을 적용하려면 로그아웃했다가 다시 로그인해야 합니다.
일부 시스템에서는 sudo 그룹이 활성화되어 있지 않거나 /etc/sudoers 파일이 올바르게 구성되지 않았을 수 있습니다.
다음 명령을 사용하여 sudoers 파일 구성을 확인하세요.
수도 비수도
파일에 다음 줄이 포함되어 있는지 확인하세요.
%sudo ALL=(ALL:ALL) ALL
파일 끝에 다음 줄을 추가합니다.
새로운 사용자 이름 ALL=(ALL) ALL
이렇게 하면 새로운 사용자 이름에 sudo 권한이 부여됩니다.
루트 사용자에 대한 SSH 로그인 비활성화
루트 사용자의 SSH 접근을 비활성화하면 서버 보안을 더욱 강화할 수 있습니다. SSH 설정 파일 /etc/ssh/sshd_config를 다음과 같이 편집하세요.
sudo vi /etc/ssh/sshd_config
다음 줄을 찾으세요.
#PermitRootLogin 금지 암호
수정됨:
PermitRootLogin 번호
파일을 저장하고 닫은 다음, SSH 서비스를 다시 시작하여 변경 사항을 적용하세요.
sudo systemctl restart sshd
루트 비밀번호 변경
루트로 로그인한 후 passwd 명령을 사용하여 루트 비밀번호를 더 복잡한 비밀번호로 변경합니다.
키를 사용한 SSH 로그인
SSH 키 쌍을 사용하여 로그인하는 것은 무차별 대입 공격을 효과적으로 방지하는 안전하고 편리한 방법입니다. 키 쌍을 생성하고, 공개 키를 업로드하고, 비밀번호 로그인을 비활성화하도록 SSH 서버를 구성하는 방법에 대한 자세한 단계는 다음과 같습니다.
SSH 키 쌍 생성
로컬 컴퓨터에서 터미널을 열고 다음 명령을 실행하세요.
ssh-keygen -t rsa -b 4096
이렇게 하면 RSA 키 쌍(공개 키와 개인 키)이 생성됩니다.
파일 이름과 비밀번호를 입력하라는 메시지가 표시됩니다.
파일 이름: Enter를 눌러 기본 파일 이름(보통 ~/.ssh/id_rsa)을 사용할 수 있습니다.
비밀번호: 보안을 강화하기 위해 비밀번호를 설정하거나 비워둘 수 있습니다.
생성된 키 쌍은 다음 경로에 저장됩니다.
개인 키: ~/.ssh/id_rsa
공개 키: ~/.ssh/id_rsa.pub
서버에 수동으로 로그인하고 ~/.ssh/authorized_keys 파일을 열고(또는 만들고) 공개 키 ~/.ssh/id_rsa.pub를 붙여넣습니다.
vi ~/.ssh/authorized_keys
권한 설정
~/.ssh 디렉토리와 authorized_keys 파일에 대한 권한이 올바르게 설정되었는지 확인하세요.
.ssh 디렉토리는 700으로 설정해야 합니다.
chmod 700 /root/.ssh
authorized_keys 파일은 600으로 설정해야 합니다.
chmod 600 /root/.ssh/authorized_keys
SSH 서버 구성
SSH 구성 파일을 엽니다.
sudo vi /etc/ssh/sshd_config
다음 구성 항목이 설정되어 있는지 확인하세요.
공개 키 인증 예
비밀번호 인증 번호
구성 변경 사항을 적용하려면 SSH 서비스를 다시 시작하세요.
sudo systemctl restart sshd
메모리 사용량 보기
메모리 사용량은 서버 보안의 중요한 지표이기도 합니다. free, top, htop 등의 명령어를 사용하여 현재 서버의 메모리 사용량을 확인하여 악성 프로세스가 메모리 리소스를 과도하게 점유하지 않도록 할 수 있습니다.
방화벽을 설치하세요
바이러스 방화벽
Ubuntu에서는 몇 가지 인기 있는 바이러스 백신 소프트웨어를 사용하여 시스템을 보호할 수 있습니다. ClamAV는 Linux 시스템에서 널리 사용되는 오픈 소스 바이러스 검사 프로그램입니다.
ClamAV는 맬웨어 탐지 및 제거에 적합한 오픈 소스 바이러스 백신 소프트웨어입니다. 다음은 Ubuntu 시스템에 ClamAV를 설치하고 구성하는 자세한 단계입니다.
ClamAV 설치:
APT 패키지 관리자를 사용하여 ClamAV 및 clamav-daemon(실시간 스캐닝 지원 제공)을 설치합니다.
sudo apt install clamav clamav-daemon -y
설치가 성공적으로 완료되었는지 확인하세요
clamscan --버전
바이러스 데이터베이스 업데이트:
바이러스 데이터베이스를 업데이트하기 전에 ClamAV를 중지하세요.
sudo systemctl stop clamav-freshclam
수도 프레쉬클램
업데이트가 완료되면 서비스를 시작합니다.
sudo systemctl start clamav-daemon
sudo systemctl start clamav-freshclam
전체 시스템 검사를 수행하려면:
sudo clamscan -r /
자동 검사(Cron 작업을 설정하여 정기적으로 검사할 수 있습니다). Cron 작업을 편집하여 ClamAV 검사를 정기적으로 실행할 수 있습니다.
ClamAV 데몬인 clamav-daemon을 구성하여 실시간 스캐닝 지원을 제공하세요. 서비스가 시작되었는지 확인하세요.
sudo systemctl enable clamav-daemon
sudo systemctl start clamav-daemon
바이러스 데이터베이스 자동 업데이트
sudo systemctl enable clamav-freshclam
sudo systemctl start clamav-freshclam
구성 파일을 수정하세요
vi /etc/clamav/freshclam.conf
다음 줄을 수정하여 매시간 업데이트합니다.
체크 24
정기 검사 예약
cron을 사용하여 정기적인 검사를 예약할 수 있습니다. crontab을 다음과 같이 편집하세요.
sudo crontab -e
매일 오전 2시에 /home 디렉터리를 스캔하려면 다음 줄을 추가하세요.
0 2 * * * 클램스캔 -r /홈
시스템 방화벽
UFW(Uncomplicated Firewall)는 우분투에서 널리 사용되는 방화벽 도구입니다. 간단하고 사용하기 쉬우며, 초보자와 숙련자 모두에게 적합합니다.
UFW 설치:
sudo apt install ufw
UFW 활성화:
sudo ufw 활성화
SSH 액세스 허용(방화벽을 활성화하기 전에 원격 액세스가 가능한지 확인하세요):
sudo ufw ssh 허용
다른 포트(예: HTTP 및 HTTPS)의 액세스를 허용합니다.
sudo ufw allow 80/tcp # HTTP 허용
sudo ufw allow 443/tcp # HTTPS 허용
UFW 상태 확인:
sudo ufw status verbose
UFW 비활성화:
sudo ufw 비활성화
요약하다
현대적인 네트워크 환경에서는 Ubuntu 서버의 보안을 유지하는 것이 필수적입니다. 무엇보다도 시스템 및 소프트웨어 패키지를 정기적으로 업데이트하여 최신 보안 패치를 적용하는 것이 잠재적인 취약점을 예방하는 기본적인 조치입니다. 또한, SSH 키를 사용하여 로그인하고 비밀번호 인증을 비활성화하여 원격 액세스 보안을 강화하는 것이 좋습니다. UFW 방화벽을 구성하면 불필요한 서비스에 대한 접근을 효과적으로 제한할 수 있습니다. 또한, ClamAV와 같은 바이러스 백신 소프트웨어를 정기적으로 설치 및 업데이트하고 시스템 로그를 모니터링하면 보안 위협을 적시에 탐지하고 대응하는 데 도움이 됩니다. 이러한 포괄적인 조치를 통해 Ubuntu 사용자는 시스템을 공격으로부터 효과적으로 보호하고 데이터 보안 및 안정성을 확보할 수 있습니다.
CSF 방화벽(ConfigServer Security & Firewall) 설치
Ubuntu에 CSF를 설치하고 기본 구성을 활성화하려면 다음 단계를 따르세요.
# 종속성 설치 sudo apt update sudo apt install -y perl libwww-perl liblwp-protocol-https-perl # CSF 다운로드 wget https://download.configserver.com/csf.tgz tar -xzf csf.tgz cd csf # 설치 스크립트 실행 sudo bash install.sh # 서버가 CSF와 호환되는지 확인 sudo perl /usr/local/csf/bin/csftest.pl
공식 설치 스크립트가 업그레이드되었습니다. csf 설치 후 500 오류가 발생하는 경우, 공식 업그레이드 스크립트만 사용하여 업그레이드하고 설치하면 됩니다.
쉿 <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/preUpgrade.sh || wget -O - https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/preUpgrade.sh)