/
/
Интеграция Imunify 360 WAF с ispmanager 6

Интеграция Imunify 360 WAF с ispmanager 6

Подготовка панели ispmanager 6

Обратите внимание!

Интеграция выполняется только с веб-сервером LiteSpeed.

В панели ispmanager 6 в разделе Конфигурация ПО для веб-сервера установите компонент WAF.

После этого создайте пользователя панели с именем imunifyui. Для пользователя создайте сайт, на котором будет доступен веб-интерфейс Imunify360, например imunify360.example.com. Удалите все файлы из домашней директории сайта и создайте каталог im360.

Установка и настройка Imunify360

Важно!

Для установки Immunify 360 потребуется скачать файлы из официального репозитория CloudLinux.

Подключитесь к серверу по SSH и убедитесь, что на сервере установлена утилита nc.

Затем на сервере создайте каталог /etc/sysconfig/imunify360/generic/. Загрузите в каталог /etc/sysconfig/imunify360 данный скрипт get-panel-info.sh.

Добавьте следующие строки перед строкой с комментарием #Cockpit:

# ispmanager
        elif check_port "$host" 1500; then
            name="ISPmanager"

Сделайте загруженный скрипт исполняемым:

chmod +x /etc/sysconfig/imunify360/get-panel-info.sh

Если сервер находится за NAT, измените значение переменной local host на локальный IP-адрес сервера.

Проверьте работу скрипта get-panel-info.sh:

bash /etc/sysconfig/imunify360/get-panel-info.sh

Создайте python-скрипт по пути /etc/sysconfig/imunify360/ispmanager_integration.py со следующим содержимым:

Python-скрипт ispmanager_integration.py

#!/usr/bin/env python3
"""
Imunify integration script for ISPManager.
Collects users and domains with mgrctl and
prints data appropriate to be consumed by imunify on stdout.

integration.conf example:
[integration_scripts]
...
users = /etc/sysconfig/imunify360/ispmanager_integration.py users
domains = /etc/sysconfig/imunify360/ispmanager_integration.py domains
...


Return codes:
0 - ok
1 - runtime error (e.g. mgrctl is missing, or can't parse its output, ...),
   see more in metadata['error'] and metadata['message']
2 - script usage error (e.g. wrong args)
"""
from subprocess import check_output
import argparse
import json
import pwd
import re
import sys


def get_ispmgr_data(section):
   assert section in ('user', 'webdomain')
   ispmgr_output = check_output([
       '/usr/local/mgr5/sbin/mgrctl',
       '-m',
       'ispmgr',
       section,
   ]).decode().split('\n')
   return [
       dict(re.findall(r'(\w+)=(\S*)', line))
       for line in ispmgr_output
       if len(line) > 0
   ]


def get_domains():
   domains = {}
   data = get_ispmgr_data('webdomain')
   for entry in data:
       domain = entry['name']
       domain_info = {
           'document_root': entry['docroot'],
           'owner': entry['owner'],
       }
       domains[domain] = domain_info
   return domains


def get_users():
   users = []
   data = get_ispmgr_data('user')
   for entry in data:
       username = entry['name']
       users.append({
           'id': pwd.getpwnam(username).pw_uid,
           'username': username,
       })
   return users


def main():
   parser = argparse.ArgumentParser()
   parser.add_argument(
       dest='cmd', choices=(
           'users',
           'domains'
       )
   )
   args = parser.parse_args()
   result = {
       'data': {},
       'metadata': {
           'result': 'ok'
       }
   }
   try:
       retval = 0
       if args.cmd == 'domains':
           cmd_result = get_domains()
       elif args.cmd == 'users':
           cmd_result = get_users()
   except Exception as e:
       result['metadata']['result'] = e.__class__.__name__
       result['metadata']['message'] = str(e)
       retval = 1
   else:
       result['data'] = cmd_result
   finally:
       print(json.dumps(result))
       return retval


if __name__ == "__main__":
   sys.exit(main()) 

После чего сделайте его исполняемым:

chmod +x /etc/sysconfig/imunify360/ispmanager_integration.py

Затем проверьте работу скрипта:

python3 /etc/sysconfig/imunify360/ispmanager_integration.py users
python3 /etc/sysconfig/imunify360/ispmanager_integration.py domains

Следующим шагом создайте файл integration.conf со следующим содержимым:

Конфигурационный файл integration.conf

#This is integration.conf example that requires adjustments, oterwise IM360 may not work.
#Values are given purely as an example and may not represent your environment.

#The path to the WEB server directory for Imunify360 files
[paths]
ui_path = /var/www/imunifyui/data/www/imunify360.example.com/im360
ui_path_owner = imunifyui:imunifyui

#which PAM service Imunify360 should use
[pam]
service_name = system-auth

#Malware Scanner base directory and patterns
[malware]
basedir = /var/www/
pattern_to_watch = ^/var/www/(vhosts|html)(/.*)?$
#basedir = /home
#pattern_to_watch = ^/home/.+?/(public_html|public_ftp|private_html)(/.*)?$


#WEB server type and commands
[web_server]
#server type apache/nginx/litespeed
server_type = apache
graceful_restart_script = /usr/bin/systemctl restart lsws
config_test_script = /usr/sbin/apachectl -t
#path to ModSecurity audit logs
modsec_audit_log = /var/log/httpd/modsec_audit.log
modsec_audit_logdir = /var/log/modsec_audit

#Limiting users and provide context for IM360 mechanisms
[integration_scripts]
admins = /etc/sysconfig/imunify360/get-admins-script.sh
users = /etc/sysconfig/imunify360/ispmanager_integration.py users
domains = /etc/sysconfig/imunify360/ispmanager_integration.py domains
#Domain-specific ModSecurity configuration (to disable rules using CLI)
#modsec_domain_config_script = /path/to/inject/domain/specific/config/script.sh

Для переменной ui_path укажите путь до домашней директории вашего сайта с поддоменом imunify360.

Переместите конфигурационный файл в каталог Imunify360:

mv integration.conf /etc/sysconfig/imunify360/

Создайте файл для ModSecurity:

touch /etc/sysconfig/imunify360/generic/modsec.conf

В основном файле конфигурации Apache по пути /etc/apache2/apache2.conf (для RHEL-based систем путь - /etc/httpd/conf/httpd.conf) укажите путь до этого файла:

IncludeOptional /etc/sysconfig/imunify360/generic/modsec.conf

Скачайте скрипт установки и запустите его:

wget https://repo.imunify360.cloudlinux.com/defence360/i360deploy.sh
bash i360deploy.sh --key %КЛЮЧ_ЛИЦЕНЗИИ%

Если сервер управляется Debian-based системой, то для работы WAF потребуется дополнительно внести изменения в часть файлов.

Сначала переименуйте файл modsecurity.conf-recommended:

mv /etc/modsecurity/modsecurity.conf{-recommended,}

Затем в файле по пути /etc/modsecurity/modsecurity.conf замените значение параметра SecRuleEngine на On. После, в файле /etc/apache2/mods-enabled/security2.conf раскомментируйте строку IncludeOptional /etc/modsecurity/*.conf.

После внесения изменений, перезапустите службу lsws:

service lsws restart

Проверить корректность работу WAF можно следующей командой:

curl 'http://exapmle.com/?q="><script>alert(123)</script>'

Панель Imunify360 будет доступна по адресу https://imunify360.example.com/im360/ под пользователем root.

Отключение базовых правил WAF

Если вы хотите использовать только правила от Imunify360, необходимо внести изменения в конфигурацию Apache.

Для Debian-based систем в файле по пути /etc/apache2/mods-enabled/security2.conf закомментируйте строку IncludeOptional /etc/modsecurity/*.conf, а в следующей строке после параметра SecDataDir впишите строку SecRuleEngine On.

Для RHEL-based систем в файле по пути /etc/httpd/conf.d/mod_security.conf закомментируйте следующей строки:

  • IncludeOptional modsecurity.d/*.conf
  • IncludeOptional modsecurity.d/activated_rules/*.conf
  • IncludeOptional modsecurity.d/local_rules/*.conf

После внесения изменений перезапустите веб-сервер:

service lsws restart