소스설치 후 재설치 할 때
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; };
=> /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를 통해 테스트
윈도우에서 접속해보려면?
이더넷에도 설정
이제 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
이미 기본적으로 키가 있긴 함
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 과정이 끝났다~