본문 바로가기
리눅스

리눅스2 8차시

by IT매니절 2024. 4. 28.

소스설치 후 재설치 할 때

rm -rf /usr/local/openssh

rm -rf /etc/ssh

rm -rf /etc/pam.d/sshd

dnf -y install openssh openssh-clients openssh-server

systemctl enable --now sshd

 

--

 

실습 : 가상호스트 네임서버에 연결하기

 

vi /etc/named.rfc1912.zones
vi /var/named/client.com.zone
named-checkconf
named-checkzone client.com client.com.zone
systemctl restart named.service

=> named.rfc1912.zones 파일에 도메인 추가하기

client.com.zone 추가한 도메인 파일 설정 작성

네임서버 파일, 존파일 검사하고

서비스 다시 시작하기

 

dig @192.168.100.5 client.com

=> 등록 확인

 

vi/etc/named.conf의 recursion yes
=> 외부에서 질의 가능. 실제 라이브 서버에서는 no로 설정 권장 (공격에 악용 될 수 있음)

 


# dig @192.168.100.5 client.com soa +short
NS1.client.com. root.client.com. 20240428 14400 1800 604800 10800
# dig @192.168.100.5 client.com ns +short
ns1.client.com.
ns2.client.com.

=> soa 정보 받기, ns만 보기 등...

=> . 마침표를 넣지 않으면, 풀로 적었을 때 뒤에 client.com. 도메인이 자동으로 붙는다

=> 관리자 이메일에 @ 넣지 말 것. 적으면 root\@client.com 이렇게 역슬래시가 붙어 나옴

 

레코드 설명

2024042801

=> Serial 존파일 버전 YYYYMMDDNN <- 날짜 8자리 + 뒤의 NN은 숫자 2자리임

4H
=> refresh 업데이트 주기 (4시간)
30M
=> retry 접속 실패시 재접속 시간 (30분)
1W
=> expire 유통기한. 2차 네임서버가 접속 계속 실패시 폐기처분하는 시간 (1W 7일)
3H
=> minimum 캐쉬시간. 상대방이 메모리에 가지고 있을 TTL

 

 

2차 네임서버
vi /etc/named.rfc1912.zones
named-checkconf
systemctl restart named.service
=> named.rfc1912.zones 파일에 도메인 추가하기
네임서버 파일 검사하고
서비스 다시 시작하기
존파일은 1차 네임서버에서 알아서 땡겨옴

 

1차 네임서버의 /etc/named.conf의 options에

allow-transfer { 192.168.100.6; };

추가해주어야 보안상 좋다. zone파일은 특정 ip에게만 땡길 수 있도록 허용

2차 네임서버가 없다면 allow-transfer { none; };

 

파일의 소유자, 그룹권한,&nbsp; /var/named/ 권한 T

=> /var/named/에는 sticky bit 권한이 걸려있다.

이 권한이 설정되면, 파일을 생성한 사람만 수정, 삭제가 가능하다.

때문에 zone파일의 소유자와 그룹소유를 root로 변경하면 제대로 동작할 수 없다 (수정, 삭제 권한이 없기 때문에)

 

 

firewall-cmd --list-services

firewall-cmd --add-service={dns,http,https}

firewall-cmd --reload

방화벽에 추가

 

 

실습 : 가상 호스트 설정

 

dnf install httpd php php-mysqlnd mariadb-server

APM 환경을 위해 패키지 설치

 

sed -i '43s/<FilesMatch \\.(php|phar)$>/<FilesMatch \\.(php|html|phar)$>/' /etc/httpd/conf.d/php.conf

=> php.conf 내용 수정 html 추가

 

sed -i '902s/;date.timezone =/date.timezone = Asia\/Seoul/' /etc/php.ini

=> 시간설정

 

sed -i '388isecurity.limit_extensions = .php .html' /etc/php-fpm.d/www.conf

=> .php와 .html에 적용되도록 설정

 

systemctl enable --now php-fpm; systemctl enable --now httpd

=> 서비스 가동

 

sed -i '21icollation-server=utf8_general_ci'  /etc/my.cnf.d/mariadb-server.cnf
sed -i '22icharacter-set-server=utf8'  /etc/my.cnf.d/mariadb-server.cnf
sed -i '23iskip-character-set-client-handshake'  /etc/my.cnf.d/mariadb-server.cnf
sed -i '24ibind-address=127.0.0.1'  /etc/my.cnf.d/mariadb-server.cnf

systemctl enable --now mariadb

=> mariadb 관련 설정 후 서비스 가동

 

netstat -nltp로 리슨포트 확인

 

mysqladmin -p'' password 'P@ssw0rd'

=> 비밀번호 설정

 

cat  << EOF > .my.cnf
> [client]
> host = localhost
> user = root
> password = P@ssw0rd
> EOF

=> 자동로그인 문서 작성

 

/var/www/html 경로에 index.php 작성하면 도메인 접속시 보여주게된다.

 

/etc/login.defs
홈 디렉터리 기본설정이 700
그러므로 가상호스트 유저들의 홈 디렉터리에 웹서버가 접근할 수 있게 o+x 설정해줌

( chmod o+x /home/{server,client}user )

 

명령어에 한정하여 권한 바꿨다가 돌아오기
su - clientuser -c "echo client.com. > ~clientuser/public_html/index.html"

=> clientuser 아이디로 index.html를 생성한 후 다시 본래 권한을 돌아올 수 있다

 

chcon -R -t httpd_sys_content_t ~serveruser/public_html/

=> 서버 보안 관련 설정을 해줘야 함

( ls -Z로 보안 권한을 조회할 수 있다 )

 

mysql -e "명령어"

=> mysql에 접속하지 않고 바깥에서 명령어로 수정할 수 있다

 

mysql -e "CREATE DATABASE serveruser"
mysql -e "CREATE USER serveruser@localhost IDENTIFIED BY 'serveruser'"
mysql -e "GRANT ALL PRIVILEGES ON serveruser.* TO server@localhost"

=> mysql 사용자 생성 및 데이터베이스, 권한 설정

 

mysql -u serveruser -pserveruser serveruser

=> mysql에 특정 유저 권한으로 들어가기

 

 

/etc/httpd/conf/httpd.conf

=> 아파치 웹서버 메인 설정파일

 

vi /etc/httpd/conf.d/virtualHost.conf


<VirtualHost *:80>
       |              +-- 80 : http 평문전송
       |              +-- 443 : https 암호화 전송

       +-- 127.0.0.1 등...

ServerAdmin 관리자 이메일주소

DocumentRoot 웹페이지 경로

ServerName 도메인 주소

Serveralias 도메인주소

ErrorLog 에러로그 경로

CustomLog 접속로그 경로

 

  

센토스와 달리 로키리눅스에서

dnf --enablerepo=powertools -y install lynx

lynx는 powertools에 있음

 

vi /etc/sysconfig/network-scripts/ifcfg-ens~

systemctl restart NetworkManager

DNS1, DNS2를 오늘 설정한 네임서버로 설정하고 재시작.

 

lynx --dump server.com
   hi~ server.com.
lynx --dump client.com
   hi~ client.com.
lynx --dump http://www.client.com
   hi~ client.com.

 

=> 실습을 위한 가짜도메인이므로, 브라우저에서 테스트 할 수 없음. lynx를 통해 테스트

 

 

윈도우에서 접속해보려면?

ncpa.cpl 명령어로 열고 사용하는 vmware 어댑터 속성

 

Ipv4 -> 속성 -> DNS 서버 정보를 실습을 위한 DNS 서버로 설정

이더넷에도 설정

 

브라우저에서도 테스트 된다

이제 dns 설정을 다시 원래대로 원복한다

 

 

 

 

실습 : 보안서버 구축하기

 

서버에 인증서를 설치해서 웹 데이터를 암호화해서 안전하게 전송하는 서버
개인정보가 전송될 때는 반드시 구축 필요

https: 암호화통신, 인증서, 443번 포트
- 자가인증을 통해 발행한 인증서 : 연습용/개발 서버에서 사용
- 신뢰된 인증기관을 통한 인증서 : 실제 서버 사용

인증서
- 도메인명, 인증서 기간, 신뢰된 인증기관에서 발급
- 3가지가 충족되어야 에러가 발생하지 않음

 

예전에는 일부 페이지만 https를 사용했으나
현재는 모든 페이지를 https 적용하고 있음 (컴퓨팅 속도가 빨라졌기 때문에)

 

자가인증 - 인증서 설치하는 법

1. DNS 설정
/etc/named.rfc1912.zones
/etc/이름.zone

=> 오늘 실습하면서 이미 생성했음

 

2. 아파치 mod_ssl 모듈 설치

( 테스트 할 때 바꾼 DNS1, DNS2 설정 다시 원복 후에 )

dnf -y install mod_ssl

 

3. 개인키 및 요청서 생성

openssl req -nodes -newkey rsa:2048 -keyout server.key -out server.csr
=> req : X.509 인증 요청서 만들기
-nodes : 개인키 생성시 암호화x (암호화 하면 인증서 쓸 때 계속 암호 넣어줘야 함)
-newkey : 새 인증서 요청과 새 개인키 생성
rsa는 RSA키 생성
-keyout : 개인키 파일이름을 server.key로 지정
-out : 인증서 요청 파일명을 server.csr로 지정

 

Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

=> 연습용이므로  질의에 대한 답은 다 엔터로 패스한다

 

ll

-rw-r--r--. 1 root root  952  4월 28 13:02 server.csr
-rw-------. 1 root root 1704  4월 28 13:02 server.key

 

4. 인증서 생성

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=C = XX, L = Default City, O = Default Company Ltd
Getting Private key

X509 : 인증서 포맷

-days : 인증서 유효기간

-in : server.csr 파일 사용

-signkey : 개인키 파일명 server.key를 사용해서 서명

-out : server.crt로 인증서 이름을 만든다

 

ll

-rw-r--r--. 1 root root 1115  4월 28 13:05 server.crt

 

5. SELinux 보안 권한 변경 ( ls -Z 로 확인 )

chcon -t cert_t server.*

mv server.key /etc/pki/tls/private/
mv server.crt /etc/pki/tls/certs/

=> 권한 변경 후, 알맞은 위치로 옮긴다

 

vi /etc/httpd/conf.d/ssl.conf
=> 93라인의  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
이미 기본적으로 키가 있긴 함

 

직접 생성한 key와 crt로 변경하고 재시작

 

netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::443                  :::*                    LISTEN      9082/httpd
tcp6       0      0 :::80                   :::*                    LISTEN      9082/httpd

=> 443 포트 확인

 

자가인증이기 때문에 인증서 에러가 난다.

 

 

 

실제서버 - SSL 신청 및 설치 방법
1. 웹서버 파악(SSL 모듈 설치), 도메인
2. 인증서 업체에 신청한다. CSR(인증서 요청 서명)을 만들어서 생성
3. 인증기관에서 담당자가 인증서를 생성
4. 인증기관에서 보내준 인증서 (이메일, 도메인의 존파일에 호스트명 추가) 를 서버에 설치

 

 

 

 

 

두 달에 걸친 리눅스1,2 과정이 끝났다~

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

리눅스2 7차시  (0) 2024.04.27
리눅스2 6차시  (0) 2024.04.21
리눅스2 5차시  (0) 2024.04.20
centos7 vmware 고정ip static 설정  (0) 2024.04.15
리눅스2 4차시  (0) 2024.04.14