WordPress วิธีเปลี่ยน URL หลังจากย้ายเว็บ

สำหรับวิธีการเปลี่ยนที่อยู่ URL ของ WordPress เมื่อเรามีการย้ายชื่อโดเมน หรือจะชื่อโดเมนเดิม แต่อาจจะอยากย้ายระบบไปไว้ในโฟเดอร์ เช่น ย้ายจาก xvlnw.com => xvlnw.com/wordpress_old เป็นต้น หรือจะเปลี่ยนชื่อโดเมนไปเลย เช่น xvlnw.com => iamxvlnw.com เป็นต้น วิธีแบบยาก คือเราต้องเข้าไปแก้ไข wp_options ในระบบ​ Database อาจจะแก้ไขผ่าน phpMyAdmin หรือจะแก้ไขไฟล์ .sql แล้ว Import เข้าไปก็ได้ ก็มีหลายท่าให้ทำ

สำหรับวิธีการนี้ ผมจะแนะนำให้ใช้ PHP Code ในการแก้ไข โดยขั้นตอนดังนี้

ขั้นตอนที่ 1: หลังจากย้าย Files & DB ของเว็บไปที่อยู่ใหม่แล้ว ให้ทำการแก้ไขไฟล์ wp-config.php เพิ่มโค๊ดด้านล่างนี้ ไว้ท้ายสุดของไฟล์นะครับ

# Change WordPress URL [email protected] - https://cloudhost.in.th
define('RELOCATE',true);
if ( defined( 'RELOCATE' ) AND RELOCATE ) {    
  // Move flag is set
  if ( isset( $_SERVER['PATH_INFO'] ) AND ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) ) 
        $_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], "", $_SERVER['PHP_SELF'] );
    $url = dirname( set_url_scheme( 'https://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ) );
    if ( $url != get_option( 'siteurl' ) )
        update_option( 'siteurl', $url );
        update_option( 'home', $url );
}

ขั้นตอนที่ 2: ให้เรียก URL ใหม่ ที่เราต้องการเปลี่ยน เช่น xvlnw.com/old คือตัว URL ใหม่ 1 ครั้ง ตัวโค๊ดด้านบน จะทำการเข้าไป Update Database เป็น URL ใหม่ให้เสร็จเรียบร้อยครับ หลังจากอัพเดต URL ใหม่แล้วครับ และเราสามารถลบโค๊ดในข้อ 1 ออกจาก wp-config.php ได้เลยครับ

ปัญหาเพิ่มเติมที่เจอหลังเปลี่ยน URL

ในกรณีหากเราย้ายจากโดเมนหลัก ไปยัง Sub Folder อย่าลืมอัพเดต .htaccess Rules ด้วยนะครับ โดยวิธีการง่ายๆก็คือ ให้เราเข้าสู่ระบบ wp-admin แล้วไปที่ “ตั้งค่า” > “ลิงก์ถาวร” แล้วจากนั้น กดที่ “บันทึกการเปลี่ยนแปลง” โดยไม่ต้องแก้ไขค่าอะไรครับ สำหรับเมนูภาษาอังกฤษใครหาไม่เจอ หลังล็อคอินแล้วให้ไปที่ /wp-admin/options-permalink.php ครับ

ในกรณีหากเราใช้ Plugin อะไรก็ตาม ที่มีการอ้างอิง Path เช่น Plugin Cache ไฟล์ต่างๆ เราก็ต้องไล่แก้ไขไปตาม Plugin โดยวิธีการโชว์ Error ออกมา ให้เพิ่มคำสั่งนี้ในไฟล์ wp-config.php ไว้ด้านล่างของ PHP Tag นะครับ

define( 'WP_DEBUG', true );

หากไม่มีอะไรผิดพลาด WordPress จะไม่แสดง Error Message อะไรออกมาครับ เป็นอันเสร็จสมบูรณ์ครับ และเราสามารถที่จะลบโค๊ด Debug ออกได้เลย หรือเปลี่ยนค่าเป็น false เพื่อเปิดการทำงานครับ

define( 'WP_DEBUG', false );

Windows ช่องโหว่ CVE-2020-1350

ช่องโหว่ CVE-2020-1350 เป็นช่องโหว่ของ Windows DNS Server ที่มีผลกระทบตั้งแต่ Windows 2003 – 2019 ก็คือแทบทุกรุ่นในปัจจุบันที่เขียนบทความนี้เลย ซึ่ง Hacker จะใช้ช่องโหว่นี้ สามารถยึดเครื่อง Server ของเราได้เลยครับ หากคุณใช้งาน Windows และเปิดใช้ DNS Server อยู่แล้ว แนะนำให้แก้ไขช่องโหว่ด้วยการ Path ตามลิงก์นี้ครับ https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-1350

สำหรับวิธีการ Path แบบง่าย โดยไม่ต้องโหลดมาติดตั้ง ให้ใช้คำสั่งด้านล่างนี้ใน Windows Powershell เพื่อป้องกันช่องโหว่ CVE-2020-1350

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\DNS\Parameters" -Name TcpReceivePacketSize -Value 0xFF00 -PropertyType DWORD
Restart-Service DNS

Pi-hole ตอนที่ 1: ภาพรวม Pi-hole

Pi-hole คืออะไร?

Pi-hole คือ ซอฟต์แวร์สำหรับให้บริการ DNS Server ตัวหนึ่ง ที่เอาไว้ Reslove Domain Name แล้วคืนค่า IP Address กลับมาให้กับผู้ใช้งานครับ ซึ่งโดยปกติหากเราใช้อินเตอร์เน็ต ไม่ว่าจะเน็ตบ้าน เน็ตมือถือ เราแทบไม่รู้เลยว่าเราใช้ DNS Server อยู่ด้วย เพราะทาง ISP หรือผู้ให้บริการอินเตอร์เน็ต เค้าได้แจก DNS Server มาให้เราแบบอัตโนมัติแล้วนั่นเอง

Client (Web Browser) – DNS Server – Web Server

แล้วจะลองเล่น Pi-hole ทำไม?

เมื่อเราต้องการมากกว่าที่มันมี มันก็ต้องหาอะไรมาเพิ่มเติมให้มัน เมื่อเราอยากที่จะจัดการ DNS Server ได้ด้วยตัวเอง อยากจะ Block Domain ไม่อยากให้ผู้ใช้งานในเครือข่ายของเราเข้าโดเมนบางโดเมนไม่ได้ เช่น Block เว็บโป้ สำหรับเด็ก, Block Facebook YouTube หรือ Social Network ในที่ทำงาน, Block โดเมนพวก Ransomware ไวรัสเรียกค่าไถ่, Block Domain ที่เป็นไวรัสทั้งหลาย, Block เว็บโฆษณา เป็นต้น ซึ่งก็แล้วแต่ว่าเราจะนำมาประยุกต์ใช้ พูดง่ายๆเราสามารถ Block Domain ได้ด้วย DNS Server ซึ่ง Pi-hole สามารถทำตรงนี้ได้

Pi-hole Block CoinMiner Domain

Pi-hole ติดตั้งบนอะไรได้บ้าง?

พวกตระกูล Linux ได้เกือบทั้งหมดเลย และยังรันผ่าน Docker ได้อีกด้วย รวมถึงรองรับ ARM ด้วยนะครับ เราสามารถดูรายละเอียดได้ในลิงก์ https://pi-hole.net สำหรับข้อมูลเพิ่มเติมครับ

ติดตั้ง Pi-hole เสร็จแล้ว ยังไงต่อ?

เมื่อเราติดตั้ง Pi-hole เสร็จแล้ว ไม่ว่าจะภายใน Local Network, หรือจะเป็น Public Network เราก็จะได้หมายเลข IP Address ของตัว Pi-hole มา เราก็จะนำหมายเลข IP นั้นมาตั้งค่าในส่วนของ DNS Server ในอุปกรณ์ของเราครับ ซึ่งวิธีการตั้งค่าในแต่ละอุปกรณ์ก็จะแตกต่างกันไป เดี๋ยวผมจะแยกเป็นอีกบทความ เพื่อให้เห็นภาพการตั้งค่าครับ

เมื่อเราตั้งค่า DNS เสร็จแล้ว เราก็จะสามารถดู Traffic DNS ที่วิ่งผ่านตัว Pi-hole ได้เลย จะเห็นได้ว่า เราเรียกโดเมนอะไรบ้าง จากอุปกรณ์ของเรา บางทีเราอาจจะไม่รู้มาก่อนเลยก็ได้ ว่ามีการเรียกโดเมนนี้จากอุปกรณ์ของเรา หรืออาจจะ Surprise นี่มันโดเมนไวรัส ก็เป็นได้ 555+

ภาพตัวอย่าง: สถิติการเรียกใช้งานโดเมนจากอุปกรณ์ที่เรียกใช้ Pi-hole DNS Server

บทความนี้จะยังไม่ลงรายละเอียดการ Install และ Config ค่าต่างๆนะครับ เพื่อให้เห็นภาพรวม ว่า Pi-hole คืออะไร? และ Pi-hole ทำอะไรได้บ้าง? เท่านั้น โปรดติดตามตอนต่อไป…

This could be due to CredSSP encryption oracle remediation.

วิธีแก้ไขปัญหา Remote Dekstop Connection (RDP) แล้วขึ้นข้อความแจ้งเตือน “This could be due to CredSSP encryption oracle remediation.”

ขั้นตอนที่ 1: ให้พิมพ์ในช่องค้นหาใน Windows ของเรา “gpedit.msc” และเลือกตามรูป

gpedit.msc > Edit group policy

ขั้นตอนที่ 2: ไปที่ Computer Configuration > Administrative Templates > System > Credentials Delegation > Encryption Oracle Remediation > แล้วดับเบิ้ลคลิกขึ้นมาครับ

Encryption Oracle Remediation

ขั้นตอนที่ 3: ให้ตั้งค่าเป็น Enabled และเลือก Protection Level: Vulnerable จากนั้นกด Apply > OK และปิดครับ

Enabled Encryption Oracle Remediation

ขั้นตอนที่ 4: เปิดหน้า Run ด้วยคีย์ Windows + R และพิมพ์ gpupdate /force แล้ว Enter จะได้ตามรูปครับ (หรือพิมพ์ cmd ก่อน แล้วค่อนใส่คำสั่งทีหลังก็ได้)

Update Group Policy Command
Update Policy : gpupdate /force

เสร็จเรียบร้อยครับ ลองทำการ Remote Desktop ใหม่อีกครั้ง หากยัง Remote ไม่ได้ ให้ทำการ Restart คอมพิวเตอร์เพื่อโหลดค่า Policy ใหม่ครับ

DNSSEC คืออะไร? วิธีเปิดใช้ DNSSEC Domain/Client

Domain Name System Security Extensions (DNSSEC) คือ รูปแบบการให้บริการ DNS Server แบบเข้ารหัสข้อมูล โดยใช้ระบบ Public Key & Private Key เมื่อเรามีการเรียกเว็บไซต์ผ่านเบราเซอร์ หากโดเมนนั้นๆมีการตั้งค่า DNSSEC ไว้ DNS Server ที่รองรับ DNSSEC ก็จะส่งค่า IP ปลายทางมาให้เรา พร้อมกับ Public Key เพื่อให้เราไว้ใช้ยืนยันกับ DNS Server ว่าเป็นข้อมูลที่ถูกต้อง ไม่ได้ถูกเปลี่ยนเส้นทางระหว่างการร้องขอ DNS Record นั่นเอง

ทำไมต้อง DNSSEC

โดยหลักๆเลยก็คือ เรื่องของความปลอดภัย เพื่อยืนยันว่าเราจะเชื่อมต่อไปยัง Server ที่ถูกต้อง ไม่ได้เชื่อมต่อไปยัง Server ของ Hacker แล้วกรอกข้อมูล Login ของเราไปให้แฮกเกอร์ เป็นต้น

ถ้าโดเมนที่รองรับถูกเปลี่ยนเส้นทาง และหากมีการเซต DNSSEC ไว้ โดเมนนั้นๆจะเข้าไม่ได้เลยครับ

จะใช้ DNSSEC ได้อย่างไร

เนื่องจาก DNSSEC เกี่ยวข้องกับระบบ Domain Name ซึ่งจะเป็นในส่วนของฝั่ง Server และ Client ที่เป็นส่วนของผู้ใช้งาน เพราะฉะนั้น การที่จะรองรับการใช้งาน DNSSEC ได้นั้น จะต้องรองรับทั้ง 2 ฝั่ง ซึ่งปัจจุบันนี้ Domain Name นามสกุลต่างๆนั้นเกือบจะทั้งหมด รองรับการตั้งค่า DNSSEC อยู่แล้ว รวมถึงฝั่งของ Client ก็เช่นกัน เบราเซอร์รุ่นใหม่ๆ ก็รองรับการใช้งาน DNSSEC ด้วยเช่นกัน

ทดสอบ DNSSEC ฝั่ง Domain Name

วิธีการเช็คโดเมนของเรารองรับ DNSSEC ไหม สามารถเช็คได้ที่ลิงก์ https://dnsviz.net ครับ กรอกชื่อโดเมนที่ต้องการ > คลิกที่ Analyze > Continue แล้วเราจะได้ Chain DNS มาครับ ซึ่ง Chain ที่มีความปลอดภัย จะต้องไม่มีลูกศรสีดำ ระหว่าง Chain นะครับ

การเปิดใช้งาน DNSSEC ที่ฝั่ง Domain Name

General Top Level Domain Name (gLTD). Example: .com, .net, .org

วิธีการที่แสนจะง่ายที่สุด สำหรับโดเมนที่เป็น General Top-Level Domain (gTLD) เช่น .com, .net, .org เป็นต้น ที่ผมค้นพบก็คือ ใช้บริการ DNS ของ Cloudflare DNS Server เพียงแค่เราชี้ Name Server ไปหา Cloudflare โดเมนของเราก็จะได้รับการเข้ารหัส DNS เป็นที่เรียบร้อย อันเนื่องมาจาก Cloudflare DNS นั้นรองรับ DNSSEC อยู่แล้วนั่นเอง

xvlnw.com DNSSEC Authentication Chain (21/07/2020)

แต่สำหรับโดเมนที่เป็น Country-Code Top-Level Domain (ccLTD) ยกตัวอย่างประเทศไทย เช่น .in.th, .co.th, .at.th เป็นต้น การเข้ารหัส DNSSEC จะเริ่มจาก .th => .in.th => yourname.in.th ซึ่งจะมี Chain เพิ่มขึ้นมาอีก 1 Chain นั่นเอง ในกรณีโดเมนของประเทศไทย ที่ทาง THNIC เป็นผู้ดูแลนั้น ณ ขณะนี้ก็รองรับการทำ DNSSEC เป็นที่เรียบร้อยแล้ว แต่การใช้งาน Cloudflared DNS Server เพียงอย่างเดียว จะทำให้ DNSSEC ไม่สมบูรณ์ ตามภาพตัวอย่างด้านล่างนี้

cloudhost.in.th DNS chain before using DNSSEC. (21/07/2020)
cloudhost.in.th – DNS Chain Status: INSECURE

วิธีการเปิดใช้งาน DNSSEC สำหรับโดเมน .th ใช้บริการร่วมกับ Cloudflared DNS Server

ให้เราไปที่ Cloudflare.com > Your Domain > เมนู DNS > DNSSEC > คลิกที่ Enable DNSSEC จากนั้นทาง Cloudflare จะให้ข้อมูล Key ต่างๆ โดย Key ที่ต้องนำมากรอกคือ Key Tag, Algorithm, Digest Type และ Digest ให้เรานำเอาไปกรอกที่ระบบจัดการโดเมนกับทางผู้ให้บริการที่เราใช้บริการอยู่ หากไม่ทราบ แนะนำให้ติดต่อกับผู้ให้บริการจดโดเมน แจ้งขอเปิดใช้งาน DNSSEC นะครับ และเมื่อเราตั้งค่าเสร็จเรียบร้อย จะต้องรอให้ DNS Update ใช้เวลาประมาณ 1 Hour ตามที่ทาง Cloudflare แจ้งไว้ หลังจากเสร็จสมบูรณ์แล้ว ที่ฝั่งของ Cloudflare จะได้ตามรูปครับ

Cloudhost.in.th is protected with DNSSEC.

หลังจากทุกอย่างเรียบร้อย เราก็ลองมาตรวจสอบ DNS Chain อีกครั้ง ผลที่ได้ตามรูปครับ สังเกตว่าจะไม่มีลูกศรสีดำเหมือนก่อนหน้านี้แล้วครับ เป็นอันเสร็จสิ้นในส่วนของโดเมน หรือส่วนของผู้ดูแลระบบนะครับ

cloudhost.in.th – All DNS Chain is SECURE.

ทดสอบ DNSSEC ฝั่ง Client

เราสามารถตรวจสอบอุปกรณ์ของเราว่ารองรับ DNSSEC หรือไม่? ได้ที่ลิงก์ https://dnssec.vs.uni-due.de โดยเข้าเว็บแล้วกด Start Test

Client not support DNSSEC.
Client support DNSSEC.

การเปิดใช้งาน DNSSEC ที่ฝั่ง Client

สำหรับฝั่ง Client ผมแนะนำให้ใช้ DNS ของ Cloudflare DNS Client หรือ Google DNS Client ซึ่งรองรับการใช้งาน DNSSEC อยู่แล้ว

Cloudflare DNS

Cloudflare DNS IPv4

  • 1.1.1.1 และ 1.0.0.1
  • 1.1.1.2 และ 1.0.0.2 (ป้องกันโดเมนไวรัส)
  • 1.1.1.3 และ 1.0.0.3 (ป้องกันโดเมนไวรัส และป้องกันเว็บโป้ เหมาะสำหรับเด็ก)

Cloudflare DNS IPv6

  • 2606:4700:4700::1111 และ 2606:4700:4700::1001
  • 2606:4700:4700::1112 และ 2606:4700:4700::1002 (ป้องกันโดเมนไวรัส)
  • 2606:4700:4700::1113 และ 2606:4700:4700::1003 (ป้องกันโดเมนไวรัส และป้องกันเว็บโป้ เหมาะสำหรับเด็ก)

Google DNS

Google DNS IPv4

  • 8.8.8.8 และ 8.8.4.4

Google DNS IPv6

  • 2001:4860:4860::8888 และ 2001:4860:4860::8844

ทำไมต้อง Cloudflare + Google

โดยส่วนตัว ผมจะแนะนำ 2 ตัวนี้นะครับ อันเนื่องมาจากความเร็วในการ Reslove DNS และมาตรฐานความปลอดภัยครับ มีความน่าเชื่อถือสูงด้วย

สำหรับการตั้งค่า DNS เราสามารถเลือกใช้โปรแกรม แอพ มาช่วยการตั้งค่าได้ รวมถึง เราสามารถเลือกใช้ทั้ง Cloudflare, Google อย่างละ 1 ตัวก็ได้นะครับ เพราะว่า DNS Setting เราจะสามารถกรอกได้ 2 อัน เพื่อป้องกันอีกตัวล่มนั่นเอง

วิธีป้องกัน WordPress Brute Force Attack ด้วย Cloudflare Rule

Brute Force Attack คืออะไร?

Brute Force Attack คือ วิธีการ Hack เว็บไซต์ประเภทหนึ่ง ที่ Hacker ก็ชอบใช้ ด้วยวิธีการเขียน Robots เข้ามาที่เว็บไซต์ของเราเพื่อสุ่มรหัสผ่านเข้าสู่ระบบ ในกรณีที่เป็น WordPress ก็คือ สุ่มรหัสผ่านเข้ามายังหน้า /wp-login.php และยังมีอีกช่องทางหนึ่งที่หลายๆคนอาจจะไม่ทราบ นั้นคือ สุ่ม Login ผ่านทาง XMLRPC ที่ลิงก์ /xmlrpc.php ด้วยการใช้ WordPress XML-RPC API ได้ด้วยนะเออ

WordPress Brute Force Attack

สำหรับเว็บไซต์ WordPress ที่ใช้งาน Cloudflare CDN ที่กำหนดให้ Traffic วิ่งผ่าน Cloudflare นั่น เราจะเจอปัญหาดังนี้

  1. IP ที่วิ่งเข้ามาที่ Server เป็น IP ของทาง Cloudflare ไม่ใช่ Real-IP ของผู้ใช้งานจริงๆ – แก้ไขได้ด้วยการ Config Server ให้แสดง Real-IP จาก Cloudflare ได้ แต่ต้องมีสิทธิ์เข้าถึง root เพื่อตั้งค่า Web Server (Cloudflare โชว์ IP จริงของผู้ใช้งานใน Nginx)
  2. จากข้อที่ 1 เมื่อเราได้ Real IP มาแล้ว วิธีการทั่วๆไปที่เราใช้งานกันก็คือ ติดตั้ง WordPress Plugin ที่มีความสามารถในการ Block IP ที่ทำการเชื่อมต่อเข้ามา Brute Force Attack ซึ่งก็จะมีหลากหลายตัวเลือก จะยังไม่กล่าวถึงในโพสๆนี้
  3. ใช้วิธีการป้องกันผ่านทาง Control Panel เช่น DirectAdmin (DA) มีโหมด “Parse service logs for brute force attacks” ซึ่งสามารถ Scan WordPress login log แล้วเอา IP ไป Block ที่ Firewall ได้ และสำหรับคนที่ใช้วิธีนี้ ผมบอกเลยว่าใช้ไม่ได้ครับ ถึงเราจะได้ Rea IP มา Block ก็จริง แต่ว่า Client เค้าเข้าผ่าน Cloudflate IP ซึ่งไม่ได้เข้ามาที่ Server เราตรงๆครับ ผ่าม! (DirectAdmin Firewall)

ปัญหาของ WordPress Plugin และ Server Security

คำถามคือ: ก็ป้องกันได้แล้วใช่ไหม หากผ่านทั้ง 2-3 ข้อข้างต้น? คำตอบคือ ใช่! แต่มันก็เหมือนปัญหาที่รอคอยวันที่จะระเบิดออกมา เพราะเราต้องคำนึงถึง Traffic ที่มันยังคงวิ่งผ่านเข้ามาที่ Server ของเราอยู่ดี ทำให้ Server ทำงานหนักโดยที่ไม่จำเป็น เพราะว่า Server มีการ Process Rule ต่างๆที่ WordPress Plugin ทำงาน ยิ่งโดน Brute Force Attack มากๆ จากหลายๆ IP ปัญหาก็คือ DB บวม (ถ้าเก็บ IP ใน Database),​ ไฟล์ .htaccess บวม (ในกรณี Block IP ผ่านทาง .htaccess) ส่งผลให้เว็บช้าลงเรื่อยๆ พอจะเห็นภาพแล้วใช่ไหมครับ

Cloudflare Brute Force Attack Rule

หลายคนอาจจะสงสัยว่า ก็ใช้ Cloudflare CDN แล้วหนิ Traffic ผ่านทาง Cloudflare แล้ว มันต้องกรอง Traffic ที่โจมตี Brute Force Attack ออกไปสิ! ผมแนะนำให้ลองกลับไปดู Access Log ของท่านด่วนครับ 555++

เพราะฉะนั้น เรามาเข้าเรื่องกันเลยครับ (เกริ่นมาซะเยอะเพื่อให้เห็นภาพชัดๆ) วิธีการตั้งค่า Cloudflare ให้ป้องกัน Brute Force Attack สำหรับ WordPress CMS ให้อยู่หมัด และ Traffic จะถูกกรองออกไปตั้งแต่ Cloudflare โดยที่ไม่เข้ามาถึง Server ของเราเลยครับ และไม่จำเป็นต้องติดตั้ง Plugin ป้องกัน Brute Force Attack แต่อย่างใด ให้ท่านไปที่ Cloudflare > Domain Name ของท่าน > Page Rules > Create Page Rule และตั้งค่าตามตัวอย่างด้านล่างนี้ครับ

Cloudflare ป้องกัน Brute Force Attack WordPress หน้า wp-login.php

Rule ที่ผมสร้างขึ้น หมายถึง การบังคับให้ wp-login.php เป็นโหมด “I’am Under Attack” ประมาณว่า เราถูกโจมตีอยู่นะ ทาง Cloudflare จะทำการเปิดระบบความปลอดภัยขึ้นมา 2 แบบ ดังนี้

I am Under Attack Lv1 – รอ 5 วินาที เราก็จะไปยังหน้า Login
I am Under Attack Lv2 – ต้องยืนยันว่าเป็น I am human ด้วย CAPTCHA

อธิบาย Rule ที่ผมใช้นี้ ผมจะใส่ * ไว้ทั้งข้างหน้า หมายถึง รวมทั้ง HTTP/HTTPS และรวมทุกๆ Sub Domain ที่ผมจะสร้างขึ้นในอนาคต ก็จะมีผลกับ Rule นี้ และข้างหลัง หมายถึง หากมี Parameter GET อะไรก็ตาม ก็ Bypass ผ่าน Rule นี้ไม่ได้ครับ และสำหรับใครที่ไม่ได้ใช้งาน WordPress XML-RPC API ผมแนะนำให้เพิ่มอีก Rule โดยการใส่ xmlrpc.php แทน wp-login.php นะครับ

Cloudflare Page Rules – สร้างได้ฟรี 3 Rules

เมื่อ Save and Deploy เสร็จ ก็จะได้ตามตัวอย่างเลยครับ จากนั้น วิธีการดู Access Log ที่เราตั้ง Rule ไว้ สามารถดูได้ที่เมนู Firewall > Overview เราจะเห็น Firewall Events สามารถคลิกดูรายละเอียดได้ครับ

เป็นอันเสร็จสิ้นแล้วครับ สำหรับวิธีการนี้ ยังสามารถเอาไปประยุกต์ใช้กับหน้า Login ของ Script ที่เราใช้งานกันอยู่ได้นะครับ และการตั้งค่านี้ ใช้ได้เฉพาะ Cloudflare CDN ถ้าใช้ Cloudflare DNS อย่างเดียว จะใช้งานไม่ได้นะครับ 😉

CentOS 7 วิธีการ Update PHP Versions (Upgrade/Downgra)

สำหรับ CentOS 7 วิธีการ Upgrade/Downgrade PHP Version สามารถทำได้ดังนี้ครับ

ก่อนอื่นต้องเช็คก่อนว่าปัจจุบันเวอร์ชั่นอะไร

php -v

ติดตั้ง Remi Repo

wget -q http://rpms.remirepo.net/enterprise/remi-release-7.rpm
wget -q https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -i remi-release-7.rpm epel-release-latest-7.noarch.rpm

Upgrade PHP Version

จากนั้น เลือกเวอร์ชั่นที่เราอยากจะอัพเกรดไป (แก้ไขเวอร์ชั่นที่เราต้องการนะครับ)

yum-config-manager --enable remi-php73

ตามด้วยการอัพเดตครับ

yum update

โดยความสะดวกในการใช้วิธีการนี้คือ เราสามารถ Update PHP ผ่านคำสั่ง yum ได้เลยนั่นเองครับ

Downgrade PHP Version

สำหรับวิธีการ Downgrade นั้น ให้เราทำการ disable เวอร์ชั่นปัจจุบันก่อน ยกตัวอย่างหากเราทำการ Upgrade PHP 7.2 => PHP 7.3 แล้วอยาก Downgrade to PHP 7.2 เหมือนเดิม ให้ทำตามขั้นตอนนี้ครับ

yum-config-manager --disable remi-php73
yum-config-manager --enable remi-php72
yum downgrade php\*
yum update

แก้ไข php.ini

ส่วนนี้เสริมให้นะครับ สำหรับคนที่หาไฟล์ php.ini ไม่เจอ เพราะแต่ละเวอร์ชั่นจะไม่ได้อยู่ที่เดิม ในกรณีที่เราไม่ได้ใช้ mod_php ครับ

php -i | grep php.ini

Cloudflare IPs

รายการ IPs ของทาง Cloudflare ครับ

Cloudflare IPv4

173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/12
172.64.0.0/13
131.0.72.0/22

Update: https://www.cloudflare.com/ips-v4

Cloudflare IPv6

2400:cb00::/32
2606:4700::/32
2803:f800::/32
2405:b500::/32
2405:8100::/32
2a06:98c0::/29
2c0f:f248::/32

Update: https://www.cloudflare.com/ips-v6

Cloudflare โชว์ IP ของผู้ใช้งานจริง Nginx

เมื่อเราใช้งาน Cloudflare เราจะได้ IP ของ Cloudflare วิ่งมาที่ Server หากเราต้องการให้แสดง Real IP สำหรับ Nginx เราสามารถตั้งค่า Real-IP ได้ดังนี้

nano /etc/nginx/nginx-includes.conf

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
 
 
real_ip_header CF-Connecting-IP;

จากนั้น ลองใช้คำสั่ง nginx -t เพื่อตรวจสอบความถูกต้องก่อน จะต้องไม่แสดง Error message ใดๆขึ้นมา และทำการ restart nginx 1 ครั้ง เพื่อ reload config ใหม่นะครับ

Note: Compatible with DirectAdmin

DirectAdmin คำสั่งต่ออายุ Domain ที่ Let’s Encrypt SSL หมดอายุ

Command Line สำหรับสั่งให้ DirectAdmin ต่ออายุ Let’s Encrypt SSL ทั้งหมดบนเซิฟเวอร์ (ที่หมดอายุแล้วต่ออายุไม่ได้)

echo "action=rewrite&value=letsencrypt" >> /usr/local/directadmin/data/task.queue && /usr/local/directadmin/dataskq d800