2016年5月29日 星期日

在 CentOS7/RHEL7 上架設 PXE 系統(一)

設定目標:
  • 在 Centos 7 上安裝設定 PXE 服務!
  • 利用 PXE 系統,提供安裝 Linux OS 服務!
快速設定流程:
  1. 利用 yum 安裝 tftp Server、DHCP Server、Vsftp Server 以及 syslinux 等套件:
    #yum install tftp-server dhcp syslinux vsftpd
    
  2. 設定 DHCP Server:(可參考這一篇設定)
    #vim /etc/dhcp/dhcpd.conf
    (編寫下列內容即可!)
    ### 基本設定 ###
    ddns-update-style interim;
    ignore client-updates;
    authoritative;
    allow booting;
    allow bootp;
    allow unknown-clients;
    
    ### 想要配發的網路 IP 位址 ###
    subnet 192.168.4.0 netmask 255.255.254.0 {
      range 192.168.4.110 192.168.4.120;
      option domain-name-servers 8.8.8.8;
      option domain-name "example.com";
      option routers 192.168.5.254;
      option broadcast-address 192.168.5.255; #not important
      default-lease-time 86400;
      max-lease-time 86400;
    
    ### PXE SERVER IP 位置 ###
      next-server 192.168.5.104; #  DHCP server ip
      filename "pxelinux.0";
    }
    
    
  3. 修改 tftp 套件內容:
    #cd /usr/lib/systemd/system
    #cp tftp.service /root/tftp.service.orig
    #vim tftp.service
    [Unit]
    Description=Tftp Server
    Requires=tftp.socket
    Documentation=man:in.tftpd
    
    [Service]
    ExecStart=/usr/sbin/in.tftpd -s /tftpboot  ##修改本行至合適的目錄
    StandardInput=socket
    
    [Install]
    Also=tftp.socket
    
  4. 建立 tftpboot 目錄:
    #mkdir /tftpboot
    
  5. 修改 SELinux 相關設定:
    #semanage fcontext -a -t public_content_t "/tftpboot(/.*)?"
    #restorecon -F -R -v /tftpboot
    
  6. 將必要的 syslinux 檔案,複製到 tftp Server 分享目錄內:
    #cd /usr/share/syslinux
    #cp pxelinux.0 menu.c32 memdisk mboot.c32 chain.c32 /tftpboot/
    #chmod 644 -R /tftpboot
    #chmod 755 /tftpboot
    #restorecon -F -R -v /tftpboot
    
  7. 在 tftp Server 目錄內,建立可提供 Linux 開機核心的目錄:
    #mkdir /tftpboot/pxelinux.cfg
    #mkdir -p /tftpboot/netboot/
    #restorecon -R -F -v /tftpboot/
    
  8. 將 Linux OS ISO 檔案內容,複製到 vsftp 分享目錄上:
    #mount linux.iso /mnt
    #cp -R /mnt/* /var/ftp/pub
    
  9. 將 Linux PXE 開機核心檔案,放置於 tftp Server 分享目錄上:
    #cd /var/ftp/pub/images/pxeboot
    #cp vmlinuz initrd.img /tftpboot/netboot/
    #restorecon -R -F -v /tftpboot/netboot/
    
  10. 將 Linux Kstart 檔案,複製到/var/ftp/pub 目錄下:
    #cp /root/anaconda-ks.cfg /var/ftp/pub/ks.cfg
    #chmod 644 /var/ftp/pub/ks.cfg
    #restorecon -R -F -v /var/ftp/pub/
    
  11. 編寫 PXE Server 開機選單:
    #vim /tftpboot/pxelinux.cfg/default
    default menu.c32
    prompt 0
    timeout 30
    MENU TITLE example.com PXE Menu
    LABEL CentOS7_x64
    MENU LABEL CentOS 7.2 X86_64
    KERNEL /netboot/vmlinuz
    APPEND initrd=/netboot/initrd.img inst.repo=ftp://192.168.5.104/pub ks=ftp://192.168.5.104/pub/ks.cfg
    
  12. 啟動各項服務:
    #systemctl enable vsftpd
    #systemctl start vsftpd
    #systemctl enable tftp
    #systemctl start tftp
    #systemctl daemon-reload
    #systemctl enable dhcpd
    #systemctl start dhcpd
    
  13. 開啟防火牆設定:
    #firewall-cmd --permanent --add-service=dhcp
    #firewall-cmd --permanent --add-service=ftp
    #firewall-cmd --permanent --add-service=tftp
    #firewall-cmd --reload
    

參考文獻:

  1. https://www.unixmen.com/install-pxe-server-and-configure-pxe-client-on-centos-7/
  2. https://www.unixmen.com/install-pxe-server-centos-7/
  3. http://www.tecmint.com/configure-pxe-server-to-install-windows-on-centos/
  4. http://www.tecmint.com/installing-windows-7-over-pxe-network-boot-in-centos/
  5. https://technet.microsoft.com/zh-tw/library/dd744541(v=ws.10).aspx
  6. https://technet.microsoft.com/en-us/library/cc730907(v=ws.10).aspx#Capture
  7. http://www.sandeploy.com/solutions/PXE-iSCSI-BOOT-SAN/Pxe-Boot-Windows/iSCSI-PXE-Boot-Windows-7.php
  8. http://silent.gumph.org/content/4/7/071-diskless-windows-pxe.html

在 CentOS7/RHEL7 上設定 RAID 磁碟陣列系統

設定目標:
  • 在 Centos 7 上安裝設定 RAID 服務!
快速設定流程:
  1. 利用 yum 安裝
    #yum install 
    

參考文獻:

  1. https://wiki.centos.org/HowTos/SoftwareRAIDonCentOS5

在 CentOS7/RHEL7 上架設 OpenStack Server

設定目標:
  • 在 Centos 7 上安裝 OpenStack Mitaka 版本套件!
  • 安裝 OpenStack 基本 Nova、Glance、Nuetron元件套件!
  • 安裝 OpenStack 基本 RabbitMQ 套件,提供 keystone 服務!
OpenStack Mitaka 安裝流程:
  1. 設定 yum 的 repo 檔案:
    #vim /etc/yum.repos.d/CentOS-OpenStack.repo
    [OpenStack]
    name= CentOS 7 OpenStack Mitaka
    baseurl=ftp://ftp.stu.edu.tw/Linux/CentOS/7.2.1511/cloud/x86_64/openstack-mitaka/
    enabled=1
    gpgcheck=0
    
  2. 安裝 openstack-packstack 套件:
    # yum -y install openstack-packstack
    
  3. 停止使用 Network Manager 套件:
    #systemctl disable NetworkManager
    #systemctl stop NetworkManager
    #systemctl enable network
    #systemctl start network
    
  4. 產生 answer-file ,方便以後的設定:
    # packstack --gen-answer-file /root/answer.txt
    CONFIG_DEFAULT_PASSWORD=secret
    CONFIG_SWIFT_INSTALL=n
    CONFIG_HEAT_INSTALL=y
    CONFIG_NTP_SERVERS=211.22.103.158
    CONFIG_KEYSTONE_ADMIN_PW=secret
    CONFIG_CINDER_VOLUMES_CREATE=y
    CONFIG_LBAAS_INSTALL=y
    CONFIG_NEUTRON_FWAAS=y
    CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vlan
    CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vlan
    CONFIG_NEUTRON_ML2_VLAN_RANGES=physnet1:1:1000
    CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-eth1
    CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-eth1:enp0s3
    CONFIG_HORIZON_SSL=y
    CONFIG_PROVISION_DEMO=n
    
  5. 執行 OpenStack 套件安裝:
    # packstack --answer-file /root/answer.txt
    
    ※若發生 DB 編輯錯誤:
    1. 移除 Mariadb Database 套件:
      # yum -y erase mariadb-*
      
    2. 重新安裝 Mariadb Database Server 套件:
      # yum -y erase mariadb-server
      

參考文獻:
  1. https://www.gitbook.com/book/kairen/openstack-centos/details
  2. https://kairen.gitbooks.io/openstack-centos/content/conceptions/index.html

在 CentOS7/RHEL7 上架設 MySQL Replication Server

設定目標:
  • 在 Centos 7 上安裝 MySQL Master/Slave Server,Master 可以利用 Replication 技術,複製資料到 Slave 上!
  • 在 Centos 7 上安裝 MySQL Master/Master Server,Master 可以利用 Replication 技術,複製資料到 Master 上!
    • 請參考這一篇的設定,架設好 MySQL Server!
快速設定流程:
  1. 利用 yum 安裝
    #yum install 
    

參考文獻:

  1. http://www.server-world.info/en/note?os=CentOS_7&p=mariadb&f=3

2016年5月28日 星期六

在 CentOS7/RHEL7 上使用 KVM 虚擬化技術

設定目標:
  • 在 Centos 7 上安裝 KVM 套件!
  • 利用 KVM,新增虚擬主機!
  • 架設一部 NFS Server 以及另一部 KVM 主機,活體移動虚擬主機!
    • 請參考這一篇的設定,架設好 Web Server!
快速設定流程:
  1. 利用 yum 安裝
    #yum install 
    

參考文獻:

  1. http://www.server-world.info/en/note?os=CentOS_7&p=kvm&f=1
  2. http://www.server-world.info/en/note?os=CentOS_7&p=kvm
  3. http://www.itzgeek.com/how-tos/linux/centos-how-tos/install-kvm-qemu-on-centos-7-rhel-7.html

在 CentOS7/RHEL7 上架設 Nginx Web Server(一)

設定目標:
  • 在 Centos 7 上架設 Nginx Web Server!
Nginx Web Server 快速設定流程:
  1. 編寫最新的 Nginx 套件位置:
    #vim /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1
    
  2. 利用 yum 安裝
    #yum -y install nginx
    
  3. 啟動防火牆:
    #firewall-cmd --permanent --zone=public --add-service=http
    #firewall-cmd --permanent --zone=public --add-service=https
    #firewall-cmd --reload
    
  4. 啟動 Nginx:
    #systemctl enable nginx.service
    #systemctl start nginx
    

讓 Nginx 加入 php 模組:
  1. 利用 yum 安裝
    #yum -y install php-fpm
    
  2. 編寫 php-fpm 預設檔:
    #vim /etc/php-fpm.d/www.conf
    user = nginx
    group = nginx
    
  3. 啟動 php-ftm 功能:
    #systemctl enable php-fpm.service
    #systemctl start php-fpm
    
  4. 編寫 Nginx 預設檔:
    #vim /etc/nginx/conf.d/default.conf
    (修改下列項目:)
     location ~ \.php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
     location ~ /\.ht {
            deny  all;
        }
    
  5. 重新啟動 Nginx:
    #systemctl restart nginx
    
  6. 改成 Socket 的使用方式:
    #vim /etc/sysconfig/memcached
    OPTIONS="-s /tmp/memcached.sock -a 666"
    #MEMCACHED_ARGS="-s /tmp/memcached.sock -a 666"
    
  7. 檢查一下成果:
    #echo stats | nc -U /tmp/memcached.sock
    
  8. 修改 memcached.ini 設定檔內容:
    #/etc/php/conf.d/memcached.ini
    extension=memcached.so
    session.save_handler="memcached"
    session.save_path="/tmp/memcached.sock"
    
  9. 編修 Nginx 預設檔:
    #vim /etc/nginx/conf.d/default.conf
    server {
       :
    (加入以下內容:)
       location ^~ /cache/ {
               set            $memcached_key $request_uri;
               #memcached_pass 127.0.0.1:11211;
               memcached_pass unix:/tmp/memcached.sock;
        }
        :
    
  10. 重新啟動 Nginx:
    #systemctl restart nginx
    

參考文獻:

  1. https://www.howtoforge.com/tutorial/install-nginx-with-php-and-mysql-lemp-stack-on-centos/
  2. http://blog.itist.tw/2016/01/installing-lemp-stack-with-centos-7-nginx-mariadb-php-7.html
  3. http://www.phpini.com/linux/rhel-centos-7-install-nginx-mysql-php-lemp
  4. http://www.server-world.info/en/note?os=CentOS_7&p=nginx&f=1
  5. https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-php-7-on-centos-7

2016年5月27日 星期五

在 CentOS7/RHEL7 上架設 HTTP 負載平衡系統

設定目標:
  • 在 Centos 7 上架設 HAProxy Server,將流量分配至後方的多個 Web 站台!
  • 後方的 Web 站台,不拘任何套件平台,可以是 Apache 也可以是 Nginx!
    • 請參考這一篇的設定,架設好 Web Server!
快速設定流程:
  1. 利用 yum 安裝
    #yum install 
    

參考文獻:

  1. http://www.server-world.info/en/note?os=CentOS_7&p=haproxy&f=1

在 CentOS7/RHEL7 上架設 MRTG 主機網路流量監控系統

設定目標:
  • 在 Centos 7 上安裝 MRTG 系統,監控主機網路流量!
    • 請參考這一篇的設定,架設好 Web Server!
快速設定流程:
  1. 利用 yum 安裝
    #yum install 
    

參考文獻:

  1. http://www.server-world.info/en/note?os=CentOS_7&p=mrtg&f=1

在 CentOS7/RHEL7 上架設 Cacti 主機監控系統

設定目標:
  • 在 Centos 7 上安裝 Cacti 套件,監控主機狀態!
    • 請參考這一篇的設定,架設好 Web Server!
    • 請參考這一篇的設定,架設好 Mariadb Database Server!
快速設定流程:
  1. 利用 yum 安裝
    #yum -y install epel-release
    #yum -y update epel-release
    #yum -y upgrade
    #yum -y install httpd mariadb-server php php-mysql php-pear php-gd php-mbstring net-snmp net-snmp-utils rrdtool
    #yum -y install cacti
    
  2. 在 MariaDB 上,新增一組帳密/資料庫給 Cacti 使用:
    # mysql -u root -p
    MariaDB [(none)]> create database cacti;
    MariaDB [(none)]> grant all privileges on cacti.* to cacti@localhost identified by `你的密碼`;
    MariaDB [mysql]> exit;
    
  3. 匯入 cacti 資料表:
    #mysql -u cacti -p -A cacti < /usr/share/doc/cacti-0.8.8h/cacti.sql
    (沒錯誤訊息,表示正確!)
    
  4. 設定 Web Site 相關設定參數:
    #vim /etc/httpd/conf.d/cacti.conf
    Alias /cacti    /usr/share/cacti
    
    <Directory /usr/share/cacti/>
            <IfModule mod_authz_core.c>
                    # httpd 2.4
                    Require host localhost
                    Require all granted
            </IfModule>
            .........
    </Directory>
    
    
  5. 修改 Cacti 網頁設定檔:
    #vim /etc/cacti/db.php
    .........
    $database_username = "cacti";
    $database_password = "你的密碼";
    .........
    
  6. 修改 PHP 設定檔:
    #vim /etc/php.ini
    .........
    date.timezone = Asia/Taipei
    .........
    
  7. 修改 Crontab 設定檔:
    #vim /etc/cron.d/cacti
    (取消註解)
    */5 * * * *     cacti   /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
    
  8. 啟動 Web 以及 Snmp 服務:
    #systemctl enable httpd
    #systemctl start httpd
    #systemctl enable snmpd
    #systemctl start snmpd
    
  9. 利用 firefox ,連線 cacti 網頁:
    #firefox http://localhost/cacti
    
    出現第一次登入頁面!

  10. 設定資料庫資料!

  11. 修正錯誤的地方,完成 cacti 設定:

  12. Cacti 登入畫面:

  13. PS:預設帳密 admin/admin
  14. 登入後,立即被要求改密碼:

  15. Very 寫意的畫面:

參考文獻:


  1. http://www.server-world.info/en/note?os=CentOS_7&p=cacti&f=1

在 CentOS7/RHEL7 上架設多個 PHP 版本的 Web Server

設定目標:
  • 在 Centos 7 上安裝多個 php 版本的 Web Server!
  • Web Server 可以是 Apache 套件,也可以是 Nginx 套件!
    • 請參考這一篇的設定,架設好 Web Server!
快速設定流程:
  1. 利用 yum 安裝
    #yum install 
    

參考文獻:

  1. http://serverfault.com/questions/671400/multiple-versions-of-php-through-nginx
  2. http://www.server-world.info/en/note?os=CentOS_7&p=nginx&f=9
  3. https://www.digitalocean.com/community/tutorials/how-to-host-multiple-websites-securely-with-nginx-and-php-fpm-on-ubuntu-14-04
  4. https://serversforhackers.com/video/php-fpm-multiple-resource-pools
  5. https://www.howtoforge.com/how-to-use-multiple-php-versions-php-fpm-and-fastcgi-with-ispconfig-3-ubuntu-12.10
  6. https://www.howtoforge.com/perfect-server-centos-7-x86_64-nginx-dovecot-ispconfig-3

2016年5月23日 星期一

在 CentOS7/RHEL7 上使用 PgAdmin III

設定目標:
  • 利用 PgAdmin III 管理 PostgreSQL Server!
    • 請參考這一篇的設定,架設好 PostgreSQL Server!
快速設定流程:
  1. 利用 yum 安裝 PgAdmin III:
    #yum install epel-release
    #yum install pgadmin3
    
  2. 利用 yum 安裝 PgAdmin III:
    #vim /var/lib/pgsql/data/pg_hba.conf
    (追加下列設定)
    host    all     all     192.168.5.244/32    md5
    
  3. 重新啟動 PostgreSQL Server:
    #su - postgres
    $pg_ctl restart
    
  4. 登入 X Window ,啟動 pgadmin3 :
    #pgadmin3 &
    
  5. 按下「插座」圖示,輸入相關 PostgreSQL Server 資訊、帳密,即可登入!

2016年5月22日 星期日

在 CentOS7/RHEL7 上架設多部 PostgreSQL

設定目標:
  • 架設多部 PostgreSQL Server,並且設定 Replication 進行同步資料與備援!
事前說明與準備:
  • PostgreSQL 基本安裝,請參考這一篇的設定!
  • 本篇將架設 9.4 版多部 PostgreSQL Server!一部 Pgpool-II,一部 Master Server 以及一部 Standby Server!
  • 示意圖如下:
    pgpool server: 192.168.100.241 pgs1 server: 192.168.100.231 pgs2 server: 192.168.100.232
  • 本篇將利用 repmgr 與 pgpool-II 來進行實作!

(一)安裝前設定流程:
  1. 先製作 ssh 金鑰對,方便連線登入到各個 Server:
    [root@pgpool ~]#ssh-keygen -t rsa
    [root@pgs1 ~]# ssh-keygen -t rsa
    [root@pgs2 ~]# ssh-keygen -t rsa
    
  2. 將製作好的 ssh 公鑰,互相送到各個 Server:
    (pgpool Server 上的設定)
    [root@pgpool ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@pgs1
    [root@pgpool ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@pgs2
    
    (pgs1 Server 上的設定)
    [root@pgs1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@pgpool
    [root@pgs1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@pgs2
    
    (pgs2 Server 上的設定)
    [root@pgs2 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@pgpool
    [root@pgs2 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@pgs1
    
  3. 在各個 Server 上安裝 PostgreSQL 的 repo 檔案:
    [root@pgpool ~]#yum -y install http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm
    [root@pgs1 ~]# yum -y install http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm
    [root@pgs2 ~]# yum -y install http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm
    
    ※上述網址為 PostgreSQL 官方提供的網址!

  4. 提前先新增 postgres 使用者與群組,以利後續的操作:
    (製作 pgpool Server上的 postgres 使用者與群組)
    [root@pgpool ~]# mkdir /var/lib/pgsql
    [root@pgpool ~]# groupadd -r -g 26 postgres
    [root@pgpool ~]# useradd -r -u 26 -M -d /var/lib/pgsql -n -g postgres postgres
    [root@pgpool ~]# passwd postgres
    [root@pgpool ~]# chown postgres:postgres -R /var/lib/pgsql/
    
    (製作 pgs1 Server上的 postgres 使用者與群組)
    [root@pgs1 ~]# mkdir /var/lib/pgsql
    [root@pgs1 ~]# groupadd -r -g 26 postgres
    [root@pgs1 ~]# useradd -r -u 26 -M -d /var/lib/pgsql -n -g postgres postgres
    [root@pgs1 ~]# passwd postgres
    [root@pgs1 ~]# chown postgres:postgres -R /var/lib/pgsql/
    
    (製作 pgs2 Server上的 postgres 使用者與群組)
    [root@pgs2 ~]# mkdir /var/lib/pgsql
    [root@pgs2 ~]# groupadd -r -g 26 postgres
    [root@pgs2 ~]# useradd -r -u 26 -M -d /var/lib/pgsql -n -g postgres postgres
    [root@pgs2 ~]# passwd postgres
    [root@pgs2 ~]# chown postgres:postgres -R /var/lib/pgsql/
    
    
  5. 仿照 root 製作 ssh 公鑰對方式,互相送到各個 Server,以利將來登入設定:
    (製作 pgpool 上的 postgres 憑證,並送至其他 Server)
    [root@pgpool ~]# su - postgres
    -bash-4.2$ ssh-keygen -t rsa
    -bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub postgres@pgs1
    -bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub postgres@pgs2
    
    (製作 pgs1 上的 postgres 憑證,並送至其他 Server)
    [root@pgs1 ~]# su - postgres
    -bash-4.2$ ssh-keygen -t rsa
    -bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub postgres@pgpool
    -bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub postgres@pgs2
    
    (製作 pgs2 上的 postgres 憑證,並送至其他 Server)
    [root@pgs2 ~]# su - postgres
    -bash-4.2$ ssh-keygen -t rsa
    -bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub postgres@pgs1
    -bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub postgres@pgpool
    
  6. 注意 SELinux 的修正:
    [root@pgpool ~]# /sbin/restorecon -vR /var/lib/pgsql/
    [root@pgs1 ~]# /sbin/restorecon -vR /var/lib/pgsql/
    [root@pgs2 ~]# /sbin/restorecon -vR /var/lib/pgsql/
    

(二)在 Master 上安裝設定 PostgreSQL Server:
※Master Server 為本例的 pgs1 Server!
  1. 利用 YUM 安裝必要套件:
    #yum -y install postgresql94 postgresql94-server postgresql94-contrib rsync
    
  2. 安裝 repmgr 套件:
    #yum -y install http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/repmgr94-3.1.2-1.rhel7.x86_64.rpm
    
    ※ repmgr 套件是用來監控 PostgreSQL Server 對其他 PostgreSQL Server 的 Replication 動作!
  3. 初始化 PostgreSQL Database:
    #/usr/pgsql-9.4/bin/postgresql94-setup initdb
    
  4. 編輯 PostgreSQL 連線設定檔:
    #vim /var/lib/pgsql/9.4/data/pg_hba.conf
    (只修改需要修改的部份)
    local   all             all                             trust
    host    all             all         127.0.0.1/32        md5
    host    all             all         ::1/128             md5
    host    repmgr          repmgr      192.168.100.231/32  trust
    host    replication     repmgr      192.168.100.231/32  trust
    host    repmgr          repmgr      192.168.100.232/32  trust
    host    replication     repmgr      192.168.100.232/32  trust
    host    all             pgpool      192.168.100.241/32  trust
    host    all             all         192.168.100.241/32  md5
    
  5. 編輯 PostgreSQL 設定檔:
    #vim /var/lib/pgsql/9.4/data/postgresql.conf
    (只修改需要用到的部份)
    listen_addresses = '*'
    max_connections = 200
    shared_buffers = 512MB
    effective_cache_size = 1536MB
    work_mem = 2621kB
    maintenance_work_mem = 128MB
    default_statistics_target = 100
    shared_preload_libraries = 'repmgr_funcs'
    wal_level = hot_standby
    wal_buffers = 16MB
    checkpoint_segments = 32
    checkpoint_completion_target = 0.7
    archive_mode = on
    archive_command = 'cd .'
    max_wal_senders = 1
    wal_keep_segments = 5000
    wal_sender_timeout = 1s
    hot_standby = on
    log_destination = 'stderr'
    logging_collector = on
    log_directory = 'pg_log' 
    log_filename = 'postgresql-%a.log' 
    log_truncate_on_rotation = on
    log_rotation_age = 1d
    log_rotation_size = 0
    log_min_duration_statement = 0
    log_checkpoints = on
    log_connections = on
    log_disconnections = on
    log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '
    log_lock_waits = on
    log_statement = 'all'
    log_temp_files = 0
    datestyle = 'iso, mdy'
    timezone = 'Europe/Brussels'
    lc_messages = 'en_US.UTF-8'
    lc_monetary = 'en_US.UTF-8'
    lc_numeric = 'en_US.UTF-8'
    lc_time = 'en_US.UTF-8'
    default_text_search_config = 'pg_catalog.english'
    
  6. 建立 repmgr 專用目錄:
    #su - postgres
    $ mkdir -p /var/lib/pgsql/repmgr/
    
  7. 編修 repmgr 設定檔:
    #vim /var/lib/pgsql/repmgr/repmgr.conf
    cluster=db_cluster
    node=1
    node_name=pgs1
    conninfo='host=pgs1 user=repmgr dbname=repmgr'
    pg_bindir=/usr/pgsql-9.4/bin/
    master_response_timeout=5
    reconnect_attempts=2
    reconnect_interval=2
    failover=manual
    promote_command='/usr/pgsql-9.4/bin/repmgr standby promote -f /var/lib/pgsql/repmgr/repmgr.conf'
    follow_command='/usr/pgsql-9.4/bin/repmgr standby follow -f /var/lib/pgsql/repmgr/repmgr.conf'
    
  8. 開啟防火牆:
    #firewall-cmd --permanent --add-service=postgresql
    #firewall-cmd --reload
    
  9. 啟動 PostgreSQL Server:
    #systemctl enable postgresql-9.4
    #systemctl start postgresql-9.4
    
  10. 建立 Replication 和 rempgr 的使用者,以及 rempgr 資料庫:
    #su - postgres
    $ psql
    postgres=# CREATE ROLE pgpool SUPERUSER CREATEDB CREATEROLE INHERIT REPLICATION LOGIN ENCRYPTED PASSWORD 'secret';
    postgres=# CREATE USER repmgr SUPERUSER LOGIN ENCRYPTED PASSWORD 'secret';
    postgres=# CREATE DATABASE repmgr OWNER repmgr;
    postgres=# \q
    
  11. 將 pgs1 Server 註冊成 rempgr 的 master node:
    #su - postgres
    $ /usr/pgsql-9.4/bin/repmgr -f /var/lib/pgsql/repmgr/repmgr.conf master register
    

(三)在 Standby 上安裝設定 PostgreSQL Server:
※Standby Server 為本例的 pgs2 Server!
  1. 在 Standby Server 上安裝 PostgreSQL Server:
    #yum -y install postgresql94 postgresql94-server postgresql94-contrib rsync
    
  2. 安裝 repmgr 套件:
    #yum -y install http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/repmgr94-3.1.2-1.rhel7.x86_64.rpm
    
  3. 所有設定檔,可由同步 Master Server 取得:
    #su - postgres
    $/usr/pgsql-9.4/bin/repmgr -D /var/lib/pgsql/9.4/data -d repmgr -p 5432 -U repmgr -R postgres standby clone pgs1
    
  4. 建立 repmgr 專用目錄:
    #su - postgres
    $ mkdir -p /var/lib/pgsql/repmgr/
    
  5. 編修 repmgr 設定檔:
    #vim /var/lib/pgsql/repmgr/repmgr.conf
    cluster=db_cluster
    node=2
    node_name=pgs2
    conninfo='host=pgs2 user=repmgr dbname=repmgr'
    pg_bindir=/usr/pgsql-9.4/bin/
    master_response_timeout=5
    reconnect_attempts=2
    reconnect_interval=2
    failover=manual
    promote_command='/usr/pgsql-9.4/bin/repmgr standby promote -f /var/lib/pgsql/repmgr/repmgr.conf'
    follow_command='/usr/pgsql-9.4/bin/repmgr standby follow -f /var/lib/pgsql/repmgr/repmgr.conf'
    
  6. 開啟防火牆:
    #firewall-cmd --permanent --add-service=postgresql
    #firewall-cmd --reload
    
  7. 啟動 PostgreSQL Server:
    #systemctl enable postgresql-9.4
    #systemctl start postgresql-9.4
    
  8. 將 pgs2 Server 註冊成 rempgr 的 standby node:
    #su - postgres
    $ /usr/pgsql-9.4/bin/repmgr -f /var/lib/pgsql/repmgr/repmgr.conf standby register
    

(四)測試 PostgreSQL Server 的 Replication 功能:
  1. 在 Standby Server 上查詢 rempgr 的情況:
    #su - postgres
    $/usr/pgsql-9.4/bin/repmgr -f /var/lib/pgsql/repmgr/repmgr.conf cluster show
    
    (顯示狀況如下:)
    Role      | Name | Upstream | Connection String
    ----------+------|----------|------------------------------------
    * master  | pgs1 |          | host=pgs1 user=repmgr dbname=repmgr
      standby | pgs2 | pgs1     | host=pgs2 user=repmgr dbname=repmgr
    
  2. 在 Standby Server 上查詢 PostgreSQL Database 的情況:
    $psql -U postgres -c "\list"
    
    (顯示狀況如下:)
                                      List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
    -----------+----------+----------+-------------+-------------+-----------------------
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     repmgr    | repmgr   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (4 rows)
    
  3. 在 Master Server 上建立一個測試用資料庫:
    #su - postgres
    $psql -U postgres -c "CREATE DATABASE test"
    
  4. 在 Standby Server 上,再次查詢 PostgreSQL Database 的情況:
    $psql -U postgres -c "\list"
                                      List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
    -----------+----------+----------+-------------+-------------+-----------------------
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     repmgr    | repmgr   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     test      | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
    (5 rows)
    
    ※可以發現有新資料庫已經被複製過來了~~~
  5. 在 Standby Server 上,新增測試 database:
    $psql -U postgres -c "CREATE DATABASE test2"
    (顯示以下訊息:)
    ERROR:  cannot execute CREATE DATABASE in a read-only transaction
    

(五)設定PgPool Server 功能:
  1. 在 PgPool Server上安裝需要套件:
    #yum install postgresql94 pgpool-II-94
    
  2. 從範例檔複製設定檔:
    #cp /etc/pgpool-II-94/pgpool.conf.sample-stream /etc/pgpool-II-94/pgpool.conf
    
  3. 編輯設定檔:
    #vim /etc/pgpool-II-94/pgpool.conf
    (只要新增或是編修下列設定參數即可:)
    listen_addresses = '*'
    port = 5432
    backend_hostname0 = 'pgs1'
    backend_port0 = 5432
    backend_weight0 = 1
    backend_data_directory0 = '/var/lib/pgsql/9.4/data'
    backend_flag0 = 'ALLOW_TO_FAILOVER'
    backend_hostname1 = 'pgs2'
    backend_port1 = 5432
    backend_weight1 = 1
    backend_data_directory1 = '/var/lib/pgsql/9.4/data'
    backend_flag1 = 'ALLOW_TO_FAILOVER'
    enable_pool_hba = on
    pid_file_name = '/var/run/pgpool-II-94/pgpool.pid'
    sr_check_user = 'pgpool'
    sr_check_password = 'secret'
    health_check_period = 10
    health_check_user = 'pgpool'
    health_check_password = 'secret'
    failover_command = '/etc/pgpool-II-94/failover.sh %d %H'  
    recovery_user = 'pgpool'
    recovery_password = 'secret'
    recovery_1st_stage_command = 'basebackup.sh'
    
  4. 編輯 failover.sh shell scripts 檔案:
    #vim /etc/pgpool-II-94/failover.sh
    #!/bin/sh
    failed_node=$1
    new_master=$2
    (
    date
    echo "Failed node: $failed_node"
    set -x
    /usr/bin/ssh -T -l postgres $new_master "/usr/pgsql-9.4/bin/repmgr -f /var/lib/pgsql/repmgr/repmgr.conf standby promote 2>/dev/null 1>/dev/null <&-"
    exit 0;
    ) 2>&1 | tee -a /tmp/pgpool_failover.log
    
  5. 修改 failover.sh 檔案權限:
    #chmod 755 /etc/pgpool-II-94/failover.sh
    
  6. 編輯 pool_hba.conf 檔案:
    #vim /etc/pgpool-II-94/pool_hba.conf
    # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
    local   all         all                               trust
    host    all         all         127.0.0.1/32          trust
    host    all         all         ::1/128               trust
    host    all         all         0.0.0.0/0             md5
    
  7. 編輯 pool_passwd 檔案:
    #touch /etc/pgpool-II-94/pool_passwd
    #chown postgres:postgres /etc/pgpool-II-94/pool_passwd
    #su - postgres
    $pg_md5 -m -u pgpool secret
    
    ※可設定所有需要連結 pgpool 資料庫的使用者密帳!
  8. 利用 PCP 來連結管理 pgpool 功能:
    #echo "pgpool:$(pg_md5 secret)"| tee /etc/pgpool-II-94/pcp.conf
    
  9. 開啟防火牆:
    #firewall-cmd --permanent --add-service=postgresql
    #firewall-cmd --reload
    
  10. 啟動 PgPool Server:
    #systemctl enable pgpool-II-94
    #systemctl start pgpool-II-94
    

  11. (六)失效測試:

參考文獻:

  1. http://blog.pulipuli.info/2015/06/postgresqlpgpool2-ha-structure-of.html
  2. http://www.pgpool.net/docs/latest/pgpool-en.html
  3. http://www.pgpool.net/docs/latest/pgpool-zh_cn.html
  4. http://jensd.be/591/linux/setup-a-redundant-postgresql-database-with-repmgr-and-pgpool
  5. https://www.keyup.eu/en/blog/89-replication-and-load-balancing-with-postgresql-and-pgpool2
  6. http://yum.postgresql.org/repopackages.php
  7. http://dz.sdut.edu.cn/blog/subaochen/2013/08/%E5%85%B3%E4%BA%8Epgpool-ii%E7%9A%84online-recovery/
  8. http://www.ahlinux.com/postgresql/9419.html
  9. http://linux.xvx.cz/2014/10/loadbalancing-of-postgresql-databases.html
  10. https://github.com/2ndQuadrant/repmgr/blob/master/README.md

2016年3月勞動部產學合作班(分組名單)

學員分組名單:

  1.    No.07   No.19    No.24
         在 CentOS7/RHEL7上安裝管理 RAID 5 檔案系統
  2.    No.02   No.03    No.04
         在 CentOS7/RHEL7 上架設 MRTG 主機網路流量監控系統
  3.    No.11   No.15    No.16
  4.      在 CentOS7/RHEL7 上架設 PXE 系統 (DiskLess System)
  5.    No.01   No.06    No.08
  6.      在 CentOS7/RHEL7 上安裝設定 Power DNS (Master-Slave With MySQL)
  7.    No.18   No.22    No.26
  8.      SNMP 網路管理協定實作統計 ( CACTI )
  9.    No.10   No.14    No.28
  10.      在 CentOS7/RHEL7 上設定 iSCSI (Target & Initiator)
  11.    No.23   No.25    No.29
  12.      在 CentOS7/RHEL7 上架設多部 PostgreSQL (Master-Slave Pgpool-II)
  13.    No.5     No.17    No.27
  14.      在 CentOS7/RHEL7 上架設 OpenVPN Server (Quick VPN)
  15.    No.9     No.20    No.21
  16.      在 CentOS7/RHEL7 上架設 HTTP 負載平衡系統 (Reverse-Proxy)
  17.    No.12   No.13    No.30
  18.      在 CentOS7/RHEL7 上安裝設定 E-mail Server (With MySQL)
專題製作要項:
  • 主題名稱
  • 基本原理說明
  • 系統架構與環境說明
  • 操作流程與步驟
  • 測試與結果
  • 結論

在 CentOS7/RHEL7 上架設 PostgreSQL Replication (Master-Slave)

設定目標:
  • 架設多部 PostgreSQL Server,並且設定 Replication 進行同步資料與備援!
    • 請參考這一篇的設定,架設好多部 PostgreSQL Server!
Master 端快速設定流程:
  1. 切換成 postgres 使用者:
    #su - postgres
    
  2. 建立用於 replication 的使用者帳密:
    $createuser --replication -P replica 
    
  3. 修改 PostgreSQL Server 相關設定:
    $vim /var/lib/pgsql/data/postgresql.conf
    (只修改下列設定:)
    listen_addresses = '*'
    wal_level = hot_standby
    
    ### 修改同步方式 ####
    # on ⇒ sync
    # remote_write ⇒ memory sync
    # local ⇒ slave is asynchronous
    # off ⇒ asynchronous
    synchronous_commit = local
    
    archive_mode = on
    archive_command = 'cp %p /var/lib/pgsql/archive/%f'
    
    ### 設定 Master 以及 Slave 主機數量 ###
    max_wal_senders = 2
    wal_keep_segments = 10
    
    ### 同步的主機名稱(可以任意定) ###
    synchronous_standby_names = 'slave01'
    
  4. 設定 pg_hba.conf 檔:
    $vim /var/lib/pgsql/data/pg_hba.conf
    ### 在檔尾追加下列設定 ###
    # host replication [replication user] [allowed IP addresses] password
    host    replication     replica          127.0.0.1/32            password
    host    replication     replica          192.168.5.244/32            password
    host    replication     replica          192.168.5.243/32            password
    
  5. 重新啟動 PostgreSQL Server:
    $pg_ctl restart 
    
Slave 端快速設定流程:
  1. 切換成 postgres 使用者:
    #su - postgres
    
  2. 由 Master 備份資料到 Slave (需要 replica 的密碼):
    $pg_basebackup -h 192.168.5.244 -U replica -D /var/lib/pgsql/data -P --xlog 
    
  3. 修改 PostgreSQL Server 相關設定:
    $vim /var/lib/pgsql/data/postgresql.conf
    (只修改下列設定,其餘設定保留)
    hot_standby = on
    
  4. 從範例檔複製設定檔:
    $cp /usr/share/pgsql/recovery.conf.sample /var/lib/pgsql/data/recovery.conf 
    
  5. 編修設定檔 /var/lib/pgsql/data/recovery.conf:
    $ vi /var/lib/pgsql/data/recovery.conf
    (只修改下列設定,其餘設定保留)
    restore_command = 'scp 192.168.5.244:/var/lib/pgsql/archive/%f %p'
    standby_mode = on
    ### 設定 Master Server 相關設定 ###
    primary_conninfo = 'host=192.168.5.244 port=5432 user=replica password=a123456 application_name=slave01'
    
  6. 重新啟動 PostgreSQL Server:
    $pg_ctl stop
    $pg_ctl start
    

參考文獻:

  1. http://www.server-world.info/en/note?os=CentOS_7&p=postgresql&f=3

在 CentOS7/RHEL7 上使用 phpPgAdmin

設定目標:
  • 利用 phpPgAdmin 管理 PostgreSQL Server!
    • 請參考這一篇的設定,架設好 PostgreSQL Server!
    • 請參考這一篇的設定,架設好 Web + PHP Server!
快速設定流程:
  1. 調整 SELinux 設定值:
    #setsebool -P httpd_can_network_connect_db 1
    
  2. 調整 PostgreSQL Server 設定值:
    #vim /var/lib/pgsql/data/postgresql.conf
    listen_addresses = '*'
    port = 5432
    
  3. 重新啟動 PostgreSQL Server:
    #systemctl restart postgresql
    
  4. 安裝 phpPgAdmin:
    #yum install phpPgAdmin php-pgsql
    
  5. 編修 Web Server 設定檔:
    #vim /etc/httpd/conf.d/phpPgAdmin.conf
    [...省略...]
    Alias /phpPgAdmin /usr/share/phpPgAdmin
    <Location /phpPgAdmin>
        <IfModule mod_authz_core.c>
            # Apache 2.4
            Require all granted
            #Require host example.com
        </IfModule>
        [...省略...]
    </Location>
    [...省略...]
    
  6. 重新啟動 Web Server:
    #systemctl restart httpd
    
  7. 編修 phpPgAdmin 設定檔:
    #vim /etc/phpPgAdmin/config.inc.php
    (只編修下列設定檔內容,其餘保留不動作!)
    $conf['servers'][0]['host'] = 'localhost';
    $conf['extra_login_security'] = false;
    $conf['owned_only'] = true;
    
  8. 連線至 phpPgAdmin :
    #firefox http://localhost/phpPgAdmin
    

參考文獻:

  1. http://www.unixmen.com/postgresql-9-4-released-install-centos-7/
  2. http://www.server-world.info/en/note?os=CentOS_7&p=postgresql&f=1
  3. http://www.server-world.info/en/note?os=CentOS_7&p=postgresql&f=2

在 CentOS7/RHEL7 上架設 PostgreSQL Server

快速設定流程:
  1. 安裝 PostgreSQL Server 套件:
    #yum install postgresql postgresql-server postgresql-contrib
    
  2. 初始化 PostgreSQL Database:
    #postgresql-setup initdb
    
  3. 修改認證設定檔:
    #vim /var/lib/pgsql/data/pg_hba.conf
    (將下列設定改成 md5 驗證方式)
    host    all             all             127.0.0.1/32            md5
    host    all             all             ::1/128                 md5
    
  4. 啟動 PostgreSQL Server:
    #systemctl start postgresql
    #systemctl enable postgresql
    
  5. 開啟防火牆設定:
    #firewall-cmd --permanent --add-service=postgresql
    #firewall-cmd --reload
    
※補充操作:
  1. 切換至 postgres 使用者:
    #su - postgres
    
  2. 執行 PostgresSQL Shell:
    $psql
    
  3. 設定 postgres 使用者密碼:
    postgres=# \password postgres 
    
  4. 離開 PostgresSQL Shell:
    postgres=# \q
    

參考文獻:

  1. https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-centos-7
  2. http://www.liquidweb.com/kb/how-to-install-and-connect-to-postgresql-on-centos-7/
  3. http://blog.xuite.net/towns/hc/323035660-PostgreSQL+%E5%AE%89%E8%A3%9D%E3%80%81%E8%A8%AD%E5%AE%9A%E8%88%87%E7%AE%A1%E7%90%86

在 CentOS7/RHEL7 上架設 DHCP Server

快速設定流程:
  1. 安裝 DHCP 套件:
    #yum install dhcp
    
  2. 複製範例設定檔:
    #cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
    
  3. 編輯設定檔:
    #vim /etc/dhcp/dhcpd.conf
    [...省略...]
    ### 設定子網段與 IP 位置配發範圍 ###
     subnet 192.168.5.0 netmask 255.255.255.0 {
     range 192.168.5.100 192.168.5.200;
    
    ### 指定 DNS IP 位置 ### 
     option domain-name-servers 168.95.1.1, 8.8.8.8;
    
    ### 指定網域名稱 ###
     option domain-name "example.com";
    
    ### 指定預設閘道與相關的路由協定 ###
     option routers 192.168.5.254;
     option broadcast-address 192.168.5.255;
    
    ### 指定租約更新時間 ###
     default-lease-time 600;
     max-lease-time 7200;
    }
    
    ### 指定特定主機的 IP 位置,避免該 IP 位置被配發出去 ###
    host mailserver {
     hardware ethernet 00:0C:29:05:A7:CB; 
     fixed-address 192.168.5.110; 
    } 
    
    [...省略...]
    
  4. 啟動 DHCP Server:
    #systemctl restart dhcpd
    #systemctl enable dhcpd
    
  5. 開啟防火牆設定:
    #firewall-cmd --permanent --add-service=dhcp
    #firewall-cmd --reload
    

參考文獻:

  1. http://www.server-world.info/en/note?os=CentOS_7&p=dhcp
  2. http://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/install-and-configure-dhcp-server-on-centos-7-ubuntu-14-04.html

在 CentOS7/RHEL7 上架設 OpenVPN Server

Server端快速設定流程:
  1. 安裝 EPEL 套件:
    #yum install epel-release
    
  2. 安裝 OpenVPN 以及快速加密套件:
    #yum install -y openvpn easy-rsa
    
  3. 利用 OpenVPN 範例檔,加快設定速度:
    #cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
    
  4. 開啟 /etc/openvpn/server.conf, 修改以下設定::
    #vim /etc/openvpn/server.conf
    ### 修改 "dh" 設定:
    dh dh2048.pem
    
    ### 找到 "redirect-gateway def1 bypass-dhcp" 並將它解註解:
    push "redirect-gateway def1 bypass-dhcp"
    
    ### 修改 DNS 伺服器設定:
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 8.8.4.4"
    
    ### 修改 "user" 及 "group" 設定:
    user nobody
    group nobody
    
    ### 註解 tls 認證功能 #### 
    #tls-auth ta.key 0 
    
    ### 開啟標頭壓縮功能 ####
    comp-lzo
    
  5. 建立 Easy RSA 設定檔目錄、及建立相關設定檔:
    # mkdir -p /etc/openvpn/easy-rsa/keys
    # cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
    # cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
    
  6. 修改 /etc/openvpn/easy-rsa/vars 設定值:
    #vim /etc/openvpn/easy-rsa/vars
    export KEY_COUNTRY=TW
    export KEY_PROVINCE=Taiwan
    export KEY_CITY=Kaohsiung
    export KEY_ORG="Happy Heaven"
    export KEY_EMAIL="test@gmail.com"
    export KEY_CN=""
    export KEY_NAME=""
    
  7. 用 Easy RSA 產生金鑰:
    # cd /etc/openvpn/easy-rsa
    # source ./vars
    # ./clean-all
    # ./build-ca
    # ./build-key-server server
    # ./build-dh
    
  8. 將金鑰複製到 OpenVPN 目錄:
    #cd /etc/openvpn/easy-rsa/keys
    #cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
    
  9. 在 OpenVPN Server 產生 Client 端的認證金鑰:
    # cd /etc/openvpn/easy-rsa
    # ./build-key client
    
  10. 設定防火牆:
    #firewall-cmd --permanent --add-service=openvpn
    #firewall-cmd --permanent --add-masquerade
    #firewall-cmd --reload
    
  11. 編修 /etc/sysctl.conf:
    #vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    
  12. 重新導入 /etc/sysctl.conf:
    # sysctl -p
    
  13. 啟動 OpenVPN:
    #systemctl restart NetworkManager
    #systemctl -f enable openvpn@server
    #systemctl start openvpn@server
    

※補充建議:
  1. 請事先安裝好 HTTP Server,並且啟動!
  2. 複製下列三個檔案到 /var/www/html/keys 目錄下:
    #mkdir /var/www/html/keys
    #cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/client.crt /etc/openvpn/easy-rsa/keys/client.key /var/www/html/keys
    
  3. 編修 client.ovpn 檔案:
    #vim /var/www/html/keys/client.ovpn
    client
    dev tun
    proto udp
    remote your_server_ip 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    comp-lzo
    verb 3
    ca /opt/keys/ca.crt
    cert /opt/keys/client.crt
    key /opt/keys/client.key
    
  4. 修正檔案權限設定:
    #cd /var/www/html/keys
    #chown apache.apache *
    #restoreconf -R /var/www/html
    

Client 端快速設定流程:
傋註:以 Linux 作業系統為例!
  1. 下載 Server 端上的四個檔案:
    #mkdir /opt/keys
    #cd /opt/keys
    #wget http://192.168.5.244/keys/client.crt
    #wget http://192.168.5.244/keys/ca.crt
    #wget http://192.168.5.244/keys/client.key
    #wget http://192.168.5.244/keys/client.ovpn
    ##restoreconf -R /opt/keys
    
  2. 安裝 OpenVPN :
    #yum install -y openvpn
    
  3. 連線 OpenVPN :
    #openvpn –config /path/to/client.ovpn
    
  4. 補充說明 client.ovpn 放入 key 值的設定 :
    #vim client.ovpn
    在檔案最下方,刪去 ca、cert、key 三行設定!
    接下來,加入下列設定....
    <ca>
    (把 ca.crt 檔案內容完整複製過來...)
    </ca>
    <key>
    (把 client.key 檔案內容完整複製過來...)
    </key>
    <cert>
    (把 client.crt 檔案內容完整複製過來...)
    </cert>

參考文獻:

  1. http://www.phpini.com/linux/centos-7-install-openvpn-server
  2. http://www.tecmint.com/setup-openvpn-server-with-linux-and-windows-clients-in-centos-rhel/
  3. http://dreamtails.pixnet.net/blog/post/30797812-centos-7-install-openvpn

2016年5月18日 星期三

在 CentOS7/RHEL7 上設定 iSCSI (二)

Target 快速設定流程:
  1. 安裝相關套件:
    #yum install iscsi-initiator-utils
    
  2. 編輯 Initiator 名稱:
    #vim /etc/iscsi/initiatorname.iscsi
    InitiatorName=iqn.2016-05.com.example:server2
    
  3. 啟動 Initiator 服務:
    #systemctl enable iscsi
    #systemctl restart iscsi
    
  4. 利用 iscsiadm 登入 iSCSI :
    #iscsiadm -m discovery -t st -p 192.168.5.244
    #iscsiadm -m node -T iqn.2016-05.com.example:server1.disk01 -p 192.168.5.244 -l
    
  5. 掛載 iSCSI 分出來的硬碟空間:
    #lsblk
    #tail /var/log/messages
    #fdisk /dev/sdb
    #mkfs -t ext4 /dev/sdb1
    #blkid /dev/sdb1
    #vim /etc/fstab
      UUID=xxxx   /mnt/data  ext4 _netdev 0 0
    
  6. 利用 iscsiadm 登出 iSCSI :
    #iscsiadm -m node -T iqn.2016-05.com.example:server1.disk01 -p 192.168.5.244 -u
    

2016年5月17日 星期二

在 CentOS7/RHEL7 上設定 iSCSI (一)

Target 快速設定流程:
  1. 安裝相關套件:
    #yum -y install targetcli
    
  2. 打開防火牆設定:
    #firewall-cmd --permanent --add-port=3260/tcp
    #firewall-cmd --reload
    
  3. 啟動 iSCSI Target 服務:
    #systemctl enable target
    #systemctl start target
    
  4. 建立資料夾內影像檔,提供本次設定:
    #mkdir /iscsi_disks
    #dd if=/dev/zero of=/iscsi_disks/disk01.img bs=1M count=1024
    
  5. 使用專屬管理 console 介面:
    # targetcli
    
  6. 建立一個檔案名稱,連結影像檔:
    /> cd backstores/fileio
    /backstores/fileio> create server1.disk01 /iscsi_disks/disk01.img
    
  7. 建立 iSCSI target 名稱:
    /backstores/fileio> cd /iscsi
    /iscsi> create iqn.2016-05.com.example:server1.disk01
    
  8. 建立 ACL 名稱:
    /iscsi> cd iqn.2016-05.com.example:server1.disk01/tpg1/acls/
    /iscsiiqn.2016-05.com.example:server1.disk01/tpg1/acls/> create iqn.2016-05.com.example:server2
  9. 連結 LUN:
    /iscsiiqn.2016-05.com.example:server1.disk01/tpg1/acls/> cd iqn.2016-05.com.example:server1.disk01/tpg1/luns/
    /iscsiiqn.2016-05.com.example:server1.disk01/tpg1/luns/> create /backstores/fileio/server1.disk01
  10. 建立 portal:
    /iscsiiqn.2016-05.com.example:server1.disk01/tpg1/acls/> cd iqn.2016-05.com.example:server1.disk01/tpg1/portals/
    /iscsiiqn.2016-05.com.example:server1.disk01/tpg1/portals/> create 192.168.5.243
    
  11. 存檔、離開:
    /iscsiiqn.2016-05.com.example:server1.disk01/tpg1/acls/> cd / 
    /> saveconfig
    /> exit
    

在 CentOS7/RHEL7 上安裝設定 Power DNS(一)

  • 事先準備事項:
    • MariaDB 服務設定,請參考這一篇的設定!
    • Httpd 服務設定,請參考這一篇的設定!
    • EPEL 服務設定,請參考這一篇的設定!
快速設定流程:
  1. 安裝相關套件:
    #yum -y install pdns pdns-backend-mysql
    
  2. 設定 MariaDB 內容:
    # mysql -u root -p
    MariaDB [(none)]> CREATE DATABASE powerdns;
    MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'powerdns123';
    MariaDB [(none)]> FLUSH PRIVILEGES;
    
    MariaDB [(none)]> USE powerdns;
    MariaDB [powerdns]> CREATE TABLE domains (
                     -> id INT auto_increment,
                     -> name VARCHAR(255) NOT NULL,
                     -> master VARCHAR(128) DEFAULT NULL,
                     -> last_check INT DEFAULT NULL,
                     -> type VARCHAR(6) NOT NULL,
                     -> notified_serial INT DEFAULT NULL,
                     -> account VARCHAR(40) DEFAULT NULL,
                     -> primary key (id)
                     -> )ENGINE = INNODB, CHARSET=utf8;
    MariaDB [powerdns]> CREATE UNIQUE INDEX name_index ON domains(name);
    
    MariaDB [powerdns]> CREATE TABLE records (
                     -> id INT auto_increment,
                     -> domain_id INT DEFAULT NULL,
                     -> name VARCHAR(255) DEFAULT NULL,
                     -> type VARCHAR(6) DEFAULT NULL,
                     -> content VARCHAR(255) DEFAULT NULL,
                     -> ttl INT DEFAULT NULL,
                     -> prio INT DEFAULT NULL,
                     -> change_date INT DEFAULT NULL,
                     -> disabled TINYINT(1) DEFAULT 0,
                     -> ordername VARCHAR(255) BINARY DEFAULT NULL,
                     -> auth TINYINT(1) DEFAULT 1,
                     -> primary key(id)
                     -> )ENGINE = INNODB, CHARSET=utf8;
    MariaDB [powerdns]> CREATE INDEX rec_name_index ON records(name);
    MariaDB [powerdns]> CREATE INDEX nametype_index ON records(name,type);
    MariaDB [powerdns]> CREATE INDEX domain_id ON records(domain_id);
    
    MariaDB [powerdns]> CREATE TABLE supermasters (
                     -> ip VARCHAR(25) NOT NULL,
                     -> nameserver VARCHAR(255) NOT NULL,
                     -> account VARCHAR(40) DEFAULT NULL
                     -> )ENGINE = INNODB, CHARSET=utf8;
    
    MariaDB [powerdns]> quit;
    
  3. 編修相關設定檔內容:
    #vim /etc/pdns/pdns.conf
    launch=gmysql
    gmysql-host=localhost
    gmysql-user=powerdns
    gmysql-password=user-pass
    gmysql-dbname=powerdns
    
  4. 開啟防火牆設定:
    #firewall-cmd --permanent --add-service=dns
    #firewall-cmd --permanent --add-service=mysql
    #firewall-cmd --reload
    
  5. 啟動服務:
    # systemctl enable pdns.service 
    # systemctl start pdns.service 
    
  6. 安裝 poweradmin 套件:
    # cd /var/www/html/
    # wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz 
    # tar xfv poweradmin-2.1.7.tgz
    # mv poweradmin-2.1.7 pdns
    
  7. 設定 SELinux 設定:
    #restorecon -R /var/www/html/
    
  8. 開啟設定網頁:
    #firefox http://localhost/pdns/install/
    

在 CentOS7/RHEL7 上安裝設定 LDAP Server(二)

進階設定目標:
  • 將公鑰遞給客戶端,用以建立 TLS 連線方式,使用 LDAP Server!
進階設定流程:
  1. 切換目錄至 /etc/openldap/certs/:
    #cd /etc/openldap/certs/
    
  2. 複製公鑰至公開目錄,方便客戶端取得:
    #cp cert.pem /var/www/html/example-ca.crt
    
  3. 小心 SELinux 問題:
    #restorecon -R /var/www/html
    
  4. 重新啟動 Apache 服務:
    #systemctl restart httpd
    

客戶端設定:
    圖形介面安裝設定:
  1. 首先安裝認證設定圖形介面套件:
    #yum -y install authconfig-gtk
    
  2. 在 Gnome 圖形介面下,打開認證設定軟體:
    #authconfig-gtk &
    

2016年5月9日 星期一

在 CentOS7/RHEL7 上設定需要帳密登入的 Web站台

進階設定目標:
  • 在 Web 虚擬主機上,設置需要使用者帳密才可登入的網站!
注意事項:
  • 基本 Web 站台設定,請參考這一篇文章!
  • Web 虚擬主機設定,請參考第二篇文章!
  • https 連線加密的站台設定,請參考第三篇文章!
進階設定流程(一):
  1. 在 /etc/httpd/conf.d 目錄中,編寫之前的設定檔 vhosts.conf :
    #vim /etc/httpd/conf.d/vhosts.conf
    <VirtualHost *:80>
       ServerName test1.example.com
       DocumentRoot /var/www/vhosts/test1
       <Directory /var/www/vhosts/test1/sec>
           AuthType Basic
           AuthName "Restricted Area"
           AuthUserFile /var/www/vhosts/.htpasswd
           require valid-user
       </Directory>
    </VirtualHost>
    
  2. 新增 .htpasswd 檔案:
    #cd /var/www/vhosts/.htpasswd
    #htpasswd -c .htpasswd peter
    (記得要輸入密碼)
    
    (再增加使用者時,不用 -c 參數)
    #htpasswd .htpasswd eric
    
  3. 修改 .htpasswd 權限:
    #chmod 0411 .htpasswd
    
  4. 重新啟動 Apache :
    #systemctl restart httpd
    
參考資料:
  1. http://www.seas.upenn.edu/cets/answers/auth-htpasswd.html

在 CentOS7/RHEL7 上設定 Web 連線加密站台

進階設定目標:
  • 在同一 Web 主機上,設置加密與不加密兩類網站!
注意事項:
  • 基本 Web 站台設定,請參考這一篇文章!
  • Web 虚擬主機設定,請參考第二篇文章!
進階設定流程(一):
  1. 安裝 Apache 所需要的架密模組:
    #yum -y install mod_ssl openssl
    
  2. 產生一張自我簽署的憑證
    ## 產生私鑰
    #openssl genrsa -out ca.key 2048
    
    ## 產生 CSR
    #openssl req -new -key ca.key -out ca.csr
    
    ## 產生自我簽署的金鑰
    #openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
    
    ## 複製檔案至正確位置
    #cp ca.crt /etc/pki/tls/certs
    #cp ca.key /etc/pki/tls/private/ca.key
    #cp ca.csr /etc/pki/tls/private/ca.csr
    
  3. 處理 SELiux 設定:
    #restorecon -RvF /etc/pki
    
  4. 設定成虚擬主機:
    #vim /etc/httpd/conf.d/ssl_vhosts.conf
    
    LoadModule ssl_module modules/mod_ssl.so
    
    #Listen 443
    <VirtualHost *:443>
        ServerName sec.example.com
        DocumentRoot /var/www/vhosts/sec
        SSLEngine on
        SSLCertificateFile "/etc/pki/tls/certs/ca.crt"
        SSLCertificateKeyFile "/etc/pki/tls/private/ca.key"
    </VirtualHost>
    
  5. 加密站台目錄與網頁的處理:
    #mkdir -p /var/www/vhosts/sec
    #cd /var/www/vhosts/sec
    #vim index.html
    Hi~~This is a secrete site !!
    
參考資料:
  1. https://wiki.centos.org/zh-tw/HowTos/Https
  2. https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html
  3. http://linux.vbird.org/linux_server/0360apache.php#www_basic_pkg

2016年5月8日 星期日

在 CentOS7/RHEL7 上設定 Web 虚擬主機

進階設定目標:
  • 在同一 Web 主機上,設置不同網址網站!
  • 將 RoundCube 站台,變成 Webmail 站台
注意事項:
  • 基本 Web 站台設定,請參考這一篇文章!
進階設定流程(一):
  1. 在 /etc/httpd/conf.d 目錄中,自由新增檔案:
    #cd /etc/httpd/conf.d
    #vim vhosts.conf
    <VirtualHost _default_:80>
       ServerName www.example.com
       DocumentRoot /var/www/html
    </VirtualHost>
    <VirtualHost *:80>
       ServerName test1.example.com
       DocumentRoot /var/www/vhosts/test1
    </VirtualHost>
    
  2. 建立放置虚擬網站目錄:
    #mkdir -p /var/www/vhosts/test1
    
  3. 在虚擬網站目錄內,新增測試用網頁:
    #vim /var/www/vhosts/test1/index.html
    Hello!! Test1 Web Site !!
    
  4. 新增 DNS 記錄:
    #vim /var/named/example.zone
    (新增在最後一行)
    test1    IN  A  192.168.5.2
    
    注意事項:請參考這一篇的 DNS Server 設定!
  5. 重新啟動 DNS Server:
    #systemctl restart named
    
  6. 重新啟動 Web Server:
    #systemctl restart httpd
    
進階設定流程(二):
  1. 在 /etc/httpd/conf.d 目錄中,編輯 roundcubemail.conf 檔案:
    #vim /etc/httpd/conf.d/roundcubemail.conf
    Alias /roundcubemail /usr/share/roundcubemail
    (增加下列幾行:)
    <VirtualHost *:80>
       ServerName webmail.example.com
       DocumentRoot /usr/share/roundcubemail
    
    <Directory /usr/share/roundcubemail/bin/>
       :
       : (中間原來設定不動!)
       :
       :
    </Directory>
    (新增下列這行,為最後一行設定值)
    </VirtualHost>
    
  2. 新增 DNS 記錄:
    #vim /var/named/example.zone
    (新增在最後一行)
    webmail    IN  A  192.168.5.2
    
  3. 重新啟動 DNS Server:
    #systemctl restart named
    
  4. 重新啟動 Web Server:
    #systemctl restart httpd
    

在 CentOS7/RHEL7 上安裝設定 LDAP Server(一)

快速設定流程:
  1. 安裝 LDAP Server 套件:
    #yum install -y openldap openldap-clients openldap-servers migrationtools
    
  2. 先取得加密後的密碼:
    #slappasswd -s redhat -n > /etc/openldap/passwd
    
  3. 製作加密通訊用的金鑰組:
    #openssl req -new -x509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/priv.pem -days 3650
    Generating a 2048 bit RSA private key
    .....+++
    ..............+++
    writing new private key to '/etc/openldap/certs/priv.pem'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    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) []:instructor.example.com
    Email Address []: ##輸入 email 帳號
    
  4. 修改 /etc/openldap/certs 權限:
    # cd /etc/openldap/certs
    # chown ldap:ldap *
    # chmod 600 priv.pem
    
  5. 將 LDAP 資料庫範例檔,直接複製過來,方便架設與安裝:
    #cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    #chown ldap /var/lib/ldap/DB_CONFIG
    
  6. 產生資料庫檔(不用管出現的錯誤):
    #slaptest
    
  7. 設定 /var/lib/ldap/ 目錄內,相關檔案權限:
    ## chown ldap:ldap /var/lib/ldap/*
    
  8. 防火牆設定(389/686 port):
    #firewall-cmd --permanent --add-service=ldap
    #firewall-cmd --permanent --add-service=ldaps
    #firewall-cmd --reload
    
  9. 啟動 slapd 服務:
    #systemctl enable slapd.service
    #systemctl start slapd.service
    
  10. 檢查啟動狀況:
    #ss -nlp | grep slapd
    
  11. 將 ldif 檔案導入系統中,例如: cosine 以及 nis 兩個 schemas:
    #cd /etc/openldap/schema
    #ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif
    #ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif
    
  12. 編寫 changes.ldif 檔案:
    #vim /etc/openldap/changes.ldif
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcSuffix
    olcSuffix: dc=example,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootDN
    olcRootDN: cn=Manager,dc=example,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootPW
    olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
    
    dn: cn=config
    changetype: modify
    replace: olcTLSCertificateFile
    olcTLSCertificateFile: /etc/openldap/certs/cert.pem
    
    dn: cn=config
    changetype: modify
    replace: olcTLSCertificateKeyFile
    olcTLSCertificateKeyFile: /etc/openldap/certs/priv.pem
    
    dn: cn=config
    changetype: modify
    replace: olcLogLevel
    olcLogLevel: -1
    
    dn: olcDatabase={1}monitor,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none
    
  13. 導入 changes.ldif 檔案到 LDAP Server 中:
    #ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/changes.ldif
    
  14. 可開始建立所須網域的 ldif 檔案:
    #vim /etc/openldap/base.ldif
    dn: dc=example,dc=com
    dc: example
    objectClass: top
    objectClass: domain
    
    dn: ou=People,dc=example,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    
    dn: ou=Group,dc=example,dc=com
    ou: Group
    objectClass: top
    objectClass: organizationalUnit
    
  15. 導入 base.ldif 檔案到 LDAP Server 中:
    #ldapadd -x -w redhat -D cn=Manager,dc=example,dc=com -f /etc/openldap/base.ldif
    
  16. 增加兩個系統使用者帳號來測試一下:
    # mkdir /home/guests
    # useradd -d /home/guests/ldapuser01 ldapuser01
    # passwd ldapuser01
    # useradd -d /home/guests/ldapuser02 ldapuser02
    # passwd ldapuser02
    
  17. 編寫 migrate_common.ph內容,將系統上的使用者,導入到 LDAP Server 中:
    #vim /usr/share/migrationtools/migrate_common.ph
    $DEFAULT_MAIL_DOMAIN = "example.com";
    $DEFAULT_BASE = "dc=example,dc=com";
    
  18. 在LDAP Server 中,建立目前的使用者與群組:
    # grep ":10[0-9][0-9]" /etc/passwd > passwd
    # ./migrate_passwd.pl passwd users.ldif
    # ldapadd -x -w redhat -D cn=Manager,dc=example,dc=com -f users.ldif
    # grep ":10[0-9][0-9]" /etc/group > group
    # ./migrate_group.pl group groups.ldif
    # ldapadd -x -w redhat -D cn=Manager,dc=example,dc=com -f groups.ldif
    
  19. 測試目前的使用者 ldapuser01:
    # ldapsearch -x cn=ldapuser01 -b dc=example,dc=com
    
  20. 可加入系統記錄服務:
    #vim /etc/rsyslog.conf
    local4.* /var/log/ldap.log
    
    (重新啟動系統記錄服務:)
    #systemctl restart rsyslog
    
參考資料網址:
  1. https://www.certdepot.net/rhel7-configure-ldap-directory-service-user-connection/
  2. http://www.server-world.info/en/note?os=CentOS_7&p=openldap
  3. http://jamyy.us.to/blog/2014/09/6704.html
  4. http://yu-li-liang.blogspot.tw/2014/04/linux-centos-ldap-server-24.html
  5. http://crashedbboy.blogspot.tw/2015/08/centos-7-open-ldap.html

2016年5月3日 星期二

在 CentOS7/RHEL7 上安裝設定 E-mail Server(四)

進階設定目標:
  • 大量建立 E-mail 使用者帳號,並使用 MySQL 進行管理!
進階設定流程:
  1. 追加安裝 dovecot-mysql 套件:
    #yum -y install dovecot-mysql
    
  2. 驗證 postfix 是否有與 mysql 以及 dovecot 連上:
    #postconf -m
    #postconf -a
    
  3. 建立一個真實使用者以及放置郵件目錄:
    #mkdir -p /var/www/mailbox/vmail
    #groupadd -g 5000 vmail
    #useradd -g 5000 -u 5000 -s /sbin/nologin -d /var/www/mailbox/vmail vmail
    #chown -R vmail:vmail /var/www/mailbox/
    #chmod -R 700 /var/www/mailbox/
    
  4. 修改 /etc/postfix/main.cf 基本設定:
    #vim /etc/postfix/main.cf
    #修改下列設定:
    mynetworks_style = host
    ##mynetworks = 127.0.0.0/8, 192.168.100.0/24 <== 可註解該行
    
    #追加下列設定:
    ## Vitual MailBox #####
    virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
    virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    virtual_mailbox_base = /var/www/mailbox/vmail
    
    
  5. 在 MySQL 中,建立資料表 domain, mailbox, alias, quota2:
    #mysql -u root -p
    MySQL(none)>create database MailBox;
    MySQL(none)>use MailBox;
    MySQL(MailBox)>CREATE TABLE domain (
                  >domain varchar(255) NOT NULL default '',
                  >description varchar(255) NOT NULL default '',
                  >aliases int(10) NOT NULL default '0',
                  >mailboxes int(10) NOT NULL default '0',
                  >maxquota int(10) NOT NULL default '0',
                  >transport varchar(255) default NULL,
                  >backupmx tinyint(1) NOT NULL default '0',
                  >created datetime NOT NULL default '0000-00-00 00:00:00',
                  >modified datetime NOT NULL default '0000-00-00 00:00:00',
                  >active tinyint(1) NOT NULL default '1',
                  >PRIMARY KEY (domain),
                  >KEY domain (domain)
                  >)ENGINE=MyISAM COMMENT='Virtual Domains';
    

                           
    MySQL(MailBox)>CREATE TABLE mailbox (
                  >username varchar(255) NOT NULL default '',
                  >password varchar(255) NOT NULL default '',
                  >name varchar(255) NOT NULL default '',
                  >maildir varchar(255) NOT NULL default '',
                  >quota int(10) NOT NULL default '0',
                  >domain varchar(255) NOT NULL default '',
                  >created datetime NOT NULL default '0000-00-00 00:00:00',
                  >modified datetime NOT NULL default '0000-00-00 00:00:00',
                  >active tinyint(1) NOT NULL default '1',
                  >PRIMARY KEY (username),
                  >KEY username (username)
                  >)ENGINE=MyISAM COMMENT='Virtual Mailboxes';
    

    MySQL(MailBox)>CREATE TABLE alias ( 
                  >address varchar(255) NOT NULL default '',
                  >goto text NOT NULL, 
                  >domain varchar(255) NOT NULL default '',
                  >created datetime NOT NULL default '0000-00-00 00:00:00',
                  >modified datetime NOT NULL default '0000-00-00 00:00:00',
                  >active tinyint(1) NOT NULL default '1',
                  >PRIMARY KEY (address),
                  >KEY address (address)
                  >)ENGINE=MyISAM COMMENT='Virtual Aliases';
    

    MySQL(MailBox)>CREATE TABLE IF NOT EXISTS `quota2` (
                  >username varchar(100) NOT NULL,
                  >bytes bigint(20) NOT NULL default '0',
                  >messages int(11) NOT NULL default '0',
                  >PRIMARY KEY  (`username`)
                  >)ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
  6. 在 MySQL 中,新增使用者,並且授權:
    MySQL(MailBox)>use mysql;
                  >CREATE USER 'mailbox'@'localhost' IDENTIFIED BY 'mailbox@123';
                  >GRANT ALL PRIVILEGES ON MailBox.* TO 'mailbox'@'localhost';
    
  7. 將 postfix 連上 mysql :
    #vim /etc/postfix/mysql_virtual_alias_maps.cf
    user = mailbox
    password = mailbox@123
    hosts = localhost
    dbname = MailBox
    query = SELECT goto from alias WHERE address = '%s' AND active = '1'
    
    

    #vim /etc/postfix/mysql_virtual_domains_maps.cf
    user = mailbox
    password = mailbox@123
    hosts = localhost
    dbname = MailBox
    query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '0' AND active = '1'
    
    

    #vim /etc/postfix/mysql_virtual_mailbox_maps.cf
    user = mailbox
    password = mailbox@123
    hosts = localhost
    dbname = MailBox
    query = SELECT maildir FROM mailbox WHERE username = '%s' AND active = '1'
    
    
  8. 設定 mailbox 大小:
    # vim /etc/postfix/main.cf
    #追加下列幾行
    virtual_create_maildirsize = yes
    virtual_maildir_extended = yes
    virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
    virtual_mailbox_limit_override = yes
    virtual_maildir_limit_message = "The user you are trying to reach is over quota."
    virtual_overquota_bounce = yes
    
  9. 設定相對應檔案內容/etc/postfix/mysql_virtual_mailbox_limit_maps.cf:
    user = mailbox
    password = mailbox@123
    hosts = localhost
    dbname = MailBox
    table = mailbox
    select_field = quota
    where_field = username
    additional_conditions = and active = '1'
    
    
  10. 修改 /etc/dovecot/dovecot.conf 檔案內容:
    # vim /etc/dovecot/dovecot.conf
    protocols = imap pop3 lmtp 
    
  11. 修改 /etc/dovecot/conf.d/10-auth.conf 檔案內容:
    # vim /etc/dovecot/conf.d/10-auth.conf
    disable_plaintext_auth = no
    
  12. 修改 /etc/dovecot/conf.d/10-mail.conf 檔案內容:
    # vim /etc/dovecot/conf.d/10-mail.conf
    mail_location = Maildir:/var/www/mailbox/vmail/%d/%n
    namespace {
               type = private
               separator = .
               prefix = INBOX.
               inbox = yes
               hidden = no
               }
    
  13. 設定 pop3 以及 imap 的 quota :
    #vim /etc/dovecot/conf.d/10-mail.conf
    mail_plugins = $mail_plugins quota
    
    #vim /etc/dovecot/conf.d/20-imap.conf
    mail_plugins = $mail_plugins imap_quota
    
    #vim /etc/dovecot/conf.d/20-pop3.conf
    pop3_uidl_format = %08Xu%08Xv
    mail_plugins = $mail_plugins quota
    
    #vim /etc/dovecot/conf.d/15-lda.conf
    postmaster_address = postmaster@localhost
    lda_mailbox_autocreate = yes
    lda_mailbox_autosubscribe = yes
    protocol lda {
    mail_plugins = $mail_plugins quota
    }
    
    #vim /etc/dovecot/conf.d/90-quota.conf 
    dict {
      quotadict = mysql:/etc/dovecot/dovecot-dict-quota.conf
    }
    plugin {
      quota = dict:user::proxy::quotadict
    }
    
    #vim /etc/dovecot/dovecot-dict-quota.conf
    connect = host=localhost dbname=MailBox user=mailbox password=mailbox@123
    map {
         pattern = priv/quota/storage
         table = quota2
         username_field = username
         value_field = bytes
        }
    map {
         pattern = priv/quota/messages
         table = quota2
         username_field = username
         value_field = messages
        }
    
    
  14. 追加 cram-md5 加密機制:
    #vim /etc/dovecot/conf.d/10-auth.conf
    #auth default {
                   auth_mechanisms = plain login cram-md5
    #}
    
  15. 設定 dovecot 帳密資料庫:
    # vim /etc/dovecot/conf.d/10-auth.conf
    !include auth-sql.conf.ext
    # vim /etc/dovecot/conf.d/auth-sql.conf.ext
    ###反註解
    userdb {
            driver = prefetch
    }
    
  16. 設定真實的唯一使用者 vmail:
    #vim /etc/dovecot/conf.d/10-master.conf
    ###反註解
    service auth {
        unix_listener auth-userdb {
           mode = 0600
           user = vmail
           group = vmail
      }
    }
    service dict {
        unix_listener dict {
            mode = 0600
            user = vmail
            group = vmail
        }
    }
    
    
  17. 編寫 dovecot 對 mysql 的設定檔:
    # vim /etc/dovecot/dovecot-sql.conf.ext
    driver = mysql
    connect = host=localhost dbname=MailBox  user=mailbox password=mailbox@123
    #default_pass_scheme = CRAM-MD5
    default_pass_scheme = PLAIN
    user_query = SELECT CONCAT('/var/www/mailbox/vmail/',domain,'/',name) AS home,5000 AS uid, \
    5000 AS gid, CONCAT('*:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active='1'
    password_query = SELECT username AS user, password, CONCAT('/var/www/mailbox/vmail/',domain,'/',name) \
    AS userdb_home, 5000 AS userdb_uid, 5000 AS userdb_gid,CONCAT('*:bytes=', quota) as userdb_quota_rule \
    FROM mailbox WHERE username = '%u' AND active='1'
    
  18. 設定 dovecot 連進 postfix:
    #vim /etc/postfix/main.cf
    virtual_transport = dovecot
    dovecot_destination_recipient_limit = 1
    # vim /etc/postfix/master.cf
    dovecot   unix  -       n       n       -       -   pipe flags=DRhu user=vmail:vmail \
    argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}
    
  19. 重啟 dovecot 服務,測試是否有錯誤:
    #systemctl restart dovecot
    
  20. 設定 SASL 讓 postfix 可以使用 smtp-auth:
    #vim /etc/dovecot/conf.d/10-master.conf
     unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
        group = postfix
      }
    
    
  21. 修改 /etc/postfix/main.cf 檔案內容:
    #vim /etc/postfix/main.cf
    ##追加下列項目:
    dovecot_destination_recipient_limit = 1
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yes
    smtpd_sasl2_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    broken_sasl_auth_clients = yes
    smtpd_sasl_local_domain =
    
    ##修改下列項目,加入mysql 驗證機制:
    smtpd_recipient_restrictions = 
           permit_sasl_authenticated,
                :
                : (以下省略)
    
  22. 重新啟動 Postfix、dovecot 服務:
    #systemctl restart postfix
    #systemctl restart dovecot
    
  23. 設定 SELinux:
    # yum install setroubleshoot*
    # grep dovecot /var/log/audit/audit.log | audit2allow -M mypol
    # semodule -i mypol.pp
    
  24. 測試:
    #systemctl restart postfix
    #postmap -q test@example.com mysql:/etc/postfix/mysql_virtual_alias_maps.cf
    
  25. 檢查與驗證:
    #mail -s "first test" test@example.com
    (接著輸入下列內容:)
    Hello World
    .
    
    (以上的小黑點一定要打)
    
    #mailq
    #less /var/log/maillog
    #postmap -q test@example.com mysql:/etc/postfix/mysql_virtual_alias_maps.cf
    
  26. imap 的查驗方式:
    #telnet localhost imap
    a1 LOGIN 使用者帳號 使用者密碼
    a2 LIST "" "*"
    a3 EXAMINE INBOX
    a4 FETCH 1 BODY[]
    a5 LOGOUT
    

補充說明:
  • 解決一下 SELinux 的問題:
    #grep imap /var/log/audit/audit.log | audit2allow -M mypol
    #semodule -i mypol.pp
    #grep dovecot-lda /var/log/audit/audit.log | audit2allow -M lda
    #semodule -i lda.pp
    

參考資料:
  1. https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mariadb-on-centos-7

在 CentOS7/RHEL7 上安裝設定 E-mail Server(三)

進階設定目標:
  • 過濾垃圾郵件主機或黑名單內的郵件信箱!
注意事項

進階設定流程(一):
  1. 安裝 PostGrey 套件:
    #yum -y install postgrey
    
  2. 啟動 PostGrey 服務:
    #systemctl enable postgrey.service
    #systemctl start postgrey.service
    #netstat -anlp | grep postgrey
    
  3. 修改設定檔 /etc/postfix/main.cf:
    #vim /etc/postfix/main.cf
    
    #追加、修改下列設定;
    smtpd_recipient_restrictions =
         permit_mynetworks,
         permit_sasl_authenticated,
         reject_unknown_sender_domain,    ##拒絕來源不明的網域 (限制來源 MTA )
         reject_unknown_recipient_domain, ##拒絕不明的收件者 (限制目標 MTA)
         reject_unauth_destination,       ##拒絕不信任的目標
         check_policy_service unix:/var/spool/postfix/postgrey/socket
    
  4. 修改阻擋的秒數:
    #vim /etc/sysconfig/postgrey
    OPTIONS="--unix=/var/spool/postfix/postgrey/socket --delay=45"
    
  5. 重新啟動 postfix 服務:
    #systemctl restart postfix
    
  6. 重新啟動 PostGrey 服務:
    #systemctl restart postgrey
    
  7. 可額外設定 PostGrey 白名單:
    #vim /etc/postfix/postgrey_whitelist_clients
    加入可信任的MT郵件主機:
    station1.example.com
    
    ##設定完成後,請記得重新啟動 PostGrey 服務!
    

進階設定流程(二):
  1. 修改設定檔 /etc/postfix/main.cf,追加黑名單過濾:
    #vim /etc/postfix/main.cf
    
    #追加、修改下列設定;
    smtpd_recipient_restrictions =
         permit_mynetworks,
         permit_sasl_authenticated,
         reject_unknown_sender_domain,    
         reject_unknown_recipient_domain, 
         reject_unauth_destination,
         ##以下網址為提供黑名單查詢的網站     
         reject_rbl_client cbl.abuseat.org,
         reject_rbl_client bl.spamcop.net,
         reject_rbl_client cblless.anti-spam.org.cn,
         reject_rbl_client sbl-xbl.spamhaus.org,
         check_policy_service unix:/var/spool/postfix/postgrey/socket
    
    #過濾用戶端是黑名單內的成員:
    smtpd_client_restrictions =
         check_client_access hash:/etc/postfix/access,
         reject_rbl_client cbl.abuseat.org,
         reject_rbl_client bl.spamcop.net,
         reject_rbl_client cblless.anti-spam.org.cn,
         reject_rbl_client sbl-xbl.spamhaus.org
    
    #過濾不明的送件者網域主機
    smtpd_sender_restrictions = 
         reject_non_fqdn_sender,
         reject_unknown_sender_domain
    
  2. 重新啟動 postfix 服務:
    #systemctl restart postfix
    

進階設定流程(三):
  1. 修改設定檔 /etc/postfix/main.cf,追加針對郵件內容過濾:
    #vim /etc/postfix/main.cf
    #追加、修改下列設定:
    header_checks = regexp:/etc/postfix/header_checks
    body_checks = regexp:/etc/postfix/body_checks
    
  2. 編修/etc/postfix/header_checks、/etc/postfix/body_checks:
    #vim /etc/postfix/header_checks
    #vim /etc/postfix/body_checks
    
    檔案內的語法:
    /規則/   動作   顯示在登錄檔裡面的訊息
    
    例如:
    /^Subject:.*sex girls/   DISCARD  drop header deny
    
  3. 編修完上列兩個檔案後,可進行語言確認:
    #postmap -q - regexp:/etc/postfix/body_checks < /etc/postfix/body_checks
    

在 CentOS7/RHEL7 上安裝設定 E-mail Server(二)

進階設定目標:
  • 讓不在網段內的使用者,經由帳密驗證,亦可使用 Email Server 送信!
注意事項:請參考前一篇的設定:
進階設定流程:
  1. 安裝 Cyrus SASL 套件:
    #yum -y install cyrus-sasl-*
    
  2. 啟動 saslauthd 服務:
    #systemctl enable saslauthd.service
    #systemctl start saslauthd.service
    
  3. 修改設定檔 /etc/postfix/main.cf:
    #vim /etc/postfix/main.cf
    #追加下列設定:
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    broken_sasl_auth_clients = yes
    smtpd_recipient_restrictions =
         permit_mynetworks,
         permit_sasl_authenticated
    
  4. 重新啟動 postfix 服務:
    #systemctl restart postfix
    
  5. 測試 postfix 服務:
    #telnet localhost 25
    輸入下列指令:
    ehlo  localhost
    
    應該要出現下列兩行的資訊:
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    
    離開方式:
    quit