본문 바로가기

[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정

Day12: 리눅스 관리자| 메일 서버 구성 | APM 구성 | apache PHP MariaDB + 노브레이크(no.break)의 김석 대표님 멘토링

1. 지난 시간 복습
2. 서비스 확인하는 법
3. CNAME 설정하기
4. 메일 서버 구성
  - "서버의 버전 정보가 노출되는 보안 취약점"
5. apache 설치 및 구성
6. PHP 다운 및 설정
7. Maria DB 설치

 


1. 지난 시간 복습 

윈도우에서 리눅스 DNS 서버 들어가보기

C:\Users\student>ipconfig /flushdns
C:\Users\student>nslookup
기본 서버:  kns.kornet.net
Address:  168.126.63.1

> server 70.12.113.65
기본 서버:  ip-70-12-113-65.kscymo.spcsdns.net
Address:  70.12.113.65

 

기본 서버를 내가 구성한 DNS로 설정하고 서버에 잘 들어가지는 지 확인한다. 


2. 서비스 | 프로세스 확인하는 법

보통 프로세스 확인하라고 하면 

ps -ef | grep 을 많이 쓰는데 이외에도 다양한 확인법을 알아보았다. 

ss -tanp | grep :80
ps -ef | grep httpd
admin     4473  4418  0 09:28 pts/1    00:00:00 grep --color=auto httpd

//아래 파일에서 서비스 포트와 tcp 인지 udp 인지를 확인할 수 있음
more /etc/services

//프로세스의 cpu, 메모리 사용률 등을 같이 확인할 수 있음
ps aux

netstat - : 8 세대 가면 사라짐
ss - uanp | grep :53 이걸로 보는 게 좋음

ss는 socket static 을 의미하며, 옵션을 잘 활용해야 한다.

  • -a : 모든 포트 확인
  • -t : TCP 포트 확인
  • -u : UDP 포트 확인
  • -l : LISTEN 상태 포트 확인
  • -p : 프로세스명을 표시
  • -n : 호스트 / 포트 / 사용자이름을 숫자로 표시

위의 사용 예시에서 ss -tanp 는 모든 포트를 확인해서, TCP 서비스의 프로세스명, 호스트, 포트, 사용자 이름 등을 출력하라는 뜻이다. t 옵션이나 u 옵션을 잘 못 주면 검색이 잘 되지 않는다.

 

그렇다면 TCP 인지 UDP인지는 어디서 확인할까? 바로 /etc/services 이다. 해당 파일에서 서비스의 지정된 포트도 함께 살펴볼 수 있다. 

 

한 번 더 정리하자면 아래와 같다. 

ss -uanp | grep : 53        //udp 면 u 옵션, tcp 면 t 옵션. p 는 process 옵션
[root@web ~]# cat /var/run/named/named.pid
1574
[root@web ~]# ps -ef | grep 1574
named     1574     1  0 09:07 ?        00:00:00 /usr/sbin/named -u named -c /etc/named.conf
root      4815  4714  0 09:44 pts/1    00:00:00 grep --color=auto 1574
[root@web ~]# ls -l /proc/1574/exe
lrwxrwxrwx. 1 named named 0 Jul 22 09:07 /proc/1574/exe -> /usr/sbin/named
[root@web ~]# rpm -qf /usr/sbin/named
bind-9.11.4-16.P2.el7_8.6.x86_64
[root@web ~]# rpm -V bind
S.5....T.  c /etc/named.conf
S.5....T.  c /etc/named.rfc1912.zones

 
더보기를 누르면 rpm -V 에 관한 설명을 볼 수 있습니다.

더보기

선생님께서 rpm -V 옵션에서 결과값들의 의미를 알고있냐고 물어보셨는데, 아무도 알지 못했다. 
과제라면서 알아오라고 하셔서 진짜로 알아보았다. 

rpm -V 옵션은 설치된 패키지 파일의 무결성 검사를 해준다. 

패키지들을 검증해서 패키지 변조 여부를 확인할 수 있다. 

검증 결과 변화된 값이 없으면 . 이 출력되고, 변화가 있으면 해당 값이 나타난다.

처음의 각 8글자들은 RPM 데이터 베이스와 각 특성을 비교한 결과를 의미한다.

 

비교 결과 문제점이 발생되면 다음과 같은 문자가 출력된다.

S - size (파일 크기)

M - mode (허가와 파일 유형 포함)

5 - MD5 체크섬

D - device 장치

L - link 심볼릭 링크

U - user 사용자

G - group 그룹

T - time 파일 수정 시간

? - 읽기 불가 파일

 

이 내용은 https://m.blog.naver.com/PostView.nhn?blogId=jbin_k&logNo=130071603209&proxyReferer=https:%2F%2Fwww.google.com%2F 블로그를 참고하여 작성하였다. 

감사합니다. 


3. CNAME 설정하기

 /var/named/data/hyeonjeong.kr.zone 파일에 cname을 적어주면 된다.

$TTL 3H
@	IN SOA	@ master.hyeonjeong.kr. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	IN	NS	ns.hyeonjeong.kr.	
	IN	A	70.12.113.64	
	IN	A	70.12.113.62
ns	IN	A	70.12.113.64	
www	IN	CNAME	hyeonjeong.kr.

 맨 아래 줄에 보면, www IN CNAME hyeonjeong.kr 을 추가해주었다.

hyeonjeong.kr 이 도메인 이름이지만, www.hyeonjeong.kr  을 쳐도 설정된 서버에 들어올 수 있도록 추가해 주는 것이다. 

더보기를 누르면 A 로 추가하는 것과 CNAME 설정의 차이를 확인할 수 있습니다.

더보기

본인이 운영하는 서버가 오직 하나의 IP 만 가지고 있다면, 그냥 www.hyeonjeong.kr  을 새 zone 파일로 만들어서 A 로 넣어줘도 되겠지만, 여러개의 IP를 가지고 있다면 새 파일 설정하는 것이 귀찮을 것이다. 그냥 www cname으로 한 줄만 추가해주면 된다.

CNAME(Canonical Name) 을 구성하면, CNAME이나 원래 도메인을 nslookup할 때 같은 IP 주소를 출력한다.

> hyeonjeong.kr
서버:    ip-70-12-113-64.kscymo.spcsdns.net
Address:  70.12.113.64

이름:    hyeonjeong.kr
Addresses:  70.12.113.64
          70.12.113.62

> www.hyeonjeong.kr
서버:    ip-70-12-113-64.kscymo.spcsdns.net
Address:  70.12.113.64

이름:    hyeonjeong.kr
Addresses:  70.12.113.62
          70.12.113.64
Aliases:  www.hyeonjeong.kr

4. 메일 서버 구성

메일 서버 설정 역시 /var/named/data/hyeonjeong.kr.zone 파일에서 설정한다.

$TTL 3H
@	IN SOA	@ master.hyeonjeong.kr. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	IN	NS	ns.hyeonjeong.kr.	
	IN	A	70.12.113.64	
	IN	A	70.12.113.62
	IN	MX 10 	mail1.hyeonjeong.kr
	IN	MX 20 	mail2.hyeonjeong.kr
ns	IN	A	70.12.113.64	
www	IN	CNAME	hyeonjeong.kr.
mail1	IN	A	70.12.113.65
mail2	IN	A	70.12.113.75

 

가장 아래 두 줄을 보면 mail1 과 mail2 의 A가 추가되어 있다. 

또한 IN MX 10 mail1.hyeonjeong.kr IN MX 20 mail2.hyeonjeong.kr 도 추가된 것을 확인할 수 있다.

MX 10 MX 20 은 필수는 아닌데, 암묵적으로 십의 단위로 증가하도록 설정한다. 수가 적을 수록 우선순위가 있다고 하셨던 것 같다.


서버의 버전 정보가 노출되는 보안 취약점

아무래도 보안 과정이다보니, 강사님께서 서버를 설명하시더라도 보안 관점에서 바라보고 설명해주신다. 

서버를 설정할 때 유의해야 할 보안 취약점에 대해서 알아볼 수 있었다.

 

취약점 1. dig 명령어를 활용해서 서버 내부의 버전 정보를 확인할 수 있다.

 

[root@web data]# dig @70.12.113.64 version.bind chaos txt

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @70.12.113.64 version.bind chaos txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50939
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;version.bind.			CH	TXT

;; ANSWER SECTION:
version.bind.		0	CH	TXT	"9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6"

;; AUTHORITY SECTION:
version.bind.		0	CH	NS	version.bind.

;; Query time: 0 msec
;; SERVER: 70.12.113.64#53(70.12.113.64)
;; WHEN: Wed Jul 22 10:36:10 KST 2020
;; MSG SIZE  rcvd: 105

dig 명령어로 나의 서버에 version.bind chaos txt 쿼리를 던졌다. 

그랬더니 바로 version.bind. 가 "9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6" 이라고 알려준다.

 

버전 정보가 노출되는 것도 보안을 취약하게 하는 요소이기 때문에 노출되지 않게 설정을 해준다. 

named.conf 파일에서 version ""을 추가해준다. 그러면 version 쿼리를 받았을 때 아무 문자도 전송하지 않는다.

 

외국인들이 여기에 get out 과 같은 메시지를 써놓거나, 욕을 써놨다가 들켜서 곤란했다는 썰도 덤으로 들을 수 있었다 ㅋㅋㅋㅋ

 version  "";

 

 

취약점 2. allow-transfer 설정을 누락하면 서버의 설정파일을 아무나 다운받아갈 수 있다?!

 

/etc/named.rfc1912.zones 에서 allow-transfer none 을 필수로 줘야한다. 

그렇지 않으면 아무나 와서 설정파일을 받아갈 수 있다.

 

[root@web data]# dig @70.12.113.65 chanjoo.kr axfr

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @70.12.113.65 chanjoo.kr axfr
; (1 server found)
;; global options: +cmd
chanjoo.kr.		10800	IN	SOA	chanjoo.kr. master.chanjoo.kr. 0 86400 3600 604800 10800
chanjoo.kr.		10800	IN	NS	ns1.chanjoo.kr.
chanjoo.kr.		10800	IN	A	70.12.113.65
chanjoo.kr.		10800	IN	A	70.12.113.75
chanjoo.kr.		10800	IN	MX	10 mail1.chanjoo.kr.chanjoo.kr.
chanjoo.kr.		10800	IN	MX	20 mail2.chanjoo.kr.chanjoo.kr.
mail1.chanjoo.kr.	10800	IN	A	70.12.113.65
mail2.chanjoo.kr.	10800	IN	A	70.12.113.75
ns1.chanjoo.kr.		10800	IN	A	70.12.113.65
ns2.chanjoo.kr.		10800	IN	A	70.12.113.65
www.chanjoo.kr.		10800	IN	CNAME	chanjoo.kr.
chanjoo.kr.		10800	IN	SOA	chanjoo.kr. master.chanjoo.kr. 0 86400 3600 604800 10800
;; Query time: 1 msec
;; SERVER: 70.12.113.65#53(70.12.113.65)
;; WHEN: Wed Jul 22 10:48:16 KST 2020
;; XFR size: 12 records (messages 1, bytes 321)

마찬가지로 dig 명령어를 활용해서 서버에 axfr 명령어를 보내면, 해당 서버의 설정파일을 다운받아 올 수 있다. 

 

이걸 막기 위해서는 allow transfer 에 slave 도메인의 주소만 적거나, 아예 none 으로 막아주어야 한다.

 

취약점 3. 재귀질의로 리소스 낭비

 

재귀질의를 쓰면 도메인은 계속 루트 서버로 질의를 보내게 된다. 필요없는 자원을 낭비하는 셈이다. 

따라서 /etc/namd.conf 에서 

allow-recursion { none; }; 을 추가해준다. 

혹은 특정 IP 주소만을 지정해주던가  acl trucst { 172.0.0.1/24; 70.12.113.0./24; }; 신뢰되는 부분을 정의해줄 수 있다. 


APM 이라고도 불리는 apache php mariadb 설치 및 구성!

WEB Server 와 WAS 에 대한 이해는 덤!

더보기

WEB Server

iis

apache

nginx

tomcat ( 기존 web server + tomcat 구성 )

-------------------

WAS

 

Weblogic by oracle

WebSphere by IBM

Jeus by tmax

tomcat ( 단독 web server - jsp 환경 제공 )

5. apache 설치 및 구성

  •  yum -y install httpd // 설치
  •  /var/www/html 아래에 index.html 만들기
<html>
	<h1>
		<center> home page test </center>
	</h1>
</html>

간단하게 웹페이지를 만들고 실행해보았다.

리눅스에서 localhost 실행시 보이는 화면

 

윈도우 chrome 환경에서 실행시 보이는 화면

둘이 폰트가 완전 다르쥬?

 

apache의 취약점은 cve apache 2.4.6 을 검색해보면 볼 수 있다.

접은 글에는 apache의 사용 버전이 노출되는 보안취약점에 대해 다룬다.

 

더보기

[root@web conf]# nc 127.0.0.1 80

HEAD / HTTP/1.1

HTTP/1.1 400 Bad Request

Date: Wed, 22 Jul 2020 06:12:20 GMT

Server: Apache/2.4.6 (CentOS) PHP/5.4.16

Content-Length: 226

Connection: close

Content-Type: text/html; charset=iso-8859-1

 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>400 Bad Request</title>

</head><body>

<h1>Bad Request</h1>

<p>Your browser sent a request that this server could not understand.<br />

</p>

</body></html>

 

사용 버전이 다 노출됨

 

따라서

/ETC/HTTPD/CONF/HTTPD.CONF 파일에서 안보이게 설정

ServerTokens no 설정 해줌.

참고할 만 한 사이트 : 

https://brocess.tistory.com/8

 

더불어 설정 시 절 대 하면 안되는 유의사항과 , 반드시 해줘야 하는 설정들을 알아보았다. 

위의 ServerTokens NO 는 반드시 해주어야 하는 설정이다. 또한 300~400번대 서버 에러 페이지를 통일하는 것도 필수 설정이다. 에러 메시지만 안보여도 해킹의 난이도가 올라간다.

 

가상 호스트 구성 & 설정

1. /var/www/html2/index.html 만들기

(기존 것과 다르게 만들기-그래야 다른 페이지인걸 확인할 수 있으니까)

<html>
	<h1>
		<center>> hyeonjeong's 두 번째 페이지입니다. <br></center>
		<hr>
		<center>welcome!</center>
	</h1>
</html>

 

2. /var/named/data/hyeonjoeng.kr.zone 파일에 first seond 추가해주기

first IN A 70.12.113.64
second IN A 70.12.113.64

 

3. virtualhost 부분 설정( /etc/httpd/conf.d/virtualhost.conf 에 아래 파일 생성 ) 

<VirtualHost    70.12.113.64:80>
        DocumentRoot    "/var/www/html"
        ServerName      "first.hyeonjeong.kr"
</VirtualHost>

<VirtualHost    70.12.113.64:80>
        DocumentRoot    "/var/www/html2"
        ServerName      "second.hyeonjeong.kr"
</VirtualHost>

 

설정이 끝나고  systemctl restart named.service 

 

그러면 first.hyeonjeong.kr 과 second.hyeonjeong.kr 을 입려했을 때 각각 설정해준 페이지가 출력된다.


6. PHP 다운 및 설정

1. yum -y install php

설정 놓침 ㅠ.ㅠ php 실행이 잘 안 될 경우, 설정파일에서 뭐 추가해줘야 한다고 했는데


7. Maria DB 설치

 

yum -y install mariadb

rpm -qa | grep mariadb

mariadb-libs-5.5.65-1.el7.x86_64

mariadb-5.5.65-1.el7.x86_64

 

systemctl restart htcacheclean.service 

하고나면 

rpm -ql mariadb | grep system 결과 아무것도 안뜸

--> 시스템에 올라와있지 않고, 서비스를 받으면 실행되었다가 꺼짐. 

 

Q. 웹 페이지에서 DB 사용하기 위해서 해당 포트 열어야 하나?

A. NO. DB 포트는 열지 않고, 웹 서버가 로컬 호스트에서 쿼리후 결과 받아서 전달. 직접 보여주지 않음. 



내일은 DB 연결하고, shell script 한다!

 

 

 

 

 


오늘 5시부터 약 한시간 가량 노브레이크(www.nobreak.co.kr)의 김석 대표님의 멘토링이 있었다.

 

앞으로 있을 멘토링에 대하여 설명을 듣고, 방향성을 정하는 자리였다.

 

취업은 어디든지 할 수 있는데, 취업이 문제가 아니다.

앞으로 나의 인생을 보고 인생이 우상향 할 수 있는 일을, 좋아하는 일을 할 수 있는지가 문제라는 말씀을 해주셨다.

 

또 취업과 관련하여 프로젝트 만큼이나 포트폴리오 보고서와 PPT 의 형식이 전문가다워야 한다는 말씀을 전해주셨다. 다만, 아직은 포폴이나 보고서를 걱정하지말고, 앞으로 멘토링을 통해 차차 완성시킬 수 있을 것이라는 따뜻한 조언도 해주셨다. 

 

약 6분의 멘토를 소개해주셨는데, 다들 어떤 회사의 대표나 유명하신 분들이어서 정말 든든한 마음이 들었다. 

 

화..이팅...!

 

반응형