نصب ModSecurity در Nginx بر روی ubuntu

سلام

امروز میخام ModSecurity رو روی nginx نصب کنم

همونطوری که میدونید ModSecurity یه فایروال نرم افزاریه که میتونه حملاتی مثله xss , sql … رو تشخیص بده

 

یه سرور ubuntu 16.4 دارم و سرویس ssh روش نصبه . حالا قبل از شروع ubuntu رو بروزرسانی میکنم

apt-get update

پکیج های زیر رو لازم داریم پس نصب میکنیمش

apt-get install -y git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-dev libxml2-dev libcurl4-openssl-dev automake pkgconf

بعد از نصب موفق همه پکیج ها لازم دارم که ModSecurity رو از گیت هاب دانلود کنیم برای nginx

cd /usr/src
git clone -b nginx_refactoring https://github.com/SpiderLabs/ModSecurity.git

وارد دایرکتوری میشیم و نصب ModSecurity و انجام میدیم

cd ModSecurity
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

میریم سراغ پانلود nginx ورژن ۱٫۱۰٫۳

cd /usr/src
wget https://nginx.org/download/nginx-1.10.3.tar.gz
tar -zxvf nginx-1.10.3.tar.gz && rm -f nginx-1.10.3.tar.gz

خوب الان باید نصبش کنیم

cd nginx-1.10.3/
./configure --user=www-data --group=www-data --add-module=/usr/src/ModSecurity/nginx/modsecurity --with-http_ssl_module
make
make install

نباید مشکل خاصی باشه . خوب حالا باید کاربر اصلی nginx رو ویرایش کنیم

sed -i "s/#user  nobody;/user www-data www-data;/" /usr/local/nginx/conf/nginx.conf

اطمینان پیدا کنیم که همه چی خوبه !

/usr/local/nginx/sbin/nginx -t

باید خروجی شبیه زیر باشه

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

مرحله بعدی باید سرویس nginx رو ایجاد کنیم

cat <<EOF>> /lib/systemd/system/nginx.service
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
KillStop=/usr/local/nginx/sbin/nginx -s stop

KillMode=process
Restart=on-failure
RestartSec=42s

PrivateTmp=true
LimitNOFILE=200000

[Install]
WantedBy=multi-user.target
EOF

و باید سرویس رو ریستارت کنیم

systemctl restart nginx.service

فایل config مربوط به nginx رو باز میکنیم و در قسمت location / دو خط زیر رو اضافه میکنیم

vi /usr/local/nginx/conf/nginx.conf
location / {
    ModSecurityEnabled on;
    ModSecurityConfig modsec_includes.conf;
    #proxy_pass http://localhost:8011;
    #proxy_read_timeout 180s;
    root   html;
    index  index.html index.htm;
}

دستور زیر رو وارد میکنیم که ModSecurty فعال بشه روی nginx

cat <<EOF>> /usr/local/nginx/conf/modsec_includes.conf
include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/*.conf
EOF

cp /usr/src/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/ModSecurity/unicode.mapping /usr/local/nginx/conf/
sed -i "s/SecRuleEngine DetectionOnly/SecRuleEngine On/" /usr/local/nginx/conf/modsecurity.conf

باید Rule های ModSecurty رو تنظیم کنیم

cd /usr/local/nginx/conf
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd owasp-modsecurity-crs
mv crs-setup.conf.example crs-setup.conf
cd rules
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

سرویس nginx رو مجدد ریستارت میکنیم . امیدوارم که حادثه بدی رخ نده :))

systemctl start nginx.service

نوبت به تنظیمات فایروال میرسه

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable  

خوب تموم شد دیگه همین بود کلا 😀

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *