리눅스를 설치하고 나서 서버를 사용하기 위한 목적이라면 보안상, 편의상으로 몇 가지 기본적으로 설정해야 하는 부분이 있습니다.
1. 서버시간 동기화
서버시간 동기화가 중요한 이유는 서버 시간이 이상할 경우 DB 데이터, log 데이터 등의 시간이 잘못 기록되기 때문입니다.
만약 DB서버, 웹서버 등이 분산된 경우, 서로 시간이 맞지 않다면 문제는 더욱 심각해지기 때문에 서버시간 동기화는 필수입니다.
# yum install rdate
# rdate -s time.bora.net
# date
# rdate -s time.bora.net
리눅스 서버와 보라넷 서버( time.bora.net )의 시간을 동기화 하는 명령어
# date
리눅스 서버의 시간을 확인하는 명령어
다음은 cron을 이용하여 매일 서버시간을 동기화하는 작업입니다.
cron은 시스템 운영에 필요한 일상적이고 주기적인 작업을 지정된 시간에 반복적으로 수행할 수 있도록 도와줍니다.
# crontab -e
00 00 * * * /usr/bin/rdate -s time.bora.net
리눅스 계정은 보안 상의 이유로 일정 시간 동안 응답이 없으면 자동으로 로그아웃 시키는 설정이 필요합니다.
/etc/profile 파일을 열어서 아래의 내용을 작성합니다.
# vi /etc/profile
# security config
export TMOUT=300
TMOUT 환경 변수를 추가하면 300초 동안 응답이 없을 시 로그아웃이 됩니다.
/etc/profile은 사용자가 로그인 시 참조하는 파일로서 여러 환경 변수를 지정할 수 있는 디렉터리입니다.
/etc/profile을 수정했으므로 이를 반영하기 위해서 source 명령어를 입력합니다.
# source /etc/profile # echo $TMOUT
echo 명령어를 통해 환경 변수가 잘 설정되었는지 확인할 수 있습니다.
# vi /etc/profile
HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S [CMD]:" # source /etc/profile # history
4. 원격 터미널 설정 및 root 접근 불가 설정
서버를 운영하기 위해 직접 컴퓨터 앞에 앉을 필요 없이, 원격으로 어디서든 관리하는 것이 좋습니다.
( 원격으로 접속하기 위한 소프트웨어로 putty, Xshell 등이 있습니다. )
그러기 위해서는 SSH 서버를 설정해야 합니다.
SSH 서버 설정
# ps -ef | grep sshd
# systemctl enable sshd.service
# ps -ef | grep sshd
SSH 서버가 실행되고 있는지 확인하는 명령어
# systemctl enable sshd.service
SSH 서비스를 자동 실행 상태로 변경하는 명령어
즉, 서버가 실행되면 sshd 서비스가 자동으로 실행됩니다.
SSH 서버를 root로 접근 못하게 설정
root 계정은 모든 권한이 있기 때문에, 보안이 정말 중요한 계정입니다.
그래서 원격에서 root 계정으로 접근 못하도록 설정하는 것이 좋습니다.
# vi /etc/ssh/sshd_config
PermitRootLogin no
/etc/ssh/sshd_config 파일을 열고 Root를 검색을 합니다.
( 명령 모드에서 /Root 를 입력한 후 엔터를 누르면 vi 편집기에서 검색을 할 수 있습니다. )
그리고 PermitRootLogin과 같이 #을 지워서 주석을 해제하고, yes를 no로 바꿉니다.
설정을 적용하기 위해 sshd 서비스를 재시작 합니다.
# systemctl restart sshd.service
이제 Putty 또는 Xshell에서 root로 접근을 해보면 원격 터미널로 root로 접근할 수 없음을 확인할 수 있습니다.
# alias
# vi /etc/bashrc
alias cp='cp -i’
alias mv='mv -i’
이와 같이 alias를 등록할 수 있습니다.
이제 cp 또는 mv 명령어를 입력하면 자동으로 -i 옵션이 추가되어, 이미 같은 이름의 파일이 존재할 경우 덮어 쓸 것인지( overwirte ) 확인하는 메시지가 출력됩니다.
6. 고정 IP 설정
서버는 고정 IP 주소를 유지해야 합니다.
고정 IP를 설정하기 전에 알아두어야 할 것은 다음과 같습니다.
1) IP Address
2) Subnet Mask
3) Gateway IP Address
4) DNS Server IP Address
실제 IP 및 DNS 서버가 있다면 각 설정 값에 실제 주소 값을 입력하면 됩니다.
여기서는 로컬을 기준으로 작성하겠습니다.
IP 주소 확인
# yum install net-tools
# ifconfig
ex) 192.168.1.47
고정 IP 설정
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 BOOTPROTO="static" IPADDR=192.168.1.47 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=168.126.31.1 DNS2=192.168.1.1
기존의 작성 내용은 주석처리 하고, 위와 같이 수정합니다.
BOOTPROTO의 값은 고정 아이피를 작성할 것이므로 staitc으로 수정합니다. ( dhcp는 동적 IP 할당을 의미합니다. )
DNS1에서 작성한 168.126.31.1은 한국에서 관리하는 네임 서버입니다.
7. SSH 서버 보안 - fail2ban
SSH 접근을 통해 root 비밀번호를 해킹하려는 시도가 빈번히 일어나고 있습니다.
( 최근 저의 서버에 70만이 넘는 root 로그인 실패가 일어난 것을 경험했습니다.... )
따라서 조금이나마 서버의 보안을 강화하고자 한다면, fail2ban을 사용하는 방법이 있습니다.
fail2ban은 설정한 시간 내에 지정된 횟수 이상으로 SSH 로그인을 실패하면, 해당 IP의 접근을 지정된 시간만큼 차단하는 역할을 합니다.
fail2ban을 사용하려면 패키지를 설치하고 서비스를 등록하기만 하면 끝납니다.
# yum install -y fail2ban
# systemctl start fail2ban
# systemctl enable fail2ban
# systemctl status fail2ban
좀 더 디테일하게 fail2ban을 설정할 수 있는데, 이는 생략하도록 하겠습니다.
8. 방화벽 및 SELinux
서버의 보안을 당담하는 방화벽과 SELinux는 기본적으로 사용할 것을 권장합니다.
하지만 정확한 사용법을 모를 경우, 서버 관리에 문제가 발생할 수 있기 때문에 서비스를 정지시키는 것도 좋습니다.
방화벽 정지
# systemctl stop firewalld.service
# systemctl disable firewalld.service
확인
# iptables -nL
SELinux 정지
# vi /ect/selinux/config
SELINUX=disabled
확인
# sestatus
해당 파일 편집기를 열어서 SELINUX=enforcing 을 disabled로 수정하고, 재부팅을 하면 SELinux가 작동되지 않습니다.
이상으로 리눅스를 설치한 후 유용하기도 하고 보안적으로도 필요한 여러 설정들을 알아보았습니다.