Авторская информация о системном администрировании.
#!/bin/bash
# Удаляем список, если он уже есть
ipset -X whitelist
# Создаем новый список
ipset -N whitelist nethash
# Скачиваем файлы тех стран, что нас интересуют и сразу объединяем в единый список
wget -O netwhite http://www.ipdeny.com/ipblocks/data/countries/{ru,ua,kz,by,uz,md,kg,de,am,az,ge,ee,tj,lv}.zone
echo -n "Загружаем белый список в IPSET..."
# Читаем список сетей и построчно добавляем в ipset
list=$(cat netwhite)
for ipnet in $list
do
ipset -A whitelist $ipnet
done
echo "Завершено"
# Выгружаем созданный список в файл для проверки состава
ipset -L whitelist > w-export
Тут я создаю список IP адресов для ipset, а потом использую его в iptables:
iptables -A INPUT -i $WAN -m set --match-set whitenet src -p tcp --dport 80 -j ACCEPT
Если в списке адресов более 1-2 тысяч значений, использовать ipset обязательно. Iptables начнёт отжирать очень много памяти, если загружать огромные списки в него напрямую.
Есть ещё вот такой сервис:
⇨ https://www.ip2location.com/free/visitor-blocker
Там можно сразу конфиг получить для конкретного сервиса: Apache, Nginx, правил Iptables и других. Даже правила в формате Mikrotik есть.
☝ Ссылки рекомендую в закладки забрать.
#iptables #nginx #security #script# apt install fakeroot
Можно запустить:
# fakeroot
И вы как будто сделали sudo su. Появилось приветствие в консоли root:
root@T480:~#
Создаём новый файл и проверяем его права:
# touch file.txt
# ls -la file.txt
-rw-r--r-- 1 root root 0 Jul 26 00:55 file.txt
Как будто мы работаем под root, создавая файлы с соответствующими правами. При этом, если выйти из fakeroot и проверить права этого файла, окажется, что они как у обычного пользователя, под которым мы подключены:
# exit
# ls -la file.txt
-rw-r--r-- 1 zerox zerox 0 Jul 26 00:55 file.txt
Fakeroot перехватывает системные вызовы и возвращает их программе, как будто они выполняются под root. Это может быть полезно только в одном случае. Программа из-за нехватки прав завершает работу с ошибкой. Но при этом нам бы хотелось, чтобы она продолжила свою работу, так как отсутствие некоторых прав для нас некритично.
Поясню на простом примере. Вы делаете бэкап каких-то каталогов и там попадаются файлы, к которым у вас вообще нет прав, даже на чтение. Программа, которая делает бэкап, может остановиться с ошибкой, ругнувшись на отсутствие прав. В таком случае её можно запустить в fakeroot. Она будет считать, что имеет доступ ко всему, что ей надо, хотя реально она не прочитает те файлы, к которым у неё нет доступа, но не узнает об этом.
Я, кстати, с этой ситуацией неоднократно сталкивался. Только мне не нужно было пропускать эти файлы, а наоборот — дать права на чтение, чтобы в архив они в итоге попали. Я специально отслеживал такие моменты. Ну а кому-то нужно было их пропускать. В итоге появилась утилита fakeroot.
⇨ Описание FakeRoot на сайте Debian
#linux #terminal# cat /sys/block/sda/queue/rotational
1
# cat /sys/block/sde/queue/rotational
0
Диск sda — HDD, sde — SSD. Это работает только для железных серверов. То есть параметр буквально указывает, что первый диск с вращением, а второй — без. На основе этих данных ядро системы по возможности избегает одиночного поиска, чтобы лишний раз не дёргать диск. Вместо этого выстраивает запросы в очередь. Для SSD этот механизм становится неактуальным.
В виртуальных машинах могут быть разные значения. Чаще всего они будут показывать, что работают на HDD, если в гипервизоре специально не настроена эмуляция SSD. В Proxmox за это отвечает один из параметров диска — SSD Emulation. Если поставить соответствующую галочку, то виртуалка будет понимать, что работает на SSD. Это имеет смысл делать, хоть и не критично.
Возникает закономерный вопрос, начнёт ли работать технология trim в виртуальной машине, если включена эмуляция SSD. Насколько я смог понять, поискав информацию на эту тему, нет. Включенная эмуляция влияет только на rotational. Trim в виртуальной машине работать по-прежнему не будет.
#железо/dev/urandom или /dev/zero, направляя куда-нибудь их вывод. Вот простой пример:
# while true; do dd if=/dev/urandom count=30M bs=1 \
| bzip2 -9 > /tmp/tempfile ; rm -f /tmp/tempfile ; done
Получилась универсальная нагрузка, которая идёт как на дисковую подсистему, так и на процессор. Изменяя размер файла (30M) и степень сжатия (-9) можно регулировать эту нагрузку. Чем больше размер файла, тем больше нагрузка на диск, чем больше уровень сжатия, тем больше нагрузка на процессор.
Можно только диски нагрузить и проверить скорость записи. Эту команду я постоянно использую, чтобы быстро оценить, с какими дисками я имею дело:
# sync; dd if=/dev/zero of=/tmp/tempfile bs=1M count=1024; sync
Увеличивая размер блока данных (1M) или количество этих блоков (1024) можно управлять характером нагрузки и итоговым объёмом записываемых файлов.
Если хотите нагрузить только CPU, то достаточно вот такой простой конструкции:
# dd if=/dev/zero of=/dev/null
Она загрузит только одно ядро. Для двух можно запустить их в паре:
# cpuload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; \
cpuload; read; pkill dd
Процессы запустятся в фоне, по нажатию Enter в консоли, завершатся. Если у вас нет pkill, используйте killall. Процессор нагрузить проще всего. Можно также использовать что-то типа такого:
# sha1sum /dev/zero
Это так же нагрузит одно ядро. Для нескольких, запускайте параллельно в фоне несколько процессов расчёта. Вот ещё один вариант нагрузки на 4 ядра с ограничением времени. В данном случае 10 секунд:
# seq 4 | xargs -P0 -n1 timeout 10 yes > /dev/null
Причём эта нагрузка будет в большей степени в пространстве ядра. А показанная выше с sha1sum в пространстве пользователя. Пример на 2 ядра:
# seq 2 | xargs -P0 -n1 timeout 10 sha1sum /dev/zero
Если убрать timeout, то нагрузка будет длиться до тех пор, пока вы сами её не остановите по Ctrl-C.
Для загрузки памяти в консоли быстрее всего воспользоваться python3:
# python3 -c 'a="a"*1024**3; input()'
Съели 1G памяти.
#bash #linux #terminal