본문 바로가기
Linux

Apache Web Server

by shinebee* 2020. 6. 4.

Web Service

- HTTP protocol에 의해 내용이 전송된다.

- 80/TCP 가끔 8080/tcp 443/tcp(http)


//웹 서버 테스트 

yum install -y httpd
systemctl start httpd
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

mkdir /var/www/html2
cd /var/www/html2
echo "hi" > hello.html

vi /etc/httpd/conf/httpd.conf
    42  Listen 8080  //웹 서버가 페이지 요청을 수신할 네트워크 인터페이스 및 포트 지정. 
    		     //8080번 포트에서 요청을 수신하겠다.
    119 DocumentRoot "/var/www/html2" //웹 서버가 웹 서비스를 통해 표시할 디렉토리를 지정.
    121 <Directory "/var/www/html2">  //html2 디렉토리에 적용될 지시어 그룹.
    122     AllowOverride None
    123     # Allow open access:
    124     Options Indexes FollowSymLinks
    125     Require all granted
    126 </Directory>

systemctl restart httpd
firewall-cmd --add-port=8080/tcp
firewall-cmd --list-all
setenforce 0
getenforce

 

-> 192.168.122.200:8080/hello.html 로 접속

     hi

     확인


* 사용자 페이지 생성 및 테스트

- Server

yum install -y bind*
systemctl start named.service
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
cp /var/named/named.empty /var/named/data/20200604.zone
vi /var/named/data/20200604.zone
	$TTL 3H
	@       IN SOA  ns.20200604.co.kr       root.20200604.co.kr.(
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
	@       IN      NS      ns.20200604.co.kr.
       	 	IN      A       192.168.122.200

	ns      IN      A       192.168.122.200
	www     IN      A       192.168.122.200
	first   IN      CNAME   www
	second  IN      CNAME   www

vi /etc/named.conf
    13 listen-on port 53 { any; };
    14 listen-on-v6 port 53 { none; };
    21 allow-query     { any; };
    59 zone "20200604.co.kr." IN {
    60         type master;
    61         file "data/20200604.zone";
    62 };

chmod -R 754 /var/named
systemctl restart named.service
setenforce 0
getenforce

 

- Client

yum install -y bind-utils
nslookup www.google.com
nslookup www.20200604.co.kr 192.168.122.200
	Server:		192.168.122.200
	Address:	192.168.122.200#53

	Name:	www.20200604.co.kr
	Address: 192.168.122.200

* 이름 기반 가상 호스트 구성

- Server

mkdir /var/www/html2
echo "hihihi" > /var/www/html/index.html
echo "world!" > /var/www/html2/index.html
vi /etc/httpd/conf.d/virtualhost.conf
	<VirtualHost 192.168.122.200:8080>
        	DocumentRoot    "/var/www/html"
       	 	ServerName      "first.20200604.co.kr"
	</VirtualHost>

	<VirtualHost 192.168.122.200:8080>
        	DocumentRoot    "/var/www/html2"
        	ServerName      "second.20200604.co.kr"
	</VirtualHost>

systemctl restart httpd.service

 

- Client

nslookup first.20200604.co.kr 192.168.122.200
	Server:		192.168.122.200
	Address:	192.168.122.200#53

	first.20200604.co.kr	canonical name = www.20200604.co.kr.
	Name:	www.20200604.co.kr
	Address: 192.168.122.200

nslookup second.20200604.co.kr 192.168.122.200
	Server:		192.168.122.200
	Address:	192.168.122.200#53

	second.20200604.co.kr	canonical name = www.20200604.co.kr.
	Name:	www.20200604.co.kr
	Address: 192.168.122.200

apt-get install curl
vi /etc/resolv.conf
	nameserver 192.168.122.200
	nameserver 8.8.8.8

curl first.20200604.co.kr
	hihihi
curl second.20200604.co.kr
	world!

* IP 기반 가상 호스트 구성

- Server

vi /etc/httpd/conf.d/virtualhost.conf
	<VirtualHost 192.168.122.200:8080>
        	DocumentRoot    "/var/www/html"
        	ServerName      "first.20200604.co.kr"
	</VirtualHost>

	<VirtualHost 192.168.122.150:8080>  //200->150
        	DocumentRoot    "/var/www/html2"
        	ServerName      "second.20200604.co.kr"
	</VirtualHost>

systemctl restart named.service
systemctl restart httpd.service

 

- Client

curl 192.168.122.150:8080
	world!

* HTTPS

SSL / TLS

- 기밀성 : 통신 내용의 노출을 막을 수 있다. (대칭키)

- 무결성 : 데이터가 변조되지 않음을 확인할 수 있다.

- 인증 : 접속하려는 서버임을 보장. (공개키) 

 

- SSL 인증서

  - 내용

    - 서비스의 정보 (인증서를 발급한 CA, 서비스의 도메인)

    - 서버의 공개키 (서비스의 공개키)

 

  클라이언트 -> HTTPS 서버 : 연결 요청 -> 임의 데이터 추가 -> 자기가 사용할 수 있는 암호화 방식 추가 

  HTTPS 서버 -> 클라이언트 : 서버가 가지고 있는 인증서(서버의 공개키가 같이 들어있다) 전달

  클라이언트 : CA 서버가 전달한 인증서가 맞는지 확인한다. (틀리면 차단)

  클라이언트 -> HTTPS 서버 : 공개키(대칭키)

  HTTPS 서버 -> 클라이언트 : 내용 전달


* HTTPS 전송을 위한 서버구성

// 개인키 생성
openssl genrsa -out private.key 2048
// CSR(Certificate Signing Request) 생성
openssl req -new -key private.key -out cert.csr
    KR
    Seoul
    Seoul
    Linux
    root
    www.20200604.co.kr
    user@20200604.co.kr
    
openssl x509 -req -signkey private.key -in cert.csr -out cert.crt
mv /root/cert.crt /etc/pki/tls/certs
mv /root/private.key /etc/pki/tls/private
restorecon -Rv /etc/pki/tls
chmod 600 /etc/pki/tls/private/private.key
// SSL/TLS 설정
vi /etc/httpd/conf.d/ssl.conf
	<VitrualHost _default_:443>
    		DocumentRoot "/var/www/html"
        	ServerName www.20200604.co.kr:443
        	SSLCertificateFile /etc/pki/tls/certs/cert.crt
        	SSLCertificateKeyFile /root/pki/tls/private/private.key
	</VirtualHost>
    
systemctl restart httpd.service

'Linux' 카테고리의 다른 글

고급 권한 관리  (0) 2020.06.18
Linux로 wordpress 구축하기  (0) 2020.06.12
iSCSI 블록 스토리지  (0) 2020.06.03
SMB Storage  (0) 2020.06.03
NFS Storage (autofs)  (0) 2020.06.02

댓글