როგორ დააინსტალიროთ ModSecurity 3 Nginx-ით AlmaLinux 9-ზე

ModSecurity, რომელსაც ხშირად მოიხსენიებენ, როგორც Modsec, არის უფასო, ღია კოდის ვებ აპლიკაციის firewall (WAF). ModSecurity შეიქმნა, როგორც მოდული Apache HTTP სერვერისთვის. თუმცა, მისი ადრეული დღეებიდან, WAF გაიზარდა და ახლა ფარავს ჰიპერტექსტის გადაცემის პროტოკოლის მოთხოვნისა და პასუხების ფილტრაციის შესაძლებლობებს სხვადასხვა პლატფორმებისთვის, როგორიცაა Microsoft IIS, Nginx და Apache. ModSecurity-ის მთავარი როლი არის ვებ აპლიკაციების დაცვა შემომავალი ტრაფიკის გაფილტვრით და მავნე მოთხოვნების დაბლოკვით. WAF ასევე შეიძლება კონფიგურირებული იყოს ტრაფიკის მონიტორინგისთვის გარკვეული ტიპის აქტივობებისთვის, როგორიცაა SQL ინექციის შეტევები და აგენერირებს სიგნალებს, როდესაც ასეთი აქტივობა გამოვლინდება. უსაფრთხოების უპირატესობების გარდა, ModSecurity-ს შეუძლია გააუმჯობესოს ვებ ეფექტურობა წესების ქეშირებით და ერთი და იგივე მოთხოვნის განმეორებით დამუშავების აუცილებლობის აღმოფხვრა.

Modsecurity ინსტალაციასთან ერთად, OWASP Core Rule Set (CRS) ჩვეულებრივ გამოიყენება ღია კოდის წესების კომპლექტთან ერთად, რომელიც დაწერილია ModSecurity-ის SecRules ენაზე. CRS დიდი მოწონებით სარგებლობს უსაფრთხოების ინდუსტრიაში და ModSecurity ითვლება ერთ-ერთ ყველაზე ეფექტურ საშუალებად ვებ აპლიკაციების თავდასხმისგან დასაცავად. მიუხედავად იმისა, რომ ModSecurity არ არის ვერცხლის ტყვია, ის არის აუცილებელი ინსტრუმენტი ნებისმიერი ორგანიზაციის არსენალში, რომელიც სერიოზულად ეკიდება ვებ უსაფრთხოებას.

OWASP წესების ნაკრები ModSecurity-ით თითქმის მყისიერად დაგეხმარებათ თქვენი სერვერის დაცვაში.

  • ცუდი მომხმარებლის აგენტები
  • DDoS
  • ვებსაიტის ჯვარედინი სკრიპტირება
  • SQL ინექცია
  • სესიის გატაცება
  • სხვა საფრთხეები

შემდეგ გაკვეთილზე, თქვენ შეისწავლით თუ როგორ დააინსტალიროთ ModSecurity 3 და OWASP Core Rule Set Nginx-ით AlmaLinux 9-ზე, მაგალითად კონფიგურაციებით თავიდან ბოლომდე.

სარჩევი

განაახლეთ AlmaLinux

პირველ რიგში, განაახლეთ თქვენი სისტემა, რათა დარწმუნდეთ, რომ ყველა არსებული პაკეტი განახლებულია.

რეკლამა
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 Repository-ის იმპორტი

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 სტაბილური საცავი

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 მთავარი ხაზი, ასე რომ თქვენ დაგჭირდებათ შემდეგი ბრძანების გაშვება, რათა ჩართოთ ძირითადი საცავი შემდეგნაირად:

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

გაითვალისწინეთ, თუ გსურთ სტაბილური, არ გამოიყენოთ ზემოთ მოცემული ბრძანება და გადადით გაკვეთილის შემდეგ ნაწილზე.

შემდეგი, დააინსტალირეთ Nginx mainline შემდეგნაირად:

sudo dnf install nginx
როგორ დააინსტალიროთ ModSecurity 3 + OWASP Nginx-ით AlmaLinux 9-ზე

როგორც ზემოთ, გაკვეთილი აყენებს Nginx-ის უახლეს მთავარ ვერსიას პირდაპირ 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-ს პირველად, შეიძლება დაგჭირდეთ firewall-ის კონფიგურაცია 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

გადაამოწმეთ წყაროს ვერსია

შემდეგი, ჩამოთვალეთ დირექტორიების ფაილები ls ბრძანება შემდეგნაირად.

ls

მაგალითი გამომავალი თქვენს /usr/src/local/nginx დირექტორია.

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

შემდეგი, დაადასტურეთ, რომ წყაროს პაკეტი იგივეა, რაც თქვენს სისტემაზე დაინსტალირებული Nginx ვერსია, როგორც ზემოთ აღინიშნა.

დააინსტალირეთ libmodsecurity3 ModSecurity-ისთვის

Პაკეტი libmodsecurity3 არის WAF-ის ფუნდამენტური ნაწილი, რომელიც აკეთებს HTTP ფილტრაცია თქვენი ვებ აპლიკაციებისთვის. თქვენ შეადგენთ მას წყაროდან.

იხილეთ ასევე  როგორ დააინსტალიროთ Linux Kernel 6.0 CentOS 9 Stream-ზე | CentOS 8 ნაკადი

კლონი 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 Dependencies

კომპილაციის დაწყებამდე დაგჭირდებათ შემდეგი დამოკიდებულებების დაყენება.

პირველი ამოცანაა EPEL საცავების დაყენება და რეკომენდაცია არის ორივე საცავი.

პირველი, ჩართეთ CRB საცავი.

sudo dnf config-manager --set-enabled crb

შემდეგი, ინსტალაცია თბილი შემდეგის გამოყენებით (dnf) ტერმინალის ბრძანება.

რეკლამა
sudo dnf install \
    https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
    https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm

შემდეგი, გაუშვით შემდეგი ბრძანება, რომ დააინსტალიროთ პაკეტები, რომლებიც დასჭირდება Modsecurity-ს. ეს უნდა მოიცავდეს უმეტეს ვარიანტებსა და ფუნქციებს, რომლებიც შეგიძლიათ გამოიყენოთ Modsecurity-ით და ძირითადი წესების ნაკრებით.

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

შემდეგი, გაუშვით კონფიგურაციის ბრძანება.

sudo ./configure

გაითვალისწინეთ, რომ შესაძლოა დაინახოთ შემდეგი შეცდომა.

fatal: No names found, cannot describe anything.

შეგიძლიათ უსაფრთხოდ უგულებელყოთ ეს და გადახვიდეთ შემდეგ ეტაპზე.

ModSecurity წყაროს კოდის შედგენა

ახლა, როდესაც თქვენ შექმენით და დააკონფიგურირეთ გარემო libmodsecurity3-ისთვის, დროა მისი შედგენა ბრძანებით მიიღოს.

sudo make

მოსახერხებელი ხრიკი არის მითითება -ჯ რადგან ამან შეიძლება მნიშვნელოვნად გაზარდოს კომპილაციის სიჩქარე, თუ თქვენ გაქვთ ძლიერი სერვერი.

მაგალითად, სერვერს აქვს 6 CPU და მე შემიძლია გამოვიყენო ექვსივე ან მინიმუმ 6-დან 4-მდე სიჩქარის გასაზრდელად.

რეკლამა
sudo make -j 6

წყაროს კოდის შედგენის შემდეგ, ახლა გაუშვით ინსტალაციის ბრძანება თქვენს ტერმინალში:

sudo make install

გაითვალისწინეთ, რომ ინსტალაცია ხდება /usr/local/modsecurity/, რომელსაც მოგვიანებით მოგახსენებთ.

დააინსტალირეთ ModSecurity-nginx Connector

ის ModSecurity-nginx კონექტორი არის კავშირის წერტილი nginx-სა და libmodsecurity-ს შორის. ეს არის კომპონენტი, რომელიც ურთიერთობს Nginx-სა და ModSecurity-ს შორის (libmodsecurity3).

კლონი ModSecurity-nginx საცავი 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 კონექტორი მოდული მხოლოდ –თან ერთად დროშა შემდეგნაირად:

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

გამოსავლის მაგალითი, თუ აქამდე ყველაფერი სწორად მუშაობდა:

როგორ დააინსტალიროთ ModSecurity 3 + OWASP Nginx-ით AlmaLinux 9-ზე

არის მიიღოს (შექმენით) დინამიური მოდულები შემდეგი ბრძანებით:

sudo make modules

მაგალითი გამომავალი:

როგორ დააინსტალიროთ ModSecurity 3 + OWASP Nginx-ით AlmaLinux 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 ან სტაბილური, ადგილმდებარეობა იქნება შემდეგი.

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

ჩატვირთეთ და დააკონფიგურირეთ ModSecurity-nginx კონექტორი Nginx-ით

ახლა, როდესაც თქვენ შეადგინეთ დინამიური მოდული და განათავსეთ იგი შესაბამისად, თქვენ უნდა შეცვალოთ თქვენი /და ა.შ/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-ით AlmaLinux 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-ით AlmaLinux 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-ს, 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.რუკა შეიტანეთ ფაილი 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 გამოშვების თეგის გვერდი რომ ნახოთ რა არის უახლესი, რადგან ქვემოთ მოყვანილი მაგალითი შესაძლოა მომავალში შეიცვალოს.

იხილეთ ასევე  როგორ დააინსტალიროთ OpenToonz Ubuntu 22.04 LTS-ზე

პირველი, გადადით თქვენს 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-ით AlmaLinux 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 ძირითადი წესების გამოყენება და გაგება

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.

Anomaly Scoring ზოგადად, მომხმარებლების უმეტესობისთვის, გამოსაყენებლად საუკეთესო რეჟიმია.

პარანოიის ოთხი დონე არსებობს:

  • პარანოია დონე 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 აკრძალული შეცდომა. თუ არა, მაშინ ნაბიჯი გამოტოვებულია.

იხილეთ ასევე  როგორ დააინსტალიროთ ClamAV Fedora 37/36/35-ზე

მაგალითი:

რეკლამა
როგორ დააინსტალიროთ ModSecurity 3 + OWASP Nginx-ით AlmaLinux 9-ზე

ყველაზე გავრცელებული პრობლემა ცვლილებაა მხოლოდ აღმოჩენა to 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 (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

გახსოვდეთ, გამორიცხვის წესების შექმნისას თითოეულ მათგანს უნდა ჰქონდეს ID: და იყავით უნიკალური, წინააღმდეგ შემთხვევაში თქვენ მიიღებთ შეცდომას Nginx სერვისის ტესტირებისას.

მაგალითი "id:1544,phase:1,log,allow,ctl:ruleEngine=off", ID 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 თქვენი /ადმინ/ ზონა, რადგან ის მუდმივად იწვევს თქვენი გუნდის ცრუ აკრძალვებს და ბლოკებს, იპოვეთ თქვენი მოდულის უსაფრთხოების ჟურნალში ფაილი წესის ID და შემდეგ გამორთეთ მხოლოდ ეს ID RemoveByID როგორც ქვემოთ მოყვანილი მაგალითი:

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

მაგალითები შეგიძლიათ იხილოთ ModSecurity GIT-ზე wiki გვერდი.

რეკლამა

WordPress WPRS წესების ნაკრები ModSecurity-ისთვის

კიდევ ერთი ვარიანტი WordPress მომხმარებლებს უნდა დააინსტალირონ და გაუშვან თქვენი OWASP CRS წესების ნაკრები, კარგად ცნობილი პროექტი სახელწოდებით WPRS წესების ნაკრები. ვინაიდან ეს არჩევითია და არა ყველასთვის, სახელმძღვანელო არ მოიცავს მას ამ განყოფილებაში.

თუმცა, თუ გსურთ დააინსტალიროთ ეს დამატებითი დაცვისთვის თქვენს სერვერზე WordPress-ის გამოყენებით, გთხოვთ ეწვიოთ ჩვენს სახელმძღვანელოს WordPress ModSecurity წესების ნაკრების (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 ბოტები ან, რაც მთავარია, რეალური მომხმარებლები, რომლებიც შეიძლება იყვნენ პოტენციური მომხმარებლები.

გახსოვდეთ, რომ შეამოწმოთ და შეამოწმოთ ჟურნალები და არ დააყენოთ უსაფრთხოების დონე ძალიან მაღალი. რამდენადაც კარგია ეს პროგრამული უზრუნველყოფა, მას შეუძლია ძალიან სწრაფად დაბლოკოს ლეგიტიმური ტრაფიკი და, იმისდა მიხედვით, არის თუ არა თქვენი ვებსაიტი შემოსავლის წყარო, შეიძლება გამოიწვიოს დამღუპველი შედეგები.


არა ის, რასაც ეძებდით? სცადეთ მოძებნოთ დამატებითი გაკვეთილები.

დატოვე კომენტარი