Category: Linux (OS, shell script, etc)

  • อัปเดต Apache2 ให้ได้เวอร์ชั่นล่าสุดด้วย Third-Party PPA ของ ondrej

    พบว่า ubuntu 16.04 จะใช้ apache2 v 2.4.18 แม้ว่าเราจะสั่ง apt update; apt upgrade แล้วก็ตามเมื่อเช็คด้วยคำสั่ง apache2 -v จะพบว่ายังคงเป็นเวอร์ชั่น 2.4.18 เช่นเดียวกับ ubuntu 18.04 จะใช้ apache2 v 2.4.29 เท่านั้น หลังจากหาข้อมูลอยู่ทั้งวัน มีผู้ให้ข้อมูลใน google search ว่า ทีมพัฒนาจะไม่เปลี่ยนเวอร์ชั่นใน ubuntu ตาม upstream developer จนกว่าจะทดสอบและออก ubuntu next release

    หากต้องการเป็นเวอร์ชั่น 2.4.39 ณ วันนี้ (4 เม.ย. 62 หลังจากข่าวช่องโหว่ apache2 2 วัน) ก็ต้องใช้ Third-Party PPA ของ ondrej (ผู้พัฒนาคนหนึ่งที่ทำ Debian Package)

    เพิ่มเติมล่าสุด (5 เม.ย. 62) ทำใน ubuntu server อีกเครื่องที่ยังไม่ได้ทำแบบ PPA

    $ sudo apt-get update ; sudo apt-get dist-upgrade
    $ apache2 -v
    Server version: Apache/2.4.18 (Ubuntu)
    Server built: 2019-04-03T13:34:47

    $ dpkg -l | grep apache2
    ii apache2 2.4.18-2ubuntu3.10 amd64 Apache HTTP Server

    พบว่ามีการปรับปรุงเวอร์ชั่น Server built 2019-04-03 ซึ่งตามหลัง patch PPA ไม่กี่ชั่วโมง ใครยังไม่สนใจจะเปลี่ยนเป็นเวอร์ชั่น 2.4.39 ก็น่าจะไม่ต้องทำแบบ PPA ตามข้อมูลใน link นี้
    https://usn.ubuntu.com/3937-1/ และ
    https://launchpad.net/ubuntu/xenial/+source/apache2/+changelog

    ข้อควรระวัง ให้ตรวจสอบว่ามีการเข้าไปปรับแต่งไฟล์ apache2.conf ไว้หรือไม่ ต้องมีการทำ backup ไว้ก่อนอัปเดต เช่น บางท่านอาจไปเขียน Rewrite Rule ในไฟล์นี้ เป็นต้น ก็ต้องแก้ไขหลังจากอัปเดต รวมถึง Apache configuration files อื่น ๆ ที่เราใช้ เราต้องมี backup

    อย่างไรก็ตามก่อนทำอัปเดต ต้องมั่นใจว่าถ้า server เราเป็น VM ก็ต้องมีการ backup VM ไว้ก่อน จะอุ่นใจขึ้น

    sudo add-apt-repository ppa:ondrej/apache2
    sudo apt-get update
    sudo apt-get upgrade

    หลังจากอัปเดต เช็คเวอร์ชั่นด้วยคำสั่ง apache2 -v ได้เวอร์ชั่นล่าสุด

    Server version: Apache/2.4.39 (Ubuntu)
    Server built: 2019-04-02T20:30:08

    หากพบว่า ยังคงได้ version เดิม ตรวจสอบดู output จะพบว่า

    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    Calculating upgrade… Done
    The following packages have been kept back:
    apache2 apache2-bin apache2-data apache2-utils libaprutil1
    libaprutil1-dbd-sqlite3 libaprutil1-ldap openssl
    0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.

    ทำคำสั่งนี้แทน

    sudo apt-get dist-upgrade
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    Calculating upgrade… Done
    The following package was automatically installed and is no longer required:
    liblua5.1-0
    Use 'apt autoremove' to remove it.
    The following NEW packages will be installed:
    libbrotli1 libjansson4 liblua5.2-0 libnghttp2-14 libssl1.1
    The following packages will be upgraded:
    apache2 apache2-bin apache2-data apache2-utils libaprutil1
    libaprutil1-dbd-sqlite3 libaprutil1-ldap openssl
    8 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
    Need to get 4,628 kB of archives.
    After this operation, 6,757 kB of additional disk space will be used.
    Do you want to continue? [Y/n]

    กด Enter (เพื่อเลือก Y) แล้วจะมีการติดตั้งให้

    ตอนนี้ก็เฝ้าระวังกันต่อไปว่า หลังจากทำวิธีนี้จะมีผลกระทบอะไรตามมาในอนาคตบ้างมั้ย หวังว่าจะไม่มี เพราะพยายามหาข้อมูลว่ามีใครแจ้งปัญหาจากวิธีการนี้ก็ไม่พบ พบแต่คำแนะนำวิธีนี้

    ผมคงไม่สามารถรับประกันความปลอดภัยใด ๆ หรือผลที่ตามมาจากการทำขั้นตอนในโพสต์นี้นะครับ


    สำหรับวิธีไม่ใช้ PPA จะกลับไปใช้ของเดิม

    sudo apt-get install ppa-purge
    sudo ppa-purge ppa:ondrej/apache2

    ตรวจสอบ version ของ apache2

    apache2 -v
    dpkg -l | grep apache2

    และล้างไฟล์ใน sources.list.d

    ls -l /etc/apt/sources.list.d/
    sudo add-apt-repository --remove ppa:ondrej/apache2

    ลิงค์ที่เกี่ยวข้อง

  • Virtual data center with OpenNebula

    OpenNebula เป็นชื่อของ open source software สำหรับทำ virtual data center เวอร์ชั่นล่าสุดคือ 5.6.1 (https://opennebula.org)

    ผมได้ทดลองในห้องปฏิบัติการ และเขียนเป็นขั้นตอนการติดตั้งจนกระทั่งได้ VM ขึ้นมา แต่ยังไม่ลงรายละเอียดถึงขั้นใช้งาน storage network ได้ ซึ่งจะได้ทดลองกันต่อไป

    ในตอนนี้ จะเรียกว่า basic set up ก็ได้นะ ในการ set up ระบบจริงตามคำแนะนำ แต่ละเครื่องควรมี network card 2 cards เพื่อแยกระหว่าง network ที่ให้บริการ กับ Management network

    การ set up จะต้องมีเครื่องที่เป็น Front-end เพื่อทำหน้าที่เป็น database และเว็บเพจสำหรับทำ configuration และสั่งการ และจะต้องมีเครื่องที่เป็น Hypervisor อย่างน้อย 1 เครื่อง โดยเลือกได้ว่าจะใช้ KVM หรือ vcenter สเปคเครื่อง hypervisor นี้ต้องรองรับ Virtualization extensions (Intel VT-x or AMD-V)

    เตรียมการทดลองโดยใช้ เครื่องคอมพิวเตอร์ที่ผมนำมาใช้มี 3 เครื่อง อายุเครื่องก็พอสมควร (ตามกำลังทรัพย์ที่มีในห้องปฏิบัติการ) แต่ทั้ง 3 เครื่องนี้ มีเพียง 1 network card ครับ เครื่อง Front-end 1 เครื่อง สเปค Pentium(R) Dual-Core CPU E5200 @ 2.50GHz มี RAM 4 GB อันนี้เป็นเครื่องทั่วไปที่รัน apache2 web server และ mariadb database ได้ ใช้เครื่อง KVM จำนวน 2 เครื่อง เพื่อจะให้เห็นว่าสามารถสร้าง VM ไปที่ KVM node ที่ต้องการได้ เครื่อง KVM node01 เป็น AMD Phenom(tm) II X4 945 Processor มี RAM 8 GB และ KVM node02 เป็น Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz มี RAM 4 GB

    นอกจากเครื่องคอมฯ แล้ว ผมก็มี network switch (L2-managed) เพื่อกำหนด port ให้รองรับ 802.1Q VLAN ผมออกแบบให้มี 2 VLAN คือ VLAN ID 6 (untagged) และ VLAN ID 7 (tagged) ซึ่ง VLAN 6 ก็คือ ครึ่งแรกของ network class C 192.168.6.0 เขียนแบบ CIDR 192.168.6.0/25 มี gateway คือ 192.168.6.1 และ VLAN 7 ก็คือ ครึ่งหลังของ network 192.168.6.128/25 มี gateway คือ 192.168.6.129

    ผมเขียนขั้นตอนไว้ในเว็บไซต์ opensource.psu.ac.th จะสะดวกกว่านำมาใส่ไว้ในบล็อกนี้ทั้งหมด เข้าไปที่ https://opensource.cc.psu.ac.th/Ubuntu1804 ก็จะเห็น link ต่อไปนี้

    แล้วจะมานำเสนอเรืองราวถัดไปครับ

  • Ubuntu server 18.04 config static IP with netplan

    เดิมก่อนหน้า Ubuntu server 18.04 LTS จะออกมาให้ใช้งานกันนั้น จะเป็น Ubuntu server 16.04 LTS เราตั้งค่า (config) static IP ให้กับ server ด้วยไฟล์นี้ /etc/network/interfaces ซึ่งก็คือ software package ชื่อ ifupdown และ DNS resolver ที่ใช้ก็คือ resolvconf

    แต่ใน Ubuntu server 18.04 นี้ เปลี่ยนไปใช้ package ชื่อ netplan แก้ไขที่ไฟล์ /etc/netplan/01-netcfg.yaml และใช้ DNS resolver คือ systemd-resolve ซึ่งจะ connect สอบถามชื่อ DNS จาก internal DNS ที่ IP 127.0.0.53 (ตรวจดูด้วยคำสั่ง cat /etc/resolv.conf)

    โดย default จะเป็นค่า network interface แบบ รับค่า IP มาจาก DHCP server

    ไฟล์ /etc/netplan/01-netcfg.yaml

    network:
    version: 2
    renderer: networkd
    ethernets:
    enp0s3:
    dhcp4: yes
    dhcp6: yes

    หากต้องการใช้เลข IP แบบ Static IP ก็ต้องตั้งค่าเองในแฟ้ม /etc/netplan/01-netcfg.yaml เป็นตัวอย่างประมาณว่า IP คือ 10.0.100.251 ใน class C (/24) มี gateway คือ 10.0.100.1 ทำหน้าที่ nameserver ด้วย และมี nameserver ที่สองคือ 192.100.77.10

     network:
    version: 2
    renderer: networkd
    ethernets:
    enp0s3:
    dhcp4: no
    addresses: [ 10.0.100.251/24 ]
    gateway4: 10.0.100.1
    nameservers:
    addresses:
    - 10.0.100.1
    - 192.100.77.10

    หลังจากแก้ไขค่าเสร็จแล้ว สั่งให้ network ทำงานใหม่ ใช้คำสั่ง sudo netplan apply

    ถ้าตอนนี้ใช้ netplan version 0.36.3 เราสามารถตั้งชื่อ network interface เป็นชื่อ vif1 แทน physical network interface เดิม

    ก่อนอื่น ให้ใช้คำสั่ง ifconfig เพื่อดูค่า MAC address ของ enp0s3 สมมติคือ 44:bb:33:85:91:08

    ตัวอย่างการแก้ไขข้อมูล

    network:
    version: 2
    renderer: networkd
    ethernets:
    vif1:
    match:
    macaddress: "44:bb:33:85:91:08"
    set-name: vif1
    dhcp4: no
    addresses: [ 10.0.100.251/24 ]
    gateway4: 10.0.100.1
    nameservers:
    addresses:
    - 10.0.100.1
    - 192.100.77.10

    หลังจากแก้ไขค่าเสร็จแล้ว ใช้คำสั่ง sudo reboot

    หลาย ๆ คน อาจจะอยากตั้งชื่อ network interface เป็นชื่อ eth0 แบบเดิมที่ชินตา ก็ทำได้ครับ ลองดูครับ และหมายเหตุไว้สักนิดว่า ไวยกรณ์ของไฟล์ *.yaml นี้ ต้องมีการเว้นวรรค เยื้องเข้า ให้ถูกต้องด้วยนะ เยื้องด้วยช่องว่างอย่างน้อย 2 spaces (เค้าว่ามา)

    ผมได้รวบรวมเป็น wiki เอาไว้สำหรับเรื่องคล้าย ๆ กันนี้

  • วิธีติดตั้ง HTTPS ด้วย Certificate ของ Let’s Encrypt

    จาก มาใช้งาน let’s encrypt กันเถอะ ของอาจารย์ฉัตรชัย ผมขอขยายความต่อ เอาแบบว่า Copy-Paste กันเลย

    โดยในที่นี้ …

    • OS เป็น Ubuntu 18.04
    • Web Server เป็น Apache
    • ที่ Firewall เปิดให้เข้าถึง TCP 80 / 443 จาก Internet ได้ — มันจำเป็นสำหรับการ Verification ของ Certbot ครับ *** ในเบื้องต้นนะ 🙂 ***

    Let’s Encrypt คืออะไร อ่าน …
    https://letsencrypt.org/getting-started/

    เริ่มต้น ต้องติดตั้ง Certbot ก่อน อ่าน …
    https://certbot.eff.org/

    ดูต้นฉบับการติดตั้งของ Ubuntu 18.04 และใช้ Apache ได้จาก
    https://certbot.eff.org/lets-encrypt/ubuntubionic-apache

    ติดตั้ง Certbot ก่อน

    ใช้คำสั่งต่อไปนี้ จาก User ที่สามารถ sudo ได้

    sudo apt-get update
    sudo apt-get install software-properties-common
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt-get update
    sudo apt-get install python-certbot-apache 

    แบบ Auto

    จากนั้นใช้คำสั่งต่อไปนี้ เพื่อให้ certbot ทำการติดตั้ง Certificate และแก้ไขไฟล์ (ในที่นี้ใช้ Apache) Configuration ให้เลย

    sudo certbot --apache

    แบบแก้ไขเอง

    หรือถ้าจะทำเอง โดยต้องการเอาเฉพาะ Certificate มา แล้วทำการแก้ไขไฟล์ Apache Configuration เองก็ได้

    sudo certbot --apache certonly 

    ระบบจะถาม

    • ยอมรับเงื่อนไขไม๊ –> แน่นอน (A) Accept
    • email address ให้ใส่ไปตามจริง
    • ต้องการให้แสดง email address เปิดเผยหรือไม่ –> ผมตอบ No นะ
    • และ บอกว่า Domain Name ของเราคืออะไร ให้ใส่ FQDN ไป เช่น kx1.in.psu.ac.th เป็นต้น

    จากนั้น Certbot จะ Callback ไป ให้มีการ Verification จาก Internet ว่าสามารถเข้าถึงได้จริงหรือไม่ (ตรงนี้ ใน PSU ต้องแจ้งทาง Network Admin เพื่อเปิด Port ที่ Firewall ให้เข้าถึง TCP 80 และ 443 ให้สำเร็จก่อน)

    เมื่อ Verification สำเร็จ ก็จะได้ไฟล์ Certificate และ Private Key มา จะอยู่ที่ (path แต่ละเครื่องจะแตกต่างกันตรงที่ Domain Name ที่กำหนดข้างต้น) ตามลำดับ

    /etc/letsencrypt/live/kx1.in.psu.ac.th/fullchain.pem
    /etc/letsencrypt/live/kx1.in.psu.ac.th/privkey.pem

    แก้ไขไฟล์

    /etc/apache2/sites-available/default-ssl.conf

    ให้มีค่าต่อไปนี้

    SSLCertificateFile  
       /etc/letsencrypt/live/kx1.in.psu.ac.th/fullchain.pem
    SSLCertificateKeyFile 
        /etc/letsencrypt/live/kx1.in.psu.ac.th/privkey.pem

    จากนั้นใช้คำสั่งนี้ เพื่อเปิดใช้งาน https

    sudo a2enmod ssl

    ใช้คำสั่งนี้ เพื่อใช้งาน default-ssl

    sudo a2ensite default-ssl

    และทำการ Restart apache ด้วยคำสั่งนี้

    sudo systemctl reload apache2

    ทดสอบใช้งาน HTTPS

    ใช้งานได้

    NOTE

    • จริง ๆ แล้ว ในองค์กร สามารถทำเครื่อง ๆ หนึ่งขึ้นมา เพื่อติดตั้ง certbot แล้วขอ Certificate มา ของ Domain ต่าง ๆ แล้วค่อย “ย้าย” certificate และ key file ไปเครื่องที่จะใช้งานจริง แล้ว ชี้ Domain Name ใหม่ไปยังเครื่องนั้นก็ได้ แต่เมื่อครบ 90 วัน ต้อง Renew ใหม่ (ทดลองทำกับ Google Compute Engine โดยสร้าง Certificate โดยชี้ Domain ไปยัง IP จริง ของ Google พอเรียบร้อยแล้ว ก็แล้วย้ายไฟล์ ย้าย Domain Name มาที่ IP ภายใน ใช้งานได้ เหมือนกัน) — วิธีนี้ลักไก่เอาได้ แต่ก็จะยุ่งยากหน่อย และต้องระวัง 90 วันที่จะต้อง Renew
    • แต่จะให้ถูกต้อง ก็ควรใช้งานกับเครื่องที่เปิด Firewall ให้เข้าถึง TCP 80 / 443 ได้ เพื่อติดตั้ง certbot จะดีกว่า
    • สามารถขอ Wildcard ได้ เช่น จะขอ *.kx1.in.psu.ac.th ก็ได้ แต่ต้องมีความรู้ DNS กว่านี้หน่อย เดี๋ยวค่อยมาเล่าให้ฟังครับ
    • [UPDATE] กรณีเป็น Web Hosting กล่าวคือ ให้บริการหลาย ๆ Virtual Host เช่น เครื่องหลักใช้ชื่อว่า kx1.in.psu.ac.th ถ้าต้องการให้ www.something.psu.ac.th ชี้มาที่เครื่องนี้ด้วย ก็ทำ www CNAME kx1.in.psu.ac.th.  (ที่ zone something.psu.ac.th) มาก็ได้ แล้วค่อยใช้ certbot ที่เครื่อง kx1.in.psu.ac.th นี้ สร้าง Certificate ให้ก็ได้ครับ

    หวังว่าจะเป็นประโยชน์ครับ

  • รวมร่าง Windows กับ Linux ใช้งานในเครื่องเดียวกันแบบเนียนๆ

    จุดประสงค์

    สามารถใช้งาน Windows กับ Linux ได้ในเครื่องเดียวกันและในเวลาเดียวกันเหมือนเป็นทองแผ่นเดียวกัน แก้ปํญหา Dev / SysAdmin ส่วนใหญ่ที่ต้องใช้ Linux เป็นหลักในการทำงานแต่ต้องเผื่อใจต้องทำงานบน Windows ด้วยในบางเวลา เช่น ทำเอกสาร MS Word ไม่ให้เพี้ยน หรือ Adobe PhotoShop หรือโปรแกรมที่ไม่สามารถทำการติดตั้งลงใน Linux ได้ และที่สำคัญคือการทำงานระหว่างสองระบบต้องไหลลื่นและรวดเร็ว ประหยัด กินทรัพยากรน้อย

    หากยังนึกภาพไม่ออก สามารถดูวิดีโอนี้ครับ  Windows 10 + Linux Lite (Seamless) 

    สเปกเครื่อง

    สามารถใช้บน windows 7, 8, 10 แต่ขอให้มี RAM อย่างน้อย 4 GB จะดีมากถ้า RAM 8 GB แต่ในที่นี้จะเป็นการติดตั้งและใช้งาน Linux บน Windows 10 64 bit  

    (more…)
  • Hardening your HTTP response headers

    Introduction

    HTTP Response headers คือ ค่าของสตริงที่ส่งกลับมาจากเซิร์ฟเวอร์ที่มีเนื้อหาตามที่ถูกร้องขอ โดยปกติจะใช้บอกข้อมูลทางเทคนิค เช่น เบราเซอร์ควรแคชเนื้อหา, ประเภทของเนื้อหาคืออะไร, ซอฟต์แวร์ที่ทำงานบนเซิร์ฟเวอร์ และอื่น ๆ   HTTP Response headers ถูกใช้เพื่อส่งต่อนโยบายความปลอดภัยไปยังเบราเซอร์  ทำให้การเปิดเว็บไซต์ของเรามีความปลอดภัยเพิ่มมากขึ้น

    Header ของ Apache2 ที่ควรต้องใส่เพื่อเพิ่มความปลอดภัยมีดังนี้

    Content Security Policy

    Header เรื่อง Content Security Policy (CSP) ช่วยให้กำหนดต้นทางของเนื้อหาที่อนุญาตสำหรับเว็บไซต์ โดยการจำกัดเนื้อหาที่เบราเซอร์สามารถโหลดได้ ได้แก่ js และ css

    สามารถสร้าง CSP ได้จาก https://report-uri.com/home/generate ทั้งนี้ต้องทดสอบการทำงานทุกครั้งเนื่องจาก การกำหนดค่าบางอย่างอาจทำให้เว็บไซต์ ทำงานไม่ถูกต้อง ดูรายละเอียดเพิ่มเติมได้ที่ https://scotthelme.co.uk/content-security-policy-an-introduction/ สำหรับ Apache2 เพิ่ม Header ต่อไปนี้ ในแฟ้มของไซต์ที่ต้องการ เช่น /etc/apache2/site-enabled/lsc-ssl.conf  หรือแฟ้ม .htaccess ในไซต์ที่ต้องการ (ซึ่งแนะนำว่าใช้ .htaccess จะได้ไม่ต้องรีสตาร์ทเซิร์ฟเวอร์) เพื่อเปิดการใช้งาน CSP


    Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'"

    HTTP Strict Transport Security (HSTS)

    เว็บไซต์ ต้องมีการตั้งค่าให้ redirect จาก HTTP ไปยัง HTTPS เสมอ และ HSTS จะเป็น Header ที่กำหนดให้เบราเซอร์จำสถานะของ HTTPS เอาไว้แม้ว่าจะเป็นการเปิดจาก bookmark ที่เป็น HTTP ก็ตาม ก็จะถูกบังคับให้เป็น HTTPS รายละเอียดเพิ่มเติม https://scotthelme.co.uk/hsts-the-missing-link-in-tls/ เช่น เมื่อเปิด http://licensing.psu.ac.th ก็จะถูก redirect ไป https://licensing.psu.ac.th

    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    X-Frame-Options

    X-Frame-Options หรือ XFO header จะช่วยป้องกันผู้ใช้จากการโจมตีแบบ clickjacking ที่ผู้บุกรุกสามารถโหลด iframe จากไซต์ของเขาบนไซต์ของเราได้ ซึ่งทำให้ผู้ใช้งานเว็บไซต์ของเราเชื่อว่าไม่อันตราย!! รายละเอียดเพิ่มเติม https://www.troyhunt.com/clickjack-attack-hidden-threat-right-in/

    Header always set X-Frame-Options "SAMEORIGIN"

    X-Xss-Protection

    Header นี้ใช้กำหนดค่าการป้องกัน XSS ที่มีอยู่บนเบราเซอร์ต่างๆ โดยการตั้งค่าจะมี 0 คือ ปิดการทำงาน 1 คือเปิดการทำงาน และ 1; mode=block ซึ่งจะกำหนดให้เบราเซอร์ทำการบล็อคการกระทำใดๆ ก็ตามที่มากกว่าการล้างข้อมูลสคริปต์

    Header always set X-Xss-Protection "1; mode=block"

    X-Content-Type-Options

    X-Content-Type-Options ใช้ในการป้องกันการโจมตีผ่านทางช่องโหว่ MIME sniffing ซึ่งจะเกิดเมื่อ เว็บไซต์อนุญาตให้ผู้ใช้อัพโหลดเนื้อหาไปยังเซิร์ฟเวอร์ ซึ่งผู้ใช้อาจเปลี่ยนหรือซ่อนไฟล์อันตราย แล้วอัพโหลดขึ้นเซิร์ฟเวอร์ รายละเอียดเพิ่มเติม https://www.keycdn.com/support/x-content-type-options/

    Header always set X-Content-Type-Options "nosniff"

    เบื้องต้นแนะนำเท่านี้ก่อนครับ พิเศษ!! สำหรับผู้ใช้งาน wordpress มีปลั๊กอินชื่อ HTTP Headers ใช่ตั้งค่า Header ต่างๆ ที่เล่ามาข้างต้นได้อย่างสบายใจหายห่วง!!! ไม่ต้องแก้ .htaccess ไม่ต้องแก้ config ใด ๆ  เมื่อติดตั้งเสร็จแล้วจะพบว่ามี Header อีกมากที่สามารถตั้งค่าเพิ่มเติมได้ ซึ่งจะกล่าวอีกในครั้งต่อ ๆ ไป

    ต้นฉบับ

    https://scotthelme.co.uk/hardening-your-http-response-headers/

    มีวิธีการเซ็ตสำหรับ Nginx และ IIS สามารถดูเพิ่มเติมได้ครับ
    อย่าลืม!!

    ตรวจ HTTP Response ได้ที่ https://securityheaders.com

    จบขอให้สนุก

  • How to install PSU SSL VPN Client ubuntu 18.04

    • เปิด terminal
    • เริ่มด้วยการติดตั้งโปรแกรมที่จำเป็น
      sudo apt install -y openfortivpn
    • สร้างแฟ้ม /home/username/fortivpn.config มีข้อความว่า
      host = vpn2.psu.ac.th
      port = 443
      username = PSU Passport Username
      password = PSU Passport Password
      trusted-cert = 34df1a6bd3705782fd17152de0c4fe0b3e7f31302cbdcf737b113c17a5b9ff09
    • สั่งรันคำสั่ง
      sudo openfortivpn -c fortivpn.config
    • ได้ข้อความประมาณว่า
    • แปลว่าเชื่อมต่อได้แล้ว หากต้องการยกเลิกการเชื่อมต่อให้กด ctrl-c จะได้ข้อความประมาณว่า
    • แปลว่ายกเลิกการเชื่อมต่อแล้ว
    • ต้องเปิด terminal ที่รันคำสั่ง openfortivpn ไว้ตลอดเวลาที่เชื่อมต่อห้ามปิด
    • จบสไตล์คอมมานไลน์ ….

    หากอยากได้ง่ายกว่านี้

    • ติดตั้งโปรแกรม OpenFortiGUI โหลดที่ https://hadler.me/linux/openfortigui/ โดยเลือกโปรแกรมสำหรับ Ubuntu 18.04
    • โหลดมาแล้วติดตั้งด้วยคำสั่ง
      sudo dpkg -i openfortigui_0.6.2-1_bionic_amd64.deb
    • จะมี error message มากมาย ให้ต่อด้วยคำสั่ง
      sudo apt -f -y install
    • เริ่มใช้งานเปิดโปรแกรม openFortiGUI โดยกดที่ปุ่ม Show Applications เลือก openFortiGUI
    • จะได้หน้าต่าง
    • คลิกปุ่ม Add เลือก VPN จะได้
    • กรอกข้อความตามรูป ช่อง username และ password ก็ใส่ PSU Passport ลงไปเสร็จแล้วกด Save
    • ได้ดังรูป
    • เลือก PSU แล้วคลิก Connect ได้ผลดังรูป
    • คลิก x เพื่อปิดหน้าต่างสังเกตว่าจะมีรูป  ที่มุมบนขวา หากจะยกเลิกการเชื่อมต่อ คลิกขวาที่  เลือก PSU เพื่อ dissconnect
    • จบขอให้สนุก…

    ***  จากที่ลองทดสอบพบว่า เมื่อเชื่อมต่อ AIS 4G จะไม่สามารถใช้วิธี OpenFortiGUI ได้ แต่ใช้วิธีคอมมานไลน์ได้ครับ

  • Ubuntu server 18.04 config static IP with ifupdown not netplan

    เดิมก่อนหน้า server 18.04 จะออกมาให้ใช้งานกันนั้น จะเป็น server 16.04 เราตั้งค่า (config) static IP ให้กับ server ด้วยไฟล์นี้ /etc/network/interfaces ซึ่งก็คือ package ชื่อ ifupdown และ DNS resolver ที่ใช้ก็คือ resolvconf

    แต่ใน server 18.04 นี้ เปลี่ยนไปใช้ package ชื่อ netplan แก้ไขที่ไฟล์ /etc/netplan/01-netcfg.yaml และใช้ DNS resolver คือ systemd-resolve ซึ่งจะ connect สอบถามชื่อ DNS จาก internal DNS ที่ IP 127.0.0.53 (ตรวจดูด้วยคำสั่ง cat /etc/resolv.conf)

    (ย้ำ) บทความนี้ไม่ได้บอกเล่าให้ทุกคนต้องทำแบบนี้ เพียงแต่หากท่านมีงานเฉพาะอย่างที่ต้องการใช้แบบก่อนหน้านี้

    หลังจากติดตั้ง Ubuntu server เสร็จ

    1.แก้ไขไฟล์ /etc/default/grub ดังนี้

    sudo nano /etc/default/grub

    เพิ่มบรรทัดนี้

    GRUB_CMDLINE_LINUX="netcfg/do_not_use_netplan=true"

    หรือหากต้องการใช้ชื่อ interface เป็น ethX เช่น eth0 เป็นต้น ก็ให้เพิ่มบรรทัดแบบนี้

    GRUB_CMDLINE_LINUX="net.ifnames=0 netcfg/do_not_use_netplan=true"

    ทำการ Save และ ออก

    2.ทำคำสั่งนี้เพื่อ update grub

    sudo update-grub

    3.ติดตั้ง ifupdown package

    sudo apt install ifupdown

    4.ติดตั้ง resolvconf package

    sudo apt install resolvconf

    5.รีบูต server

    เมื่อ login กลับเข้าไปใน command prompt สั่ง ping www.google.com สำเร็จ ก็แสดงว่าใช้งานได้ (เซิร์ฟเวอร์นี้ต้องได้รับอนุญาตออกเน็ตด้วยนะ) หรือไม่ก็ใช้คำสั่งตรวจสอบชื่อโดเมน ดังนี้ host www.google.com ก็จะต้องได้รับ output ที่แสดงว่าสำเร็จ

    สำหรับวิธีการตั้งค่าแบบ netplan ก็มีเว็บเพจที่เขียนไว้มากพอสมควร เช่น Ubuntu Bionic: Netplan posted by Joshua Powers on 1 December 2017 [ https://insights.ubuntu.com/2017/12/01/ubuntu-bionic-netplan ] ลองทำความเข้าใจรูปแบบใหม่นี้ได้เลย

    Output ของค่า default เมื่อติดตั้ง Ubuntu server 18.04 เสร็จใหม่ ๆ (/etc/resolv.conf, /etc/network/interfaces และ /etc/netplan/01-netcfg.yaml)

    Output ของไฟล์ที่ใช้ในการตั้งค่า static IP เมื่อใช้ ifupdown package (/etc/resolv.conf และ /etc/network/interfaces)

    References:
    Disable netplan on Ubuntu 17.10 Posted on January 10, 2018 by ruchi [ http://www.ubuntugeek.com/disable-netplan-on-ubuntu-17-10.html ]
    Predictable Network Interface Names [ https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ ]

  • Configuration of TCP/IP with SSL and TLS for Database Connections

    สิ่งที่ต้องเตรียม

    1. Oracle Database Server ในตัวอย่างนี้ใช้ Oracle database บน Oracle Enterprise Linux 7
    2. Oracle Database Client  ในตัวอย่างใช้ Windows Server 2008 R2

    เริ่ม

    • ฝั่ง Server
    • เข้าระบบด้วยบัญชีผู้ใช้ oracle หรือบัญชีที่เป็นเจ้าของ Oracle Database
    • เปิด terminal สร้าง Oracle Wallet ด้วยคำสั่ง
      • mkdir -p /u01/app/oracle/wallet

    • ต่อด้วย
      • orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -auto_login_local

      • โดย -pwd WalletPasswd123 ตัว WalletPasswd123 คือรหัสผ่านที่ใช้ป้องกันการเข้าถึงข้อมูลต่างๆ ใน wallet กฎการตั้งมีอยู่คือ ยาวอย่างน้อย 8 ตัวอักษร ไม่จำกัดความยาว จำเป็นต้องตั้งให้ตัวเลขผสมตัวอักษร
    • สร้าง Certificate และใส่เข้าไปใน wallet ด้วยคำสั่ง
      • orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \
        -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650

    • ตรวจสอบด้วยคำสั่ง
      • orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123

    • ได้ผลลัพธ์ประมาณ
      • Oracle PKI Tool : Version 12.1.0.2
        Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.

        Requested Certificates:
        User Certificates:
        Subject: CN=reis.psu.ac.th
        Trusted Certificates:
        Subject: CN=reis.psu.ac.th

    • Export Certificate เพื่อนำไปใช้กับเครื่อง Oracle Client ด้วยคำสั่ง
      • orapki wallet export -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \
        -dn "CN=`hostname`" -cert /tmp/server-certificate.crt

    • ตรวจสอบแฟ้มที่ export ไปด้วยคำสั่ง
      • cat /tmp/server-certificate.crt

    • ได้ผลลัพธ์ประมาณว่า
      • -----BEGIN CERTIFICATE-----
        MIIBoTCCAQoCAQAwDQYJKoZIhvcNAQEEBQAwGTEXMBUGA1UEAxMOcmVpcy5wc3UuYWMudGgwHhcN
        MTgwMTA5MDcyNTA2WhcNMjgwMTA3MDcyNTA2WjAZMRcwFQYDVQQDEw5yZWlzLnBzdS5hYy50aDCB
        nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAj4x2/NviDaTlXuEJt0kZARY5fHiT2SiVX+a18hai
        I0stoUhKKefjOCgB85iuqjIk0rvcGXI0KXkbenTy2t40A+qGxB04mBhCLKaKeIe67BZKR6Zyw1dd
        oaesoaWChC01b+IW1X5WWtC53UxpIZQ4Zktj41sLGUnarIr9+9HFwncCAwEAATANBgkqhkiG9w0B
        AQQFAAOBgQAqSCF2Y8uyM4rSQHUC8MKEl3Ia3NJKnigMOUzDc2fP7grSaoeuQ4NvIntTD+s+IT5Y
        EpLVND4kSHFTwGRq0Py/ig8ybXZCXfHtvNZh7ZGziL/sYt5/8xYi/tOBKwVanBTUaseKIMovtmd7
        UyoOKrX8YBoFsB3UPRLudmFsksXRXw==
        -----END CERTIFICATE-----

    • ฝั่ง Client
    • เข้าระบบด้วยบัญชีผู้ใช้ administrator
    • เปิด cmd แล้วสร้าง wallet ด้วยคำสั่ง
      • mkdir c:\app\oracle\wallet

    สร้าง Certificate ด้วยคำสั่ง

      • orapki wallet add -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -keysize 1024 -self_signed -validity 3650

      • โดย WalletPasswd123 คือพาสเวิร์ดที่ใช้ล็อค wallet ไม่จำเป็นต้องเหมือนกับของ Server
    • ตรวจสอบด้วยคำสั่ง
      • orapki wallet display -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123

    • ได้ผลลัพธ์ประมาณว่า
      • Oracle PKI Tool : Version 12.2.0.1.0
        Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

        Requested Certificates:
        User Certificates:
        Subject: CN=ENERAZAN
        Trusted Certificates:
        Subject: CN=ENERAZAN

    • Export Certificate เพื่อนำไปใช้กับเครื่อง Oracle Database Server ด้วยคำสั่ง
      • orapki wallet export -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -cert c:\client-certificate.crt

    • ตรวจสอบแฟ้มที่ export ไปด้วยคำสั่ง
      • more c:\client-certificate.crt
    • ได้ผลลัพธ์ประมาณว่า
      • -----BEGIN CERTIFICATE-----MIIBmTCCAQICAQAwDQYJKoZIhvcNAQEEBQAwEzERMA8GA1UEAxMIRU5FUkFaQU4wIhgPMDE1NTAxMDkwNzMzNDlaGA8wMTQ1MDEwNzA3MzM0OVowEzERMA8GA1UEAxMIRU5FUkFaQU4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJHEEnB4kiI82QVyt0/GlrILF9dwd/jVRlgCQkLmLrpF6RKrIUntzvygyVhtTybeaShH751gYvtl1NFxDUWkBnfS5u2DN6ATP2WpNQgGM/skPWZOxoewy6OeeFsDPNUJTsI8+F5DIwtNhZcdQtBexZ/D3ALkSboR87t2Vy8OJpD7AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAV7xLLslRn2srS4A4Ks1KiuUWI/ackyNK7UiWgWD/by5Vx4Zw+0x3hdLzQllDR2O5Nef9it5WyYWrDQ47RadqMEVVfTGuAqQn47n/t+v24ljwm2yZ36Tj2lDVaFbE/ZtRyzPKgIwUy6RIt9XVX39vXFJVaENCHzZ0R3hs2bx1K3o=-----END CERTIFICATE-----

    • ทำการส่งไฟล์ certificate แลกกันระหว่าง Server กับ Client โดยใช้วิธีการที่ชื่นชอบของแต่คน เมื่อแลกไฟล์กันเสร็จแล้ว
    • ฝั่ง Server import certificate ด้วยคำสั่ง
      • orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \ -trusted_cert -cert /tmp/client-certificate.crt

    • สามารถตรวจสอบด้วยคำสั่ง
      • orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123

    • ได้ผลลัพธ์ประมาณ
      • Oracle PKI Tool : Version 12.1.0.2
        Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.

        Requested Certificates:
        User Certificates:
        Subject: CN=reis.psu.ac.th
        Trusted Certificates:
        Subject: CN=ENERAZAN
        Subject: CN=reis.psu.ac.th

    • ฝั่ง Client import certificatae ด้วยคำสั่ง
      • orapki wallet add -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -trusted_cert -cert c:\server-certificate.crt

    • สามารถตรวจสอบด้วยคำสั่ง
      • orapki wallet display -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123
    • ได้ผลลัพธ์ประมาณว่า
      • Oracle PKI Tool : Version 12.2.0.1.0
        Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

        Requested Certificates:
        User Certificates:
        Subject: CN=ENERAZAN
        Trusted Certificates:
        Subject: CN=reis.psu.ac.th
        Subject: CN=ENERAZAN

    • ฝั่ง Server แก้ไขแฟ้ม $ORACLE_HOME/network/admin/sqlnet.ora ด้วย editor ที่ชื่นชอบ
      • เพิ่มคำสั่งต่อไปนี้
      • WALLET_LOCATION =
        (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
        (DIRECTORY = /u01/app/oracle/wallet)
        )
        )

        SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS,BEQ)
        SSL_CLIENT_AUTHENTICATION = FALSE
        SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)

    แก้ไขแฟ้ม $ORACLE_HOME/network/admin/listener.ora

      • เพิ่มข้อความส่วนที่เป็นตัวหนาตามตำแหน่งต่อไปนี้
      • LISTENER =
        (DESCRIPTION_LIST =
        (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = reis.psu.ac.th)(PORT = 1521))
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        (ADDRESS = (PROTOCOL = TCPS)(HOST = reis.psu.ac.th)(PORT = 2484))
        )
        )

        SSL_CLIENT_AUTHENTICATION = FALSE

        WALLET_LOCATION =
        (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
        (DIRECTORY = /u01/app/oracle/wallet)
        )
        )

    • restart listener ด้วยคำสั่ง
      • lsnrctl stop
      • lsnrctl start
    • ฝั่ง Client แก้ไขแฟ้ม C:\app\client\Administrator\product\12.2.0\client_1\network\admin\sqlnet.ora โดยเพิ่มข้อความต่อไปนี้
      • WALLET_LOCATION =
        (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
        (DIRECTORY = c:\app\oracle\wallet)
        )
        )

        SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS)
        SSL_CLIENT_AUTHENTICATION = FALSE
        SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)

    • แก้ไขแฟ้ม C:\app\client\Administrator\product\12.2.0\client_1\network\admin\tnsnames.ora เพิ่มข้อความต่อไปนี้
      • REIS_SSL =
        (DESCRIPTION =
        (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCPS)(HOST = reis.psu.ac.th)(PORT = 2484))
        )
        (CONNECT_DATA =
        (SERVICE_NAME = reis.psu.ac.th)
        )
        )

    • ทดสอบใช้งาน
    • ที่ Client พิมพ์คำสั่ง
      • sqlplus scott/tiger@reis_ssl
    • ได้ผลลัพธ์ประมาณว่า
      • SQL*Plus: Release 12.2.0.1.0 Production on Wed Feb 7 16:54:05 2018
        Copyright (c) 1982, 2016, Oracle. All rights reserved.

        Last Successful login time: Wed Feb 07 2018 16:52:50 +07:00

        Connected to:
        Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
        With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
        ions

        SQL>

    • หรือต่อด้วย SQL Developer ต้องตั้งค่าการเชื่อมต่อเป็นดังภาพ
    • จากภาพเลือก Connection Type เป็น Advanced และใช้ช่อง Custom JDBC URL ใส่เป็น jdbc:oracle:oci:/@reis_ssl
    • เนื่องจากไม่สามารถเชื่อมต่อผ่าน tns ได้ ดังภาพ
    • วิธีเซ็ตค่าแบบนี้ใช้ได้กับ Oracle Database 10G R2 เป็นต้นมา
    • จบขอให้สนุก

    ที่มา:
    https://oracle-base.com/articles/misc/configure-tcpip-with-ssl-and-tls-for-database-connections