Безопасность

eightbit

New Member
Добрый день!
Скажите, порт 8443 торчит наружу. Он и на веб-морду идет, и на wss. Есть ли какие-то проверенные способы его закрыть. Кто на это наступал уже? Поделитесь опытом.
 

Max

Administrator
Staff member
Добрый день.

На веб-интерфейс идут порты 8081 HTTP и 8444 HTTPS.
На вебсокеты идут порты 8080 WS, 8443 WSS.

Все порты конфигурируемы через настройки.
Например, в продакшене можно указать порт 443 WSS вместо 8443 WSS.

Все лишние порты можно закрыть на iptables.
Code:
iptables -A INPUT -p tcp -m tcp --dport 8443 -j ACCEPT
Все используемые порты перечислены здесь:
 

eightbit

New Member
Добрый день.

На веб-интерфейс идут порты 8081 HTTP и 8444 HTTPS.
На вебсокеты идут порты 8080 WS, 8443 WSS.

Все порты конфигурируемы через настройки.
Например, в продакшене можно указать порт 443 WSS вместо 8443 WSS.

Все лишние порты можно закрыть на iptables.
Code:
iptables -A INPUT -p tcp -m tcp --dport 8443 -j ACCEPT
Все используемые порты перечислены здесь:

Все описанное выше было понятно. Но порты все равно останутся открыты. То есть, просканировав порты и сервисы, любой хакер может воспользоваться открытыми портами и устраивать конференции через наш сервер. Можно ли использовать какую-то систему типа basic auth, или защите на основе токена, чтобы ограничить действия злоумышленника?
 
Last edited:

Max

Administrator
Staff member
Можно ограничить доступ пользователей к WCS по имени домена, токену или паролю.
С веб страницы, которая обращается к WCS, могут быть переданы имя домена, токен, пароль или любая другая информация.
На основе этой информации бекенд сервер может принимать решение об аутентификации и сообщать WCS серверу допустимо ли соединение.

Подробнее
 

eightbit

New Member
Спасибо за ответ. Но у нас пока бекенд сервер не реализован.

Могу ли я спрятать wss за nginx и сделать на нем basic auth, чтобы при подключении была авторизация? Мы браузером передадим на него логин/пароль. Да - это будет не очень надежно, но хоть какая-то защита будет.

Был бы признателен за любую подсказку.
 

Max

Administrator
Staff member
Могу ли я спрятать wss за nginx и сделать на нем basic auth, чтобы при подключении была авторизация?
Да, такая схема работы возможна.
Логин и пароль для авторизации можно передать в строке обращения к WSS в таком виде
Code:
wss://login:password@host:port
port - значение не обязательное, если nginx у вас будет на стандартном порту.

Конфиг nginx для http соединения будет примерно таким (ниже секция http файла nginx.conf):

Code:
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
# включение Basic Auth   
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    
    include /etc/nginx/conf.d/*.conf;
    
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  v3;
        root         /var/www;

       include /etc/nginx/default.d/*.conf;

        location / {
        proxy_pass http://localhost:8080; # имя сервера и порт для WS
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
        
    }
}
 
Top