Проблема с тестирование /nwaftest

Adelora

Member
Добрый день!
настроил на одной машине продукт nemezida waf comminity edition согласно данной статье https://nemesida-waf.ru/community/2511
после был произведен тест командой curl -i 127.0.0.1/nwaftest и было все успешно.

Далее принялся настраивать на той же машине согласно по данной статье API https://nemesida-waf.ru/manuals/5611
После чего принялся опять проверять все ли работает. Но появилась данная ошибка и не очень понимаю где произошел конфликт.

Ощущения есть как будто в Nginx, могли бы оказать помощь с решением проблемы. Если нужны какие то логи, готов предоставить.
root@msk-nemezida:/etc/nginx/nwaf# curl -i 127.0.0.1/nwaftest
curl: (7) Failed to connect to 127.0.0.1 port 80 after 0 ms: Connection refused

Сервис поднимался на ОС ubuntu 22.04
 
Добрый день!

Пришлите, пожалуйста:
1. Вывод команды: netstat -lnp
2. Пришлите список и содержимое файлов конфигурации виртуальных хостов в /etc/nginx/conf.d.
3. Воспроизведите проблему и пришлите сообщение из лога /var/log/nginx/error.log

Обратите внимание, что если ваш файл конфигурации виртуального хоста называется default.conf, то при установке компонента Nemesida WAF API/Личный кабинет он будет переименован в default.conf.disabled.
 
1)Вывод команды netstat -lnp

root@msk-nemezida:/home/nemezida# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2695/memcached
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 830/sshd: /usr/sbin
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 920/postgres
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 3949/nginx: master
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 2720/beam.smp
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 756/systemd-resolve
tcp6 0 0 :::4369 :::* LISTEN 1/init
tcp6 0 0 :::22 :::* LISTEN 830/sshd: /usr/sbin
tcp6 0 0 :::5672 :::* LISTEN 2720/beam.smp
udp 0 0 127.0.0.53:53 0.0.0.0:* 756/systemd-resolve
raw6 0 0 :::58 :::* 7 754/systemd-network
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 394137 109681/systemd /run/user/1000/systemd/private
unix 2 [ ACC ] STREAM LISTENING 394144 109681/systemd /run/user/1000/bus
unix 2 [ ACC ] STREAM LISTENING 17750 1/init @/org/kernel/linux/storage/multipathd
unix 2 [ ACC ] STREAM LISTENING 394146 109681/systemd /run/user/1000/gnupg/S.dirmngr
unix 2 [ ACC ] STREAM LISTENING 394148 109681/systemd /run/user/1000/gnupg/S.gpg-agent.browserunix 2 [ ACC ] STREAM LISTENING 394150 109681/systemd /run/user/1000/gnupg/S.gpg-agent.extra
unix 2 [ ACC ] STREAM LISTENING 394152 109681/systemd /run/user/1000/gnupg/S.gpg-agent.ssh
unix 2 [ ACC ] STREAM LISTENING 24586 1636/python3.10 /tmp/pymp-_7uakmjs/listener-jlbunqov
unix 2 [ ACC ] STREAM LISTENING 394154 109681/systemd /run/user/1000/gnupg/S.gpg-agent
unix 2 [ ACC ] STREAM LISTENING 394156 109681/systemd /run/user/1000/pk-debconf-socket
unix 2 [ ACC ] STREAM LISTENING 394158 109681/systemd /run/user/1000/snapd-session-agent.socket
unix 2 [ ACC ] STREAM LISTENING 21574 786/irqbalance /run/irqbalance/irqbalance786.sock
unix 2 [ ACC ] STREAM LISTENING 21309 789/uwsgi /var/www/nw-api/nw-api.sock
unix 2 [ ACC ] STREAM LISTENING 21433 920/postgres /var/run/postgresql/.s.PGSQL.5432
unix 2 [ ACC ] STREAM LISTENING 19315 1/init /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 19317 1/init /run/systemd/userdb/io.systemd.DynamicUser
unix 2 [ ACC ] STREAM LISTENING 19318 1/init /run/systemd/io.system.ManagedOOM
unix 2 [ ACC ] STREAM LISTENING 17748 1/init /run/lvm/lvmpolld.socket
unix 2 [ ACC ] STREAM LISTENING 17753 1/init /run/systemd/fsck.progress
unix 2 [ ACC ] STREAM LISTENING 17764 1/init /run/systemd/journal/stdout
unix 2 [ ACC ] SEQPACKET LISTENING 17767 1/init /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 336953 1/init /run/uuidd/request
unix 2 [ ACC ] STREAM LISTENING 19370 509/systemd-journal /run/systemd/journal/io.systemd.journal
unix 2 [ ACC ] STREAM LISTENING 20746 612/VGAuthService /var/run/vmware/guestServicePipe
unix 2 [ ACC ] STREAM LISTENING 24929 1/init /var/snap/lxd/common/lxd/unix.socket
unix 2 [ ACC ] STREAM LISTENING 21067 1/init @ISCSIADM_ABSTRACT_NAMESPACE
unix 2 [ ACC ] STREAM LISTENING 20944 756/systemd-resolve /run/systemd/resolve/io.systemd.Resolve
unix 2 [ ACC ] STREAM LISTENING 24935 1/init /var/snap/lxd/common/lxd-user/unix.socket
unix 2 [ ACC ] STREAM LISTENING 21063 1/init /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 21072 1/init /run/snapd.socket
unix 2 [ ACC ] STREAM LISTENING 21074 1/init /run/snapd-snap.socket



2) Список файлов вместе с содержимом

default.conf.disables

server {
listen 80;
server_name localhost;

#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

nwaf-api.conf
##########################################
## Nemesida WAF API
##########################################

server {

listen 8080;
root /var/www/html;

client_max_body_size 64M;

uwsgi_read_timeout 600s;
uwsgi_send_timeout 600s;
uwsgi_connect_timeout 120s;
uwsgi_ignore_client_abort on;

location /nw-api/ {
alias /var/www/nw-api/;
include uwsgi_params;
uwsgi_pass unix:/var/www/nw-api/nw-api.sock;
}

}

3) воспроизвожу проблему
root@msk-nemezida:/etc/nginx/conf.d# curl -i 127.0.0.1/nwaftest
curl: (7) Failed to connect to 127.0.0.1 port 80 after 0 ms: Connection refused


2024/04/10 12:24:48 [error] 3951#3951: *1 open() "/var/www/html/favicon.ico" failed (2: No such file or directory), client: 10.0.15.172, server: , request: "GET /favicon.ico HTTP/1.1", host: "10.0.18.211:8080", referrer: "http://10.0.18.211:8080/nw-api/"

2024/04/11 09:03:18 [error] 3951#3951: *6 "/var/www/html/index.html" is not found (2: No such file or directory), client: 10.0.18.39, server: , request: "GET / HTTP/1.1", host: "10.0.18.211:8080"

2024/04/11 09:03:18 [error] 3951#3951: *7 open() "/var/www/html/favicon.ico" failed (2: No such file or directory), client: 10.0.18.39, server: , request: "GET /favicon.ico HTTP/1.1", host: "10.0.18.211:8080"

Последние 3 записи в логах, боюсь что не вижу, что как будто до сюда доходит запрос, но оно я думаю и понятно, соединение сбрасывается при выполнении
 
Last edited:
1)Вывод команды netstat -lnp

root@msk-nemezida:/home/nemezida# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2695/memcached
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 830/sshd: /usr/sbin
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 920/postgres
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 3949/nginx: master
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 2720/beam.smp
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 756/systemd-resolve
tcp6 0 0 :::4369 :::* LISTEN 1/init
tcp6 0 0 :::22 :::* LISTEN 830/sshd: /usr/sbin
tcp6 0 0 :::5672 :::* LISTEN 2720/beam.smp
udp 0 0 127.0.0.53:53 0.0.0.0:* 756/systemd-resolve
raw6 0 0 :::58 :::* 7 754/systemd-network
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 394137 109681/systemd /run/user/1000/systemd/private
unix 2 [ ACC ] STREAM LISTENING 394144 109681/systemd /run/user/1000/bus
unix 2 [ ACC ] STREAM LISTENING 17750 1/init @/org/kernel/linux/storage/multipathd
unix 2 [ ACC ] STREAM LISTENING 394146 109681/systemd /run/user/1000/gnupg/S.dirmngr
unix 2 [ ACC ] STREAM LISTENING 394148 109681/systemd /run/user/1000/gnupg/S.gpg-agent.browserunix 2 [ ACC ] STREAM LISTENING 394150 109681/systemd /run/user/1000/gnupg/S.gpg-agent.extra
unix 2 [ ACC ] STREAM LISTENING 394152 109681/systemd /run/user/1000/gnupg/S.gpg-agent.ssh
unix 2 [ ACC ] STREAM LISTENING 24586 1636/python3.10 /tmp/pymp-_7uakmjs/listener-jlbunqov
unix 2 [ ACC ] STREAM LISTENING 394154 109681/systemd /run/user/1000/gnupg/S.gpg-agent
unix 2 [ ACC ] STREAM LISTENING 394156 109681/systemd /run/user/1000/pk-debconf-socket
unix 2 [ ACC ] STREAM LISTENING 394158 109681/systemd /run/user/1000/snapd-session-agent.socket
unix 2 [ ACC ] STREAM LISTENING 21574 786/irqbalance /run/irqbalance/irqbalance786.sock
unix 2 [ ACC ] STREAM LISTENING 21309 789/uwsgi /var/www/nw-api/nw-api.sock
unix 2 [ ACC ] STREAM LISTENING 21433 920/postgres /var/run/postgresql/.s.PGSQL.5432
unix 2 [ ACC ] STREAM LISTENING 19315 1/init /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 19317 1/init /run/systemd/userdb/io.systemd.DynamicUser
unix 2 [ ACC ] STREAM LISTENING 19318 1/init /run/systemd/io.system.ManagedOOM
unix 2 [ ACC ] STREAM LISTENING 17748 1/init /run/lvm/lvmpolld.socket
unix 2 [ ACC ] STREAM LISTENING 17753 1/init /run/systemd/fsck.progress
unix 2 [ ACC ] STREAM LISTENING 17764 1/init /run/systemd/journal/stdout
unix 2 [ ACC ] SEQPACKET LISTENING 17767 1/init /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 336953 1/init /run/uuidd/request
unix 2 [ ACC ] STREAM LISTENING 19370 509/systemd-journal /run/systemd/journal/io.systemd.journal
unix 2 [ ACC ] STREAM LISTENING 20746 612/VGAuthService /var/run/vmware/guestServicePipe
unix 2 [ ACC ] STREAM LISTENING 24929 1/init /var/snap/lxd/common/lxd/unix.socket
unix 2 [ ACC ] STREAM LISTENING 21067 1/init @ISCSIADM_ABSTRACT_NAMESPACE
unix 2 [ ACC ] STREAM LISTENING 20944 756/systemd-resolve /run/systemd/resolve/io.systemd.Resolve
unix 2 [ ACC ] STREAM LISTENING 24935 1/init /var/snap/lxd/common/lxd-user/unix.socket
unix 2 [ ACC ] STREAM LISTENING 21063 1/init /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 21072 1/init /run/snapd.socket
unix 2 [ ACC ] STREAM LISTENING 21074 1/init /run/snapd-snap.socket



2) Список файлов вместе с содержимом

default.conf.disables

server {
listen 80;
server_name localhost;

#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

nwaf-api.conf
##########################################
## Nemesida WAF API
##########################################

server {

listen 8080;
root /var/www/html;

client_max_body_size 64M;

uwsgi_read_timeout 600s;
uwsgi_send_timeout 600s;
uwsgi_connect_timeout 120s;
uwsgi_ignore_client_abort on;

location /nw-api/ {
alias /var/www/nw-api/;
include uwsgi_params;
uwsgi_pass unix:/var/www/nw-api/nw-api.sock;
}

}

3) воспроизвожу проблему
root@msk-nemezida:/etc/nginx/conf.d# curl -i 127.0.0.1/nwaftest
curl: (7) Failed to connect to 127.0.0.1 port 80 after 0 ms: Connection refused


2024/04/10 12:24:48 [error] 3951#3951: *1 open() "/var/www/html/favicon.ico" failed (2: No such file or directory), client: 10.0.15.172, server: , request: "GET /favicon.ico HTTP/1.1", host: "10.0.18.211:8080", referrer: "http://10.0.18.211:8080/nw-api/"

2024/04/11 09:03:18 [error] 3951#3951: *6 "/var/www/html/index.html" is not found (2: No such file or directory), client: 10.0.18.39, server: , request: "GET / HTTP/1.1", host: "10.0.18.211:8080"

2024/04/11 09:03:18 [error] 3951#3951: *7 open() "/var/www/html/favicon.ico" failed (2: No such file or directory), client: 10.0.18.39, server: , request: "GET /favicon.ico HTTP/1.1", host: "10.0.18.211:8080"

Последние 3 записи в логах, боюсь что не вижу, что как будто до сюда доходит запрос, но оно я думаю и понятно, соединение сбрасывается при выполнении
Обратите внимание, что файл виртального хоста веб-приложения называется default.conf.disabled (что означает, что виртуальный хост деактивирован).
Вывод команды netstat -lnp также говорит о том, что у Nginx не прослушивает 80 порт.

Попробуйте активировать вирутальный хост default.conf, переименовав файл /etc/nginx/conf.d/default.conf.disabled в /etc/nginx/conf.d/default.conf и перезапустите Nginx. Проблема должна будет решиться.
 
Да действительно проблема решилась спасибо.
Подскажите еще как я могу убедится что API который я поднял работает?
на данный момент когда я произвожу тест через запрос curl -i 127.0.0.1/nwaftest - и все работает.

Такой вопрос как я могу проверить работу API ?
Если я верно понимаю, то когда сервер производит какие то действия(будь то блокировка) он передает информацию на API а API Далее передает информацию в ЛК где я могу в графическом интерфейсе увидеть это.

Хотел бы убедится что API работает корректно и могу приступить к настройке ЛК(веб интерфейсу)
 
Добрый день!
мне удалось настроить ЛК (веб интерфейс)
Но внутри меня ожидало 0 хостов, было ощущение, что он может отслеживать сам себя, чтобы я мог проверить его работу тестовыми запросами. Увидеть как в вебинтерфейсе происходят блокировки.

Могли бы мне подсказать. Как я могу добавить хост 127.0.0.1(мой сервер) в ЛК и провести тест командой curl -i 127.0.0.1/nwaftest и увидеть результат в ЛК

Так же планирую свои внутренние подключить через обратный прокси, какой виртуальный хост в Nginx надо редактировать?
 
Last edited:
Да действительно проблема решилась спасибо.
Подскажите еще как я могу убедится что API который я поднял работает?
на данный момент когда я произвожу тест через запрос curl -i 127.0.0.1/nwaftest - и все работает.

Такой вопрос как я могу проверить работу API ?
Если я верно понимаю, то когда сервер производит какие то действия(будь то блокировка) он передает информацию на API а API Далее передает информацию в ЛК где я могу в графическом интерфейсе увидеть это.

Хотел бы убедится что API работает корректно и могу приступить к настройке ЛК(веб интерфейсу)
Не совсем так.

Когда фильтрующая нода (сервер с установленным динамическим модулем) блокирует запрос, информация о блокировке поступает в Nemesida WAF API, а Nemesida WAF API сохраняет эту запись в СУБД PostgreSQL. Личный кабинет уже из соответствующей таблицы в БД запрашивает данные и отображает на странице веб-интерфейса.

Если у вас не отображаются данные о заблокированных запросах в Личном кабинете, то попробуйте выполнить наши рекомендации по устранению данной проблемы: https://nemesida-waf.ru/about/11181#not_displayed
 
Добрый день!
мне удалось настроить ЛК (веб интерфейс)
Но внутри меня ожидало 0 хостов, было ощущение, что он может отслеживать сам себя, чтобы я мог проверить его работу тестовыми запросами. Увидеть как в вебинтерфейсе происходят блокировки.

Могли бы мне подсказать. Как я могу добавить хост 127.0.0.1(мой сервер) в ЛК и провести тест командой curl -i 127.0.0.1/nwaftest и увидеть результат в ЛК

Так же планирую свои внутренние подключить через обратный прокси, какой виртуальный хост в Nginx надо редактировать?
 
Добрый день!
мне удалось настроить ЛК (веб интерфейс)
Но внутри меня ожидало 0 хостов, было ощущение, что он может отслеживать сам себя, чтобы я мог проверить его работу тестовыми запросами. Увидеть как в вебинтерфейсе происходят блокировки.

Могли бы мне подсказать. Как я могу добавить хост 127.0.0.1(мой сервер) в ЛК и провести тест командой curl -i 127.0.0.1/nwaftest и увидеть результат в ЛК

Так же планирую свои внутренние подключить через обратный прокси, какой виртуальный хост в Nginx надо редактировать?
Дополнительно подключать хост для защиты не требуется, достаточно настроить фильтрующую ноду на работу в режиме обратного прокси (https://nemesida-waf.ru/about/11003) и проксировать через нее трафик, предназначенный для вашего хоста.

Чтобы отслеживать заблокированные запросы в Личном кабинете нужно:
1. Настроить работу фильтрующей ноды (сервера с установленным пакетом nwaf-dyn) на блокировку запросов с сигнатурами. Если вы активировали защиту, то при отправке запроса curl -i 127.0.0.1/nwaftest в логе /var/log/nginx/error.log вы увидите запись вида:
Bash:
Nemesida WAF: the request 5274fe3c397782a09b4f1b057e572e21 blocked by rule ID 1 in zone URL, ...

2. Необходимо настроить взаимодействие фильутрующей ноды с Nemesida WAF API (https://nemesida-waf.ru/about/12734). Если взаимодействие настроено, то при отправке запроса с сигнатурой в /var/log/uwsgi/nw-api/nw-api-logging.log появится информация о новой записи вида:

Bash:
Updating description for RuleID 1
Request a9d946493221337236b41a7ad0a3120a (BT: 2, client: 1.1.1.1, server: example.com, WAF ID: 1234567890) received from 2.2.2.2
Обратите внимание, что если у вас все компоненты установлены на одном сервере, то при отправке события о блокировке в Nemesida WAF API, запрос может быть заблокирован повторно фильтрующей нодой т.к. запрос не отправляется на отдельный сервер, передается по этому же серверу. Чтобы избежать лишних блокировок, рекомендуем добавить URL-адрес для обращений к Nemesida WAF API в исключения, используя опцию nwaf_url_wl в файле /etc/nginx.nwaf/conf/global/nwaf.conf.
Пример:
nwaf_url_wl api.example.com/nw-api/*;
где api.example.com - адрес, указанный в опции nwaf_api_conf.

3. Настроить взаимодействие Nemesida WAF API с СУБД PostgreSQL для сохранения информации об атаке. Для этого необходимо создать структуру БД и задать реквизиты доступа к БД в файле конфигурации Nemesida WAF API /var/www/nw-api/settings.py, согласно нашему руководству: https://nemesida-waf.ru/manuals/5611#nw-api-installation

Если необходимые настройки произведены, то вы можете проверить, появилась ли запись об атаке в БД командами:
Bash:
# su postgres
$ psql waf
waf> select * from attack;

Результатом выполнения этих команд будет содержимое таблицы attack, где будут храниться записи о заблокированных запросах. Также из этой же таблицы Личный кабинет запрашивает информацию, чтобы отобразить у себя на странице.
 
Back
Top