Неактуально
Неактуально
Неактуально
Здравствуйте друзья.
Имеется игровое приложение l3 по протоколу tcp. На него поступают частые (сотни/тысячи) запросы с подменных IP (т.е. syn-spoof ddos) из-за чего нагрузка приложения на процессор вырастает до 80-100%, а само приложение не успевает обработать все подключения (включая поддельные) и недоступно.
Подскажите пожалуйста, какие меры можно принять для фильтрации поддельных коннектов?
Всем привет. Имеется 2 сервера с 1TB NVME (raid1), 64 гб озу и i9 (16 ядер) в сети hetzner. + 4-5 серверов 32 гб озу, ~200 гб ссд (raid1), i7 (8 ядер) в той же сети
Можно все соединить по switch в панели.
На сколько целесообразно все это объединять в кластер proxmox? Например, чтобы проще было перемещать виртуалки между серверами? Или создавать общие правила фаерволла для серверов? Делать из 3 и более серверов веб-кластер?
Всем привет! Надеюсь не займу много времени, хотел бы разобрать для себя пару вопросов.
Хотел бы сделать сетевое хранилище, используя сервера удаленных дата-центров (например, хезнер), но опасаюсь, что без шифрования все это легко достать.
Рассматриваю варианты шифрования и пока прочел только про шифрование linux-ос при инсталляции и соответственно второй вариант - шифровать все отправляемые данные (например, через truecrypt).
На сколько безопасно и рационально шифровать ОС? Какие есть еще варианты? Что наиболее удобно и разумно?
Большое спасибо за адекватные ответы!
Привет! На одной из VDS созданной с помощью Proxmox использовал команду chmod 777 * чем убил систему VDS.
Есть ли способы восстановить такую VDS, как например, rescue в некоторых дц?
Всем привет! Ежедневно в 21:13 на одном сервере внутри которого 2-4 VDS происходит разрыв соединений на всех VDS.
VDS создаются через proxmox. Началось как-то своим чередом в середине января 2019 года.
В логах messages основного сервера ошибок не видно.
Пока думаю куда копать решил поинтересоваться вашими мнениями)
update: оказывается у меня не один сервер этим страдает, а как минимум 3... У всех proxmox на deb9.*
Привет друзья!
Суть темы: имеется бинарное приложение, которое не имеет проверок на кол-во получаемых пакетов, в следствии чего уязвимо к атакам и перегружается.
В текущий момент стоит боле-менее фильтр на основе размеров пакетов/секунду с одного IP адреса
Вопросы: 1) Можно ли, а если да - то как, сделать ограничение не на IP, а на 1 активное соединение? 2) Можно ли фильтровать не по кол-ву пакетов/секунду, а по длине пакетов/секунду? Например, лимит длины 5000/с, все что выше - reject 3) Ваши идеи, как еще можно ограничить вредоносный трафик на пути к приложению?
Попал в мои руки сервер с сайтом на docker + proxy nginx + apache2 и сам сайт на движке drupal.
Суть проблемы: Многие поисковые боты, ряд пользователей и я не можем зайти в корень сайта. НО, при этом, я легко захожу на файл /test.php в той же директории.
В access.log записи подобные этому:
1.1.1.1 - - [29/Jan/2019:17:55:49 +0100] "GET /article/1-class-2018 HTTP/1.1" 499 0 "https://yandex.ru/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 YaBrowser/19.1.0.2644 Yowser/2.5 Safari/537.36"
В error.log записи подобные этому:
2019/01/28 06:57:17 [error] 11728#0: *6498 upstream timed out (110: Connection timed out) while reading response header from upstream"
Нюанс в том, что: 1) Заходя с пк - у меня лично не входит, заходя с телефона с тем же IP - работает корректно. ??? 2) Со временем проблема входа с пк может исчезнуть, а потом вновь вернутся. 3) Такая проблема наблюдается не более чем у 3-5% посетителей.
nginx 1.14.1, Apache/2.2.15
Привет! Настроил впервые reverse-proxy и ошибка «while reading response header from upstream» Второй день гуглю, ничего не подходит Сколько перебирал значения - тоже не помогает
log_error:
2019/01/23 00:20:03 [error] 8492#0: *155 FastCGI sent in stderr: "PHP message: PHP Notice: Undefined offset: 7 in /usr/share/nginx/domain/domain.ru/www/folder/captcha/kcaptcha.php on line 85
PHP message: PHP Notice: Undefined offset: 4 in /usr/share/nginx/domain/domain.ru/www/folder/captcha/kcaptcha.php on line 85
PHP message: PHP Notice: Undefined offset: 6 in /usr/share/nginx/domain/domain.ru/www/folder/captcha/kcaptcha.php on line 85
PHP message: PHP Notice: Undefined offset: 6 in /usr/share/nginx/domain/domain.ru/www/folder/captcha/kcaptcha.php on line 85" while reading response header from upstream, client: clientip, server: domain.ru, request: "GET /folder/captcha/?PHPSESSID=f5ahqedddlrc7m2oiftql7g21o&tt=0.199709 HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "domain.ru", referrer: "https://domain.ru/folder/register.php"
nginx-proxy:
server {
server_name domain.ru www.domain.ru;
charset UTF-8;
index index.php index.html index.htm;
listen 443 ssl http2;
listen [::]:443 ssl http2;
include "/etc/nginx/server_context.conf";
location /assets {
root /usr/share/nginx/static/mltworld;
#expires max;
}
location / {
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_http_version 1.1;
proxy_pass http://2.2.2.2:80/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header CF-Connecting-IP $remote_addr;
}
#####SSL#####
ssl_certificate "/etc/pki/nginx/cert/www.domain.ru.crt";
ssl_certificate_key "/etc/pki/nginx/private/www.domain.ru.key";
ssl_trusted_certificate "/etc/pki/nginx/pem/www.domain.ru.pem";
include "/etc/pki/nginx/ssl-stapling.conf";
#####SSL#####
}
server-context.conf:
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
#ngx_http_headers_module
add_header X-UA-Compatible "IE=Edge";
#Запрет на открытие в iframe
add_header X-Frame-Options SAMEORIGIN;
###ngx_http_core_module
client_max_body_size 10m;
client_body_buffer_size 16k;
client_header_buffer_size 2k;
large_client_header_buffers 4 8k;
client_body_timeout 60;
client_header_timeout 60;
send_timeout 60;
###ngx_http_proxy_module
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 8k;
proxy_buffers 8 8k;
#proxy_busy_buffers_size 64k; #proxy_buffer_size + proxy_buffers = proxy_busy_buffers_size
#proxy_temp_file_write_size 64k; #proxy_buffer_size + proxy_buffers = proxy_temp_file_write_size
#На proxy не нужна комперссия, тк статик файлы уже сжаты, а другие сжимаются на основном сервере
#include /etc/nginx/gzip-compression.conf;
nginx-web:
#WWW redirection NO WWW
server {
server_name www.domain.ru;
listen 80;
listen [::]:80;
return 301 http://domain.ru$request_uri;
}
server {
server_name domain.ru www.domain.ru;
charset UTF-8;
index index.php index.html index.htm;
disable_symlinks if_not_owner from=$root_path;
access_log /usr/share/nginx/domain/domain.ru/logs/domain.ru.access.log;
error_log /usr/share/nginx/domain/domain.ru/logs/domain.ru.error.log;
set $root_path /usr/share/nginx/domain/domain.ru/www;
root $root_path;
listen 80;
listen [::]:80;
include "/etc/nginx/server_context.conf";
include "/etc/nginx/location_context.conf";
location / {
try_files $uri $uri/ =404;
sla_pass main;
location / {
try_files $uri $uri/ /index.php?$uri&$args;
}
}
include /etc/nginx/php-fpm/default/php-fpm.conf;
}
php-fpm:
location ~ \.php$ {
try_files $uri =404;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_ignore_client_abort off;
#Закрывать ли соединение, если клиент не дождался ответа
#####TEST
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_connect_timeout 150;
fastcgi_send_timeout 150;
fastcgi_read_timeout 150;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
Пошел спать парни впервые за сутки Надеюсь проснусь и вы уже на моем сервере чините мне и настраиваете облачный ДЦ....
В 5.3-7 обновлении proxmox что-то поменяло и теперь в моем веб-интерфейсе не отображаются ноды(узлы) и соответственно создать VM без них невозможно
В левом списке «Датацентр» просто нет никаких нод\узлов и создать не получается. Есть порядка 5 серверов с proxmox на версиях 5.2* и у них все впорядке. + трижды пробовал переустанавливать, думая что вдруг я что-то делаю некорректно.
Кто может подсказать что это за обновление и что с ним делать?
Привет! Есть скриптик, если указать в INPUT директорию, к примеру, /usr/share/nginx - скрипт обработает все подкаталоги и оптимизирует все изображения, НО, он их помещает в папку output
Убирая соответствующую строчку (чтобы не записывало в output), ничего не обрабатывается
Просьба помочь с правкой скрипта
Цель: чтобы скрипт обрабатывал подкаталоги и заменял старые изображения новыми, оптимизированными, не перемещая их в отдельную папку output
#!/bin/bash
PROGNAME=${0##*/}
INPUT=''
QUIET='0'
NOSTATS='0'
max_input_size=0
max_output_size=0
usage()
{
cat <<EO
Usage: $PROGNAME [options]
Script to optimize JPG and PNG images in a directory.
Options:
EO
cat <<EO | column -s\& -t
-h, --help & shows this help
-q, --quiet & disables output
-i, --input [dir] & specify input directory (current directory by default)
-o, --output [dir] & specify output directory ("output" by default)
-ns, --no-stats & no stats at the end
EO
}
# $1: input image
# $2: output image
optimize_image()
{
input_file_size=$(stat -c%s "$1")
max_input_size=$(expr $max_input_size + $input_file_size)
if [ "${1##*.}" = "png" ]; then
optipng -o1 -clobber -quiet $1 -out $2
pngcrush -q -rem alla -reduce $1 $2 >/dev/null
fi
if [ "${1##*.}" = "jpg" -o "${1##*.}" = "jpeg" ]; then
jpegtran -copy none -progressive $1 > $2
fi
output_file_size=$(stat -c%s "$2")
max_output_size=$(expr $max_output_size + $output_file_size)
}
get_max_file_length()
{
local maxlength=0
IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v $OUTPUT)
for CURRENT_IMAGE in $IMAGES; do
filename=$(basename "$CURRENT_IMAGE")
if [[ ${#filename} -gt $maxlength ]]; then
maxlength=${#filename}
fi
done
echo "$maxlength"
}
main()
{
# If $INPUT is empty, then we use current directory
if [[ "$INPUT" == "" ]]; then
INPUT=$(pwd)
fi
# If $OUTPUT is empty, then we use the directory "output" in the current directory
if [[ "$OUTPUT" == "" ]]; then
OUTPUT=$(pwd)/output
fi
# We create the output directory
mkdir -p $OUTPUT
# To avoid some troubles with filename with spaces, we store the current IFS (Internal File Separator)...
SAVEIFS=$IFS
# ...and we set a new one
IFS=$(echo -en "\n\b")
max_filelength=`get_max_file_length`
pad=$(printf '%0.1s' "."{1..600})
sDone=' [ DONE ]'
linelength=$(expr $max_filelength + ${#sDone} + 5)
# Search of all jpg/jpeg/png in $INPUT
# We remove images from $OUTPUT if $OUTPUT is a subdirectory of $INPUT
IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v $OUTPUT)
if [ "$QUIET" == "0" ]; then
echo --- Optimizing $INPUT ---
echo
fi
for CURRENT_IMAGE in $IMAGES; do
filename=$(basename $CURRENT_IMAGE)
if [ "$QUIET" == "0" ]; then
printf '%s ' "$filename"
printf '%*.*s' 0 $((linelength - ${#filename} - ${#sDone} )) "$pad"
fi
optimize_image $CURRENT_IMAGE $OUTPUT/$filename
if [ "$QUIET" == "0" ]; then
printf '%s\n' "$sDone"
fi
done
# we restore the saved IFS
IFS=$SAVEIFS
if [ "$NOSTATS" == "0" -a "$QUIET" == "0" ]; then
echo
echo "Input: " $(human_readable_filesize $max_input_size)
echo "Output: " $(human_readable_filesize $max_output_size)
space_saved=$(expr $max_input_size - $max_output_size)
echo "Space save: " $(human_readable_filesize $space_saved)
fi
}
human_readable_filesize()
{
echo -n $1 | awk 'function human(x) {
s=" b Kb Mb Gb Tb"
while (x>=1024 && length(s)>1)
{x/=1024; s=substr(s,4)}
s=substr(s,1,4)
xf=(s==" b ")?"%5d ":"%.2f"
return sprintf( xf"%s", x, s)
}
{gsub(/^[0-9]+/, human($1)); print}'
}
SHORTOPTS="h,i:,o:,q,s"
LONGOPTS="help,input:,output:,quiet,no-stats"
ARGS=$(getopt -s bash --options $SHORTOPTS --longoptions $LONGOPTS --name $PROGNAME -- "$@")
eval set -- "$ARGS"
while true; do
case $1 in
-h|--help)
usage
exit 0
;;
-i|--input)
shift
INPUT=$1
;;
-o|--output)
shift
OUTPUT=$1
;;
-q|--quiet)
QUIET='1'
;;
-s|--no-stats)
NOSTATS='1'
;;
--)
shift
break
;;
*)
shift
break
;;
esac
shift
done
main
Делаю уведомление об авторизации по ssh себе в телеграмм при помощи zabbix-мониторинга.
Настроил алерт при входе по ssh, отображается. Оповещение в телеграм приходит вида:
SSH authentication on name
SSH session started at 03:52:47 on 2019.01.16
Host: name
Severity: Information
Original ssh session ID: 6507
SSH session started at {EVENT.TIME} on {EVENT.DATE}
Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}
Original ssh session ID: {EVENT.ID}
{TRIGGER.URL}
Сам ssh триггер - ищет в файле /var/log/secure строчки с *sshd*Accepted|closed и при нахождении - делает алерт + записывает в историю
В истории пишется полная строка, включая IP вошедшего, пользователь и тд
Но с выше предоставленным телом письма-оповещения приходит что угодно, только не сама строка лога из /var/log/secure (чтобы удобно было смотреть в уведомлениях IP входа)
Какой макрос нужно заюзать, чтобы в оповещении писалась вся строка лога?
Подскажите кто знает, почему в логах множество записей с протоколом udp и входящим портом 53588?
Настроил фаерволл, в конце фаерволла все цепочки по стандарту DROP и установил логирование всего, что не разрешено:
$IPTABLES -A INPUT -j LOG --log-prefix "INPUT DROP: " --log-level 4
INPUT DROP: IN=ens18 OUT= MAC=00:50:56:00:00:36:0c:86:10:f5:c4:89:08:00 SRC=202.229.143.139 DST=1.1.1.1 LEN=134 TOS=0x00 PREC=0x00 TTL=104 ID=33216 PROTO=UDP SPT=38324 DPT=53588 LEN=114
INPUT DROP: IN=ens18 OUT= MAC=00:50:56:00:00:36:0c:86:10:f5:c4:89:08:00 SRC=14.136.184.57 DST=1.1.1.1 LEN=126 TOS=0x00 PREC=0x00 TTL=54 ID=5336 PROTO=UDP SPT=12146 DPT=53588 LEN=106
INPUT DROP: IN=ens18 OUT= MAC=00:50:56:00:00:36:0c:86:10:f5:c4:89:08:00 SRC=138.19.160.72 DST=1.1.1.1 LEN=129 TOS=0x00 PREC=0x00 TTL=118 ID=25115 PROTO=UDP SPT=12338 DPT=53588 LEN=109
INPUT DROP: IN=ens18 OUT= MAC=00:50:56:00:00:36:0c:86:10:f5:c4:89:08:00 SRC=188.163.116.156 DST=1.1.1.1 LEN=131 TOS=0x00 PREC=0x00 TTL=57 ID=5976 PROTO=UDP SPT=10094 DPT=53588 LEN=111
INPUT DROP: IN=ens18 OUT= MAC=00:50:56:00:00:36:0c:86:10:f5:c4:89:08:00 SRC=178.148.76.111 DST=1.1.1.1 LEN=126 TOS=0x00 PREC=0x00 TTL=119 ID=21012 PROTO=UDP SPT=13004 DPT=53588 LEN=106
INPUT DROP: IN=ens18 OUT= MAC=00:50:56:00:00:36:0c:86:10:f5:c4:89:08:00 SRC=180.44.52.2 DST=1.1.1.1 LEN=145 TOS=0x00 PREC=0x00 TTL=112 ID=1896 PROTO=UDP SPT=35271 DPT=53588 LEN=125
Как видно по логам, все эти не разрешенные запросы стучатся в входящий (порт сервера) порт 53588. Для чего этот порт предназначен и почему они стучатся - найти ответы не могу.
p.s. еще было бы полезно, если бы подсказали как убрать столбик mac из логов, бесполезный
Хотел бы поинтересоваться: есть множество различных правил по проверке валидности пакетов, например
$IPTABLES -A INPUT -m state --state INVALID -j invalid_drop
$IPTABLES -A OUTPUT -m state --state INVALID -j invalid_drop
$IPTABLES -A OUTPUT -p udp --sport 111 -j udp111
$IPTABLES -A INPUT -m pkttype --pkt-type broadcast -j DROP
$IPTABLES -A INPUT -m pkttype --pkt-type multicast -j DROP
## nmap Null scans / no flags
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j portscan_drop
## nmap FIN stealth scan
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN -j portscan_drop
## SYN + FIN
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j portscan_drop
## SYN + RST
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j portscan_drop
## FIN + RST
$IPTABLES -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j portscan_drop
## FIN + URG + PSH
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j portscan_drop
## XMAS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL URG,ACK,PSH,RST,SYN,FIN -j portscan_drop
## ALL
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j portscan_drop
## FIN/PSH/URG without ACK
$IPTABLES -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j portscan_drop
$IPTABLES -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j portscan_drop
$IPTABLES -A INPUT -p tcp --tcp-flags ACK,URG URG -j portscan_drop
Стоит ли уже активным соединениям (ESTABLISHED,RELATED) разрешать пропускать эти и подобные им проверки или же злоумышленники после корректной авторизации могут использовать отсутствие подобных проверок?
Благодарю за разъяснения.
Использую туннели для l3 портов.
Логирую все пакеты на эти порты в messages и получается так, что через туннель проходят пакеты: dstip(клиент) > srcip (туннель) > сервер а потом еще сервер > srcip (туннель) > dstip (клиент)
Дело в том, что мне нет необходимости логировать пакеты от сервера в сторону клиента, а только от клиента в сторону сервера.
Перепробовал множество вариантов, включая попытки добавить подсеть исходящего/входящего трафика к туннелю в разрешенные перед логированием. Все тщетно.
Рассчитываю на помощь!
Всем привет! Хотел уточнить вопрос, буду рад ответам.
Правило разрешающее пакеты для уже установленных соединений
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Долгое время пользуюсь различными windows клиентами, множество профилей серверов и прочее-прочее
Решил попробовать использовать локальный linux (vm) и удаленный linux (vm) для основной работы по ssh.
+ указал ip nameserver в hosts для всех своих серверов - удобно вводить в консоли ssh nameserver + не нужно сильно переживать за постоянные бэкапы, достаточно забэкапить ключ и hosts файл + вместо 10 вкладок постоянно (у меня часто так) висит только 1
- почему-то при 500 мбит каналах - очень долго виснет и грузит. Возможно во время каких-то проблем с сетью проверил, еще жду
Что можете сказать об этом вы? Какие фишки для удобства и безопасности при работе с ssh используете? На сколько мои идеи безопасны с вашего опыта/точки зрения?
Порекомендуйте пожалуйста: Как лучше массово работать с VPS/VDS? Если нужно: 1) Часто устанавливать, к примеру, Centos с своими настройками (веб-сервер, пакеты и прочие мелочи)? 2) Обновлять все эти сервера?
Надоело по десять раз одно и тоже настраивать
Вопрос очень простой. Как сделать на одной vds больше 1 ipip туннеля? ip tunnel add tunnel-2 mode ipip remote 2.2.2.2 local 1.1.1.1 ttl 250
Пишет о том, что «add tunnel „tunl0“ failed: File exists» Интерфейс уже существует. Как указать создание нового, с другим названием - непонятно. Буду благодарен
Здравстуйте. Идет ddos атака на сайт, довольно сильная. Хочу попробовать фильтровать с помощью веб-сервера, но перед тем как фильтровать - все запросы нуждаются в проверке сертификата (SSL). Из-за количества запросов - проверка сертификатом не обслуживает все и соответственно большинство запросов отпадает.
Хотелось бы, чтобы вы подсказали как можно действовать в этой ситуации.
следующие → |