วิธีการติดตั้ง ModSecurity 3 + OWASP ด้วย Nginx บน Rocky Linux 9

ModSecurity ซึ่งมักเรียกกันว่า Modsec เป็นไฟร์วอลล์เว็บแอปพลิเคชันแบบโอเพ่นซอร์ส (WAF) ฟรี ModSecurity ถูกสร้างขึ้นเป็นโมดูลสำหรับ Apache HTTP Server อย่างไรก็ตาม ตั้งแต่เริ่มแรก WAF ได้เติบโตขึ้นและตอนนี้ครอบคลุมอาร์เรย์ของคำขอ HyperText Transfer Protocol และความสามารถในการกรองการตอบสนองสำหรับแพลตฟอร์มต่างๆ เช่น Microsoft IIS, Nginx และ Apache บทบาทหลักของ ModSecurity คือการให้การป้องกันสำหรับเว็บแอปพลิเคชันโดยการกรองทราฟฟิกที่เข้ามาและบล็อกคำขอที่เป็นอันตราย นอกจากนี้ยังสามารถกำหนดค่า WAF ให้ตรวจสอบการรับส่งข้อมูลสำหรับกิจกรรมบางประเภท เช่น การโจมตีด้วยการฉีด SQL และสร้างการแจ้งเตือนเมื่อตรวจพบกิจกรรมดังกล่าว นอกจากประโยชน์ด้านความปลอดภัยแล้ว ModSecurity ยังสามารถปรับปรุงประสิทธิภาพของเว็บได้ด้วยการแคชกฎและขจัดความจำเป็นในการประมวลผลคำขอเดิมซ้ำๆ

นอกเหนือจากการติดตั้ง Modsecurity แล้ว OWASP Core Rule Set (CRS) ยังใช้ร่วมกันซึ่งเป็นชุดกฎโอเพนซอร์สที่เขียนด้วยภาษา SecRules ของ ModSecurity CRS ได้รับการยอมรับอย่างสูงในอุตสาหกรรมความปลอดภัย และ ModSecurity ถือเป็นหนึ่งในวิธีที่มีประสิทธิภาพมากที่สุดในการปกป้องเว็บแอปพลิเคชันจากการถูกโจมตี แม้ว่า ModSecurity จะไม่ใช่สัญลักษณ์แสดงหัวข้อย่อยสีเงิน แต่เป็นเครื่องมือสำคัญในคลังแสงขององค์กรใดๆ ที่ให้ความสำคัญกับความปลอดภัยของเว็บอย่างจริงจัง

ชุดกฎ OWASP พร้อม ModSecurity สามารถช่วยปกป้องเซิร์ฟเวอร์ของคุณได้เกือบจะในทันที

  • ตัวแทนผู้ใช้ที่ไม่ดี
  • DDOS
  • การเขียนสคริปต์ข้ามเว็บไซต์
  • การแทรก SQL
  • เซสชั่นการหักหลัง
  • ภัยคุกคามอื่น ๆ

ในบทช่วยสอนต่อไปนี้ คุณจะได้เรียนรู้วิธีติดตั้ง ModSecurity 3 & OWASP Core Rule Set ด้วย Nginx บน Rocky Linux 9 พร้อมตัวอย่างการกำหนดค่าตั้งแต่ต้นจนจบ

สารบัญ

อัปเดต Rocky Linux

ขั้นแรก อัปเดตระบบของคุณเพื่อให้แน่ใจว่าแพ็คเกจที่มีอยู่ทั้งหมดเป็นข้อมูลล่าสุด

sudo dnf upgrade --refresh

ติดตั้ง Nginx Stable หรือ Mainline . ล่าสุด

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

ลบการติดตั้ง Nginx ที่มีอยู่

หยุดบริการ Nginx ปัจจุบัน:

sudo systemctl stop nginx

ตอนนี้ลบการติดตั้ง Nginx ที่มีอยู่ดังนี้:

sudo dnf remove nginx

ตอนนี้คุณลบ Nginx เวอร์ชันเก่าได้สำเร็จแล้ว หากคุณติดตั้งไว้ เพื่อติดตั้ง Nginx mainline คุณต้องติดตั้งการพึ่งพาสำหรับเวอร์ชันนั้นก่อน ซึ่งก็คือ dnf-ยูทิลิตี้ ด้วยคำสั่งต่อไปนี้:

sudo dnf install dnf-utils -y

ถัดไป นำเข้าที่เก็บด้านล่าง

นำเข้าที่เก็บ Nginx Mainline

sudo tee /etc/yum.repos.d/nginx-mainline.repo<<EOF

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/9/x86_64/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

EOF

ผู้ใช้ที่มีสถาปัตยกรรม aarch ให้แทนที่ในคำสั่งด้านบน baseurl=http://nginx.org/packages/mainline/centos/9/x86_64/ กับ baseurl=http://nginx.org/packages/mainline/centos/9/aarch64/

นำเข้า Nginx Stable Repository

sudo tee /etc/yum.repos.d/nginx-stable.repo<<EOF

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/9/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

EOF

ผู้ใช้ที่มีสถาปัตยกรรม aarch ให้แทนที่ในคำสั่งด้านบน baseurl=http://nginx.org/packages/mainline/centos/9/x86_64/ กับ baseurl=http://nginx.org/packages/mainline/centos/9/aarch64/

ติดตั้ง Nginx

ตามค่าเริ่มต้น ที่เก็บล่าสุดสำหรับแพ็คเกจ Nginx ที่เสถียรจะถูกใช้ก่อน อย่างไรก็ตาม บทช่วยสอนจะติดตั้ง สายฉีด Nginxดังนั้น คุณจะต้องรันคำสั่งต่อไปนี้เพื่อเปิดใช้งานที่เก็บ mainline ดังนี้:

sudo yum-config-manager --enable nginx-mainline

หมายเหตุ หากคุณต้องการความเสถียร อย่าใช้คำสั่งด้านบนและไปยังส่วนถัดไปของบทช่วยสอน

ถัดไป ติดตั้ง Nginx mainline ดังนี้:

sudo dnf install nginx
วิธีการติดตั้ง ModSecurity 3 + OWASP ด้วย Nginx บน Rocky Linux 9

ดังที่กล่าวข้างต้น บทช่วยสอนกำลังติดตั้ง Nginx mainline เวอร์ชันล่าสุดจาก Nginx.org โดยตรง โปรดทราบว่าคุณจะเห็นป๊อปอัปที่แจ้งให้คุณทราบเกี่ยวกับการนำเข้า คีย์ GPG ระหว่างการติดตั้ง สิ่งนี้ปลอดภัยที่จะทำและจำเป็นต้องทำการติดตั้ง Nginx mainline ให้สำเร็จ

โดยค่าเริ่มต้น Nginx จะไม่เปิดใช้งานและปิดใช้งานในการติดตั้ง ในการเปิดใช้งานบริการ Nginx ของคุณ ให้ใช้:

sudo systemctl start nginx

เปิดใช้งาน Nginx เพื่อเริ่มต้นเมื่อบูต ใช้คำสั่งต่อไปนี้:

sudo systemctl enable nginx

เลือกตรวจสอบเวอร์ชันของ Nginx ในกรณีของเราคือเวอร์ชัน Nginx Mainline; ใช้คำสั่งต่อไปนี้

nginx -v

กำหนดค่า FirewallD สำหรับ Nginx

หากคุณไม่ได้เปลี่ยนบริการ Nginx ที่มีอยู่และติดตั้ง Nginx เป็นครั้งแรก คุณอาจต้องกำหนดค่าไฟร์วอลล์สำหรับการรับส่งข้อมูล HTTP และ HTTPS ตัวอย่างวิธีการดำเนินการอยู่ด้านล่าง:

อนุญาตการรับส่งข้อมูล HTTP ใช้คำสั่งต่อไปนี้:

sudo firewall-cmd --permanent --zone=public --add-service=http

อนุญาตการรับส่งข้อมูล HTTPS ใช้คำสั่งต่อไปนี้:

sudo firewall-cmd --permanent --zone=public --add-service=https

เมื่อเสร็จแล้ว คุณต้องทำให้การเปลี่ยนแปลงมีผลโดยโหลดไฟร์วอลล์ใหม่:

sudo firewall-cmd --reload

ดาวน์โหลด Nginx Source

ขั้นตอนต่อไปคือตอนนี้ และคุณจะต้องดาวน์โหลดซอร์สโค้ด Nginx เพื่อคอมไพล์โมดูลไดนามิก ModSecurity คุณต้องดาวน์โหลดและจัดเก็บแพ็คเกจต้นทางในตำแหน่งไดเรกทอรี /etc/local/src/nginx.

สร้างและกำหนดค่าไดเรกทอรี

สร้างสถานที่ดังนี้:

sudo mkdir /usr/local/src/nginx && cd /usr/local/src/nginx

ดาวน์โหลดเอกสารต้นฉบับ

ถัดไป ดาวน์โหลดไฟล์เก็บถาวรซอร์ส Nginx จากหน้าดาวน์โหลดเพื่อให้ตรงกับเวอร์ชัน Nginx ที่คุณระบุไว้ก่อนหน้านี้ แม้ว่าคุณจะไม่ได้อัปเดต Nginx เวอร์ชันเสถียรหรือเวอร์ชันล่าสุด และใช้เวอร์ชันที่เก่ากว่า คุณควรจะสามารถค้นหาแหล่งที่มาที่ตรงกับของคุณเองได้

หน้าดาวน์โหลด Nginx สามารถ พบได้ที่นี่

ดาวน์โหลดแหล่งที่มาโดยใช้ wget คำสั่งดังนี้ (ตัวอย่างเท่านั้น).

sudo wget http://nginx.org/download/nginx-1.23.1.tar.gz

จำไว้ว่าเวอร์ชัน Nginx ที่ติดตั้งจะต้องตรงกับไฟล์เก็บถาวรที่ดาวน์โหลด มิฉะนั้น คุณจะล้มเหลวในภายหลังในบทช่วยสอน

ถัดไป แตกไฟล์เก็บถาวรดังนี้

sudo tar -xvzf nginx-1.23.1.tar.gz

ตรวจสอบเวอร์ชันต้นทาง

ถัดไป แสดงรายการไฟล์ไดเร็กทอรีด้วย the ls คำสั่ง ดังต่อไปนี้

ls

ตัวอย่างผลลัพธ์ใน your /usr/src/local/nginx ไดเรกทอรี

[joshua@rocky-linux-9 nginx]$ ls
nginx-1.23.1  nginx-1.23.1.tar.gz

ถัดไป ให้ยืนยันว่าแพ็คเกจต้นทางเหมือนกับเวอร์ชัน Nginx ที่ติดตั้งบนระบบของคุณ ตามที่กล่าวไว้ก่อนหน้านี้

ติดตั้ง libmodsecurity3 สำหรับ ModSecurity

แพคเกจ libmodsecurity3 เป็นส่วนพื้นฐานของ WAF ที่ทำ การกรอง HTTP สำหรับเว็บแอปพลิเคชันของคุณ คุณจะรวบรวมจากแหล่งที่มา

โคลนที่เก็บ ModSecurity จาก Github

ขั้นตอนแรกคือการโคลนจาก Github และหากคุณไม่ได้ติดตั้ง git คุณจะต้องรันคำสั่งต่อไปนี้:

sudo dnf install git -y

ต่อไปโคลน libmodsecurity3 GIT ที่เก็บข้อมูลดังนี้

sudo git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/

เมื่อโคลนแล้วคุณจะต้อง CD ไปที่ไดเร็กทอรี

cd /usr/local/src/ModSecurity/

ติดตั้ง libmodsecurity3 การพึ่งพา

ก่อนที่คุณจะคอมไพล์ คุณจะต้องติดตั้งการพึ่งพาดังต่อไปนี้:

sudo dnf install doxygen yajl-devel gcc-c++ flex bison yajl curl-devel zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pcre-static pkgconfig libtool httpd-devel redhat-rpm-config wget curl openssl openssl-devel geos geos-devel geocode-glib-devel geolite2-city geolite2-country nano -y

ในการติดตั้ง GeoIP คุณจะต้องนำเข้าที่เก็บ Remi ก่อน

sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y

ตอนนี้ติดตั้ง GeoIP-devel โดยใช้คำสั่งต่อไปนี้

sudo dnf --enablerepo=remi install GeoIP-devel -y

ตอนนี้เพื่อเสร็จสิ้น ติดตั้งโมดูลย่อย GIT ต่อไปนี้ดังนี้

sudo git submodule init

จากนั้นอัปเดตโมดูลย่อย:

sudo git submodule update

การสร้างสภาพแวดล้อม ModSecurity

ขั้นตอนต่อไปคือตอนนี้เพื่อสร้างสิ่งแวดล้อมก่อน ใช้คำสั่งต่อไปนี้:

sudo ./build.sh

จากนั้นรันคำสั่ง configuration

sudo ./configure

โปรดทราบว่าคุณอาจเห็นข้อผิดพลาดต่อไปนี้

fatal: No names found, cannot describe anything.

คุณสามารถละเว้นสิ่งนี้ได้อย่างปลอดภัยและไปยังขั้นตอนถัดไป

การคอมไพล์ซอร์สโค้ด ModSecurity

เมื่อคุณได้สร้างและกำหนดค่าสภาพแวดล้อมสำหรับ libmodsecurity3 แล้ว ก็ถึงเวลาคอมไพล์ด้วยคำสั่ง ทำ.

sudo make

เคล็ดลับที่มีประโยชน์คือการระบุ -NS เนื่องจากสิ่งนี้สามารถเพิ่มความเร็วในการคอมไพล์ได้อย่างมากหากคุณมีเซิร์ฟเวอร์ที่ทรงพลัง

ตัวอย่างเช่น เซิร์ฟเวอร์มี 6 CPU และฉันสามารถใช้ทั้ง 6 หรืออย่างน้อย 4 ถึง 5 เพื่อเพิ่มความเร็ว

sudo make -j 6

หลังจากรวบรวมซอร์สโค้ดแล้ว ให้รันคำสั่งการติดตั้งในเทอร์มินัลของคุณ:

sudo make install

โปรดทราบว่าการติดตั้งเสร็จสิ้นใน /usr/local/modsecurity/, ซึ่งคุณจะอ้างอิงในภายหลัง

ติดตั้ง ModSecurity-nginx Connector

พื้นที่ ตัวเชื่อมต่อ ModSecurity-nginx เป็นจุดเชื่อมต่อระหว่าง nginx และ libmodsecurity เป็นองค์ประกอบที่สื่อสารระหว่าง Nginx และ ModSecurity (libmodsecurity3).

Clone ModSecurity-nginx Repository จาก Github

คล้ายกับขั้นตอนก่อนหน้าในการโคลนที่เก็บ libmodsecurity3 คุณจะต้องโคลนที่เก็บตัวเชื่อมต่ออีกครั้งโดยใช้คำสั่งต่อไปนี้:

sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/

ติดตั้ง ModSecurity-nginx Dependencies

จากนั้นไปที่ไดเร็กทอรีซอร์ส Nginx; โปรดจำไว้ว่าตัวอย่างด้านล่างจะแตกต่างจากเวอร์ชันของคุณ มันเป็นเพียงตัวอย่าง

ตัวอย่าง:

cd /usr/local/src/nginx/nginx-1.23.1/

ต่อไปคุณจะรวบรวม ตัวเชื่อมต่อ ModSecurity-nginx โมดูลเฉพาะกับ เมื่อใช้-compat ธงดังต่อไปนี้:

sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

ตัวอย่างผลลัพธ์หากทั้งหมดทำงานได้อย่างถูกต้อง:

วิธีการติดตั้ง ModSecurity 3 + OWASP ด้วย Nginx บน Rocky Linux 9

ทำ (สร้าง) โมดูลไดนามิกด้วยคำสั่งต่อไปนี้:

sudo make modules

ตัวอย่างผลลัพธ์:

วิธีการติดตั้ง ModSecurity 3 + OWASP ด้วย Nginx บน Rocky Linux 9

ถัดไป ในขณะที่อยู่ในไดเร็กทอรีต้นทาง Nginx ให้ใช้คำสั่งต่อไปนี้เพื่อย้ายโมดูลไดนามิกที่คุณสร้างซึ่งถูกบันทึกไว้ที่ตำแหน่ง objs/ngx_http_modsecurity_module.so และคัดลอกไปที่ /usr/share/nginx/modules ไดเรกทอรี

sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

คุณสามารถจัดเก็บโมดูลไดนามิกได้ทุกที่หากคุณระบุพาธแบบเต็มเมื่อโหลด

สำหรับผู้ใช้ที่ติดตั้ง Nginx mainline หรือ stable ตำแหน่งจะเป็นดังนี้

sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/

โหลดและกำหนดค่าตัวเชื่อมต่อ ModSecurity-nginx ด้วย Nginx

ตอนนี้ คุณได้คอมไพล์โมดูลไดนามิกและกำหนดตำแหน่งตามนั้นแล้ว คุณต้องแก้ไข your /etc/nginx/nginx.conf ไฟล์การกำหนดค่าเพื่อให้ ModSecurity ทำงานด้วยเว็บเซิร์ฟเวอร์ Nginx ของคุณ

เปิดใช้งาน ModSecurity ใน nginx.conf

ก่อนอื่นต้องระบุ load_module และพาธไปยังโมดูล modsecurity ของคุณ

เปิดขึ้น nginx.conf ด้วยโปรแกรมแก้ไขข้อความใด ๆ สำหรับบทช่วยสอน จะใช้นาโน:

sudo nano /etc/nginx/nginx.conf

ถัดไป เพิ่มบรรทัดต่อไปนี้ในไฟล์ใกล้ด้านบน:

load_module modules/ngx_http_modsecurity_module.so;

หากคุณพบโมดูลที่อื่น ให้รวมพาธแบบเต็ม

ตอนนี้เพิ่มรหัสต่อไปนี้ภายใต้ HTTP {} ส่วนดังนี้:

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf;

ตัวอย่าง:

วิธีการติดตั้ง ModSecurity 3 + OWASP ด้วย Nginx บน Rocky Linux 9

หากคุณพบโมดูลที่อื่น ให้รวมพาธแบบเต็ม

บันทึกไฟล์ (CTRL+O), แล้วออก (CTRL+X).

สร้างและกำหนดค่าไดเรกทอรีและไฟล์สำหรับ ModSecurity

สำหรับบทช่วยสอน คุณจะต้องสร้างไดเร็กทอรีเพื่อจัดเก็บไฟล์การกำหนดค่าและกฎในอนาคต OWASP CRS

ใช้คำสั่งต่อไปนี้เพื่อสร้าง /etc/nginx/modsec ไดเรกทอรี

sudo mkdir /etc/nginx/modsec/

คุณต้องคัดลอกไฟล์การกำหนดค่า ModSecurity ตัวอย่างจากไดเร็กทอรี GIT ที่โคลนของเรา

sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

ใช้โปรแกรมแก้ไขข้อความที่คุณชื่นชอบ เปิดไฟล์ modsecurity.conf ดังนี้

sudo nano /etc/nginx/modsec/modsecurity.conf

โดยค่าเริ่มต้น การกำหนดค่า ModSecurity มีเอ็นจิ้นกฎที่ระบุเป็น (การตรวจจับเท่านั้น)ซึ่งกล่าวอีกนัยหนึ่งคือรัน ModSecurity และตรวจจับพฤติกรรมที่เป็นอันตรายทั้งหมด แต่จะไม่บล็อกหรือแบนและบันทึกธุรกรรม HTTP ทั้งหมดที่ตั้งค่าสถานะ ควรใช้เฉพาะเมื่อคุณมีผลบวกปลอมจำนวนมากหรือได้เพิ่มการตั้งค่าระดับความปลอดภัยเป็นระดับสูงสุดแล้ว และทดสอบเพื่อดูว่ามีผลบวกปลอมเกิดขึ้นหรือไม่

ในไฟล์การกำหนดค่า เปลี่ยนลักษณะการทำงานนี้เป็น (บน), พบในบรรทัดที่ 7

SecRuleEngine DetectionOnly

เปลี่ยนบรรทัดนี้เพื่อเปิดใช้งาน ModSecurity:

SecRuleEngine On

ตัวอย่าง:

วิธีการติดตั้ง ModSecurity 3 + OWASP ด้วย Nginx บน Rocky Linux 9

ตอนนี้ คุณต้องค้นหาสิ่งต่อไปนี้ SecAuditLogPartsซึ่งอยู่ที่บรรทัดที่ 224

# Log everything we know about a transaction.
SecAuditLogParts ABIJDEFHZ

สิ่งนี้ไม่ถูกต้องและจำเป็นต้องเปลี่ยน แก้ไขบรรทัดดังต่อไปนี้:

SecAuditLogParts ABCEFHJKZ

ตอนนี้บันทึก ไฟล์โดยใช้ (CTRL+O), แล้วออก (CTRL+X).

ส่วนต่อไปคือการสร้างไฟล์ต่อไปนี้ modsec-config.conf. ที่นี่คุณจะเพิ่ม modsecurity.conf ไฟล์พร้อมและต่อมาในกฎอื่น ๆ เช่น OWASP CRS, และหากคุณใช้ WordPress, the WPRS CRS ชุดกฎ

ใช้คำสั่งต่อไปนี้เพื่อสร้างไฟล์และเปิดไฟล์

sudo nano /etc/nginx/modsec/modsec-config.conf

เมื่ออยู่ในไฟล์แล้ว ให้เพิ่มบรรทัดต่อไปนี้

include /etc/nginx/modsec/modsecurity.conf

บันทึกไฟล์ modsec-config.conf ด้วย (CTRL+O), แล้วก็ (CTRL+X) ทางออก

สุดท้าย คัดลอก ModSecurity's unicode.mapping ไฟล์ด้วย คำสั่ง CP ดังต่อไปนี้

sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

ก่อนดำเนินการต่อ คุณควรให้บริการ Nginx แบบแห้งโดยใช้คำสั่งเทอร์มินัลต่อไปนี้

sudo nginx -t

หากคุณตั้งค่าทุกอย่างถูกต้อง คุณควรได้ผลลัพธ์ต่อไปนี้:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

หากต้องการทำการเปลี่ยนแปลงแบบสด ให้เริ่มบริการ Nginx ใหม่โดยใช้คำสั่ง systemctl:

sudo systemctl restart nginx

ติดตั้ง OWASP Core Rule Set สำหรับ ModSecurity

ModSecurity ไม่ได้ปกป้องเว็บเซิร์ฟเวอร์ของคุณ และคุณจำเป็นต้องมีกฎเกณฑ์ หนึ่งในกฎที่มีชื่อเสียง เป็นที่เคารพ และเป็นที่รู้จักมากที่สุดคือชุดกฎ OWASP CRS กฎนี้ใช้กันอย่างแพร่หลายที่สุดในบรรดาเว็บเซิร์ฟเวอร์และ WAF อื่นๆ และระบบอื่นๆ ที่คล้ายคลึงกันส่วนใหญ่จะใช้กฎส่วนใหญ่บน CRS นี้ การติดตั้งชุดกฎนี้จะทำให้คุณมีแหล่งป้องกันที่ดีจากภัยคุกคามที่เกิดขึ้นใหม่ส่วนใหญ่บนอินเทอร์เน็ตโดยอัตโนมัติโดยการตรวจจับผู้มุ่งร้ายและบล็อกพวกเขา

ตรวจสอบ หน้าแท็กการเปิดตัว OWASP เพื่อดูว่าล่าสุดเป็นอย่างไร ดังตัวอย่างด้านล่างอาจมีการเปลี่ยนแปลงในอนาคต

ขั้นแรก ให้กลับไปที่ไดเร็กทอรี modsec ที่คุณสร้างขึ้น

cd /etc/nginx/modsec

การใช้ คำสั่ง wget, ดาวน์โหลด ไฟล์เก็บถาวร OWASP CRS 3.3.2 ซึ่งเป็นความเสถียรล่าสุด ณ วันที่นี้ แต่อย่าลืมว่าเมื่อสี่วันก่อน เวอร์ชันก่อนวางจำหน่ายได้ลดลง ดังนั้นคำแนะนำของฉันคือตรวจสอบลิงก์สองสามบรรทัดด้านบนเพื่อดูว่ารีลีสมีลักษณะอย่างไรสำหรับชุดกฎหลัก

wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.zip

คุณสามารถดาวน์โหลดบิลด์ทุกคืนสำหรับผู้ที่ต้องการใช้ชีวิตแบบเอดจ์ ใช้เฉพาะตอนกลางคืนเท่านั้นหากคุณพร้อมที่จะคอมไพล์ใหม่และตรวจสอบ CoreRuleSet Github เป็นประจำสำหรับการอัปเดตและมั่นใจมากขึ้นในการหาปัญหา ในทางเทคนิค ตอนกลางคืนอาจมีความปลอดภัยมากกว่า แต่อาจสร้างปัญหาได้

สำหรับผู้ใช้มือใหม่ ให้ใช้เวอร์ชันเสถียรและอย่าใช้เวอร์ชันด้านล่าง

wget https://github.com/coreruleset/coreruleset/archive/refs/tags/nightly.zip

ในขณะที่สร้างบทช่วยสอน เวอร์ชันก่อนเผยแพร่ v4.0.0-RC1 ก็พร้อมใช้งานตามที่กล่าวไว้ก่อนหน้านี้เช่นกัน

wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v4.0.0-rc1.zip

ติดตั้ง เปิดเครื่องรูดแพ็คเกจ หากคุณไม่ได้ติดตั้งสิ่งนี้บนเซิร์ฟเวอร์ของคุณ

sudo dnf install unzip -y

ตอนนี้เปิดเครื่องรูดไฟล์เก็บถาวร และบทช่วยสอนจะติดตั้งตัวเลือก RC เนื่องจากใกล้เคียงกับเวอร์ชันที่อัปเดตมากที่สุดโดยไม่ต้องใช้ทุกคืน ซึ่งอาจเป็นปัญหาได้ เว้นแต่คุณจะมีประสบการณ์กับกฎ OWASP และ Modsecurity จากนั้นฉันขอแนะนำให้ใช้เวอร์ชันนั้นสำหรับกฎความปลอดภัยล่าสุด

sudo unzip v4.0.0-rc1 -d /etc/nginx/modsec

ฉันแนะนำให้เก็บเวอร์ชันของชุดกฎ OWASP เนื่องจากคุณสามารถดาวน์โหลดหลายชุด และในอนาคต ให้เปลี่ยนอย่างรวดเร็วใน modsecurity.conf ของคุณ เพื่อดูว่าชุดกฎใดทำงานได้ดีที่สุดโดยไม่มีปัญหา เช่น การทดสอบระหว่างตัวเลือกการเผยแพร่กับทุกคืนหรือแบบเสถียร และปล่อยตัวผู้สมัคร

เมื่อก่อนเช่น modsecurity.conf ตัวอย่างการกำหนดค่า OWASP CRS มาพร้อมกับไฟล์การกำหนดค่าตัวอย่างที่คุณต้องเปลี่ยนชื่อ เป็นการดีที่สุดที่จะใช้คำสั่ง CP และสำรองข้อมูลไว้สำหรับอนาคต ในกรณีที่คุณจำเป็นต้องเริ่มต้นใหม่อีกครั้ง

sudo cp /etc/nginx/modsec/coreruleset-4.0.0-rc1/crs-setup.conf.example /etc/nginx/modsec/coreruleset-4.0.0-rc1/crs-setup.conf

หากต้องการเปิดใช้กฎ ให้เปิด /etc/nginx/modsec/modsec-config.conf.

sudo nano /etc/nginx/modsec/modsec-config.conf

เมื่อเข้าไปในไฟล์อีกครั้ง ให้เพิ่มสองบรรทัดต่อไปนี้:

include /etc/nginx/modsec/coreruleset-4.0.0-rc1/crs-setup.conf
include /etc/nginx/modsec/coreruleset-4.0.0-rc1/rules/*.conf

ตัวอย่าง:

วิธีการติดตั้ง ModSecurity 3 + OWASP ด้วย Nginx บน Rocky Linux 9

บันทึกไฟล์ (CTRL+O) และออก (CTRL+T).

โปรดจำไว้ว่า ตามที่อธิบายไว้ก่อนหน้านี้เล็กน้อย คุณสามารถดาวน์โหลดหลายๆ เวอร์ชันในทางเทคนิค แก้ไขไฟล์นี้ และอย่าลืมคัดลอกและอนุญาตพิเศษที่คุณทำ ส่วนสำคัญเกี่ยวกับรายการที่อนุญาตคือส่วนใหญ่เป็นไฟล์ทั่วไปสำหรับส่วนใหญ่

ก่อนหน้านี้ คุณต้องทดสอบบริการ Nginx ที่เพิ่มเข้ามาใหม่ก่อนที่จะเผยแพร่

sudo nginx -t

หลังจากรันการทดสอบแบบดรายรัน คุณควรได้ผลลัพธ์ต่อไปนี้ ซึ่งหมายความว่าทุกอย่างทำงานอย่างถูกต้อง:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

เริ่มบริการ Nginx ของคุณใหม่เพื่อทำการเปลี่ยนแปลงดังต่อไปนี้:

sudo systemctl restart nginx

การใช้และทำความเข้าใจ OWASP Core Rule Set

OWASP CRS มีตัวเลือกมากมาย อย่างไรก็ตาม การตั้งค่าเริ่มต้นจะปกป้องเซิร์ฟเวอร์ส่วนใหญ่ทันทีโดยไม่ทำให้ผู้เยี่ยมชมจริงและบอท SEO ที่ดีของคุณเสียหาย ด้านล่างนี้จะครอบคลุมบางส่วนเพื่อช่วยอธิบาย การอ่านเพิ่มเติมจะเป็นการดีที่สุดที่จะตรวจสอบตัวเลือกทั้งหมดในไฟล์การกำหนดค่าเอง เนื่องจากมีข้อมูลข้อความค่อนข้างน้อยที่จะอธิบาย

เปิดของคุณ CRS-setup.conf ไฟล์

sudo nano /etc/nginx/modsec/coreruleset-4.0.0-rc1/crs-setup.conf

โปรดทราบว่านี่คือการกำหนดค่าเวอร์ชันสำหรับนักพัฒนาซอฟต์แวร์ที่มีรายการเพิ่มเติมเมื่อเทียบกับเวอร์ชัน 3.3

จากที่นี่ คุณสามารถแก้ไขการตั้งค่า OWASP CRS ส่วนใหญ่ได้

การให้คะแนน OWASP CRS

ในการแยกย่อย ModSecurity มีสองโหมด:

โหมดการให้คะแนนความผิดปกติ

# -- [[ Anomaly Scoring Mode (default) ]] --
# In CRS3, anomaly mode is the default and recommended mode, since it gives the
# most accurate log information and offers the most flexibility in setting your
# blocking policies. It is also called "collaborative detection mode".
# In this mode, each matching rule increases an 'anomaly score'.
# At the conclusion of the inbound rules, and again at the conclusion of the
# outbound rules, the anomaly score is checked, and the blocking evaluation
# rules apply a disruptive action, by default returning an error 403.

โหมดในตัวเอง

# -- [[ Self-Contained Mode ]] --
# In this mode, rules apply an action instantly. This was the CRS2 default.
# It can lower resource usage, at the cost of less flexibility in blocking policy
# and less informative audit logs (only the first detected threat is logged).
# Rules inherit the disruptive action that you specify (i.e. deny, drop, etc).
# The first rule that matches will execute this action. In most cases this will
# cause evaluation to stop after the first rule has matched, similar to how many
# IDSs function.

โดยทั่วไปแล้ว การให้คะแนนความผิดปกติคือโหมดที่ดีที่สุดสำหรับผู้ใช้ส่วนใหญ่

มีสี่ระดับความหวาดระแวง:

  • ความหวาดระแวงระดับ 1 – ระดับเริ่มต้นและแนะนำสำหรับผู้ใช้ส่วนใหญ่
  • ความหวาดระแวงระดับ 2 – ผู้ใช้ขั้นสูงเท่านั้น
  • ความหวาดระแวงระดับ 3 – ผู้ใช้ที่เชี่ยวชาญเท่านั้น
  • ความหวาดระแวงระดับ 4 – ไม่แนะนำเลย ยกเว้นกรณีพิเศษ
# -- [[ Paranoia Level Initialization ]] ---------------------------------------
#
# The Paranoia Level (PL) setting allows you to choose the desired level
# of rule checks that will add to your anomaly scores.
#
# With each paranoia level increase, the CRS enables additional rules
# giving you a higher level of security. However, higher paranoia levels
# also increase the possibility of blocking some legitimate traffic due to
# false alarms (also named false positives or FPs). If you use higher
# paranoia levels, it is likely that you will need to add some exclusion
# rules for certain requests and applications receiving complex input.
#
# - A paranoia level of 1 is default. In this level, most core rules
#   are enabled. PL1 is advised for beginners, installations
#   covering many different sites and applications, and for setups
#   with standard security requirements.
#   At PL1 you should face FPs rarely. If you encounter FPs, please
#   open an issue on the CRS GitHub site and don't forget to attach your
#   complete Audit Log record for the request with the issue.
# - Paranoia level 2 includes many extra rules, for instance enabling
#   many regexp-based SQL and XSS injection protections, and adding
#   extra keywords checked for code injections. PL2 is advised
#   for moderate to experienced users desiring more complete coverage
#   and for installations with elevated security requirements.
#   PL2 comes with some FPs which you need to handle.
# - Paranoia level 3 enables more rules and keyword lists, and tweaks
#   limits on special characters used. PL3 is aimed at users experienced
#   at the handling of FPs and at installations with a high security
#   requirement.
# - Paranoia level 4 further restricts special characters.
#   The highest level is advised for experienced users protecting
#   installations with very high security requirements. Running PL4 will
#   likely produce a very high number of FPs which have to be
#   treated before the site can go productive.
#
# All rules will log their PL to the audit log;
# example: [tag "paranoia-level/2"]. This allows you to deduct from the
# audit log how the WAF behavior is affected by paranoia level.
#
# It is important to also look into the variable
# tx.enforce_bodyproc_urlencoded (Enforce Body Processor URLENCODED)
# defined below. Enabling it closes a possible bypass of CRS.

ทดสอบ OWASP CRS บนเซิร์ฟเวอร์ของคุณ

ในการทดสอบว่า OWASP CRS ทำงานบนเซิร์ฟเวอร์ของคุณหรือไม่ ให้เปิดอินเทอร์เน็ตเบราว์เซอร์ของคุณและใช้สิ่งต่อไปนี้:

https://www.yourdomain.com/index.html?exec=/bin/bash

คุณควรได้รับ ข้อผิดพลาดต้องห้าม 403. ถ้าไม่เช่นนั้นก็พลาดไปหนึ่งขั้นตอน

ตัวอย่าง:

วิธีการติดตั้ง ModSecurity 3 + OWASP ด้วย Nginx บน Rocky Linux 9

ปัญหาที่พบบ่อยที่สุดคือการเปลี่ยนแปลง การตรวจจับเท่านั้น ไปยัง On, ดังที่ได้กล่าวไว้ก่อนหน้านี้ในบทช่วยสอน

การจัดการกับผลบวกที่ผิดพลาดและการยกเว้นกฎที่กำหนดเอง

งานหนึ่งที่ไม่มีวันจบสิ้นคือการจัดการกับผลบวกที่ผิดพลาด ModSecurity และ OWASP CRS ทำงานร่วมกันได้ดีเยี่ยม แต่มันมาพร้อมกับค่าใช้จ่ายของเวลาของคุณ แต่ด้วยการปกป้องที่คุณได้รับ มันก็คุ้มค่า สำหรับผู้เริ่มต้น อย่าวางระดับความหวาดระแวงไว้สูงเป็นกฎทอง

หลักการทั่วไปที่ดีคือการเรียกใช้กฎที่ตั้งไว้เป็นเวลาสองสามสัปดาห์หรือหลายเดือนโดยแทบไม่มีผลบวกที่ผิดพลาด จากนั้นจึงเพิ่มขึ้น เช่น ความหวาดระแวงระดับ 1 เป็นความหวาดระแวงระดับ 2 ดังนั้นคุณจะไม่ต้องเจอกับปัญหามากมายพร้อมๆ กัน

ไม่รวมแอปพลิเคชันที่ทราบผลบวกเท็จ

ตามค่าเริ่มต้น Modsecurity สามารถอนุญาตการกระทำประจำวันที่นำไปสู่การบวกที่ผิดพลาดได้ดังนี้:

#SecAction \
# "id:900130,\
#  phase:1,\
#  nolog,\
#  pass,\
#  t:none,\
#  setvar:tx.crs_exclusions_cpanel=1,\
#  setvar:tx.crs_exclusions_dokuwiki=1,\
#  setvar:tx.crs_exclusions_drupal=1,\
#  setvar:tx.crs_exclusions_nextcloud=1,\
#  setvar:tx.crs_exclusions_phpbb=1,\
#  setvar:tx.crs_exclusions_phpmyadmin=1,\
#  setvar:tx.crs_exclusions_wordpress=1,\
#  setvar:tx.crs_exclusions_xenforo=1"

เพื่อเปิดใช้งาน ตัวอย่างเช่น WordPress, phpBB และ phpMyAdmin เมื่อคุณใช้ทั้งสามอย่าง ยกเลิกการใส่เครื่องหมายบรรทัด และออกจากไฟล์ (1) หมายเลขเหมือนเดิม เปลี่ยนบริการอื่นๆ ที่คุณไม่ได้ใช้ เช่น Xenforo to (0) เนื่องจากคุณไม่ต้องการอนุญาตกฎเหล่านี้

ตัวอย่างด้านล่าง:

SecAction \
 "id:900130,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.crs_exclusions_cpanel=0,\
  setvar:tx.crs_exclusions_dokuwiki=0,\
  setvar:tx.crs_exclusions_drupal=0,\
  setvar:tx.crs_exclusions_nextcloud=0,\
  setvar:tx.crs_exclusions_phpbb=1,\
  setvar:tx.crs_exclusions_phpmyadmin=1,\
  setvar:tx.crs_exclusions_wordpress=1,\
  setvar:tx.crs_exclusions_xenforo=0"

คุณยังสามารถแก้ไขไวยากรณ์ได้ ซึ่งจะสะอาดกว่า ตัวอย่างเช่น:

SecAction \
 "id:900130,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.crs_exclusions_phpbb=1,\
  setvar:tx.crs_exclusions_phpmyadmin=1,\
  setvar:tx.crs_exclusions_wordpress=1"

อย่างที่คุณเห็น การลบคือตัวเลือกที่ไม่ต้องการและเพิ่ม (“) ที่ส่วนท้ายของ WordPress สำหรับรูปแบบที่ถูกต้อง

ไม่รวมกฎก่อน CRS

ในการจัดการกับการยกเว้นที่กำหนดเอง ก่อนอื่น คุณต้องเปลี่ยนชื่อจาก REQUEST-900-EXCLUSION-RULES-BEFORE-CRS-SAMPLE.conf ไฟล์ด้วย คำสั่ง cp ดังต่อไปนี้:

sudo cp /etc/nginx/modsec/coreruleset-3.4-dev/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /etc/nginx/modsec/coreruleset-3.4-dev/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf

อย่าลืมว่าเมื่อสร้างกฎการยกเว้น กฎแต่ละรายการต้องมีรหัส: และมีเอกลักษณ์เฉพาะตัว ไม่เช่นนั้นเมื่อคุณทดสอบบริการ Nginx คุณจะได้รับข้อผิดพลาด

ตัวอย่าง “id:1544, เฟส:1, บันทึก, อนุญาต, ctl:ruleEngine=off”ไม่สามารถใช้รหัส 1544 สำหรับกฎข้อที่สองได้

ตัวอย่างเช่น REQUEST_URI บางตัวจะทำให้เกิดผลบวกลวง ตัวอย่างด้านล่างมีสองแบบที่มี Google pagespeed beacon และปลั๊กอิน WMUDEV สำหรับ WordPress:

SecRule REQUEST_URI "@beginsWith /wp-load.php?wpmudev" "id:1544,phase:1,log,allow,ctl:ruleEngine=off"

SecRule REQUEST_URI "@beginsWith /ngx_pagespeed_beacon" "id:1554,phase:1,log,allow,ctl:ruleEngine=off"

อย่างที่คุณเห็น URL ใดๆ ที่ขึ้นต้นด้วยพาธจะได้รับอนุญาตโดยอัตโนมัติ

อีกทางเลือกหนึ่งคือการอนุญาตที่อยู่ IP; สองสามวิธีที่คุณสามารถทำได้:

SecRule REMOTE_ADDR "^195\.151\.128\.96" "id:1004,phase:1,nolog,allow,ctl:ruleEngine=off"
## or ###
SecRule REMOTE_ADDR "@ipMatch 127.0.0.1/8, 195.151.0.0/24, 196.159.11.13" "phase:1,id:1313413,allow,ctl:ruleEngine=off"

พื้นที่ @ipMatch สามารถใช้กันอย่างแพร่หลายมากขึ้นสำหรับเครือข่ายย่อย หากคุณต้องการปฏิเสธการเปลี่ยนซับเน็ตหรือที่อยู่ IP ให้อนุญาตให้ปฏิเสธ ด้วยความรู้บางอย่าง คุณสามารถสร้างบัญชีดำและบัญชีขาว และกำหนดค่านี้ด้วย fail2ban ความเป็นไปได้มักจะไม่มีที่สิ้นสุด

ตัวอย่างสุดท้ายคือการปิดใช้งานเฉพาะกฎที่ทริกเกอร์ผลบวกลวง ไม่ใช่แบบครอบคลุมการอนุญาตพิเศษทั้งเส้นทาง ดังที่คุณเห็นในตัวอย่าง REQUEST_URI แรก อย่างไรก็ตาม ต้องใช้เวลาและการทดสอบมากกว่า

ตัวอย่างเช่น หากคุณต้องการลบกฎ 941000 และ 942999 จากคุณ / admin / ในขณะที่มันยังคงทริกเกอร์การแบนและบล็อกที่ผิดพลาดสำหรับทีมของคุณ ค้นหาไฟล์บันทึกการรักษาความปลอดภัยในไฟล์ ID กฎ จากนั้นปิดใช้งานเฉพาะ ID นั้นด้วย RemoveByID ดังตัวอย่างด้านล่าง:

SecRule REQUEST_FILENAME "@beginsWith /admin" "id:1004,phase:1,pass,nolog,ctl:ruleRemoveById=941000-942999"

ตัวอย่างสามารถพบได้ใน ModSecurity GIT วิกิพีเดีย.

WordPress WPRS Rule Set สำหรับ ModSecurity

ตัวเลือกอื่นสำหรับ WordPress ผู้ใช้ต้องติดตั้งและรันควบคู่ไปกับชุดกฎ OWASP CRS ของคุณ ซึ่งเป็นโปรเจ็กต์ที่รู้จักกันดีซึ่งมีชื่อว่าชุดกฎ WPRS เนื่องจากเป็นทางเลือกและไม่ใช่สำหรับทุกคน บทแนะนำจะไม่ครอบคลุมเนื้อหาในส่วนนี้

อย่างไรก็ตาม หากคุณต้องการติดตั้งเพื่อเพิ่มการป้องกันโดยใช้ WordPress บนเซิร์ฟเวอร์ของคุณ โปรดไปที่บทช่วยสอนของเราที่ การติดตั้ง WordPress ModSecurity Rule Set (WPRS).

สร้าง ModSecurity LogRotate ไฟล์

บันทึก ModSecurity สามารถเติบโตได้มากเกินไป ดังนั้นคุณต้องตั้งค่าการหมุนเวียนบันทึกเนื่องจากไม่ได้ทำเพื่อคุณ

ขั้นแรก สร้างและเปิดไฟล์หมุน ModSecurity ของคุณ modsec.

sudo nano /etc/logrotate.d/modsec

เพิ่มรหัสต่อไปนี้:

/var/log/modsec_audit.log
{
        rotate 31
        daily
        missingok
        compress
        delaycompress
        notifempty
}

ซึ่งจะเก็บบันทึกเป็นเวลา 31 วัน หากคุณต้องการให้น้อยลง ให้เปลี่ยน 31 เป็น 7 วัน โดยเท่ากับมูลค่าบันทึกของสัปดาห์ คุณควรหมุนเวียน ModSecurity ทุกวัน หากคุณต้องการตรวจทานล็อกไฟล์ที่มีไฟล์รายสัปดาห์จะเป็นความหายนะที่ต้องกลั่นกรอง โดยพิจารณาจากขนาดไฟล์

ความคิดเห็นและข้อสรุป

โดยรวมแล้ว การปรับใช้ ModSecurity กับเซิร์ฟเวอร์ของคุณจะให้การป้องกันในทันที อย่างไรก็ตาม ความอดทน เวลา และความทุ่มเทในการเรียนรู้จะเป็นคุณสมบัติที่ยอดเยี่ยม สิ่งสุดท้ายที่คุณต้องการคือการบล็อกบอท SEO หรือที่สำคัญกว่านั้นคือผู้ใช้จริงที่อาจเป็นผู้มีโอกาสเป็นลูกค้า

อย่าลืมทดสอบและตรวจสอบบันทึกและอย่าตั้งค่าระดับความปลอดภัยสูงเกินไป ซอฟต์แวร์เหล่านี้สามารถบล็อกการเข้าชมที่ถูกกฎหมายได้อย่างรวดเร็วมาก เช่นเดียวกับซอฟต์แวร์เหล่านี้ และขึ้นอยู่กับว่าเว็บไซต์ของคุณเป็นแหล่งรายได้หรือไม่ อาจมีผลลัพธ์ที่เลวร้าย



ติดตาม LinuxCapable.com!

ต้องการรับการอัปเดตอัตโนมัติหรือไม่ ติดตามเราบนบัญชีโซเชียลมีเดียของเรา!