Special:Communication & Concept/프리비에스디(FreeBSD 11.2)에 웹서버 Apache 2.4, MariaDB 10.2.X, PHP 7.2.X, Let's Encrypt 인증서, 웹 프로토콜(Web's protocol) HTTP/2 에 미디어위키 설치

Jump to: navigation, search
#178 [ Ssam ] hit: 135(#78ff78) 4

Template:TOC right

들어가기

  • 프리비에스디(FreeBSD 11.2)에 웹서버 Apache 2.4, MariaDB 10.2.X, PHP 7.2.X, Let's Encrypt 인증서, 웹 프로토콜(Web's protocol) HTTP/2 에 미디어위키 설치
  • FreeBSD 와 ubuntu 서버 설정을 거의 같은 설정을 해 놓고 속도 비교, FreeBSD가 아주 빠르게 실행된다. (문서도 많이 없고, 설정이 많이 불편 하지만 기대해 봅니다. 어찌하겠나 빠른걸~~)
  • nginx 와 Apache 속도? nginx는 404로 넘기는 부분이 많아서.... -_-/

FreeBSD 포트 컬렉션 설치와 업데이트

  • 위에서 실행하지 않았다면 실행
# portsnap fetch
# portsnap extract
# portsnap fetch update
  • FreeBSD 패키지 업데이트 와 업그레이드
# pkg update
# pkg upgrade


프리비에스디(FreeBSD 11.x) 한글 설정

  • 미디어위키에 봇을 돌려 특정부분를 한글로 치환해야되는 경우가 있어서 설정 함.
  • 두개 파일 /etc/login.conf 와 /etc/profile 설정하면 된다. (시스템 전체 설정임.)
  • vi로 열어 /etc/login.conf 파일을 열어 추가 (84라인 쯤에, 러시아어가 설정되어있는 것을 아래와 같이 변경)
korean|Korean Users Accounts:\
    :charset=UTF-8:\
    :lang=ko_KR.UTF-8:\
    :tc=default:
  • /etc/login.conf 재작성 후 디비 업데이트 명령 실행.
# cap_mkdb /etc/login.conf
  • vi로 열어 /etc/profile파일을 열어 추가 ( 20라인 쯤에)
LANG=ko_KR.UTF-8; export LANG
MM_CHARSET=UTF-8; export MM_CHARSET
  • 재부팅
# reboot
  • 로케일 확인
# locale
메세지 출력
LANG=ko_KR.UTF-8
LC_CTYPE="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_ALL=


Apache 2.4 설치

  • Apache 최신 패키지 검색
# pkg search apache
메세지 apache24
apache24-2.4.35 Version 2.4.x of Apache web server


  • Apache 2.4 설치 ( 패키지로 설치해도 HTTP/2 지원 된다.)
# pkg install apache24
또는
# cd /usr/ports/www/apache24/ && make install clean
Proceed with this action? y
.........
메세지 잘 읽어 보면 /etc/rc.conf 파일에 apache24_enable="YES" 추가 하라고 나온다, vi로 열어서 추가해도 되고, 아래 명령으로도 추가 된다.
# sysrc apache24_enable=YES
  • 아파치 재시작
# service apache24 restart
  • 웹브라우저 주소 줄에 아이피 주소 넣으면 이런 메세지 보이면 정상이다.
http://192.168.0.35
It works!
  • 웹 루트는 /usr/local/www/apache24/data 디렉토리 이다.


MariaDB 설치(Install MariaDB on FreeBSD)

  • 데이터 베이스는 개인 취향에 맞는거로 1개만 설치하면 된다.
  • 최신 버전을 설치하기 위해서 설치 전 검색
# pkg search maria
메세지 출력 최신 버전 클라이언트 서버
[......]
mariadb100-client-10.0.36_1 Multithreaded SQL database (client)
mariadb100-server-10.0.36_1 Multithreaded SQL database (server)
mariadb101-client-10.1.35_1 Multithreaded SQL database (client)
mariadb101-server-10.1.35_1 Multithreaded SQL database (server)
mariadb102-client-10.2.17 Multithreaded SQL database (client)
mariadb102-server-10.2.17 Multithreaded SQL database (server)
mariadb103-client-10.3.8 Multithreaded SQL database (client)
mariadb103-server-10.3.8_2 Multithreaded SQL database (server)
[.......]


  • 여기서는 mariadb102를 설치 한다.
# pkg install mariadb102-server
메세지 출력

[............................]

Proceed with this action? [y/N]: y
메세지에 디비 설정 관련 메세지가 출력된다.
  • db설정 파일 만들기 /usr/local/share/mysql/my-medium.cnf 샘플 파일을 /usr/local/etc/my.cnf 파일로 복사하여 만든다.
  • db 샘플 파일은 /usr/local/share/mysql/ 디렉토리에 여러개(my-innodb-heavy-4G.cnf, my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf, 이중에서 선택하면 된다.)
서버 메모리에 따라 선택 한다.
  1. my-innodb-heavy-4G.cnf: 4G (innodb 사용)
  2. my-huge.cnf: 1~2G
  3. my-large.cnf 512M
  • MariaDB 설정 파일 my.cnf를 /usr/local/etc/ 이 디렉토리로 복사한다.
# cp /usr/local/share/mysql/my-innodb-heavy-4G.cnf /usr/local/etc/my.cnf
  • 에디터 vi /etc/rc.conf 파일을 열어 mysql_enable="yes"을 추가해도 되고, 아래 명령으로 추가해도 된다.
# sysrc mysql_enable=yes
  • db 서버 시작
# service mysql-server start
  • mysql 암호 설정
# mysql_secure_installation
메세지 출력
Enter current password for root (enter for none): 현재 암호 공백이므로 그냥 엔터
Set root password? -> y
New password: 루트 암호
Re-enter new password: 다시 한번 루트 암호
Remove anonymous users? -> y
Disallow root login remotely? -> y
Remove test database and access to it? -> y
Reload privilege tables now? -> y
  • db 서버 재시작
# service mysql-server restart


FreeBSDphp 설치(Install php on FreeBSD)

  • 최신 php 패키지 찾기
# pkg search php
메세지 출력
[...............]
php72-7.2.10 PHP Scripting Language
php72-Ice37-3.7.1 Modern alternative to object middleware such as CORBA/COM/DCOM/COM+
php72-aphpbreakdown-2.2.2 Code-Analyzer for PHP for Compatibility Check-UP
php72-aphpunit-1.6 Testing framework for unit tests
php72-bcmath-7.2.10 The bcmath shared extension for php
php72-bsdconv-11.5.0 PHP wrapper for bsdconv
[................]


  1. mediawiki를 설치 할 예정 이므로 관련된 확장 모듈 설치.(mediawiki, 기타, 설치를 위한 모듈, 캐쉬 부분...)
  2. mediawiki 1.31.x 설치시 요구사항
  3. ctype, iconv, json, mbstring, xml, 캐쉬확장(php72-pecl-APCu) 선택사항, 기타
  4. Apachemod_php 또는 php-fpm 중에서 php-fpm 을 사용 하기로 함.


  • 필요한 것 확인 후 추가 한다.
# pkg install php72 php72-mysqli php72-mbstring php72-gd php72-curl php72-json php72-zip php72-imap php72-iconv php72-xml php72-sockets php72-openssl php72-session php72-hash php72-ctype php72-xmlwriter php72-xmlreader php72-dom php72-simplexml php72-posix php72-tokenizer php72-fileinfo php72-intl php72-bz2 php72-gettext php72-composer php72-pecl-APCu
  • php.ini-production 파일을 /usr/local/etc/ 디렉토리에 복사 한다.
# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
  • 에디터 vi /etc/rc.conf 파일을 열어 php-fpm_enable="yes"을 추가해도 되고, 아래 명령으로 추가해도 된다.
# sysrc php_fpm_enable=yes
  • php-fpm 스크립트 서비스 시작
# service php-fpm start

php-fpm 스크립트 환경 설정(Configuring php-fpm)

  • 설정 파일 vi /usr/local/etc/php-fpm.d/www.conf 파일을 열어 수정, 추가 해 준다.
  • 36라인 쯤에 주석 처리하고 바로 아래에 listen = /var/run/php-fpm.sock 를 추가 한다.(Unix 소켓 사용시 참고)
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock
  • 48,49,50 라인에 주석 제거
listen.owner = www
listen.group = www
listen.mode = 0660
  • 391라인쯤에 추가
security.limit_extensions = .php .html
# service php-fpm restart


아파치(apache 2.4) 설정

  • Apache 2.4 설정 파일 vi /usr/local/etc/apache24/httpd.conf 파일을 열어 수정, 추가해 준다.
216 라인에 ServerAdmin 관리자 메일 주소를 수정 한다.
ServerAdmin ssam@mysam.net
225 라인에 ServerName 수정 (외부로 연결된 사설 아이피)
ServerName 192.168.0.35:80
283 라인에 DirectoryIndex index.html 이렇게 된것을 아래와 같이 index.php 추가
<IfModule dir_module>
  DirectoryIndex index.php index.html
</IfModule>
535 라인(맨끝 라인)에 Include etc/apache24/Includes/*.conf 줄 밑에 추가 해 준다.( /usr/local/etc/apache24/Includes/ 이 디렉토리에 파일을 만들어서 추가 해도 됨)
Include etc/apache24/Includes/*.conf

<FilesMatch "\.php$">
    # SetHandler "proxy:fcgi://127.0.0.1:9000"
    ##Unix sockets require 2.4.7 or later
    SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
프록시 관련 아파치 웹사이트 글 참조.
유닉스 소켓 관련 아파치 웹사이트 글 참조.


  • php-fpm 사용하기 위해서 129, 133라인에 주석 해제
LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
  • 아파치 재시작.
# service apache24 restart


  • info.php 파일을 만들어 확인 한다.
# vi /usr/local/www/apache24/data/info.php
파일을 열어 추가
<?php
    phpinfo();


  • 웹브라우저 주소 줄에 아이피 주소 넣어 정보가 보이면 정상 이다.
http://192.168.0.35/info.php
확인 한 후 삭제 한다.
# rm /usr/local/www/apache24/data/info.php
메인 웹 디렉토리 위치는 /usr/local/www/apache24/data 가 된다.
여기에 웹페이지를 만들어 놓으면 된다.


가상 호스트 설정

  1. 여기서는 메인 웹 루트가 /usr/local/www/apache24/data/ 이지만 사용하지 않는다.
  2. 사용자 디렉토리를 사용 하면서 가상 호스트로 설정.
  3. 아파치 설정 파일 vi /usr/local/etc/apache24/httpd.conf 를 열어 주석 해제
172 라인 주석 해제
LoadModule vhost_alias_module libexec/apache24/mod_vhost_alias.so
178 라인 주석 해제
LoadModule userdir_module libexec/apache24/mod_userdir.so
502 라인 주석 해제
Include etc/apache24/extra/httpd-userdir.conf
508 라인 주석 해제
Include etc/apache24/extra/httpd-vhosts.conf


  • 이 샘플 파일 vi /usr/local/etc/apache24/extra/httpd-userdir.conf 을 열어 다 지우고 이렇게 설정 한다.
  1. httpd-userdir.conf 파일 열어 보면 요구되는 모듈이듈 보인다.
  2. mod_authz_core, mod_authz_host, mod_userdir 3를 요구한다.
  3. mod_authz_core, mod_authz_host 두개는 기본적으로 해제되어 있다.
아래와 같이 설정
<IfModule mod_userdir.c>
       UserDir www/html
       UserDir disabled root

       <Directory /usr/home/*/www/html>
#               AllowOverride FileInfo AuthConfig Limit Indexes
#               Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
               AllowOverride All

               <Limit GET POST OPTIONS>
                       Require all granted
               </Limit>
               <LimitExcept GET POST OPTIONS>
                       Require all denied
               </LimitExcept>
      </Directory>
</IfModule>
  • 테스트 설정 사설 아이피 설정 부분은 테스트 후 제거 한다.
  • 이 샘플 파일 vi /usr/local/etc/apache24/extra/httpd-vhosts.conf 을 열어 수정 한다.(여기에 여러개 설정하여 여러개의 웹사이트를 구성 할 수 있다.)


 # 테스트 설정 사설 아이피
 <VirtualHost *:80>
    ServerAlias 192.168.0.30
    ServerName 192.168.0.30
    ServerAdmin ssam@mysam.net
    DocumentRoot "/usr/home/테스트계정/www/html"
 </VirtualHost>

 <VirtualHost *:80>
    ServerAlias *.mysam.net 
    ServerName mysam.net
    ServerAdmin ssam@mysam.net
    DocumentRoot "/usr/home/사용자/www/html"

    # SSL certificate
    Redirect permanent / https://mysam.net/
 </VirtualHost>

 <VirtualHost *:80>
    ServerAlias *.zbm.kr 
    ServerName zbm.kr 
    ServerAdmin ssam@zbm.kr 
    DocumentRoot "/usr/home/사용자/www/html"
 
    # SSL certificate  
    Redirect permanent / https://zbm.kr/
 </VirtualHost>


사용자 디렉토리 만들고 퍼미션 조정

  • 사용자가 추가되어있지 않다면 사용자 추가, 여러 사용자를 추가 구성 할 수 있다.
# adduser
  1. 메세지 출력에 대하여
  2. Username은 사용자 계정을 적어다 준다, Full name은 그냥 넘겨도 됨.
  3. Login group is due. Invite due into other groups? [], 물음에 일반 사용자면 엔터, 관리자면 wheel그룹에 가입.
메세지 출력 예 입니다.
 Username: lure
 Full name: 
 Uid (Leave empty for default): 
 Login group [lure]: 
 Login group is lure. Invite lure into other groups? []: wheel
 Login class [default]: 
 Shell (sh csh tcsh nologin) [sh]: 
 Home directory [/home/lure]: 
 Home directory permissions (Leave empty for default): 
 Use password-based authentication? [yes]: 
 Use an empty password? (yes/no) [no]: 
 Use a random password? (yes/no) [no]: 
 Enter password: 
 Enter password again: 
 Lock out the account after creation? [no]: 
 Username   : lure
 Password   : *****
 Full Name  : 
 Uid        : 1002
 Class      : 
 Groups     : lure wheel
 Home       : /home/lure
 Home Mode  : 
 Shell      : /bin/sh
 Locked     : no
 OK? (yes/no): yes
 adduser: INFO: Successfully added (lure) to the user database.
 Add another user? (yes/no): no
 Goodbye!
  • 참고로 사용자 삭제 명령은
# rmuser
  • 디렉토리 만들기
# cd ~
# mkdir -p /usr/home/ssam/www/html
  • 퍼미션 조정
# chmod 755 /usr/home/ssam/www/html
  • 그룹 변경: 소유자:소유자 그룹
# chown -R ssam:ssam /usr/home/ssam/www/html
  • 아파치 재시작
# service apache24 restart
  • 이제 메인 웹 루트가 변경 됬다. (사용자 계정으로 사용하기 위해서...)
/usr/home/*/www/html
퍼미션 조정하고 웹페이지를 만들어 놓으면 된다, 기본 퍼미션은 755 이다.


php 7.2 파일 업로드 사이즈 조정(cloud 설치)

  • 클라우드 설치 대비, upload_max_filesize 2000M, post_max_size 2001M, max_execution_time, max_input_time는 10배로, memory_limit는 2배로
  • 이 파일 vi /usr/local/etc/php.ini 을 열어 수정 한다.
383라인쯤에
max_execution_time = 300
393라인쯤에
max_input_time = 600
404라인쯤에
memory_limit = 512M
671라인쯤에
post_max_size = 2001M
824라인쯤에
upload_max_filesize = 2000M
이 부분을 찾아서 적당한 크기로 수정해 준다.
allow_url_fopen = off
  • 아파치 재시작
# service apache24 restart


phpMyAdmin 설치

  • phpMyAdmin 패기지로 설치하면 php 7.2 패키지를 지운다, ports 컴파일로 설치
  • make clean 은 이전 컴파일 내용을 삭제, make distclean 은 파일을 받고 압축을 푼 처음 상태로 만드는 것.
  • 현재 포트 컴파일 phpMyAdmin 패기지는 4.7.3.버전이 설치된다.
# cd /usr/ports/databases/phpmyadmin && make config-recursive install distclean


모두 설치된 다음 메세지 출력, Apache version 2.4 상위 버전은 아래와 같이 추가 하라고 나온다.
For Apache version 2.4.x or above:
Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/"

    <Directory "/usr/local/www/phpMyAdmin/">
        Options None
        AllowOverride Limit

        Require local
        Require host .example.com
    </Directory>
  • 아파치 설정 파일 vi /usr/local/etc/apache24/httpd.conf 를 열어 아래와 같이 추가해 준다.(533라인 쯤에 추가, 맨끝.)
  • 참고 이 설정은 .htaccess 파일을 /usr/local/www/phpMyAdmin 디렉토리에 넣어 특정 사용자만 접속 가능하게 할 수 있다.
Alias /phpmyadmin "/usr/local/www/phpMyAdmin"
<Directory "/usr/local/www/phpMyAdmin">
   Options None
   AllowOverride all
   Require all granted
</Directory>


  • config.inc.php 복사
# cp /usr/local/www/phpMyAdmin/config.sample.inc.php /usr/local/www/phpMyAdmin/config.inc.php


  • 심볼링크로 /usr/local/www/apache24/data/ 웹루트 디렉토리에 링크를 건다.
# ln -s /usr/local/www/phpMyAdmin/ /usr/local/www/apache24/data/phpmyadmin
  • 아파치 재시작
# service apache24 restart
  • 웹브라우저 주소창에 아래 주소넣고 확인 해본다.
http://192.168.0.35/phpmyadmin


phpMyAdmin 에 config.inc.php 설정

  • 로그인 하면 하단에 $cfg['blowfish_secret']항목이 뜬다. 적당히 넣어 주면 된다.
이 파일 vi /usr/local/www/phpMyAdmin/config.inc.php 을 열어 넣어주면 된다.
17라인에
$cfg['blowfish_secret'] = '암호(@_@)6/3=2를-적어*놓으시오_쿠키에-필요=하다고^하니!'; 

.htaccess 파일 사용하기

  • .htaccess 파일을 사용하기 위해서 위에서 AllowOverride All 로 설정 했다.
  • 아파치 설정 파일 vi /usr/local/etc/apache24/httpd.conf 를 열어 주석 해제 한다.
179 라인 쯤에 주석 해제
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
  • 아파치 재시작
# service apache24 restart


phpMyAdmin의 .htaccess 엑세스 제어로 특정 IP 만 접속 가능

  • .htaccess 엑세스를 사용하기위한 준비는 다됬고 특정 디렉토리 또는 기능 각각 제어 해 보기.
  • phpMyAdmin 제어 모든 IP는 막히고 그중 사설 아이피 중에 몇 개만 접속 가능하게 제어하여 본다.
  • vi /usr/local/www/phpMyAdmin/.htaccess 파일을 열어 처음 열면 아무것도 없음 아래와 같이 작성 해 준다.
SetEnvIf remote_addr 192.168.0.1 go_in
SetEnvIf remote_addr 192.168.0.2 go_in
SetEnvIf remote_addr 192.168.0.3 go_in
SetEnvIf remote_addr 192.168.0.4 go_in
SetEnvIf remote_addr 192.168.0.5 go_in
SetEnvIf remote_addr 192.168.0.6 go_in
  
Order deny,allow
deny from all
allow from env=go_in
  1. 192.168.0.1/4 이이피를 가지는 컴에서, http://192.168.0.35/phpmyadmin/로 설정된 서버에 접속 해 본다.(192.168.0.35 사설 아이피는 외부로 연결되어 있음.)
  2. http://mysam.net/phpmyadmin/ 도메인으로 접속 해본다,외부 또는 내부 192.168.0.10 아이피를 같는 컴, 접속이 안 되면 정상이다.
  3. http://192.168.0.35/phpmyadmin/ 사설 내부 192.168.0.1 아이피를 사용하는 컴퓨터는 접속 된다.
  4. http://192.168.0.35/phpmyadmin/ 사설 내부 192.168.0.2 아이피를 사용하는 컴퓨터는 접속 된다.
  5. http://192.168.0.35/phpmyadmin/ 사설 내부 192.168.0.3 아이피를 사용하는 컴퓨터는 접속 된다.
  6. http://192.168.0.35/phpmyadmin/ 사설 내부 192.168.0.4 아이피를 사용하는 컴퓨터는 접속 된다.
  7. [ ...........]
  8. 그 이외에 아이피들은
Forbidden
You don't have permission to access /phpmyadmin/ on this server.
이런 메세지들을 만나게 된다, 그러니까 외부에서는 접속 불가이고 내부망에서도 특정 아이피만 접속 된다.


미디어위키 설치

미디어위키 다운로드

  • 다운로드된 파일을 계정에 업로드한다
  • 사용자 계정에서 디렉토리로 이동 후 압축 해제
# cd /usr/home/ssam/www/html
# tar xvzf mediawiki-1.31.x.tar.gz
  • 디렉토리를 wiki로 변경
# mv mediawiki-1.31.x wiki
  • 압축된 파일 삭제
# rm -f mediawiki-1.31.x.tar.gz
  • 그룹 변경: 소유자:소유자 그룹
# chown -R ssam:ssam /usr/home/ssam/www/html/wiki
# chmod 755 /usr/home/ssam/www/html/wiki
디렉토리만 권한 변경
# find /usr/home/ssam/www/html/wiki -type d -print0 | xargs -0 chmod 755 
파일만 권한 변경
# find /usr/home/ssam/www/html/wiki -type f -print0 | xargs -0 chmod 644


  • 웹브라우저에서 설치
http://mysam.net/wiki
미디어위키 설치시 캐쉬를 설정하여 설치 한다, 로딩 속도가 10배는 빨라진다.
캐쉬 설정 방법은 아래 미디어위키 관련글을 참고
  • 미디어위키 설치 후 사용자 조정
  • 파일의 소유자와 그룹을 변경, php스크립트로 특정 디렉토리 또는 파일의 퍼미션을 조정하려면 소유자와 소유그룹을 데비안 계열은 www-data로 변경, FreeBSD 계열은 www로 변경 해야 php 스크립트로 특정 디렉토리를 원하는데로 퍼미션 조정을 할 수 있다.
  • 캐쉬 디렉토리와 파일의 소유자를 변경
# chown -R www:ssam /usr/home/ssam/www/html/wiki/cache
  • 이미지 디렉토리와 파일의 소유자를 변경
# chown -R www:ssam /usr/home/ssam/www/html/wiki/images
참고로 모든 디렉토리의 퍼미션은 755, 모든 파일의 퍼미션은 644 가 된다.


웹 페이지에 .htaccess 엑세스 제어로 특정 IP들 만 접속 제한

  1. 가장 좋은 방법은 막지않는 것 입니다.
  2. 웹 루트는 가상 호스트 사용자로 /usr/home/ssam/www/html 로 설정되어 있다.
  3. /usr/home/ssam/www/html 아래로 여러 프로그램들이 설치되어 있다.
  4. 특정 아이피 막어보자.
  5. http://httpd.apache.org/docs/2.0/ko/mod/mod_setenvif.html#setenvif 아파치 모듈 mod_setenvif 참조.
  6. SetEnvIfNoCase remote_addr 접속이 안되는 것이 아니라 403 Forbidden 을 호출함.
  7. SetEnvIf를 사용하지 않고 SetEnvIfNoCase 사용한 경우는 대소문자를 가리지 않는다.
  • 에디터로 열어 엑세스 파일을 작성해준다.
# vi /usr/home/ssam/www/html/.htaccess
  • .htaccess 파일의 내용
# 특정사용자별로 환경 설정을 할 수도 있다.
# PHP_VALUE mysql.default_charset UTF8
 
SetEnvIfNoCase remote_addr XX.XX.XXX.XX go_out
SetEnvIfNoCase remote_addr XXX.XX.*.* go_out
Order Allow,deny
Deny from env=go_out
Allow from all
참고로 XX.XX.XXX.XXX 이런 아이피 막음, 대량으로 막을때는 XXX.XX.*.* 이런식으로~.


FreeBSD 11.x 에 Let's Encrypt 인증서 프로그램 설치

  • certbot을 이용한다. 인증서 봇 페이지 참조
  • Certbot client 설치, 컴파일 또는 팩키지, 원하는거로 선택한다.
포트 컴파일로 certbot 설치
# cd /usr/ports/security/py-certbot && make install clean
패키지로 certbot 설치
# pkg install py27-certbot

FreeBSD 11.x 에 Let's Encrypt 인증서 설치

  • /usr/home/ssam/www/html 웹페이지가 설치된 경로, zbm.kr, www.zbm.kr 인증서가 적용될 도메인
Template:Del
  • 와일드카드 인증서 (Wildcard Certificate) 설치 방법
2018/3/13일 부터 DNS의 TXT 레코드를 이용하는 방식으로 지원한다.
  • 봇 버전 확인 : 0.22.0 이상 부터 지원한다.
# certbot --version
certbot 0.25.1 출력됨. (현재 FreeBSD 11.2버전, php 7.2, 기타 사용 함)
# certbot certonly --manual --email 이메일주소 --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d 'zbm.kr,*.zbm.kr'


-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for zbm.kr
dns-01 challenge for zbm.kr

-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: y

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.zbm.kr with the following value:

XXXUdTqbrGhL9us~ // 첫번째로 이 부분을 복사하여 DNS 관리하는곳에 붙여넣고 생성

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.zbm.kr with the following value:

XXXXXXXXXXXXXXXXXXXXXUEXbU03B~ // 두번째로 이 부분을 복사하여 DNS 관리하는곳에 붙여넣고 생성

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

이 메세지가 나오면 Before continuing, verify the record is deployed.(계속하기 전에 레코드가 베포되었는지 확인 하라는 메세지)

여기서 엔터치지 말고 DNS 관리하는 곳에 가서 TXT 관리(텍스트) 부분에서 생성

도메인: _acme-challenge.zbm.kr           텍스트(TXT):    XXXUdTqbrGhL9us~ 
도메인: _acme-challenge.zbm.kr           텍스트(TXT):    XXXXXXXXXXXXXXXXXXXXXUEXbU03B~ 

이렇게 만드신 후 ....

TXT 레코드를 정확하게 생성했으면 TXT 레코드가 반영되도록(5~10분)어느 정도 시간을 기다린 뒤, Press Enter to Continue 메시지 엔터를 치면 인증서 설치를 한 후 메세지 출력.


Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /usr/local/etc/letsencrypt/live/zbm.kr-~~~~~/fullchain.pem
   Your key file has been saved at:
   /usr/local/etc/letsencrypt/live/zbm.kr-~~~~/privkey.pem
   Your cert will expire on 2018-11-17. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /usr/local/etc/letsencrypt. You should
   make a secure backup of this folder now. This configuration
   directory will also contain certificates and private keys obtained
   by Certbot so making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

  • 환경설정하라는 메세지 출력됨
  1. /usr/local/etc/letsencrypt/live/zbm.kr 에 실제 인증서가 설치된다.
  2. /usr/local/etc/letsencrypt/live/zbm.kr 에 cert.pem, fullchain.pem, chain.pem, privkey.pem 4개의 파일이 생성된다.(리뉴얼시 파일 이름은 변경된다.)
  3. 4개파일을 USB에 백업받아 둔다.


FreeBSD 11.x 에서 아파치 Let's Encrypt 인증서 설정

  • 아파치에 SSL 인증서 적용하기 vi /usr/local/etc/apache24/httpd.conf 파일을 열어서 주석 해제 한다.
73 라인에 주석 해제
LoadModule authn_socache_module libexec/apache24/mod_authn_socache.so
89 라인에 주석 해제
LoadModule cache_module libexec/apache24/mod_cache.so
91 라인에 주석 해제
LoadModule cache_socache_module libexec/apache24/mod_cache_socache.so
92 라인에 주석 해제
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
148라인 쯤에 주석 해제
LoadModule ssl_module libexec/apache24/mod_ssl.so
525라인 쯤에 주석 해제
Include etc/apache24/extra/httpd-ssl.conf
모두 변경 후 저장 한다.


FreeBSD 11.x 에서 SSL 인증서 환경 설정 파일 설정

  • 이 위치 vi /usr/local/etc/apache24/extra/httpd-ssl.conf 에 파일을 열어 모두 지우고 아래와 같이 수정 한다.
# vi /usr/local/etc/apache24/extra/httpd-ssl.conf
아래와 같이 수정 한다.
 Listen 443
 SSLCipherSuite "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA"
 SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
 SSLHonorCipherOrder on 

 #SSL Protocol:
 SSLProtocol TLSv1.2
 SSLProxyProtocol TLSv1.2

 #Pass Phrase Dialog:
 SSLPassPhraseDialog  builtin

 #nter-Process Session Cache:
 #SSLSessionCache         "dbm:/var/run/ssl_scache"
 SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
 SSLSessionCacheTimeout  300

 #OCSP Stapling (requires OpenSSL 0.9.8h or later)
 SSLUseStapling On
 SSLStaplingCache "shmcb:/var/run/ssl_stapling(32768)"
 SSLStaplingStandardCacheTimeout 3600
 SSLStaplingErrorCacheTimeout 600

 <VirtualHost *:443>
   Protocols h2 http/1.1
   #General setup for the virtual host
   ServerAlias *.mysam.net
   ServerName mysam.net
   ServerAdmin ssam@mysam.net
   DocumentRoot "/usr/home/사용자/www/html"

   #Security
   <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
   </IfModule>

   ErrorLog "/var/log/httpd-error.log"
   TransferLog "/var/log/httpd-access.log"

   #SSL Engine Switch:
   SSLEngine on

   #Let's Encrypt add
   SSLCertificateFile "/usr/local/etc/letsencrypt/live/mysam.net-00011/cert.pem"
   SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/mysam.net-00011/privkey.pem"
   SSLCACertificateFile "/usr/local/etc/letsencrypt/live/mysam.net-00011/chain.pem"
 
   #SSLVerifyClient require
   #SSLVerifyDepth  10
 
   #TLS-SRP mutual authentication:
   #SSLSRPVerifierFile "/usr/local/etc/apache24/passwd.srpv"
 
   <FilesMatch "\.(cgi|shtml|phtml|php)$">
      SSLOptions +StdEnvVars
   </FilesMatch>

   <Directory "/usr/local/www/apache24/cgi-bin">
      SSLOptions +StdEnvVars
   </Directory>

   #"force-response-1.0" for this.
   BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

   #Per-Server Logging:
   CustomLog "/var/log/httpd-ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

 </VirtualHost>                                  

 <VirtualHost *:443>
   Protocols h2 http/1.1
   ServerAlias *.zbm.kr
   ServerName zbm.kr
   ServerAdmin ssam@zbm.kr
   DocumentRoot "/usr/home/사용자/www/html"

   #Security
   <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
   </IfModule>

   ErrorLog "/var/log/httpd-error.log"
   TransferLog "/var/log/httpd-access.log"

   #SSL Engine Switch:
   SSLEngine on

   #Let's Encrypt add
   SSLCertificateFile "/usr/local/etc/letsencrypt/live/zbm.kr-00011/cert.pem"
   SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/zbm.kr-00011/privkey.pem"
   SSLCACertificateFile "/usr/local/etc/letsencrypt/live/zbm.kr-00011/chain.pem"

   #SSLVerifyClient require
   #SSLVerifyDepth  10

   #TLS-SRP mutual authentication:
   #SSLSRPVerifierFile "/usr/local/etc/apache24/passwd.srpv"

   <FilesMatch "\.(cgi|shtml|phtml|php)$">
       SSLOptions +StdEnvVars
   </FilesMatch>

   <Directory "/usr/local/www/apache24/cgi-bin">
       SSLOptions +StdEnvVars
   </Directory>

   #"force-response-1.0" for this.
   BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

   #Per-Server Logging:
   CustomLog "/var/log/httpd-ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

 </VirtualHost>                         


  • 아파치 재시작
# service apache24 restart 


인증서 갱신(renewal)

  • 인증서 기간이 만료되기전에 갱신
  • /usr/home/ssam/www/html 웹페이지가 설치된 경로, zbm.kr, www.zbm.kr 인증서가 적용될 도메인
# certbot certonly --webroot -w /usr/home/ssam/www/html -d zbm.kr -d www.zbm.kr


자동으로 리뉴얼(Automating renewal)

# certbot renew
  • 아파치 재시작 해 주어야 갱신된다.
service apache24 restart


SSL 서버 테스트(SSL Server Test)

  • 여기 ssllabs에 가면 테스트 할 수 있다.


웹 프로토콜(Web's protocol) HTTP/2 적용

66라인에 주석 제거, 67라인에 주석 처리
LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
#LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
#LoadModule mpm_worker_module libexec/apache24/mod_mpm_worker.so
150, 151 라인쯤에 주석 제거.
LoadModule http2_module libexec/apache24/mod_http2.so.
LoadModule proxy_http2_module libexec/apache24/mod_proxy_http2.so


  • 이 파일 vi /usr/local/etc/apache24/extra/httpd-ssl.conf 을 열어 추가.
  • h2c : HTTP/2 (without TLS), 현재 인증서 없이 HTTP/2 지원하는 브라우저 없음, Protocols h2 h2c http/1.1
  • 128 라인쯤에 추가, <VirtualHost *:443> 태그 안쪽에 Protocols h2 http/1.1 추가 한다.


 <VirtualHost *:443>
  Protocols h2 http/1.1
  # General setup for the virtual host
 
  [.........]

 </VirtualHost>
  • 아파치 재시작
service apache24 restart 


웹 프로토콜(Web's protocol) HTTP/2 적용 확인

  • 크롬브라우저에서 메뉴->도구더보기->개발자 도구(Ctrl + shift + i) 클릭하시고, Type항목에 오른쪽 마우스로 프로토콜 선택한 후, 테스트 하고싶은 사이트로 이동하여 트레킹 해보면, 네트워크 부분에서 프로토콜을 확인 할 수 있다.


FreeBSD 업그레이드

  • Updating FreeBSD 참조.
  • 이 파일 /etc/crontab을 열어 크론탭에 등록 한다.
  • DDNS 스크립트 넣어서 돌리면된다. (리눅스에는 안 넣어도 되지만 프리비에스디는 root 항목이 있다, 넣지 않으면 크론이 돌면서 에러를 낸다.)
0	3	*	*	*	root	/usr/sbin/freebsd-update cron
  • 로그 확인 하기
Configuring the System Logger, syslogd 여기 참고.
볼수있는 로그목록
/var/log/all.log
/var/log/amd.log
/var/log/auth.log
/var/log/console.log
/var/log/cron
/var/log/daily.log
/var/log/maillog
/var/log/messages
[.........]


# cat /var/log/cron
실시간 확인
# tail -f /var/log/cron
나가기
ctrl+c


  • 리눅스쪽에는 크론 스크립트에 root 없어도 되지만 FreeBSD 10.3는 넣어 주어야 된다.(없다면 크론이 돌면서 로그인 에러 login_getclass: unknown class 를 발생 시킨다.)
  • 외부접속 고정아이피 DDNS 스크립트 여기에 넣어서 돌리면 잘 돌아 간다.
  • 나머지는 공유기에서 사설 아이피로 고정 잡으면 외부 접속이 잘 된다.


기타

# service apache24 restart
# service mysql-server restart
  • php-fpm 스크립트 서비스 시작
# service php-fpm restart
  1. 설정 파일이 있는 곳 /usr/local/etc/ 이 디렉토리에 모여 있다.
  2. 참고 사항으로 정리.
  3. 이 문서에 오류가 있다면 아래, 계속 업데이트 됩니다.

Template:Quotation

Logo