인프라/Linux

[Linux] CentOS 7 초기설정(4)

안용감한호랑이 2023. 9. 12. 00:06

2023.09.06 - [인프라/Linux] - [Linux] CentOS 7 설치(3)

 

[Linux] CentOS 7 설치(3)

2023.09.06 - [인프라/Linux] - [Linux] CentOS 7 부팅 USB 생성(2) [Linux] CentOS 7 부팅 USB 생성(2) 0. USB 준비 가장 먼저 USB를 준비해줍니다. 저는 아무것도 없는 USB 8GB를 사용하였습니다. centos-minimal인경우 iso 파

dog-foot-writen.tistory.com

이전 글을 보고와 주세요

 


yum install

해당 글은

https://ko.linux-console.net/?p=2246#gsc.tab=0

위 경로를 참고하였습니다.

 

CentOS 7의 초기 서버 설정 및 구성

CentOS 7의 초기 서버 설정 및 구성 이 튜토리얼은 그래픽 환경이 없는 최소 CentOS 7 시스템을 설치한 후 설치된 시스템에 대한 정보를 얻기 위해 거쳐야 하는 첫 번째 기본 단계를 설명합니다. 네트

ko.linux-console.net

 

1. yum 설치

저희는 CentOS-minimal을 설치하였기 때문에 추가적으로 다른 패키지들을 통해

초기설정을 편하게 진행할 수 있습니다.

# 현재 root계정이 아니라면 아래 명령어도 실행해 주세요
# su - root

yum check-update
yum upgrade
yum clean all
yum -y install nano wget curl net-tools lsof bash-completion firewalld httpd

 

2. 고정 IP 설정

서버 재부팅시 고정IP가 아닌경우 IP가 변경될 수 있습니다.

따라서 고정 IP를 설정하여 항상 같은 IP를 사용할 수 있도록 설정하겠습니다.

# CentOS7부터는 ifconfig 대신 ip를 사용합니다.
# 다만 저희는 yum을 통해 net-tool을 설치하였기 때문에 ifconfig를 사용하겠습니다.
# ip address
# 위 명령어로도 ip를 확인할 수 있습니다.

ifconfig
ip route

아래 이미지를 보면 enp3s0에 192번대 ip가 할당되어있는것을 알 수 있습니다.(현재 저는 docker를 설치하여 docker0가 제일 먼저 나오고 있습니다.)

 

또한 ifconfig에서는 게이트웨이가 나오지 않기 때문에 

ip route 명령어로 enp3s0의 게이트웨이를 확인해주겠습니다.

저는 default via 192.168.0.1 dev enp3s0 proto static metric 100으로 나오기 때문에 해당 IP를 게이트웨이에 적어주겠습니다.

 

 

저희는 enp3s0의 옵션을 변경해야 합니다.( 만약 다른 명칭이라면 그 명칭에 맞게 변경해주세요)

vi를 통해 설정을 변경하겠습니다.

vi /etc/sysconfig/network-scripts/ifcfg-enp3s0


# 명칭이 다르다면 아래와 같이 맞춰주시면 될것 같습니다.
# vi /etc/sysconfig/network-scripts/ifcfg-명칭

# 해당 파일이 없다면 아래 명령어를 통해 파일을 확인하고 변경해 주세요
# ls -alh /etc/sysconfig/network-scripts
# 기존에 작성 되어있던 옵션
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
#BOOTPROTO=dhcp            # 주석처리 해주었습니다.
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp3s0
UUID=7512032b-8acb-411c-a521-74470d83f188
DEVICE=enp3s0
ONBOOT=yes


# 아래 옵션들은 신규작성하였습니다.
BOOTPROTO=static
IPADDR=192.168.0.15
NETMASR=255.255.255.0
GATEWAY=192.168.0.1
DNS1=219.250.36.130
DNS2=210.220.163.82

설정되어있는 몇몇 옵션들의 역할을 알아보겠습니다.

  • TYPE : 인터페이스의 타입
  • BOOTPROTO : 서버 시작시 IP를 받는 방법
  • ONBOOT : 부팅시 자동시작 여부
  • IPADDR : 서버의 IP ( 사용하실 IP를 작성해주시면 됩니다. )
  • NETMASR : 서브넷마스크
  • GATEWAY : 게이트웨이
  • DNS1,DNS2 : (SKT의 DNS1,2차 주소입니다.)

 

3. 방화벽 및 Port 연결

저희는 앞서 firewalld라는 패키지를 설치하였습니다.

해당 패키지를 이용하여 방화벽 설정을 진행하도록 하겠습니다.

 

# 방화벽을 시작합니다.
systemctl start firewalld
# 서버 재부팅시 방화벽을 자동으로 실행합니다.
systemctl enable firewalld
# 방화벽을 reload 하여 설정을 적용해 줍니다.
firewall-cmd --reload



# SSH접속을 허용합니다. 
firewall-cmd --permanent --zone=public --add-servict=ssh
# http접속을 허용합니다.
firewall-cmd --permanent --zone=public --add-servict=http


# 원하는 Port의 접속을 허용합니다.
firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=8080/tcp

# 현재 글에서는 설명을 위해 ssh, http 접속에서 자주사용하는
# 22번과 8080 포트를 개방해 주었지만 해당 포트들로 서비스 할 경우 보안에 취약할 수 있습니다.

 

4. Google OTP 적용하기

저는 방화벽 말고도 다른 접속을 원하지 않아 Google OTP를 활용하여 서버에 접속하도록 변경하고 마무리 하겠습니다.

만약 해당 과정이 필요 없다면 넘어가셔도 좋습니다.

# 관련 패키지 설치
yum -y install epel-release
yum -y install google-authenticator


# 설정 변경
vi /etc/pam.d/sshd

vi로 해당 파일을 열고 맨 아래에 코드 한줄을 추가하고 저장해 줍니다.

auth       required     pam_google_authenticator.so nullok

 

이후 ssh도 추가적으로 설정해 줍니다.

vi /etc/ssh/sshd_config

3가지 코드를 변경하겠습니다.

# vi는 esc 이후 :/찾을문자열 로 파일내 문자열을 찾을 수 있습니다!


# 패스워드 인증 사용 여부 OTP 사용하니 끄겠습니다.
PasswordAuthentication no 
# 2FA인증을 위해 변경
ChallengeResponseAuthentication yes
# PAM인증 사용
UsePAM yes

 

저장 후 SSH를 재시작 해줍니다.

systemctl restart sshd

 

 

이후 구글 인증 할 수 있도록 세팅해 주겠습니다.

google-authenticator

위 명령어를 입력하면 여러 옵션들에 대해 물어봅니다.

# 시간 기반의 토큰으로 할지 여부
Do you want authentication tokens to be time-based (y/n) y

# 위 옵션을 y로 준 이후 QR 코드와 백업 코드가 생성됩니다.
# 두가지 코드를 잘 보관해 주세요.


# 아래 경로에 코드가 백업됩니다.
Do you want me to update your "/root/.google_authenticator" file? (y/n) y

# MITM공격 관련 옵션입니다. 
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

# 서버와 모바일간 시간차를 고려하여 이전코드, 현재코드, 다음코드 3가지 모두 입력 가능하도록 합니다.
By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) y

# 30초에 3번 이상 인증 실패시 로그인을 차단하는 옵션입니다.
If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y

 

 

이제 잘 설정 되었는지 확인 하기 위해 외부 PC에서 접속하도록 하겠습니다.

저는 이 과정을 진행한 이후 공유기에서 포워딩 설정을 진행하였습니다.

이는 공유기에서 제공하는 인터넷망이 아닌 외부망에서 저희가 설정한 서버에 접속하기 위해 필요한 설정입니다.

같은 네트워크 상이라면 공유기의 포워딩 설정은 필요 없습니다.

추후 필요시 글을 게시하도록 하겠습니다.

현재 서버에는 http로 접속할만한 어플리케이션이 없기 때문에 SSH 접속을 하겠습니다.

 

위 이미지처럼 패스워드 입력 이후 Verification code: 가 나온다면 성공입니다.

 

 

 

이것으로 이번 포스팅을 마치겠습니다.

'인프라 > Linux' 카테고리의 다른 글

[Linux] CentOS 7 설치(3)  (0) 2023.09.06
[Linux] CentOS 7 부팅 USB 생성(2)  (0) 2023.09.06
[Linux] CentOS 7 서버 설치  (0) 2023.09.06