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>
간단하게 웹페이지를 만들고 실행해보았다.
둘이 폰트가 완전 다르쥬?
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 설정 해줌.
참고할 만 한 사이트 :
더불어 설정 시 절 대 하면 안되는 유의사항과 , 반드시 해줘야 하는 설정들을 알아보았다.
위의 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분의 멘토를 소개해주셨는데, 다들 어떤 회사의 대표나 유명하신 분들이어서 정말 든든한 마음이 들었다.
화..이팅...!
'[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정' 카테고리의 다른 글
Day14: 리눅스 서버 실습| 미니 프로젝트 (0) | 2020.07.27 |
---|---|
Day13: 리눅스 관리자 | FTP | NFS | 쉘프로그래밍 (0) | 2020.07.27 |
Day11: 리눅스 관리자 | DNS 서버 구성| DNS 조회 | nslookup | dig | host | DNS 서버 관리 (0) | 2020.07.21 |
Day10: 리눅스 관리자 복습 & 깃허브 특강 (0) | 2020.07.19 |
Day9: 리눅스 관리자 | OpenSSH | NTP서버 | 방화벽 관리 (0) | 2020.07.19 |