본문 바로가기
Linux

WEB

by Nirah 2022. 11. 14.

<< WEB >>

 

 

CentOS 세 대를 구동해 주DNS, 보조DNS, 보조DNS 로 구성하고

blog, blog+intra, intra 주소를 각각 운영할 것이다.

 

분석

 

# /etc/httpd

 

설정파일들이 대충 뭐 있는지 기억해둔다.

 

# /etc/httpd/conf

 

 

 

# /etc/httpd/conf/httpd.conf

 

31줄 : 아파치 웹 서버의 기본적인 설정 담당 파일 위치

이 설정 덕에 WEB 관련된 기본 설정 파일들은 모두 etc밑에 httpd 파일에 위치한다.
(내부 아파치 설정파일 안에는 이 경로를 생략해서 써버린다!)

 

42줄 : 아파치 웹 서버의 포트를 지정한다. port 지시자를 대체하여 Listen을 사용한다. (기본 80)

 

56줄 : DOS 모듈

 

66줄 : 실행되는 httpd 데몬의 사용자, 그룹 권한. 여기에 시스템 계정을 넣어줘야 실행 가능하다.

보안상의 이점이 크다.

공격자가 아파치 서버를 공격해서 이 시스템 계정을 탈취해도, 딱 거기까지다.

서버를 장악하려면 root 계정을 추가로 탈취해서 권한 상승을 해야 하게 된다.

공격이 귀찮게 된다는 이야기다.

 

 

86줄 : 서버에 문제가 발생했을 경우 보낼 관리자의 메일 주소. 보통 팀 메일의 주소를 적는다.

95줄 : # 주석처리 되어있다. 여기 주석 처리를 지워야 웹 데몬을 시작할 때 경고 메세지가 사라진다.

119줄 : 웹 문서가 있는 위치 (컨텐츠 위치)

 

144줄 : 보안상 쓰지 말아야 할 기능이다. 보안에 자신 웬만큼 없으면 사용하지 말 것.
적당한 디렉토리에 백도어 프로그램을 숨겨놓는 것은 흔한 침해 방법이다.

Options Indexes FollowSymLinks 

Indexes : 디렉토리 리스닝 기능

 

 

163줄 : 처음 열리는 파일의 이름을 지정 가능. (웹페이지 디자인 가능) index.html 라는 파일을 인지 한다.

babo.html을 쓰고 싶다면 한칸 뛰고 추가하면 된다.

나중에 DB 관련 파일을 추가해서 웹페이지와 연결해 보도록 하겠다.

 

171줄 : .ht로 시작하는 파일에 대한 접근은 이렇게 거부해 놓았다.

ht.는 아파치의 사용자 인증 파일은 .htaccess의 권한 설정 파일이다.

 

181줄 : 에러에 관한 기록. <VirtualHost> 지시자에서 ErrorLog 성정을 안했다면

여기를 따름. /etc/httpd 가 생략된 경로다. 수시로 용량 관리를 해줘야 한다.

 

그냥 설정 파일은 구경만 하고 만질 필요 없이 이대로도 아파치가 작동한다.

(방화벽 먼저 열지 말고 실행 먼저 시킨다.)

 

# systemctl start httpd
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --reload


웹페이지 문구 수정 (옵션에서 지정해 줄 수 있으나, 디폴트 값으로 만들어 본다.)
# vi /var/www/html/index.html

<html>
<body>
<h1>shr.com~web-server~1</h1>
<style>
h1
{ font-size: 100px; color: blud; }
</style>
</body>
</html>

 

아래와 같이 만든 페이지가 뜬다.

 

 

 

==========================================================================

번외

 

아래와 같이 하위 디렉터리도 보이게 옵션이 체크돼있다.


# mkdir /var/www/html/1
# ln -s /home/a /var/www/html/1/a.txt

 

심볼릭 링크가 보이기 위해서는 권한문제를 해결하고
chmod a+rwx /home/a
systemctl restart httpd


아래와 같이 주석처리 하면 심볼릭링크파일이 다시 안보인다

===================================================================

 

 

 

<< Virtual Host >>


가상 호스트란
동일한 아이피에 동일한 포트번호를 쓰는 다른 웹서버를 여러개 만들기 위해 사용한다.
반드시 DNS의 도움을 받아야 한다.
(그냥 아이피로만 치면 원래 뭐가 나올지 랜덤인데, DNS가 지정한 대로 페이지를 연결해 줄수 있는 기술.)




CentOS1

 


# mkdir /var/www/blog
# vi /var/www/blog/babo.html

<html>
<body>
<h1>shr.com~web-centbabo1</h1>
<style>
h1
{ font-size: 100px; color: yellow; }
</style>
</body>
</html>




# vi /etc/httpd/conf/httpd.conf
이렇게만 하면 메인 웹 페이지가 안나오는 문제가 있다.

그래서 아래에 더 추가해 준다.

 

 

이렇게 한 파일 안에 계속 추가해 주는 방법이 있고, 너무 길어서 정리가 필요하면.
vi /etc/httpd/conf/httpd.conf 와 별개로 다른 연관 파일을 만들어 거기 새로 추가해 주는 방법이 있다.
아래 352줄의 뜻은 /etc/httpd 아래에 conf.d/*.conf에 해당하는 형식의 파일들은
모두 여기에 이어서 쓴것처럼 포함된다는 기능이다.

vi /etc/httpd/conf.d/vir.conf 라고 우리가 새로 이름 지어서 만들어 보자
아래 부분을 그 새 파일에 따로 넣어도 작동한다.

 

참고로 httpd가 restart 되지 않을 때 Journal -xe 에 IncludeOptional conf.d/*.conf 가 원인이라고 뜬다면

우리가 새로 만들어준 파일의 설정이 문제가 있다는 뜻이다.




centOS2

 


# mkdir /var/www/blog
# vi /var/www/blog/index.html
# mkdir /var/www/intra/
# vi /var/www/intra/index.html

# vi /etc/httpd/conf/httpd.conf

 

<VirtualHost *:80>
ServerName www.shr.com
DocumentRoot /var/www/html
ServerAlias shr.com
# Errorlog "logs/error_log"
</VirtualHost>
<VirtualHost *:80>
ServerName blog.shr.com
DocumentRoot /var/www/blog
</VirtualHost>
<VirtualHost *:80>
ServerName intra.shr.com
DocumentRoot /var/www/intra
</VirtualHost>



CentOS3

 

# mkdir /var/www/intra/
# vi /var/www/intra/index.htm

# vi /etc/httpd/conf/httpd.conf


centOS1 = masters DNS
# vi /var/named/shr.com

보조 DNS가 존파일을 읽어갈수 있게 바꿔준다.

# chmod o+r /var/named/shr.com

 

# systemctl reload httpd
# systemctl reload named


windows 머신에서 80번 포트 방화벽 열어주고, 도메인이 작동하는지 확인해 본다.

 

DNS 캐시를 지워주기 전까진 저 도메인으론 같은 페이지 밖에 못 띄운다.
ipconfig /flushdns 를 cmd에 쳐서 캐시를 초기화 시키고 나면
같은 www.shr.com 도메인도 다른 페이지가 보인다. (라운드로빈 작동 테스트)

 

 

 


==============================================================================

 

 

 

 

이제 부턴 보안을 위한 옵션들을 설정해 볼 것이다.

intra 페이지에는 .ht 사용자 인증을 적용할 것이고

Blog 페이지에는 ACL을 적용할 것이다.

 

 

<< .ht 사용자 인증을 적용한 계정 만들기 >>

 

# htpasswd -c /web/.auth aaa

 

주의할 점은 처음 만들 때만 -c 옵션을 써야 하고 이후 옵션 변경을 위해 다시 명령어를 쓸 때

-c 옵션을 다시 쓰게 되면 초기화 되니 붙이지 말자.

 

# cat /web/.auth 

여기에 계정의 암호화 된 패스워드를 볼 수 있다.

# vi /var/www/intra/.htaccess

위와 같은 파일을 생성하여 아래와 같은 내용을 입력해 보자.

intra.shr.com으로 접속할 때 인증을 통과시킬 계정을 등록하는 것이다.

아까 만든 aaa 계정을 넣어주자.

 

# vi /etc/httpd/conf/httpd.conf

 

<Directory /> ~ </Directory> 형식 : 특정 디렉토리를 제어할 때 쓰는 지시자.

각 디렉토리에 대한 권한 설정이나 기본 옵션.

 

# systemctl reload httpd

 

aaa로 로그인 해야만 들어갈 수 있다.

 

 

<< ACL 로 접근제한 >>

 

 1. option : CGI, SSI, 심볼릭 링크 사용 여부

 2. AllowOveride : 사용자 인증에 관련된 요소

 3. Order : 해당 디렉터리에 접근하는 호스트 인증을 담당, IP 주소 및 도메인에 대한 필터링 순서를 설정

뒤에 오는 쪽을 먼저 적용 시킨다.

 4. Require : 접근 권한을 거부하거나 허가할 때 사용

 

 

 

# vi /etc/httpd/conf/httpd.conf

 

Order deny,allow -> 전부 허용 후 금지 순으로 적용. (뒷쪽이 더 우선적용 된다)전부 금지 후에 특정인만 허용하는 것은 의미 없기 때문에 꼭 순서에 주의해야 한다.반대로 전부 허용 후에 특정인만 금지하는것도 의미 없다.

Networking에서 이런 ACL을 많이 만져 봤는데, 팁이 하나 있다.작은 규모에서 큰 규모 순서로 적용되어야 한 다는 것이다. (집합적 의미로)

 

아래 부분은 blog.shr.com 접속 시에 10.0.0.101 이외에 전부 엑세스에 거부하는 구문이다.

아래 부분은 인증을 거치게 만드는 구문이다.

인증된 사용자만이 intra.shr.com 을 접속할 수 있을 것이다.

 

# systemctl reload httpd

 

아래는 10.0.0.101로 접속한 모습이다. 허용되지 않아서 ACL에 걸려 페이지를 못 띄운다.

아래의 화면을 좀 더 성의 있게 만들고 싶다면

 

# vi /etc/httpd/conf.d/welcome.conf

여기에 Test123 이 뜰 시의 파일 내용이 있다. 주석 처리하거나 적절히 수정해서 써보자.

 

DHCP 주소를 바꿔서  10.0.0.101로 접속해 보았다. ACL에 유일하게 허용해 놓은 IP이다.

바로 설정해 놓은 페이지가 뜬다.

 

 

 

 

 

 

전체 그림으로 보면 이런 모습이다.

 

 

 

 

 

============================================================

<< 초기화 >>

 

 

vi /rm.sh 를 만들어 아래 스크립트를 넣고 실행한다.

#! /bin/bash
yum remove -y bind bind-utils bind-libs httpd vsftpd dhcp
rm -rf /var/named /var/www /etc/named.conf.rpmsave /etc/named.rfc1912.zones.rpmsave /etc/httpd /ftp /etc/vsftpd /etc/dhcp /var/lib/dhcpd
firewall-cmd --permanent --remove-port=53/tcp
firewall-cmd --permanent --remove-port=53/udp
firewall-cmd --permanent --remove-port=80/tcp
firewall-cmd --permanent --remove-port=21/tcp
firewall-cmd --premanent --remove-port=65000-65100/tcp
firewall-cmd --reload

 

 

 

<< 트러블 슈팅 >>


참고로 200번은 정상 연결
400번은 클라이언트 측의 오류 (잘못된 요청)
500번은 서버 측의 오류

 

 

 

'Linux' 카테고리의 다른 글

history에 시간정보 표시하는 명령어  (0) 2022.11.16
Proxy server 만들기  (0) 2022.11.15
보조 DNS 설정 (Master, Slave)  (0) 2022.11.14
DNS Server  (0) 2022.11.11
FTP (active, passive mode)  (0) 2022.11.09