새소식

Linux

[Linux] Ubuntu Server Security Setting

  • -

오늘은 우분투의 전체적인 보안설정을 정리해보았습니다.

 

Dependency

보통 보안설정을 하는경우는 리눅스를 막 설치할 때 하기 때문에 필요한 설치 파일들이 설치되어있지 않은 경우가 있습니다. 빠르게 설치하고 시작합니다.

sudo apt update
sudo apt upgrade
sudo apt install build-essential
sudo apt install gcc unzip curl perl python3-pip git
sudo apt install xtables-addons-common iptables-persistent libnet-cidr-lite-perl libtext-csv-perl

 

SSH root login 설정

 

먼저 ssh 설정을 vim으로 열어줍니다.

sudo vim /etc/ssh/sshd_config

 

리눅스의 취약점을 통해 ssh에 root로 접근하는 경우를 사전에 차단하기 위한 설정입니다. ssh의 config 파일에서 Port 번호와 PermitRootLogin 설정을 변경해 줍니다. (주석처리 되어있으니 #을 지우면 됩니다.) 저는 port 번호를 8000으로 변경했습니다.

Port <port>
PermitRootLogin no

 

위의 설정은  root의 ssh 접속을 아예 차단시키는 명령어 입니다. root 접속 시 비밀번호를 사용하는 접속은 차단하고 key를 통한 접속만 허용하고 싶다면  PermitRootLogin prohibit-password를 입력하시면 됩니다.

 

그 밑의 MaxAuthTries는 로그인 최대 재시도 횟수입니다. 이 이상 접속 시도시 강제로 세션이 종료되며 다시 로그인 시도를 해야 합니다. 자동으로 무작위 로그인 시도 시 대처할 수 있기 때문에 주석을 해제해 사용해주세요. 저는 3번까지 가능하게 설정했습니다.

MaxAuthTries 3

 

 

다음 명령어로 ssh를 재시작해주세요.

sudo service sshd restart

 

주기적인 접속 시도 로그 확인

사용하는 ip 이외에 계속해서 접속을 시도하는 ip를 확인할 수 있습니다. 접속을 실패한 ip와 성공한 ip를 주기적으로 확인합시다.

sudo last -f /var/log/btmp # 접속 실패 로그 확인
sudo last -f /var/log/wtmp # 접속 성공 로그 확인

 

Default 계정 삭제

default 계정은 우분투를 설치 했을 때 존재하는 기본 계정들로 비밀번호 등이 기본설정 그대로일 가능성이 있어 보안에 취약합니다. 웬만하면 지워주는게 좋습니다.그러나 우분투를 사용하며 불가피하게 사용하게되는 default 계정이 있을 수 있으니 (Shutdown 등..) 다음 3가지 사용자를 확인하고 지워봅시다.

cat /etc/passwd | egrep "lp|uucp|nuucp"

 

userdel 명령어를 통해 사용하지 않는 lp, uucp 사용자를 제거합시다.

sudo userdel lp
sudo userdel uucp

 

Password 규칙 설정

로그인 비밀번호에 대한 변경 주기, 길이 등을 설정할 수 있습니다.

sudo vim /etc/login.defs


아래 값을 변경해 주세요.

PASS_MIN_LEN	9
PASS_MAX_DAYS	90
PASS_MIN_DAYS	7
PASS_WARN_AGE	10

 

비밀번호 9자 이상, 7일 이상 90일 이하 안에 비밀번호를 바꿔야하며 90일이 되기 10일 전에 경고를 띄운다는 뜻입니다. 만약 주기적으로 비밀번호를 바꿀 생각이 없다면 PASS_MIN_LEN만 변경해 주세요.

 

Su로 root 접속 시 Wheel 그룹 이외에는 차단하기

설정을 먼저 하기 전에 root 계정으로 접속하거나 사용자의 계정을 sudoers에 등록해야 합니다. (설정이 완료되면 su, sudo를 쓸 수 없습니다.)

 

sudo passwd # root 비밀번호 초기설정으로, 이후 su 명령어를 통해 root 접속가능

sudo vim /etc/sudoers

 

위처럼 root 밑에 같은 권한을 추가하여 저장합니다.

 

이제부터 su 접속 관련 설정입니다. 먼저 su config 파일을 열어봅시다.

vim /etc/pam.d/su

 

auth required pam_wheel.so의 주석을 해제하고 다음과 같이 바꿔주세요.

auth	required	pam_wheel.so

->

auth	required	pam_wheel.so	use_uid

 

wheel 그룹이 있다면 그대로, 없다면 그룹을 생성해줍니다.

sudo groupadd wheel

 

접근권한과 사용하는 user를 wheel 그룹에 추가합니다.

sudo chgrp wheel /bin/su
sudo chmod 4750 /bin/su
sudo usermod -G wheel <user>

 

umask 권한 설정

파일의 접근권한을 설정합니다. 0022가 권장되는 권한이라고 하니 0022로 접근권한을 맞춥시다.

sudo vim /etc/profile # or sudo vim /etc/bashrc

umask 22 # 저장

source /etc/profile

 

User Home Directory 사용 권한 설정

사용자 계정의 home 디렉토리의 사용 권한을 자기자신만 쓸 수 있도록 합니다.

sudo chmod o-w /home/<user>/

 

해외 ip ssh 접속 차단 설정

먼저 MaxMind에 가입하여 license key를 발급받아야 합니다. MaxMind에서 GeoIP라는 IP List를 받아와 해외로 되어있는 부분을 차단해봅시다.

MaxMind에 가입한 뒤 Acount의 Manage License key를 눌러 라이센스를 획득합니다. key 값은 한번만 알려주니 꼭 기록하여 남겨놓으시는 것을 추천합니다. 

 

우리는 geoip2의 country에 따른 ip 대역대를 iptables 명령어를 통해 전부 차단할 겁니다.  MaxMind의 ipv4, ipv6 데이터를 다운받아서 iptables가 확인 할 수 있는 형식으로 지정해 줘야 합니다. 

 

git clone https://github.com/mschmitt/GeoLite2xtables
cd GeoLite2xtables
cp geolite2.license.example geolite2.license
vi geolite2.license

 

geolite2.license의 KEY 값을 본인의 maxmind 키 값으로 바꿔주고 저장합니다.

./00_download_geolite2
./10_download_countryinfo 
sudo perl -MCPAN -e shell

 

이후 yes / no 선택창이 나오는데 그냥 enter 치시고 다음 명령어로 필요한 파일을 다운받습니다.

install NetAddr::IP
install Getopt::Long
quit

 

cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv | ./20_convert_geolite2 /tmp/CountryInfo.txt > GeoIP-legacy.csv
cd /root/

 

중간에 GeoIP-legacy.csv를 iptable 형식으로 변경하는 코드가 있는데 GeoIP2의 데이터 형식이 예전과 달라져서 제대로 적용이 되지 않습니다. 따라서 csv를 예전형식으로 Convert하는 코드를 새로 만들었습니다. (그냥 중간 열을 제거해주는 간단한 코드입니다.) 

git clone https://github.com/DongHyun99/ConvertGeoIp.git
cd ConvertGeoIp
pip3 install pandas
python3 ConvertGeoIp.py
mkdir /usr/share/xt_geoip
cp GeoIP-legacy.csv /usr/share/xt_geoip/GeoIP-legacy.csv

 

이제 GeoIP2를 iptables 형태로 변환해주고 차단 명령어를 입력해줍니다.

/usr/libexec/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip -i /usr/share/xt_geoip/GeoIP-legacy.csv
iptables -A INPUT -p tcp --dport <ssh_port> -m geoip ! --src-cc KR -j DROP
iptables -A FORWARD -p tcp --dport 3306 -m geoip ! --src-cc KR -j DROP

 

 

이렇게 하면 일단 ssh를 통한 해외에서의 ip 접속은 직접적으로 차단할 수 있습니다. 다만 iptables는 server를 한번 껐다 키면 초기회 되기 때문에 다음 명령어를 통해 저장해 줍니다.

 

sudo netfilter-persistent save
sudo netfilter-persistent reload

 

관련 명령어는 다음을 참조했습니다. 중간 중간 CentOS와 다른부분이 있는 부분은 따로 Ubuntu 홈페이지를 참조하시면 됩니다.

 

https://devjh.tistory.com/210

 

[Linux][CentOS7] Iptables 해외 아이피 차단하기

개인용 리눅스 머신에 수 많은 해외 아이피가 접근한다. (아마 매크로를 이용한 접근인거 같다) Fail2Ban, sendmail을 이용하여 잘못된 접근 시 일시적인 시간동안 해당 사용자를 차단하고 접근자에

devjh.tistory.com

https://manpages.ubuntu.com/manpages/bionic/man1/xt_geoip_dl.1.html

 

Ubuntu Manpage: xt_geoip_dl — download GeoIP database files

Powered by the Ubuntu Manpage Repository, file bugs in Launchpad © 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.

manpages.ubuntu.com

https://blog.elmi.page/tag/xtables

 

xtables Archives - ELMITASH FOR DEV

우분투 서버 22.04 LTS라고 무작위 SSH 접속 시도가 사라지지는 않으니… 새 버전에서도 xtables-addon에 geoip를 사용해서 우리나라 이외에 나라는 전부 막아버리자. SSH 접속 시도 보기(최근 50건만) sudo

blog.elmi.page

 

Rsa Key로만 SSH 접속 / Sudo 명령어 사용시 비밀번호 사용 해제

비밀번호를 통한 ssh 접속은 보안에 취약하기 때문에 Rse Key를 통해 로그인할 수 있도록 바꿔줍시다. 자신이 사용하는 데스크탑의 PowerShell을 열어 다음 명령어를 입력합니다.

ssh-keygen -t rsa

 

이후 나오는 내용들은 enter를 쳐서 넘어가도 무방합니다. 이제 자신의 계정 디렉토리의 .ssh 폴더에 id_rsa, id_rsa.pub 파일이 생성되었을 것입니다. id_rsa.pub을 복사해 Server 계정의 .ssh 디렉토리에 붙여넣어 줍니다. Server 터미널에 다음을 입력하여 key 값을 붙여넣어줍니다.

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

 

이때 만약 .ssh 디렉토리가 없다면 다음을 통해 생성할 수 있습니다.

cd /home/<user>/
mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

 

이제 public Key가 복사되었습니다. ssh 설정에서 ssh 접속을 key를 가진 사람만 할 수 있도록 설정해줍니다.

vi /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no

sudo service sshd restart

 

이번에는 sudo 명령어 입력시 비밀번호를 입력하지 않도록 설정해줍니다. (Rsa key를 등록하고 비밀번호를 어렵게 바꾸면 sudo 명령어 입력이 불편해지기 때문)

 

vi /etc/sudoers

<user> ALL=NOPASSWD: ALL

 

서버 보안 설정 끝!


출처:

https://docs.3rdeyesys.com/compute/ncloud_compute_server_ssh_security_setting.html

 

리눅스서버 SSH 접속 보안 설정하기

Ncloud 리눅스서버 SSH 접속 보안 설정하기입니다

docs.3rdeyesys.com

http://idchowto.com/isms-%EC%9D%B8%EC%A6%9D%EC%9D%84-%EC%A4%80%EB%B9%84%ED%95%98%EB%A9%B4%EC%84%9C-%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95%ED%95%B4%EB%B3%B4%EC%9E%90/

 

ISMS 인증을 준비하면서.. 리눅스 보안 설정해보자~ - 스마일서브 IDCHOWTO닷컴

  스마일서브도 개나소나 다 받는 ISMS 인증을 준비하고 있다.   리눅스 서버에 대한 보안 설정을 해보자~   1. 디폴트 계정 및 불필요한 계정 삭제  …

idchowto.com

https://extrememanual.net/32983

 

maxmind geoip.dat 다운로드 및 자동 업데이트 방법 - 익스트림 매뉴얼

geoip.dat 파일은 국가별로 사용하는 IP 주소를 모아놓은 데이터로 웹서버를 운영할때 특정 국가의 접근을 막거나 허용하는등 국가단위 IP 필터링을 할때 주로 사용하는데요. GeoIP는 maxmind.com에서

extrememanual.net

 

 

'Linux' 카테고리의 다른 글

[Linux] LVM 사용하기  (0) 2023.12.09
[Linux] 명령어 모음  (0) 2023.12.09
[Linux] Ubuntu 초기 Setting 가이드  (1) 2023.12.08
[Linux] Ubuntu Nvidia-driver / CUDA 설치  (1) 2023.10.27
[Linux] Ubuntu 네트워크 오류 해결 방법  (3) 2023.01.26
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.