Подписка на блог

В Telegram отвечаю только по вопросам сотрудничества, в канал за меня постит робот.

В Twitter помимо ссылок на заметки пишу всякую ерунду.

В TJournal и Tumblr есть автоматические трансляции. Если не работает, напишите мне: mihail@podivilov.ru.

По RSS и JSON Feed трансляции для автоматических читалок.

Если хотите, можете подписаться на рассылку или включить push-уведомления.

Обещаю не надоедать и не отправлять рекламу. 😉

10 заметок с тегом

#полезности

Всякая полезная ерунда

 Нет комментариев    20   4 дн   #полезности

Ежедневный личный чек-лист

Хочу поделиться с вами интересной находкой — ежедневным личным чек-листом для выработки привычек.

Полезная штука, сам пользуюсь уже месяца два. При изменении значений автоматически выбирается цвет. Подогнать параметры можно через формулы.

 2 комментария    31   1 мес   #полезности
 Нет комментариев    23   1 мес   #полезности

Полезности: используем RAM в качестве вместилища кэша для Firefox

Это может быть полезно, если вы не используете SSD в качестве вашего основного запоминающего устройства. Предполагается, что кэш Firefox расположен на том же диске, где и установлена операционная система (параметр browser.cache.disk.parent_directory не установлен или указывает на локальное хранилище данных).

Всё волшебство начинается здесь: about:config. Отключаем кэширование данных на диске путём изменения значения вхождения browser.cache.disk.enable на false, а browser.cache.memory.enable — на true.

Элемент browser.cache.memory.capacity позволяет установить ограничение по использованию Firefox оперативной памяти вашего ПК. По умолчанию это значение равно -1, т. е. Firefox будет использовать необходимое ему количество оперативной памяти в зависимости от того, сколько у вас её имеется.

Если будете устанавливать отличное от -1 значение, важно принять во внимание тот факт, что количество памяти в данном случае измеряется в килобайтах.

До изменения конфигурации (фиолетовым отмечено значение параметра iowait):

После изменения конфигурации:

 Нет комментариев    44   4 мес   #полезности

Полезности: делаем резервную копию удалённого жёсткого диска посредством использования netcat

Используйте эти методы резервного копирования только при активном подключении VPN, так как все данные передаются по сети в незашифрованном виде

На удалённой машине:

dd if=/dev/xxx bs=4M | gzip | nc -l 2019

На локальной машине:

nc 192.168.0.1 2019 | gzip -d | sudo dd of=25-12-2019-09-46.img bs=4M

Проверяем резервную копию на наличие ошибок:

e2fsck -f 25-12-2019-09-46.img

Если у вас нет доступа к recovery-режиму, можно попытаться сделать резервную копию содержимого примонтированной файловой системы

На удалённой машине:

tar zcv --exclude=/proc --exclude=/sys / | nc -q 10 -l -p 2019

На локальной машине:

nc -w 10 192.168.0.1 2019 > backup-$(date +%N).tar
 Нет комментариев    112   6 мес   #полезности

Полезности: конфигурация виртуального хоста в Nginx

server {
    listen 443 ssl;

    ssl on;
    ssl_certificate /etc/ssl/example_com/example_com.crt;
    ssl_certificate_key /etc/ssl/example_com/example_com.key;
    ssl_prefer_server_ciphers on;

    root /var/www/example.com;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com;

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }

    error_page 404 /404.html;

    location = /404.html {
      root /var/www/example.com/stub/;
      internal;
    }

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}
 Нет комментариев    201   6 мес   #полезности

Полезности: защищаем сервер с помощью iptables

Перед началом проведения основного этапа настройки выделенного или виртуального сервера необходимо обеспечить его надлежащую защиту на 2-4 уровнях согласно сетевой модели OSI.

В этой публикации я расскажу, как обеспечить базовую защиту своего сервера при помощи инструмента iptables, позволяющего управлять работой межсетевого экрана netfilter.

Шаг 1. Отбрасываем все некорректные пакеты

Сразу хочу обратить внимание, что вплоть до шестого шага мы будем работать с таблицей mangle, основное предназначение которой — классификация и маркировка пакетов и соединений.

В некоторых случаях она также может быть полезна для модификации заголовков пакетов.

Для фильтрации некорректных пакетов нам необходимо выполнить следующую команду:

/sbin/iptables -t mangle -A PREROUTING -m conntrack —ctstate INVALID -j DROP

Здесь флаг -t указывает на таблицу mangle, флаг -A указывает на то, что мы обращаемся к цепочке PREROUTING, которая позволяет модифицировать пакет до принятия решения о маршрутизации.

Аргумент INVALID флага —ctstate указывает на то, что пакет по смыслу должен принадлежать уже установленному соединению (например, ICMP-сообщение port-unreachable), однако такое соединение в системе не зарегистрировано. Поэтому мы с чистой совестью отбрасываем этот пакет.

Шаг 2. Блокируем все попытки открыть входящее TCP-соединение не SYN-пакетом

Дело в том, что попытка установить соединение таким образом может быть либо ошибкой, либо атакой. Соответственно, такие пакеты мы тоже отбрасываем.

/sbin/iptables -t mangle -A PREROUTING -p tcp ! —syn -m conntrack —ctstate NEW -j DROP

Шаг 3. Отбрасываем пакеты с подозрительным значением MSS

Для установления корректной TCP-сессии с удалённым хостом должно соблюдаться следующее условие:
MSS + заголовок TCP + заголовок IP ≤ MTU

Во всех остальных случаях мы можем смело отбрасывать пакеты с некорректным значением MSS:

/sbin/iptables -t mangle -A PREROUTING -p tcp -m conntrack —ctstate NEW -m tcpmss ! —mss 536:65535 -j DROP

Шаг 4. Отбрасываем все пакеты с подделанными флагами

В реальной среде обитания Интернета такое сочетание флагов обычно не встречается, поэтому эти пакеты мы также отбрасываем. Их наличие в системе может свидетельствовать о возможной попытке атаки на сервер.

/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags FIN,SYN FIN,SYN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags FIN,RST FIN,RST -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags FIN,ACK FIN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags ACK,URG URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags ACK,FIN FIN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags ACK,PSH PSH -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags ALL ALL -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags ALL NONE -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags ALL FIN,PSH,URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags ALL SYN,FIN,PSH,URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp —tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

Шаг 5. Отбрасываем все пакеты, пришедшие из сети Интернет с поддельным IP-адресом

Дело в том, что некоторые подсети предназначены исключительно для локального использования.

Таким образом, если к вам на сервер пришёл пакет с интерфейса, который позволяет установить соединение с сетью Интернет, но его IP-адрес относится к локальной подсети, мы его также отбрасываем.

/sbin/iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP

Если пакет пришёл из подсети 127.0.0.0/8, но не с интерфейса lo, мы его тоже отбросим:

/sbin/iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP

Шаг 6. Отбрасываем фрагментированные пакеты во всех цепочках

Это последний шаг, в котором мы будем обращаться к таблице mangle.

Дело в том, что фрагментирование пакетов должно происходить в том случае, если его размер превышает установленный MTU.

В противном случае фрагментированные пакеты с отличным MTU могут указывать на то, что производится попытка атаки типа DoS.

Такие пакеты необходимо отбросить до принятия решения о маршрутизации:

/sbin/iptables -t mangle -A PREROUTING -f -j DROP

Шаг 7. Ограничиваем максимальное количество одновременных подключений с одного IP-адреса

Чтобы предотвратить возможные сценарии атак типа DoS с одного IP-адреса, нам необходимо ограничить максимальное количество одновременных подключений.

Для этого нам необходимо установить произвольное значение флага —connlimit-above:

/sbin/iptables -A INPUT -p tcp -m connlimit —connlimit-above 111 -j REJECT —reject-with tcp-reset

Если количество одновременных подключений с одного IP-адреса достигнет порога в 111, дальнейшие попытки установить соединение будут пресекаться.

Шаг 8. Защищаемся от атаки типа «TCP Reset»

В каждом TCP-пакете внутри определённого соединения присутствуют различные заголовки. Среди них есть бит флага сброса (RST, сокращение от «RESET»).

У большинства пакетов этот бит установлен в 0 и при маршрутизации таких пакетов с ними не требуется проводить никаких дополнительных действий.

Однако если этот бит установлен в 1, то получатель пакета должен немедленно прервать это соединение — он больше не должен посылать в ответ пакеты с текущим идентификатором и на текущий порт, а впоследствии ему также необходимо игнорировать все последующие пакеты этого соединения.

Этот механизм обеспечивает моментальный разрыв соединения TCP. Злоупотребление использованием этого механизма злоумышленником может привести к негативным последствиям — ведь правильно сформированные поддельные пакеты могут быть весьма надёжным способом нарушить любое TCP-соединение, доступное для отслеживания нападающим.

Отбрасываем такие пакеты, если их количество превышает 2 пакета в секунду:

/sbin/iptables -A INPUT -p tcp —tcp-flags RST RST -m limit —limit 2/s —limit-burst 2 -j ACCEPT
/sbin/iptables -A INPUT -p tcp —tcp-flags RST RST -j DROP

Шаг 9. Ограничиваем максимальное количество новых подключений по протоколу TCP для каждого IP-адреса

Для того, чтобы избежать избыточной нагрузки на сервер, необходимо ограничить максимальное количество новых подключений по протоколу TCP для каждого IP-адреса.

Ограничим возможность создания новых сессий TCP для каждого из IP-адресов — по одной новой сессии в секунду:

/sbin/iptables -A INPUT -p tcp -m conntrack —ctstate NEW -m limit —limit 60/s —limit-burst 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m conntrack —ctstate NEW -j DROP

Шаг 10. Если вы используете Cloudflare для проксирования трафика и защиты от атак типа DDoS на портах 80 и 443

Давайте получим список актуальных подсетей Cloudflare, из которых к нам будут приходить пакеты на 80 и 443 порты, а для пакетов, которые пришли из других подсетей, ограничим доступ:

/sbin/iptables -I INPUT -p tcp -m multiport —dports http,https -s 127.0.0.1 -j ACCEPT; for i in `curl -s https://www.cloudflare.com/ips-v4`; do /sbin/iptables -I INPUT -p tcp -m multiport —dports http,https -s $i -j ACCEPT; done
/sbin/ip6tables -I INPUT -p tcp -m multiport —dports http,https -s ::1 -j ACCEPT; for i in `curl -s https://www.cloudflare.com/ips-v6`; do /sbin/ip6tables -I INPUT -p tcp -m multiport —dports http,https -s $i -j ACCEPT; done

Блокируем доступ для пакетов из подсетей, отличных от подсетей Cloudflare:

/sbin/iptables -A INPUT -p tcp -m multiport —dports http,https -j DROP
/sbin/ip6tables -A INPUT -p tcp -m multiport —dports http,https -j DROP

Шаг 11. Защищаем порт SSH от атак типа DoS

Если в течение одной минуты к нам на сервер пришло хотя бы десять запросов для 22 порта, ограничиваем возможность подключения для этого IP-адреса:

/sbin/iptables -A INPUT -p tcp —dport 22 -m conntrack —ctstate NEW -m recent —set
/sbin/iptables -A INPUT -p tcp —dport 22 -m conntrack —ctstate NEW -m recent —update —seconds 60 —hitcount 10 -j DROP

Шаг 12. Защита от сканирования портов с определённого IP-адреса

Веерное сканирование портов может повысить нагрузку на сервер и негативно сказаться на безопасности сервера.

Поэтому давайте попробуем предотвратить такие попытки сканирования портов:

/sbin/iptables -N port-scanning
/sbin/iptables -A port-scanning -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s —limit-burst 2 -j RETURN
/sbin/iptables -A port-scanning -j DROP

Вместо заключения

Эти инструкции носят рекомендательный характер и должны быть скорректированы сетевым администратором под каждый отдельный кейс, если он того требует.

 Нет комментариев    172   6 мес   #полезности