본문 바로가기
교육

[33일 차] 21.09.03 : Linux Server 12

by ballena 2021. 9. 3.

1교시

 

NFS 말고 또 다른 스토리지 서버인 iSCSI

-> 여러 OS와의 호환성도 좋고, 보안도 괜찮다.

 

  • iSCSI(Internet Small Computer Interface)

-> TCP/IP 프로토콜을 이용해 SCSI의 명령어를 LAN 또는 WAN에 위치한 스토리지 장치에 전달하기 위해 사용되는 프로토콜. 원격지에 위치한 저장 장치를 관리하기 위해 일반적으로 사용되는 TCP 기반의 프로토콜이다.

->여기서 저장 장치는 디스크/테이프/CD/DVD 등이며, 이러한 네트워크 기반의 저장장치를 보통 SAN이라 한다.

DAS, NAS, SAN 다시 기억하기

 

  • iSCSI 구성 요소

1. iSCSI 서버(Target)

2. iSCSI 클라이언트(Initiator)

 

  • iSCSI 서비스 시작

1. iSCSI 서버 패키지 설치

Target 역할을 할 master VM에서

-> yum list target* : 있는지 확인

-> yum -y install targetcli 설치

-> target 서비스 시작(start, enable)

 

2. iSCSI 서버 설정

Target 역할을 할 master VM에서

-> 860/tcp, 3260/tcp 방화벽 열어주기 : cat /etc/services | grep iscsi로 확인

아래 실습 환경 세팅처럼 사용할 공간 설정

 

3. iSCSI 서비스 시작

 

4. 방화벽 설정

-> firewall-cmd --permanent --add-port=860/tcp

-> firewall-cmd --permanent --add-port=3260/tcp

 

 

  • iSCSI 실습 환경 세팅 + LVM 복습

master에 50G, 20G 디스크 부착

-> ls -l /dev/sd* 로 부착 확인

-> fdisk /dev/sdb로 fdisk 진입해서 n으로 파티셔닝 후 t로 타입을 8e로 바꾼다(LVM Type). w로 저장

-> ls -l /dev/sd*로 다시 보면 /dev/sdb1, /dev/sdc1이 생겼다.

 

PV 만들기 : /dev/sdb, /dev/sdc

-> pvcreate /dev/sdb1 /dev/sdc1

-> 장착 후 바로 pvcreate /dev/sdb /dev/sdc 해줘도 된다. 알아서 파티셔닝 해준다.

 

VG명 iscsi로 VG 생성

-> vgcreate iscsi /dev/sdb1 /dev/sdc1

-> vgchange -a y iscsi로 VG 활성화

-> vgdisplay -v iscsi로 vgcreate 결과 확인

 

LV명 lv-iscsi1~4로 각 5GB 할당

-> lvcreate -L 5GB iscsi -n lv-iscsi1 : -L 옵션은 용량 단위로 지정한다. -l 옵션은 PE 단위로 지정.

-> lvs 명령과 ls -l /dev/iscsi/lv* 명령으로 확인


2교시

 

세팅한 lvs 중 1, 2를 slave vm이 사용하고, 3, 4는 first vm이 사용할 것이다.

Targer 이름은 클라이언트 측에서 포탈을 열었을 때 보게 될 이름

LUN은 iSCSI가 디스크를 이해하는 논리적 디스크 유닛. 그냥 LV는 이해 못한다.

 

Target 이름     LUN(Logical Unit Number)     LV

tg1                lun0                                  /dev/iscsi/lv-iscsi1

                    lun1                                  /dev/iscsi/lv-iscsi2

tg2                lun0                                  /dev/iscsi/lv-iscsi3

                    lun1                                  /dev/iscsi/lv-iscsi4

 

targetcli를 실행하면 iSCSI 설정 모드로 들어간다.

-> ls : 계층 구조를 보여준다

이제 만들었던 디스크를 어떻게 인식시킬지 정해야 한다.

/backstores/block : 현재 서버에 부착되어서 인식되는 물리/논리 볼륨을 공유

-> 외부에 공개될 스토리지의 타입을 결정

-> 일단 여기에 iSCSI가 인지할 수 있도록 LV를 인식시켜야 한다. 그 후에 LUN으로 인식시킬 것이다.

/backstores/fileio : 디스크 이미지 파일을 생성해서 Initiator가 해당 이미지 파일을 디스크처럼 사용하게 만든다. 

 

/backstores/block create data1 /dev/iscsi/lv-iscsi1

-> lv-iscsi1을 data1이라는 이름으로 /backstores/block에 블록 볼륨의 형태로 연결

-> 이런 식으로 lv-iscsi1~4를 data1~4에 연결

이제 data1~4 오브젝트로 외부에 보일 Target 정보를 설정할 것이다.

slave가 포털을 열면, data1~4가 보이지는 않는다. Target 정보가 보일 것이고, 그 정보에서 LUN을 인식할 것이다.

 

Target 만들기 : /iscsi에 만들 것이다.

-> 타깃 이름은 IQN(iSCSI Qualified Name) 규격으로 만들어야 한다. iSCSI Target과 Initiator 각각의 고유 이름 포맷.

Type   .   Date(yy-mm)   .   Naming_Auth(도메인의 역순)   :   설명

-> ex) iqa     .   2021-08   .   com.chul   :   storage.lvm

-> /iscsi/ create iqn.2021-09.com.chul.master:tgt1 로 만들면 포탈이 열리면 서버 쪽 타깃 정보가 될 것이다

===========

Linux 클라이언트(slave vm) 측에서 cat /etc/iscsi/initiatorname.iscsi으로 Initiator Name을 볼 수 있다.

-> InitiatorName=iqn.2021-09.com.chul:slave로 수정

 

Windows 클라이언트(FIRST vm) 측에서는

서버 관리자 > iSCSI 초기자 > iSCSI 초기자 속성의 구성 탭에 초기자 이름을 iqn.2021-09.com.microsoft:first로 수정

===========

클라이언트 정보를 설정했으니, 이제 서버(master vm) 측에서 포탈을 통해 보게 될 타겟 정보를 만들어야 한다.

-> 아이디, 패스워드를 지정해서 특정 사용자만 사용할 수 있도록 하자.

 

위에서 만든 정보 /iscsi/iqn.2021-09.com.chul.master:tgt1/tpg1/ 로 이동

-> luns/ create /backstores/block/data1 : 아까 만든 data1 볼륨을 LUN으로 인식시킨다.

LV -> data1 -> luns 순으로 연결하는 것이다.

-> tpg1 경로에서 set attribute authentication=1 : 접속 가능한 특정 계정/패스워드를 지정하려면 1로 변경해야 한다. 0은 누구나 접근 가능

-> tpg1 경로에서 acls/ create iqn.2021-09.com.chul:slave 실행해서 접속 가능한 계정을 클라이언트의  initiator name(slave vm)으로 지정한다.

-> cd acls/iqn.2021-09.com.chul:slave/ 로 디렉터리 이동 (특정 초기자의 정보 설정)

-> set auth userid=slave : 접속할 때 사용할 userid 지정

-> set auth password=p@ssw0rd1234 : 접속할 때 사용할 패스워드 지정

-> get auth로 확인

-> / saveconfig 실행해서 변경 사항 저장

-> 리눅스 클라이언트 접속 가능하게 설정 완료.

-> systemctl restart target

 

 

iSCSI 구성


3~4교시

 

설정을 완료했으니 리눅스 클라이언트(slave vm)로 가서 확인해보자.

-> iscsid 서비스 작동 확인. 이게 작동해야 포털을 열고 확인 가능.

iscsiadm --mode discoverydb --type sendtargets --portal 192.168.111.100 --discover

명령을 실행해서 해당 서버가 제공하고 있는 포탈을 찾는다.

iscsiadm --mode node --targetname iqn.2021-09.com.chul.master:tgt1 --portal 192.168.111.100:3260 --login

명령을 실행해서 로그인

-> 인증 실패로 로그인이 안된다. 

-> vim /etc/iscsi/iscsid.conf 파일로 들어가서

node.session.auth.authmethod = CHAP의 주석 해제

node.session.auth.username = slave
node.session.auth.password = p@ssw0rd1234

주석 해제하고 username과 password 수정

-> iscsid 재시작 후 다시 포탈 찾고 로그인 : successful 뜨면 성공.

-> iscsiadm --mode node 실행해서 확인

-> iscsiadm --mode node --targetname iqn.2021-09.com.chul.master:tgt1 --portal 192.168.111.100:3260 실행하면 attach 된다.

-> fdisk -l 해보면 로컬에 연결된 것처럼 디스크가 추가되어 있다.

-> 로컬처럼 fdisk로 들어가서 파티셔닝, mkfs로 파일 시스템 부여, 마운트 할 디렉터리 만들고 마운트

-> df -h로 확인

리눅스 클라이언트의 iSCSI 접속 완료.

 

 

이제 Windows 클라이언트(FIRST vm)에서 접속해보자.

-> 일단 서버 측(master vm)에서는 똑같이 만들면 된다. data3, 4는 만들어 놨으니

-> /iscsi/ create iqn.2021-09.com.chul.master:tgt2

-> /iscsi/iqn.2021-09.com.chul.master:tgt2/tpg1/ 이동

-> luns/ create /backstores/block/data3으로 LUN 생성

-> cd acls/iqn.2021-09.com.chul:slave/ 로 디렉터리 이동(전체 적용이 안되니 반드시 이동할 것)

-> set attribute authentication=1 실행해서 인증해야 접속할 수 있도록 설정

-> acls/ create iqn.2021-09.com.microsoft:first 실행해서 클라이언트 지정

-> set auth userid=first : 접속할 때 사용할 userid 지정

-> set auth password=p@ssw0rd1234 : 접속할 때 사용할 패스워드 지정

-> get auth 확인

-> / saveconfig 실행해서 변경 사항 저장

-> systemctl restart target

 

이제 FIRST로 가서

-> service에서 Microsoft iSCSI Initiator Service 켜기(Windows 10은 꺼져있다)

-> iSCSI 초기자 속성의 검색 탭 > 포털 검색 > IP 주소(192.168.111.100)와 포트(3260) 입력

-> 대상 탭으로 가서 iqn.2021-09.com.chul.master:tgt2 클릭 후 연결

-> 고급 > CHAP 로그온 정보 사용 체크 > 이름, 대상 암호에 지정했던 userid와 패스워드 입력 후 연결

 

※ userid와 패스워드 설정 시 해당 초기자의 acl 디렉터리로 이동해서 세팅해야 한다.

 

확인해보자.

디스크 관리 > 추가된 디스크 온라인으로 바꾸고 초기화

 

끊으려면 디스크 오프라인으로 바꾸고 초기자 속성에서 끊으면 된다.

Windows 10은 제어판 > 관리 도구 > iSCSI 초기자에서 초기자 아이디를 볼 수 있다.

 

master에서 등록했던 초기자 삭제

-> /iscsi/iqn.2021-09.com.chul.master:tgt2/tpg1/ 로 이동하고

-> acls/ delete iqn.2021-09.com.microsoft:first

 

slave에서 연결 해제하기

iscsiadm -m node --portal 192.168.111.100 -u : 포탈 제거

iscsiadm -m node --portal 192.168.111.100 -o delete : 타깃 삭제

재부팅하면 목록에서도 없어진다.


5교시

 

  • 메일 서버 구축.

구글, 네이버 같은 공용 메일 서버가 아니라 따로 만드는 것. 중요한 정보를 내부에서만 주고받기 위해 사용.

-> postfix 메일 서버

 

메일 서버 구조

MTA(Mail Transfer Agent = SMTP 서버)끼리 메일을 주고받는다. 메일을 전달해 주는 서버다.

MUA(Mail User Agent)라는 메일을 보내기 위해 사용하는 프로그램이 있는데, MTA로부터 인증을 받아야 한다.

MDA(Mail Delivery Agent)는 MTA로부터 메일을 받아서 MUA로 전달해 주는 역할을 수행한다.

 

메일 서버가 구축되려면 도메인이 필요하다(DNS 구축)

master 서버에 chul.com 존에 대한 master, jeong.com 존에 대한 master

slave 서버에 chul.com 존에 대한 slave, jeong.com 존에 대한 slave

(DNS 구축 복습)

 

존 파일에 MX 10 ms.chul.com.은 반드시 만들기. 이게 메일 서버다.


6교시

 

master에서

yum list postfix(확인) 후 yum -y install postfix(설치)

-> /etc/postfix/가 설정 파일들이 저장되는 디렉터리

-> /var/log/maillog가 로그 파일

-> 혹시 모르니 systemctl status sendmail 확인

-> 있다면 postfix를 최우선으로 메일 서버를 운영함을 명시해야 한다.

-> alternatives --set mta /usr/sbin/sendmail.postfix : 최우선 MTA로 postfix 지정

-> systemctl enable --now postfix : postfix 가동

-> 메일 서버는 사용하는 포트가 많다.

grep smtp /etc/services 해보면 송신 프로토콜인 SMTP가 어떤 포트를 사용하는지 볼 수 있다.

SMTP는 25번 포트 사용

SMTPs는 465번 포트 사용 -> SSL + SMTP

grep smtp /etc/services 해보면 수신 프로토콜인 IMAP이 어떤 포트를 사용하는지 볼 수 있다.

IMAP은 143번 포트 사용

IMAPs는 993번 포트 사용 -> SSL + IMAP

rep pop3 /etc/services 해보면 또 다른 수신 프로토콜인 POP3가 어떤 포트를 사용하는지 볼 수 있다.

POP3는 110번 포트 사용

POP3s는 995번 포트 사용 -> SSL + POP3

UDP는 신경 쓸 필요 없고, TCP 열어주면 된다. 전부 포트번호/tcp로 열어주면 된다.

 

  • postfix 서버 설정

메인 설정 파일은 /etc/postfix/main.cf

myhostname 주석 해제하고 ms.chul.com 작성

mydomain = domain.tld 주석 해제 후 chul.com 작성

myorigin = $mydomain 주석 해제

inet_interfaces = all

-> 주석 해제 : 현재 시스템에 있는 모든 인터페이스로 메일 Listening

-> 아래 주석이 없는 inet_inerfaces = localhost는 주석 처리

inet_protocols = all

-> 지원하는 IP 버전을 의미

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

-> 메일 서버가 받을 수 있는 메일 도메인 형식을 의미. user1@ms.chul.com이나 user1@chul.com, user1@localhost 등의 도메인을 받을 수 있다.

mynetworks = 168.100.189.0/28, 127.0.0.0/8

-> 메일의 목적지가 이 장비를 거쳐서 가는 메일일 경우 수신할 수 있는(신뢰할 만한) 네트워크 범위(목적지) 지정

home_mailbox = Maildir/

-> 사용자의 메일이 오면 사용자의 홈 디렉터리 밑에 Maildir이라는 디렉터리를 만들어 저장

smtpd_banner = $myhostname ESMTP $mail_name

-> 사용자가 접속 시 보여주는 배너

message_size_limit = 10485760

-> 맨 하단에 추가. 메일을 보낼 때 보낼 수 있는 최대 크기(bit 단위)

mailbox_size_limit = 1073741824

-> 맨 하단에 추가. 사용자 메일함에 최대 저장될 수 있는 용량(bit 단위)

 

그 후 postfix 재시작.


7교시

 

postfix가 잘 동작하는지 테스트 : Telnet을 이용한 배너 그래이빙(포트가 열려있는지 확인)

yum -y install telnet : 텔넷(클라이언트) 설치

telnet localhost 25

-> 자신의 25번 포트 찔러보기.

ehlo localhost 

-> 이메일 작성을 위해 들어온 클라이언트 localhost

mail from:kim : 발신자

rcpt to:user1 : 수신자

data : 내용 작성. 작성 후 . 찍으면 끝

이제 /home/user1/Maildir/new/ 가보면 메일이 와 있다.

/var/log/maillog에 기록도 남아 있다.

 

 

이제 수신 프로그램 Dovecot을 설치해 보자.

yum -y install dovecot 설치 후

주 설정 파일 /etc/dovecot/dovecot.conf 들어가서

protocols = imap pop3 lmtp submission

-> 주석 해제

listen = *, ::

-> 어디에서 받을 것인지 적는 부분(앞은 IPv4, 뒤는 IPv6). 주석 해제

 

메일을 어디에 저장할지 지정

/etc/dovecot/conf.d/10-mail.conf 파일 들어가서

mail_location = maildir:~/Maildir 주석 해제

 

인증 관련 설정

/etc/dovecot/conf.d/10-auth.conf 파일 들어가서

disable_plaintext_auth = yes 주석 해제 : 평문 인증 비활성화 = 암호화

-> no로 변경. SSL 구성하면 yes로 바꿔야 한다.

auth_mechanisms = plain

-> plain : 인증을 위해 암호화되지 않은 평문의 패스워드 사용

-> plain login으로 수정 : 암호화되지 않은 평문의 패스워드

 

IMAP, POP3가 사용하는 포트 지정

/etc/dovecot/conf.d/10-master.conf 파일로 들어가서

service imap-login 블록에 주석 처리되어 있는 포트 번호 주석 해제

service pop3-login 블록도 동일하게. 

unix_listener /var/spool/postfix/private/auth {
  mode = 0666
}

-> 이 부분 주석 해제

 

일단 지금은 SSL을 사용하지 않으므로

/etc/dovecot/conf.d/10-ssl.conf 파일로 들어가서

ssl = required

-> 일단 지금은 no로 수정

 

설정 끝. dovecot 서비스 시작/enable

MUA를 아직 설치 안 했으니 Telnet으로 테스트.

telnet localhost 110 -> POP3 테스트

telnet localhost 143 -> IMAP 테스트

 

텔넷 배너 그래이빙은 기억할 필요 없다.


8교시

 

FIRST(Windows Client)와 Slave(Linux Client)에 각각 Thunderbird 설치

-> Windows의 DNS는 192.168.111.100으로 변경

-> 가입 진행하면 SSL 설정 문제로 에러 발생.

-> user1으로 로그인 진행하고

-> incoming/outgoing 주소를 ms.chul.com으로, 포트는 각각 143과 25번

-> 보안 연결 안 함, 인증 방식은 normal password

 

 

어찌어찌했는데 에러 발생하면 master 측에서 postfix check로 에러 확인 후 재시작

 

 

다음 시간에는 SSL 구성부터 다시.


오늘은 다시 들을 부분 없다. 개 좋아....

SSL 등 이메일 구성 끝내고 DB-웹 연동 후 추석 전까지 Ansible

댓글