ตัวเชื่อมต่อ ModSecurity-nginx คือจุดเชื่อมต่อระหว่าง nginx และ libmodsecurity (ModSecurity v3) กล่าวอีกนัยหนึ่ง โปรเจ็กต์นี้จัดให้มีช่องทางการสื่อสารระหว่าง nginx และ libmodsecurity ตัวเชื่อมต่อนี้จำเป็นต้องใช้ LibModSecurity กับ nginx
ตัวเชื่อมต่อ ModSecurity-nginx ใช้รูปแบบของโมดูล nginx โมดูลนี้ทำหน้าที่เป็นชั้นของการสื่อสารระหว่าง nginx และ ModSecurity
โปรดสังเกตว่าโปรเจ็กต์นี้ขึ้นอยู่กับ libmodsecurity มากกว่า ModSecurity (เวอร์ชัน 2.9 หรือน้อยกว่า)
เวอร์ชันเก่าใช้ ModSecurity แบบสแตนด์อโลน ซึ่งเป็น wrapper สำหรับ Apache ภายในเพื่อเชื่อมโยง ModSecurity กับ nginx เวอร์ชันปัจจุบันนี้มีความใกล้เคียงกับ nginx มากขึ้น โดยใช้ libmodsecurity ใหม่ซึ่งไม่ต้องพึ่งพา Apache อีกต่อไป ด้วยเหตุนี้ เวอร์ชันปัจจุบันจึงมีการขึ้นต่อกันน้อยลง มีข้อบกพร่องน้อยลง และเร็วขึ้น นอกจากนี้ ยังมีฟังก์ชันการทำงานใหม่บางอย่าง เช่น ความเป็นไปได้ในการใช้การกำหนดค่ากฎสากลพร้อมการปรับแต่งตามไดเร็กทอรี/ตำแหน่ง (เช่น SecRuleRemoveById)
ก่อนที่จะคอมไพล์ซอฟต์แวร์นี้ ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง libmodsecurity แล้ว คุณสามารถดาวน์โหลดได้จากที่เก็บ ModSecurity git สำหรับข้อมูลเกี่ยวกับการรวบรวมและการติดตั้ง libmodsecurity โปรดอ่านเอกสารที่ให้มาด้วย
เมื่อติดตั้ง libmodsecurity แล้ว คุณสามารถดำเนินการติดตั้งตัวเชื่อมต่อ ModSecurity-nginx ได้ ซึ่งเป็นไปตามขั้นตอนการติดตั้งโมดูลของบริษัทอื่น nginx จากไดเรกทอรีต้นทาง nginx:
./configure --add-module=/path/to/ModSecurity-nginx
หรือเพื่อสร้างโมดูลแบบไดนามิก:
./configure --add-dynamic-module=/path/to/ModSecurity-nginx --with-compat
โปรดทราบว่าเมื่อสร้างโมดูลไดนามิก เวอร์ชันต้นทาง nginx ของคุณจะต้องตรงกับเวอร์ชันของ nginx ที่คุณกำลังคอมไพล์
ข้อมูลเพิ่มเติมเกี่ยวกับการสนับสนุนส่วนเสริมของบุคคลที่สามของ nginx มีอยู่ที่นี่: http://wiki.nginx.org/3rdPartyModules
ModSecurity สำหรับ nginx ขยายคำสั่งการกำหนดค่า nginx ของคุณ โดยเพิ่มคำสั่งใหม่ 4 ประการ ได้แก่:
ไวยากรณ์: modsecurity บน | ปิด
บริบท: http, เซิร์ฟเวอร์, ตำแหน่งที่ตั้ง
ค่าเริ่มต้น: ปิด
เปิดหรือปิดฟังก์ชัน ModSecurity โปรดทราบว่าคำสั่งการกำหนดค่านี้ไม่เกี่ยวข้องกับสถานะ SecRule อีกต่อไป แต่ตอนนี้ทำหน้าที่เป็นแฟล็ก nginx เพียงอย่างเดียวเพื่อเปิดหรือปิดใช้งานโมดูล
ไวยากรณ์: modsecurity_rules_file <เส้นทางไปยังไฟล์กฎ>
บริบท: http, เซิร์ฟเวอร์, ตำแหน่งที่ตั้ง
ค่าเริ่มต้น: ไม่
ระบุตำแหน่งของไฟล์คอนฟิกูเรชัน modsecurity เช่น:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
}
ไวยากรณ์: modsecurity_rules_remote
บริบท: http, เซิร์ฟเวอร์, ตำแหน่งที่ตั้ง
ค่าเริ่มต้น: ไม่
ระบุตำแหน่ง (บนอินเทอร์เน็ต) ที่จะดาวน์โหลดไฟล์การกำหนดค่า modsecurity นอกจากนี้ยังระบุคีย์ที่จะใช้ในการตรวจสอบสิทธิ์กับเซิร์ฟเวอร์นั้นด้วย:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
}
}
ไวยากรณ์: modsecurity_rules <กฎ modsecurity>
บริบท: http, เซิร์ฟเวอร์, ตำแหน่งที่ตั้ง
ค่าเริ่มต้น: ไม่
อนุญาตให้รวมกฎ ModSecurity ลงในการกำหนดค่า nginx โดยตรง ตัวอย่างต่อไปนี้กำลังโหลดกฎจากไฟล์และการแทรกการกำหนดค่าเฉพาะต่อไดเร็กทอรี/นามแฝง:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
location /ops {
root /var/www/html/opts;
modsecurity_rules '
SecRuleEngine On
SecDebugLog /tmp/modsec_debug.log
SecDebugLogLevel 9
SecRuleRemoveById 10
' ;
}
}
ไวยากรณ์: สตริง modsecurity_transaction_id
บริบท: http, เซิร์ฟเวอร์, ตำแหน่งที่ตั้ง
ค่าเริ่มต้น: ไม่
อนุญาตให้ส่งรหัสธุรกรรมจาก nginx แทนที่จะสร้างในไลบรารี สิ่งนี้มีประโยชน์สำหรับวัตถุประสงค์ในการติดตาม เช่น พิจารณาการกำหนดค่านี้:
log_format extended ' $remote_addr - $remote_user [ $time_local ] '
'" $request " $status $body_bytes_sent '
'" $http_referer " " $http_user_agent " $request_id ' ;
server {
server_name host1;
modsecurity on;
modsecurity_transaction_id "host1- $request_id " ;
access_log logs/host1-access.log extended;
error_log logs/host1-error.log;
location / {
...
}
}
server {
server_name host2;
modsecurity on;
modsecurity_transaction_id "host2- $request_id " ;
access_log logs/host2-access.log extended;
error_log logs/host2-error.log;
location / {
...
}
}
การใช้ log_format และ modsecurity_transaction_id ร่วมกัน จะทำให้คุณสามารถค้นหาความสัมพันธ์ระหว่างบันทึกการเข้าถึงและรายการบันทึกข้อผิดพลาดได้โดยใช้ตัวระบุเฉพาะตัวเดียวกัน
สตริงสามารถมีตัวแปรได้
ในฐานะโครงการโอเพ่นซอร์ส เราเชิญ (และสนับสนุน) ใครก็ตามจากชุมชนให้มีส่วนร่วมในโครงการของเรา ซึ่งอาจอยู่ในรูปแบบ: ฟังก์ชันใหม่ การแก้ไขข้อบกพร่อง รายงานข้อบกพร่อง การสนับสนุนผู้ใช้สำหรับผู้เริ่มต้น และสิ่งอื่นใดที่คุณยินดีให้ความช่วยเหลือ ขอบคุณ
เราต้องการให้มีแพตช์ของคุณภายในโครงสร้างพื้นฐาน GitHub เพื่ออำนวยความสะดวกในงานตรวจสอบและการบูรณาการ QA ของเรา GitHub มีเอกสารที่ดีเยี่ยมเกี่ยวกับวิธีการดำเนินการ “Pull Requests” ข้อมูลเพิ่มเติมมีอยู่ที่นี่: https://help.github.com/articles/using-pull-requests/
โปรดเคารพรูปแบบการเขียนโค้ดที่ใช้งานอยู่ คำขอพุลสามารถรวมคอมมิตต่างๆ ได้ ดังนั้นควรจัดให้มีการแก้ไขหนึ่งรายการหรือหนึ่งฟังก์ชันต่อคอมมิต อย่าเปลี่ยนแปลงสิ่งใดที่อยู่นอกขอบเขตของงานเป้าหมายของคุณ (เช่น รูปแบบการเขียนโค้ดในฟังก์ชันที่คุณผ่าน)
ภายในโค้ดของเรามีรายการต่างๆ ที่ทำเครื่องหมายเป็น TODO หรือ FIXME ที่อาจต้องดำเนินการจากคุณ ตรวจสอบรายการโดยดำเนินการ grep:
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *
คุณยังอาจดูรายงานข้อบกพร่องล่าสุดและปัญหาที่เปิดอยู่เพื่อให้ทราบว่าเราต้องการความช่วยเหลือประเภทใด
นอกจากการทดสอบด้วยตนเองแล้ว เราขอแนะนำอย่างยิ่งให้คุณใช้ยูทิลิตีการทดสอบ nginx เพื่อให้แน่ใจว่าแพตช์ของคุณจะไม่ส่งผลกระทบในทางลบต่อพฤติกรรมหรือประสิทธิภาพของ nginx
การทดสอบ nginx มีอยู่ที่: http://hg.nginx.org/nginx-tests/
หากต้องการใช้การทดสอบเหล่านั้น ตรวจสอบให้แน่ใจว่าคุณมียูทิลิตี้ Perl พิสูจน์แล้ว (ส่วนหนึ่งของ Perl 5) และดำเนินการตามคำสั่งต่อไปนี้:
$ cp /path/to/ModSecurity-nginx/tests/* /path/to/nginx/test/repository
$ cd /path/to/nginx/test/repository
$ TEST_NGINX_BINARY=/path/to/your/nginx prove .
หากคุณกำลังประสบปัญหาในการทำให้ฟังก์ชันเพิ่มเติมของคุณผ่านการทดสอบ nginx ทั้งหมด โปรดติดต่อเราหรือรายชื่ออีเมล nginx ได้ที่: http://nginx.org/en/support.html
เราเคารพสคีมาการดีบัก nginx การใช้ตัวเลือกการกำหนดค่า "--with-debug" ระหว่างการกำหนดค่า nginx จะเป็นการเปิดใช้งานข้อความแก้ไขข้อบกพร่องของตัวเชื่อมต่อด้วย คอร์ดัมพ์และข้อขัดข้องคาดว่าจะได้รับการดีบั๊กในลักษณะเดียวกับที่ใช้ในการดีบัก nginx สำหรับข้อมูลเพิ่มเติม โปรดตรวจสอบข้อมูลการดีบัก nginx: http://wiki.nginx.org/Debugging
หากคุณกำลังประสบปัญหาการกำหนดค่าหรือมีบางอย่างไม่ทำงานตามที่คุณคาดหวัง โปรดใช้รายชื่ออีเมลของผู้ใช้ ModSecurity เรายินดีต้อนรับปัญหาเกี่ยวกับ GitHub เช่นกัน แต่เราต้องการให้ผู้ใช้ถามคำถามในรายชื่ออีเมลก่อน ซึ่งคุณสามารถเข้าถึงชุมชนทั้งหมดได้ อย่าลืมมองหาปัญหาที่มีอยู่ก่อนที่จะเปิดปัญหาใหม่
สุดท้ายนี้ หากคุณวางแผนที่จะเปิดปัญหาบน GitHub โปรดอย่าลืมบอกเวอร์ชันของ libmodsecurity ของคุณและเวอร์ชันของตัวเชื่อมต่อ nginx ที่คุณกำลังใช้งานอยู่
กรุณาอย่ารายงานปัญหาด้านความปลอดภัยใด ๆ ต่อสาธารณะ โปรดติดต่อเราที่: [email protected] เพื่อรายงานปัญหาแทน เมื่อปัญหาได้รับการแก้ไขแล้ว เราจะให้เครดิตแก่คุณสำหรับการค้นพบนี้
เรายินดีที่จะหารือเกี่ยวกับแนวคิดใดๆ ที่คุณอาจมีเกี่ยวกับคุณลักษณะใหม่ โปรดทราบว่านี่เป็นโครงการที่ขับเคลื่อนโดยชุมชน ดังนั้นอย่าลืมติดต่อชุมชนผ่านรายชื่ออีเมลเพื่อรับข้อเสนอแนะก่อน หรืออีกทางหนึ่ง คุณสามารถเปิดปัญหา GitHub เพื่อขอคุณสมบัติใหม่ได้ ก่อนที่จะเปิดฉบับใหม่ โปรดตรวจสอบว่ามีคำขอคุณลักษณะที่มีอยู่สำหรับฟังก์ชันการทำงานที่ต้องการหรือไม่
การมีแพ็คเกจของเราให้ตรงเวลาเป็นสิ่งที่เราต้องการอย่างมาก แจ้งให้เราทราบหากมีสิ่งใดที่เราสามารถทำได้เพื่ออำนวยความสะดวกในการทำงานของคุณในฐานะผู้บรรจุหีบห่อ