독까의 이야기

DNS 란? 

네트워크에서 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석해주는 TCP/IP 네트워크 서비스이다.

TCP/IP 네트워크에서 사용되는 네임 서비스의 구조이다. TCP/IP 네트워크에서는 도메인이라고 하는 논리적 그룹을 계층적으로 설정할 수 있고, 그 논리적 그룹 명칭인 도메인명을 컴퓨터의 명칭(호스트명)의 일부에 포함시켜 이용하는 방법을 찾고 있다. 도메인 혹은 호스트 이름을 숫자로 된 IP 주소로 해석해 주는 TCP/IP 네트워크 서비스로서, 계층적 이름 구조를 갖는 분산형 데이터 베이스로 구성되고 클라이언트·서버 모델을 사용한다. 


각 컴퓨터의 이름은 마침표에 의해 구분되고 알파벳과 숫자로 구성된 세그먼트의 문자열로 구성되어 있다. 예를 들어 기관별로는 com이면 기업체, edu인 경우는 교육기관, go 또는 gov인 경우는 정부기관 등으로 나누어져 있다. 국가도메인은 au는 호주, ca는 캐나다, jp는 일본, kr는 한국, tw는 대만, uk는 영국 등이다.

[네이버 지식백과] DNS [domain name system] (두산백과)

라고 한다. 

뭐 간단히 말해서 PC 사용자가 특정 웹사이트 접속을 위해, 웹브라우저에 url 을 입력하면 DNS 에서 해당 웹사이트가 구축되어 있는 웹서버의 아이피를 확인하여 연결해주는 것이다. 라고 하면 될 걸 길게도 썼네. 그냥 교환국 입니다. 가 끝이지뭐. 

리눅스 서버에서 DNS 서버를 구축하기로 한다. 



1.  도메인 구입

테스를 위해서 무료 도메인 검색을 해봤는데, 마땅히 나오는 것도 없고 해서 .xyz 도메인을 구입했다. 

가비아에서는 1900 원에 구입이 가능했는데, 고대디에서는 1260 원이라길래 고대디에서 구매를 진행했다. 

 visa 카드로 결제 하는데, 자동 갱신이 기본 설정이므로 까먹고 있으면 돈만 쭉쭉 나가게 생겼다. 내 정보에서 자동 갱신을 취소 해야 한다. 

외국 사이트들은 왜 카드정보를 입력해 놓으면, 자동 갱신을 Default로 설정 하는지 모르겠다. 

예전에 4shared 사용할 때도 자동 결제 해지하느라 영문 메일 보내고 개빡침! 


저장 된 카드 정보도 삭제를 하려고 했는데, 사용 중인 상품에 결제 방법이 연동되어 있어서 안 된다고 한다. 

도메인 만료시에 삭제를 해야겠다. 

이제 도메인도 구입을 했으니, 서버에 설치를 진행 한다. 



2.  bind 패키지 설치 및 방화벽 오픈

# yum install bind* -y

자동으로 쭉쭉 설치가 되기 때문에 따로 할 것은 없다. 


DNS 서비스 실행 및 자동 실행 설정

# service named start

# chkconfig named on

# chkconfig --list named

named           0:해제  1:해제  2:활성  3:활성  4:활성  5:활성  6:해제


# vi /etc/sysconfig/iptables 에 정책 추가

-A INPUT -p udp -m udp --dport 53 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

# service iptables restart



3.  설정 파일 수정

# vi /etc/named.conf

listen-on port 53 { 127.0.0.1; }; -> listen-on port 53 { any; };

allow-query     { localhost; }; -> allow-query     { any; };

최하단에 도메인 및 zone 파일 정보를 입력한다. 

다른 게시글들을 읽어보면, named.rfc1912.zones 의 하단에 도메인 정보를 입력하라고 하는데, 그냥 named.conf 에 입력해도 무관하다. 

named.rfc1912.zones 에 도메인 및 zone 파일 정보를 입력하라는 얘기는 named.conf 에서 include 를 통해서 named.rfc1912.zones 에 기재 된 내용을 갖고 오기 때문인데, 본인이 알아서 사용하면 될 것 같다. 

include "/etc/named.rfc1912.zones";


결론은 named.conf 에 입력하거나 named.rfc1912.zones 입력하거나 똑같다는 얘기다. 단, 중복이 되서는 안 된다. 

정방향과 역방향 둘 다 입력해준다. 

단순 도메인 정보 입력이면 역방향까지는 생성 안 해줘도 된다. 

내 서버에 네임서버를 구축하여 연동을 시켜야 하기 때문에 역방향까지 등록을 한다. 


// 정방향

zone "gunnm.xyz"             IN {type master;file "gunnm.xyz.zone";allow-update {none;}; };

// 역방향

zone "77.175.254.121.in-addr.arpa"             IN {type master;file "77.175.254.121.rev";allow-update {none;}; };



4.  zone 파일 생성

/var/named 폴더에 등록되어 있는 named.localhost 를 복사하여 zone 파일을 생성한다. 

zone 파일에 등록되는 세부 항목에 대해서는 아래의 표를 참고 하면 될 것 같다. 

형식

설명

;

주석

TTL

Time to Live. 캐시 활성 시간으로, 서버 정보를 자주 변경하는 경우는 보다 짧게 입력하자.

@

Origin을 뜻하는 특수문자이다.

IN

Internet. 네트워킹 주소 클래스

SOA

Start Of Authority. 네임 서버 관리자 메일 주소. 해당 도메인의 모든 리소스에 대한 권리를 알려 주는 레코드이다.

NS

Name Server. 네임 서버를 알린다.

MX

Mail Exchanger. 지정하는 메일 서버가 2개 이상일 때 우선순위를 지정한다.

A

Address. 도메인을 IP로 매핑하는 가장 중요한 레코드이다.

[네이버 지식백과] (유닉스 리눅스 명령어 사전, 2010. 11. 30., 한빛미디어)


# cp /var/named/named.localhost /var/named/gunnm.xyz.zone

$TTL 1D

@       IN SOA  ns1.gunnm.xyz. webmaster.gunnm.xyz. (

                                        3       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        IN      NS      ns1.gunnm.xyz.

        IN      NS      ns2.gunnm.xyz.

        IN      A       121.254.175.77

ns1      IN      A       121.254.175.77

ns2      IN      A       121.254.175.77

www     IN      A       121.254.175.77


# cp /var/named/named.localhost /var/named/77.175.254.121.rev

$TTL 1D

@       IN SOA  ns1.gunnm.xyz. webmaster.gunnm.xyz. (

                                        3       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        IN      NS      ns1.gunnm.xyz.

        IN      NS      ns2.gunnm.xyz.

77      IN      PTR     gunnm.xyz.

77      IN      PTR     www.gunnm.xyz. 



5.  설정 파일 점검

수정 된 named.conf 및 생성 된 zone 파일에 대한 점검을 진행해야 한다. 이 작업을 통해 오류를 확인하고 수정을 할 수 있다. 

# named-checkconf -z /etc/named.conf

# named-checkzone gunnm.xyz /var/named/gunnm.xyz.zone

# named-checkzone 121.254.175.77 /var/named/77.175.254.121.rev

오류가 났을 경우에는, 줄 번호와 함께 오류 원인이 나오니깐 수정을 하면 된다. 



6.  파일 권한 변경

게시글마다 권한 설정에 대한 의견이 분분하다.

ex) chown named:root zone 파일명    또는     chown root:named zone 파일명


나는 아래와 같이 진행을 했다. 

root(소유자):named(소유 그룹) zone 파일명

# chown root:named gunnm.xyz.zone

# chown root:named 77.175.254.121.rev

# chmod 660 gunnm.xyz.zone

# chmod 660 77.175.254.121.rev

구동 서비스에 권한을 어느 정도 할당하냐에 따라서 설정이 달라 질 수 있을 것 같다. named:named 로 권한 할당해도 구동이 가능한 걸 보면...



7.  DNS 서비스 재시작

# service named restart 

named 정지 중:                                             [  OK  ]

named 시작 중:                                             [  OK  ]

정상적으로 구동이 완료되면 설정에 이상은 없다는 뜻이다. 



8.  도메인 구입처에서 네임서버 정보 변경

내 서버에 네임서버를 구축했으니, 고대디에서 기본으로 제공해주는 네임서버 정보를 내가 구축한 네임서버로 변경을 해야 한다. 

고대디에 로그인 후 내 도메인 선택 - DNS 관리 - 네임서버 에서 "변경" 을 클릭 후 내가 구축 한 네임서버 정보를 입력한다.

ns1.gunnm.xyz

ns2.gunnm.xyz

해서 완료는 개뿔, 메일이 온다. 실패 메일이. 

여기서 시간 다 소비했다. 

만들었던 도메인 설정 및 zone 파일 삭제하고 다시 만들고 네임서버명 변경해보고 권한도 다시 할당하고 다 해봤다. 

그래도 계속 똑같은 실패 메일만 수신이 되어서 고객센터에 전화를 했다. 

대기 시간이 10분 이상 걸릴 것 같다드만, 20분 걸림. 영어로 대화하고 싶으면 1번 누르라는데 회화 불가로 포기. 

결국 상담원과 통화 됐는데, 한국사람이 아닌것 같다. 발음하고 억양이 다르다. 옆에서 들려오는 음성들을 들어보니 한국이 아닌 것 같다. 

아마도 전화를 포워딩해서 다른 지역에 있는 CS 센터에서 총괄을 하는 것 같다. 한국 담당은 1명이라서 대기 시간이 길었던 걸지도. 

상담원에게 내가 처해있는 상황에 대해 설명을 하니 정말 간단하게 해결을 해주었다. 


DNS 관리 - 최하단 - 호스트 이름 선택

여기에서 내가 구축한 네임서버 등록을 해야 한단다. 

관리페이지의 기능 버튼들을 다 눌러보았으면 금방 해결 되었을 텐데. 뻘짓했다. 

여기에 내 네임서버의 정보를 입력을 한 후, 

DNS 관리 - 네임서버 에서 "변경" 선택 후 내 네임서버 url 을 입력하면 정상적으로 반영이 된다. 

후이즈 조회시 변경 된 네임서버가 확인 된다. 

Name Server: NS1.GUNNM.XYZ

Name Server: NS2.GUNNM.XYZ


서브 도메인 추가 테스트 정상적으로 완료가 되었다. 


문제는 DNS 서비스가 구동되면 취약점 공격이 너무 많이 들어와버려서 관리를 잘 해야 한다. 

예전에도 bind 패키지가 구 버전인 리눅스 서버들에 대한 무작위 DDOS 공격이 들어와서 DNS 서비스를 구동하지 않는 서버들에 대해서는 삭제 조치 및 버전 업그레이드를 진행 했었다. 

그 때 확인 된거는 공격 당한 서버를 경유지로 이용해서 미국의 록히드 마틴 홈페이지를 공격했었는데, 별 희안한 해커들도 많은 것 같다. 

다음에는 리눅스 DNS 를 마스터, 윈도우 DNS 를 슬레이브로 구축하는 방법을 진행 해야겠다. 

오늘은 워드프레스 설치를 테스트 한다. 

복잡하게 이것저것 설정하지 않고, 게시글 등록까지만 하고 끝낸다. 




1.  워드프레스 홈페이지에서 소스 다운로드 

# wget https://ko.wordpress.org/wordpress-4.9.4-ko_KR.tar.gz



2.  압축해제

# tar zxvf wordpress-4.9.4-ko_KR.tar.gz

압축이 해제 되면 wordpress 라는 폴더가 생성 된다. 

해당 폴더를 아파치의 웹루트 경로로 이동 시킨다. 

# mv /wordpress /var/www/html/



3.  워드프레스 DB 생성

mysql 을 이용해서 DB 및 계정 생성을 진행한다. 


mysql> create database wordpress;

mysql> create user wp@localhost;

mysql> set password for wp@localhost = password('wpPw(*)0312')

mysql> grant all privileges on wordpress.* to wp@localhost identified by 'wpPw(*)0312';

mysql> flush privileges;



4.  워드프레스 DB Connection 설정 수정

# pwd

/var/www/html/wordpress


# cp wp-config-sample.php wp-config.php

# vi wp-config.php


아래 항목에 대한 수정 진행.


define('DB_NAME', 'wordpress');

define('DB_USER', 'wp');

define('DB_PASSWORD', 'wpPw(*)0312');



5.  게시글 최대 용량 수정 (php.ini)

# vi /etc/php.ini

줄 번호 729 수정 : post_max_size = 8M -> post_max_size = 20M



6.  워드프레스 접속하여 관리자 정보 입력

웹브라우저에 url 입력

192.168.1.1/wordpress

하면 워드프레스 설치 페이지가 나온다. 


기본 정보 입력하고 "워드프레스 설치하기" 를 클릭하면 기본 세팅은 완료 된다. 


관리자 페이지에 로그인시 아래와 같은 화면을 볼 수 있다. 



7.  게시글 작성

관리자 페이지에서 

글 - 새 글 쓰기 를 선택해서 게시글을 등록 한다. 



8.  작성글 확인

메인 페이지에서 방금 등록한 글이 정상적으로 출력 됨을 확인 할 수 있다. .


제대로 운영을 하려면, 권한이나 첨부 파일 기능 등과 같이 수정할 부분이 많지만 나중에 진행을 하기로 한다. 

다음에는 그누보드나 제로보드와 같이, 웹사이트형 게시판 설치를 진행 한다. 

리눅스 테스트 서버가 초기화 되어 기존에 설치 했던 내용을 처음부터 다시 진행 중이다. 

한글 입력 방식 설치하고 나서 리부팅 후 파이어폭스를 실행하였더니, 페이지를 찾을 수 없음만 나왔다. 


리부팅 전까지는 잘 사용했던게 왜 안 되나 잠깐 생각하다가 DNS 관련 문제일 것으로 추정되어 설정을 확인해 보았다. 


vi /etc/resolv.conf

기존에 등록되어 있던 정보가 사라지고 초기화 된 설정만이 출력 되고 있었다. 


resolv.conf 에 DNS 정보

nameserver 8.8.8.8

nameserver 164.124.101.2

를 다시 입력하고 리부팅을 하였더니, 또 초기화가 되어 있었다. 


업데이트가 되면서 뭔가 꼬였던 것 같긴 하지만, 해결 범위이므로 진행을 계속 한다. 

이더넷 설정에 직접 DNS 정보를 삽입하여 네임서버를 등록한다. 


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

DNS1="8.8.8.8"

DNS2="164.124.101.2"


네트워크 서비스를 재시작 한다. 

service network restart


resolv.conf 를 확인해 본다. 

정상적으로 추가되어 있다. 


리부팅 후 다시 확인해 본다. 

DNS 정보가 정상적으로 확인 된다. 


파이어폭스에서 웹페이지 출력 확인해 본다. 

잘 된다. 

'리눅스 공부' 카테고리의 다른 글

리눅스 / DNS 서버 구축  (1) 2018.03.23
리눅스 / 워드프레스 설치  (0) 2018.03.12
리눅스 한글 입력 (GUI 환경)  (0) 2018.02.14
리눅스 한글 깨짐 / 한글 비정상 출력  (1) 2018.02.14
리눅스 ssh 접속  (0) 2018.02.10