포스트

리눅스 실습문제 2


DNS서버와 Apache 웹서버, DB서버, 프록시서버에 ssl 자체 서명 인증서를 통한 접속과 라운드로빈 실습




1. 개요


1단계


  • CentOS7(GUI) [192.168.1.10] => 주 DNS 서버, http 웹서버

  • CentOS8 [192.168.1.20] => 보조 DNS 서버, https 웹서버

  • Window 2003 [192.168.1.50] => 보조 DNS 서버

윈도우 서버에서 구현 사항 확인


2단계


  • CentOS7(GUI) [192.168.1.10] => HAproxy 서버, MariaDB 클라이언트

  • CentOS8-2 [192.168.1.30] => Apache 웹서버, MariaDB 서버

  • CentOS7-2 [192.168.1.40] => Apache 웹서버, MariaDB 서버

CentOS7에서 HAproxy로 구현한 라운드로빈 방식으로 웹서버와 DB서버 각각 접근해보겠다.


2. 1단계 실습


Linux01



먼저 CentOS7(이하 Linux01)에서 DNS 서버와 웹서버 패키지를 다운로드


1
[root@Linux01 ~]# yum -y install caching-nameserver httpd


네임 서버에 관련된 설정(configure; -> conf)을 수정한다


1
    [root@Linux01 ~]# vim /etc/named.conf


named.conf


주 서버의 영역을 설정해주기 위해 영역 영역 이름은 gitblog.vm으로 하겠다.


1
[root@Linux01 ~]# vim /etc/named.rfc1912.zones


named.rfc1912.zones


현재 주 DNS 서버에서 보조 DNS 서버로 보내기 위해

  • type master; => 주 영역 DNS 서버임을 의미

  • file “gitblog.vm.zone” => /var/named/gitblog.vm.zone 이라는 파일에 영역이 저장될 것이라는 의미

  • allow-transfer { 192.168.1.20; 192.168.1.50; }; => 보조 DNS 서버에 전달하겠다는 의미

해당 이유로 위 항목들을 설정해주었다.

1
2
[root@Linux01 ~]# cd /var/named
[root@Linux01 named]# ls


ls 명령어로 /var/named 아래에 있는 파일들을 확인하고, 그 중 named.localhost라는 파일의 권한(소유자, 소유그룹)과 함께 복사해서 gitblog.vm.zone이라는 파일을 만들겠다.


그렇게 하는 이유는 root 소유자와 named 그룹이 소유하지 않으면 해당 영역으로 쿼리를 할 수 없기 때문이다.

1
[root@Linux01 named]# cp -p named.localhost gitblog.vm.zone


복사한 뒤 수정


/var/named/ls-l


1
[root@Linux01 named]# vim gitblog.vm.zone


gitblog.vm.zone


이제 named 서비스를 시작하기 전에 gitblog.vm 영역의 gitblog.vm.zone 파일을 제대로 작성했는지 확인해본다.


1
2
3
4
5
[root@Linux01 named]# named-checkzone gitblog.vm gitblog.vm.zone
zone gitblog.vm/IN: loaded serial 0
OK

[root@Linux01 named]# systemctl enable --now named


systemctl enable --now named 라는 명령어로 systemctl start named && systemctl enable named 와 같은 효과를 볼 수 있다.


이제 Linux01에 웹서버가 잘 작동할 수 있도록 html 파일을 생성하고, 가상호스트를 구현해보겠다.


가상호스트란 하나의 서버에 여러 대의 웹서버를 구현하는 것과 비슷한 효과를 볼 수 있다.


먼저 /(최상위 디렉토리)로 이동한다.


1
2
3
[root@Linux01 /]# mkdir /www1 /www2
[root@Linux01 /]# echo www1.gitblog.vm site > www1/index.html
[root@Linux01 /]# echo www2.gitblog.vm site > www2/start.html


이제 가상 호스트의 홈디렉토리와 이름을 지정하기 위해 설정 파일을 수정해보자


1
[root@Linux01 /]# vim /etc/httpd/conf/httpd.conf


CentOS7 기준 다음 줄들을 수정한다.


...
...
124 <Directory "/">
125     AllowOverride None
126     # Allow open access:
127     Require all granted
128 </Directory>
...
...
163 <IfModule dir_module>
164     DirectoryIndex index.html start.html
165 </IfModule>
...
...
355 <VirtualHost *:80>
356     DocumentRoot /www1
357     ServerName www1.gitblog.vm
358 </VirtualHost>
359 <VirtualHost *:80>
360     DocumentRoot /www2
361     ServerName www2.gitblog.vm
362 </VirtualHost>

:wq


이렇게 수정한 뒤 문법에 문제가 없는지 체크해보자


1
2
3
4
[root@Linux01 ~]# httpd -t
...
...
Syntax OK


문제가 없다면 구문 OK 라고 나올 것이다.


1
[root@Linux01 ~]# systemctl enable --now httpd


systemctl 명령어로 http 데몬 서비스를 활성화한다.


CentOS8



보조 DNS 서버와 웹 서버를 구축하기 위해 필요한 패키지를 설치한다.


1
[root@centos8 ~]# yum -y install caching-nameserver httpd


CentOS7(Linux01)에서 했던 것 처럼 /var/named.conf 파일을 수정한다. => any; any;


하지만 보조 영역을 위한 /var/named.rfc1912.zones 파일은 다르게 수정한다.


보조-named.rfc1912.zones


위와 같이 수정한 뒤 named 서비스를 시작하면 /var/named/slaves 아래에 지정한 이름으로 읽기전용 영역 파일이 생성된다.


/var/named/slaves/gitblog.vm.slave.zone 파일은 암호화되어 저장되기 때문에 자세히 알아볼 수 없다.


gitblog.vm.slave.zone


이제 2번째 웹서버를 구축한다. https로 구현하도록하고 먼저 /var/www/html/index.html 파일을 만들겠다.


1
2
[root@centos8 ~]# cd /var/www/html
[root@centos8 html]# echo ssl.gitblog.vm site > index.html


SSL(Secure Socket Layer) 인증으로 자체 서명한 인증서를 만들기 위해 관련 패키지를 설치한다.


1
[root@centos8 ~]# yum -y install mod_ssl


설치한 뒤 /etc/ssl/ 폴더로 이동해 private라는 폴더를 생성해 그 안에 인증서 파일과 개인키를 생성하도록 하겠다.


1
2
3
[root@centos8 ~]# cd /etc/ssl
[root@centos8 ssl]# mkdir private
[root@centos8 ssl]# cd private


openssl 명령어로 개인키와 인증서를 생성한다.


1
[root@centos8 private]# openssl req -x509 -nodes -newkey rsa:2048 -keyout gitblog.vm.key -out gitblog.vm.crt


rsa 알고리즘으로 2048비트 암호화를 실행해 gitblog.vm.key라는 개인키와 gitblog.vm.crt라는 인증서 파일을 생성한다.


openssl 생성


https 자체 서명 인증서가 작성되었다.


이제 80번 포트(http)로 들어와도 443 포트(https)로 들어오도록 /etc/httpd/conf/httpd.conf 파일을 수정한다.


1
2
3
4
5
6
7
8
9
10
[root@centos8 ~]# vim /etc/httpd/conf/httpd.conf

...
...
358 <VirtualHost *:80>
359     ServerName ssl.gitblog.vm
360     ServerAlias gitblog.vm
361     Redirect permanent / https://ssl.gitblog.vm/
362 </VirtualHost>
:wq


제일 아래 줄에 위 처럼 작성한다.


이제 ssl 관련 설정 파일 /etc/httpd/conf.d/ssl.conf 파일을 수정하도록 한다.


1
[root@centos8 ~]# vim /etc/httpd/conf.d/ssl.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
...
...
203
204 <VirtualHost *:443>
205     ServerAdmin admin@gitblog.vm
206     ServerName ssl.gitblog.vm
207     ServerAlias gitblog.vm
208     DocumentRoot /var/www/html
209     SSLEngine on
210     SSLCertificateFile /etc/ssl/private/gitblog.vm.crt
211     SSLCertificateKeyFile /etc/ssl/private/gitblog.vm.key
212 </VirtualHost>
:wq


저장한 뒤 httpd -t 명령으로 문법을 체크하면 에러가 발생하는데 이 이유는 ssl 가상 호스트의 개인키와 인증서 파일의 위치를 모르기 때문이다.


systemctl start httpd 명령으로 에러가 없다면 정상 작동할 것이다.


1
2
[root@centos8 ~]# systemctl start httpd
[root@centos8 ~]# systemctl enable httpd



window 2003


IP 설정


window IP 설정


DNS 관리창 위치


window DNS 설정 위치


영역 추가


DNS 정방향 영역 추가


다음 -> 보조 영역 체크 -> gitblog.vm 영역 이름 설정 -> 주 영역 IP 주소 추가 -> 다음 -> 마침


잠시 기다리면 주 DNS 서버로부터 영역이 로드된다.


불러온 정방향 조회 영역


window DNS gitblog.vm


이제 internet explorer로 확인해보자


이 때 주의할 점은 만약 명령 프롬프트로 ping 명령어를 통해 dns 정보가 기록된 상태라면 ipconfig /flushdns 명령어를 입력해 dns 정보를 지운 뒤 확인하는 것이 좋다.


dns 정보를 확인하고 싶을 때 ipconfig /displaydns 명령어로 cmd에서 확인할 수 있다.


리눅스에서 dns 정보를 확인할 수 있는 파일은 /etc/resolv.conf 파일로, 해당 파일을 바꾸면 dns 서버를 즉각적으로 바꿀 수 있다.


www1.gitblog.vm


www2.gitblog.vm


ssl은 explorer에서 확인할 수 없으니 firefox를 사용하겠다.


리눅스에서 확인할 때 네임서버 설정을 해주지 않으면 위치를 알 수 없기 때문에, /etc/resolv.conf 파일에서 네임서버의 ip를 설정해주자.


/etc/resolve.conf


ssl.gitblog.vm main


고급.. -> 위험을 감수하고 계속


ssl.gitblog.vm site


3. 2단계 실습


CentOS8 - 2, CentOS7 - 2 웹서버 구축 및 MariaDB 서버 구축


먼저 CentOS8-2을 설정한다


1
[root@centos8 ~]# yum -y install httpd mariadb-server


관련 패키지를 설치한다.


이후 /var/www/html 안에 index.html 파일을 생성한다.


1
2
[root@centos8 ~]# echo www1.site centos8 > /var/www/html/index.html
[root@centos8 ~]# systemctl enable --now httpd


이후 mariaDB에 유저를 추가할 것인데, 조금 아래에서 한 번에 하도록 하겠다.



이제 CentOS7-2에 구축할 것인데, index.html 대신 start.html을 기본 페이지로 인식시킬 수 있도록 바꾸자.


해당 설정 파일은 /etc/httpd/conf/httpd.conf 파일의 164번째 줄이나 이것은 CentOS7 기준이다.


1
2
3
4
5
[root@Linux01 ~]# vim /etc/httpd/conf/httpd.conf

... 아래 이미지와 같이 바꾼 뒤...

[root@Linux01 ~]# systemctl enable --now httpd


start.html 추가


MariaDB에 데이터베이스를 생성하고 테이블을 만들어 간단한 조회를 해보도록 하겠다.


1
[root@Linux01 ~]# systemctl enable --now mariadb


심볼릭 링크 파일이 생성되었다는 알림이 나오면 mysql을 입력하고, 유저를 생성하겠다.


1
[root@Linux01 ~]# mysql


CentOS7 mariadb user 추가


CentOS7 MariaDB 유저 추가 완료




CentOS8 mariadb user 추가


CentOS8 MariaDB 유저 추가 완료




CentOS7에서 테이블을 생성하고 임의의 레코드를 삽입하겠다.


MariaDB CREATE, INSERT


HAProxy 설정


CentOS7(Linux01) 으로 돌아온다.


haproxy 패키지를 다운로드받는다.


1
[root@Linux01 ~]# yum -y install haproxy


haproxy 설정 파일 /etc/haproxy/haproxy.cfg 을 수정한다.


HAProxy 모드 변경


원래 http로 되어있던 부분을 tcp로 변경


HAProxy 웹서버 라운드로빈


HAProxy DB서버 라운드로빈

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.