Author: patt.e

  • การเชื่อม OAUTH2 ของ PSU ด้วย NEXT.JS (PAGE ROUTE)

    file : pages/challback.js

    const inter = Inter({ subsets: [“latin”] });

    export default function Home({show2}) {  
        return (
            <>
                <div className=”container”>
                    <h1>Check OAuth</h1>
                    <p>Code: {JSON.stringify(show2)}</p>
                </div>
            </>
        );
    }

    export async function getServerSideProps(context) {
    // เมื่อทำการ SignOn ระบบจะทำการเรียก callback url โดยส่ง parameter code มา
        const { query } = context;
        const code = query.code;

    //เตรียมข้อมูลเพื่อรับ access token
        const pData1 = {
            grant_type: ‘authorization_code’,
            client_id: ‘XXXXXXXX’, // ได้มาจากสำนักนวัตถกรรม
            client_secret: ‘XXXXXXXX’, // ได้มาจากสำนักนวัตถกรรม
            code: code,
            response_type: ‘code’,
            redirect_uri: ‘CALL BACK URL’
        };

    //ส่งคำร้องเพื่อขอ access token
    //เมื่อส่งคำร้องขอ access token แล้ว code ที่ได้มาจะหมดอายุทันที
        const resP1 = await fetch(‘https://oauth.psu.ac.th/?oauth=token’, {
            method: ‘POST’,
            body: JSON.stringify(pData1),
            headers: {
                ‘content-type’: ‘application/json’
            },
        });

        const show1 = await resP1.json();

    //เมื่อได้ access token
    //ส่งคำร้องเพื่อขอ user profile โดยต้องส่ง access token ไปด้วย
    //ซึ่ง access token จะมีอายุ 1 ชั่วโมง
        const resP2 = await fetch(‘https://oauth.psu.ac.th?oauth=me’,{
            method: ‘GET’,
            headers: {
                ‘content-type’: ‘application/json’,
                ‘Authorization’: ‘Bearer ‘+show1.access_token
            },
        });

        const show2 = await resP2.json();    

        return {
            props: {show2}
        }
    }

  • การเชื่อม OAUTH2 ของ PSU ด้วย NEXT.JS (APP ROUTE)

    file app/api/callback/route.ts

    async function GET(request: Request) {
    // เมื่อทำการ SignOn ระบบจะทำการเรียก callback url โดยส่ง parameter code มา
        const { searchParams } = new URL(request.url);
        const code = searchParams.get(‘code’);
        const state = searchParams.get(‘state’);

    //เตรียมข้อมูลเพื่อรับ access token
        const pData1 = {
            grant_type: ‘authorization_code’,
            client_id: ‘XXXXXXXX’, // ได้มาจากสำนักนวัตถกรรม
            client_secret: ‘XXXXXXXX’, // ได้มาจากสำนักนวัตถกรรม
            code: code,
            response_type: ‘code’,
            redirect_uri: ‘CALL BACK URL’
        };

    //ส่งคำร้องเพื่อขอ access token
    //เมื่อส่งคำร้องขอ access token แล้ว code ที่ได้มาจะหมดอายุทันที    
        const resP1 = await fetch(‘https://oauth.psu.ac.th/?oauth=token’,{
            method: ‘POST’,
            body: JSON.stringify(pData1),
            headers: {
                ‘content-type’: ‘application/json’
            },
        })
        
        const show1 = await resP1.json();

    //เมื่อได้ access token
    //ส่งคำร้องเพื่อขอ user profile โดยต้องส่ง access token ไปด้วย
    //ซึ่ง access token จะมีอายุ 1 ชั่วโมง    
        const resP2 = await fetch(‘https://oauth.psu.ac.th?oauth=me’,{
            method: ‘GET’,
            headers: {
                ‘content-type’: ‘application/json’,
                ‘Authorization’: ‘Bearer ‘+show1.access_token
            },
        });
        
        const show2 = await resP2.json()

        if(show2.user_login){
            return Response.redirect(‘https://xxxxxx/sussec)
        }else{
            return Response.redirect(‘https://xxxxxx/error’)
    }


    }

    export {GET}

  • การตรวจสอบพื้นที่ใน One Drive

    1. เข้า web OneDrive https://emailpsuac-my.sharepoint.com
    2. คลิกที่รูปฟันเฟืองด้านขวา เลือก การตั้งค่า OneDrive

    3. เมนูด้านซ้ายคลิก การตั้งค่าเพิ่มเติม ด้านขวาคลิก เมตริกของที่เก็บข้อมูล

    4. ระบบจะแสดงการใช้พื้นที่ใน OneDrive

  • การเพิ่มเลขลำดับในตาราง MS WORD

    การเพิ่มเลขลำดับในตาราง MS WORD
    1. คลิกที่ cell แรกของตารางที่จะเพิ่มเลขลำดับ

    2. กด ปุ่ม Shift ค้าง แล้วเลือก cell สุดท้ายของตารางที่จะเพิ่มเลขลำดับ

    3. คลิกเมนู Home (1) => หัวข้อ (2) => เลือกรูปแบที่ต้องการ (3)

    4. ได้ผลดังรูป

    5. ทดสอบเพิ่มแถวในตาราง

    6.ได้ผลดังรูป

    7.ทดสอบลบแถวในตราง

    8.ได้ผลดังรูป

    จะพบว่า ทำการเพิ่มหรือลบแถวในตาราง ตัวเลขลำดับที่ในตารางจะยังคงเรียงได้อย่างถูกต้อง

  • การติดตั้ง SSL บน apache2

    สำหรับ APACHE2
    1. สร้าง DH parameters
    #sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

    2. เปิดใช้ module headers ของ apache2
    #sudo a2enmod headers

    3. แก้ไขแฟ้ม  /etc/apache2/mods-available/ssl.conf ดังนี้
    SSLProtocol -ALL +TLSv1.2 +TLSv1.3
    //บาง OS เช่น CENTOS ใช้ SSLProtocol ALL -TLSv1 -TLSv1.1 -SSLv3 -SSLv2
    SSLOpenSSLConfCmd DHParameters “/etc/ssl/certs/dhparam.pem”
    SSLHonorCipherOrder on
    SSLCompression off
    SSLSessionTickets off
    SSLOptions +StrictRequire

    //เปลี่ยนตามที่ตัวเองใช้
    SSLCertificateKeyFile /etc/apache2/certificate/STAR_oas.psu.ac.th.key
    SSLCertificateChainFile /etc/apache2/certificate/STAR_oas.psu.ac.th.ca-bundle
    SSLCertificateFile /etc/apache2/certificate/STAR_oas.psu.ac.th.crt

    SSLOpenSSLConfCmd ECDHParameters brainpoolP512r1
    SSLOpenSSLConfCmd Curves brainpoolP512r1:sect571r1:secp521r1:secp384r1
    SSLCipherSuite TLSv1.3 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384

    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:TLS13_AES_128_GCM_SHA256:TLS13_AES_256_GCM_SHA384:TLS13_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_AES_256_GCM_SHA384:TLS_DHE_RSA_AES_256_GCM_SHA384:TLS_ECDHE_RSA_CHACHA20_POLY1305_SHA256:TLS_DHE_RSA_CHACHA20_POLY1305_SHA256:TLS_DHE_RSA_AES_256_CCM_8:TLS_DHE_RSA_AES_256_CCM:TLS_ECDHE_RSA_ARIA_256_GCM_SHA384:TLS_DHE_RSA_ARIA_256_GCM_SHA384:TLS_ECDHE_RSA_AES_128_GCM_SHA256:TLS_DHE_RSA_AES_128_GCM_SHA256:TLS_DHE_RSA_AES_128_CCM_8:TLS_DHE_RSA_AES_128_CCM:TLS_ECDHE_RSA_ARIA_128_GCM_SHA256:TLS_DHE_RSA_ARIA_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:PSK-CHACHA20-POLY1305:ECDHE-PSK-CHACHA20-POLY1305:DHE-PSK-CHACHA20-POLY1305:RSA-PSK-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DH-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DH-DSS-AES256-GCM-SHA384:ADH-AES256-GCM-SHA384:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM8:DHE-RSA-AES256-CCM:PSK-AES256-CCM:DHE-PSK-AES256-CCM:PSK-AES256-CCM8:DHE-PSK-AES256-CCM8:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:

    #
    ############
    # – OCSP Stapling, only in httpd 2.3.3 and later
    SSLUseStapling on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off
    SSLStaplingCache “shmcb:logs/ssl_stapling(32768)”
    #
    # – HTTP Strict Transport Security Header.
    Header always set Strict-Transport-Security “max-age=31536000; includeSubDomainsi; preload”

    สำหรับคนที่ใช้ letsencrypt.org ตอนสร้าง cert ให้เพิ่มคำสั่งนี้ครับ –rsa-key-size 4096
    #sudo certbot certonly –rsa-key-size 4096 –manual –preferred-challenges dns

    เสร็จไปทดสอบที่
    https://www.ssllabs.com/ssltest/


    ปล.1 ถ้าใช้ Certificate ที่สำนักนวัตกรรมดิจิทัลและระบบอัจฉริยะ จัดชื้อมา จะได้ RSA key ขนาด 2048 bit ทำให้คะแนน Key Exchange ได้ 90 คะแนน

    ปล.2 ส่วนของ IIS ค่อยทำครับ เพราะต้องใช้ Windows 2022 ขึ้นไปครับ จึงจะ support TLSv1.3
    ที่ผมมีเพียง Windows 2019 จึงได้ คะแนน ส่วนของ Cipher Strength ได้แค่ 90

    ปล.3 ถ้าท่านตามนี้จะทำให้ browser version เก่าเข้าใช้งาน web ท่านไม่ได้เพราะได้ตัด Cipher ที่เป็นจุดอ่อนของระบบออกไป ซึ่ง browser เหล่านนั้นล่วนแต่ใช้ Cipher ที่ถุกตัดออก

    ปล.4 สำหรับ Windows ใช้คำสั่งนี้สร้าง cert สำหรับ IIS ครับ #sudo openssl pkcs12 -export -out oas.psu.ac.th.pfx -inkey oas.psu.ac.th.key -certfile intermediate_oas.psu.ac.th_ca.crt -in oas.psu.ac.th.crt

    ปล.5 เพิ่ม SSLCipherSuite ตาม https://www.tenable.com/plugins/nessus/156899 (2560/11/03)

  • การเปลี่ยน IP Bridge ของ Docker

    IP ของ Docker โดย Default เป็น Private IP Class B มันจะมีปัญหา Network ที่ใช้ Private IP Class B
    ในที่นี้เราจะเปลี่ยน Default ของ Docker กัน
    1. แก้ไขแฟ้ม /etc/docker/daemon.json เพิ่ม
    {
        “default-address-pools”:
            [
                {“base”:”10.10.0.0/16″,”size”:24}
            ]
    }
    ถ้ามี ค่าอื่นอยู่ให้ใส่ , หลัง ]
    {
        “dns”: [“172.18.1.2”, “172.18.1.3”],
        “default-address-pools”:
            [
                {“base”:”10.10.0.0/16″,”size”:24}
            ]
    }

    2. ตรวจสอบว่า Docker มีการสร้าง Network อะไรบ้าง
    #sudo docker network ls

    3.ลบ network ที่วงกลมสีแดงตามข้อ 2
       3.1 ต้องหยุดการทำงานของ container ที่เรียกใช้ก่อน
             #sudo docker network inspect taneeoaspsuacth_default

             #sudo docker stop tanee_mysql tanee_web
       3.2 ลบ network
             #sudo docker network rm taneeoaspsuacth_default

    4. สร้าง network ใหม่
    #sudo docker network create –driver bridge taneeoaspsuacth_default <= ชื่อไม่จำเป็นต้องเหมือนเดิม

    5. เชื่อม network และ container
    #sudo docker network connect taneeoaspsuacth_default tanee_web
    #sudo docker network connect taneeoaspsuacth_default tanee_web

    6. เริ่มการทำงานของ container 
    #sudo docker start tanee_mysql tanee_web

    7. ตรวจสอบ netwrok
    #sudo docker network inspect taneeoaspsuacth_default

    จะพบว่า ip ของ container  ได้เปลี่ยนไปแล้ว

    8. ลบ Bridge Network เดิม
    #ifconfig

    #sudo ip link set br-0f333b026e6f down
    #sudo ip link set br-b698ee3e22e0 down
    #sudo brctl delbr br-0f333b026e6f
    #sudo brctl delbr br-b698ee3e22e0

  • Block Baidu กับ ZyXEL ZyWALL USG1000

    รุ่นที่ใช้คือ ZyWALL USG1000
    1. Login เข้าหน้าจัดการ FireWall
    2. คลิก setting
    001
    3. เลือกเมนู Anti-X => Content Filler
    002
    4. เลือก Tab Fillter Profile
    003
    5. คลิก ADD
    004
    6. ตั้งชื่อ Profile ในที่นี้คือ BAIDU เลือก Tab Custom Service
    005
    7. คลิก Enable Custom Service
    012
    8. ลงมาล่างสุด ที่ Blocked URL Keywords คลิก Add
    006
    9. ใส่ชื่อ Web Site ที่ต้องการ Block ถ้าต้องการใส่มากกว่า 1 web ให้คลิก Add เพื่อเพิ่มเติม
    ในที่นี้ baidu.com และ baidu.co.th เสร๋จแล้วคลิก OK
    007
    10. เลือก Tab General
    009
    11. คลิก Enable Content Filter และ คลิก ADD
    010
    12. ตรง Filter Profile เลือก Profile ที่ ต้องการ ในที่นี้คือ BAIDU คลิก OK
    011
    13. มาดูผลงาน อย่าลืมเลือก Display เป็น Block web sites ด้วย
    008
    013

  • Notebook ปล่อย WiFi hotspot ให้ มือถือ

    จาก มือใหม่คุยกันเรื่องใช้ 3G แล้วปล่อย WiFi hotspot ให้ Notebook
    เดี๋ยวจะมีคนถาม เขียนมือถือปล่อย WIFI ให้ NB แล้ว
    ถ้าจะให้ NB ปล่อย WIFI ให้มือถือทำไง

    เปิด WiFi hotspot
    1. เข้า DOS Promt พิมพ์
    netsh wlan set hostednetwork mode=allow ssid=ssid_name key=password
    netsh wlan start hostednetwork

    ขั้นตอนนี้จะได้ Wriless Network Connection ใหม่มา จำชื่อไว้ให้ดีครับ เพราะจะต้องใช้ในขั้นตอนที่ 2

    เช่น
    netsh wlan set hostednetwork mode=allow ssid=PATT_AP key=patt123
    netsh wlan start hostednetwork

    2. เลือก Network Connection ที่สามารถออก Internet ได้
    เข้าไปดู Wireless Network Connection Status
    wifi001
    คลิก Properties

    wifi002
    เลือก Tab Sharing

    wifi003
    ติก Allowother network users to conn……….

    wifi004
    เลือก การ์ดที่ต้องการ Share

    ปิด WiFi hotspot
    เข้า DOS Promt พิมพ์
    netsh wlan stop hostednetwork

    การเปิดและปิด WIFI นั้น ผมจะ save เป็นแฟ้มไว้บน Desktop ครับ ชื่อ WLAN_START.bat กับ WLAN_STOP.bat เวลาจะเปิดหรือปิดก็ดับเบิ้ลคลิกที่ file โดยที่ไม่ต้องทำขั้นตอนที่ 2 อีก

  • ติดตั้ง Pykota บน Ubuntu Server 14.04.1 LTS

    1. ติดตั้งโปรแกรมที่จำเป็นก่อน
    sudo apt-get install cups subversion postgresql postgresql-client postgresql-common libX11-dev libxt-dev libxext-dev python-dev python-jaxml python-reportlab python-reportlab-accel python-pygresql python-osd python-egenix-mxdatetime python-imaging python-pysnmp4 python-chardet python-pam python-pysqlite2 python-mysqldb python-ldap apparmor-utils

    2. แก้ config ของ cups
    #sudo vi /etc/cups/cupsd.conf

    ที่ <Location />
    เพิ่ม  allow all

    ที่ <Location /admin>
    เพิ่ม  allow ip_admin

    ที่ <Policy default>
    comment JobPrivateValues default
    เพิ่ม
    JobPrivateValues job-originating-host-name
    ที่ <Policy authenticated>
    comment JobPrivateValues default
    เพิ่ม
    JobPrivateValues job-originating-host-name

    3. แก้ config ของ PostgreSQL
    #sudo pico /etc/postgresql/9.3/main/pg_hba.conf
    เติมข้อความนี้ต่อไปที่ท้ายสุดของแฟ้ม
    host all all 10.0.5.3/24 trust
    ***ให้เปลี่ยนเลข ip จาก 10.0.5.3 เป็นเลข ip ของ server ที่กำลังใช้

    4. ติดตั้งเครื่องพิมพ์
    เปิด Browser ไปที่ url http://ip_server:631
    cups001

    คลิก tab Administration
    cups002

    คลิก Add Printer
    cups003

    เลือก Printer คลิก Continue

    cups004

    ใส่รายละเอียด ของเครื่องพิมพ์
    ติ๊ก เลือก Share This Printe
    คลิก Continue


    cups005

    เลือก Driver ของเครื่องพิมพ์ คลิก Add Printer
    cups006
    คลิก  Set Default Option

    ทดสอบการพิมพ์โดยเลือก Print Test Page
    cups007

    5. ติดตั้งเครื่องพิมพ์บนเครื่อง Client และทดสอบการพิมพ์

    6. ติดตั้งโปรแกรม Pykota
    #cd /usr/share
    #svn co http://svn.pykota.com/pykota/trunk pykota
    #cd pykota
    #python checkdeps.py
    #python setup.py install

    7. สร้างผู้ใช้ pykota ด้วยคำสั่ง
    #sudo adduser –system –group –home /etc/pykota –gecos Pykota pykota
    #sudo adduser lp pykota

    8. จัดการ postgresql ต่อดังนี้
    #sudo su – postgres -c “psql -f /usr/share/pykota/initscripts/postgresql/pykota-postgresql.sql template1”

    9. ทำให้ cups รู้จัก Pykota
    #cd /usr/lib/cups/backend
    #sudo ln -sf /usr/share/pykota/bin/cupspykota
    #sudo chmod -Rf 755 /usr/share/pykota/bin/*
    #sudo chmod -Rf 755 /usr/lib/cups/backend*
    #sudo /etc/init.d/cups restart

    แก้ไขแฟ้ม /etc/cups/printers.conf
    #sudo vi /etc/cups/printers.conf
    <DefaultPrinter abc>
    DeviceURI parallel:/dev/lp0
    ที่บรรทัด DeviceURI parallel:/dev/lp0
    ให้แทรกเพิ่มคำว่า cupspykota:// เข้าไป กลายเป็นดังตัวอย่าง
    DeviceURI cupspykota://parallel:/dev/lp0
    ***abc คือชื่อเครื่องพิมพ์ที่ add ไว้ตามข้อ 4.

    sudo cp /usr/share/pykota/conf/pykota.conf.sample /etc/pykota/pykota.conf
    sudo cp /usr/share/pykota/conf/pykotadmin.conf.sample /etc/pykota/pykotadmin.conf
    sudo chown -Rf pykota.pykota /etc/pykota/

    10. ทำให้ apparmor รู้จัก Pykota
    aa-complain cupsd

    11. แก้ไขแฟ้ม /etc/pykota/pykota.conf
    ไปที่ประมาณบรรทัด 987 แล้วลบบรรทัดข้อความว่า policy: deny ทิ้ง
    แล้วไปที่บรรทัดล่างสุดของแฟ้ม เติมต่อท้ายว่า
    [abc]
    enforcement : strict
    ***abc คือชื่อเครื่องพิมพ์ที่ add ไว้ตามข้อ 4.

    12. เพิ่มเครื่องพิมพ์ให้ Pykota
    #pkprinters –add –charge 1.0 –description “Printer for ITZONE 3nd” abc
    ***abc คือชื่อเครื่องพิมพ์ที่ add ไว้ตามข้อ 4.
    ***charge 1.0 คือคิดค่าพิมพ์หน้าละ 1 บาท

    13. เพิ่ม User ให้ Pykota
    /usr/local/bin/pkusers –add –limitby balance –balance 20 patt.e
    /usr/local/bin/edpykota –add –printer abc patt.e
    ***abc คือชื่อเครื่องพิมพ์ที่ add ไว้ตามข้อ 4.
    ***–add คือเพิ่ม, User
    ***–limitby balance คือ limit การพิมพ์ด้วย balance
    ***–balance 20 คือ กำหนด โควต้าไว้ 20
    ถ้า +20 คือ เพิ่มจากของเดิม 20
    ถ้า -20 คือ ลดจากของเดิม 20
    ถ้า 20 กำหนดให้เป็น 20
    ***patt.e คือ user
    ถ้าไม่กำหนด user คือทำกับทุก user ที่อยู่ใน Pykota

    14. ทดสอบพิมพ์จากเครื่อง Client