Linux: Системный администратор
1.92K subscribers
81 photos
8 videos
15 files
25 links
Здесь вы найдете полезные советы, практические материалы и интересные инсайты по администрированию Linux. Погружаемся в мир команд, скриптов и серверов вместе! 🚀

Авторский канал действующего админа 👨🏼‍💻
Download Telegram
💡 Как быстро сбросить зависший SSH-сеанс без ожидания таймаута

Иногда SSH-соединение замирает (например, при потере сети), и попытка закрыть его обычным Ctrl+C не работает. Не жди таймаута — есть правильный способ разорвать зависший сеанс.

🔧 Решение: спец-последовательность OpenSSH

Нажми Enter, затем ~. (тильда + точка) — и SSH сразу завершится:


<Enter>~.


🔍 Как это работает

~. — escape-последовательность, встроенная в OpenSSH-клиент. Работает только в начале новой строки.

👉 Другие полезные комбинации:
- ~? — список доступных escape-команд
- ~# — переслать локальный порт (вручную)
- ~& — фоновый режим

⚠️ Работает только в интерактивных SSH-сессиях, не в скриптах.

🧠 Зачем знать:
- Мгновенное закрытие зависших сессий
- Удобно при обрывах VPN/моб. сети
- Не нужен kill -9 на терминале

Сохрани, пригодится в дороге или на выезде 🚀

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍5
⚠️ systemd-networkd и маршруты: частая ошибка с static routes

Если ты настраиваешь сеть через systemd-networkd и вручную прописываешь маршруты, будь внимателен: непрописанный gateway может сломать всё подключение.

📄 Пример .network файла с правильным static route:


[Match]
Name=eth0

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1

[Route]
Destination=10.10.0.0/16
Gateway=192.168.1.1


🔍 Типичная ошибка:

[Route]
Destination=10.10.0.0/16

Без Gateway или PreferredSource маршрут будет нерабочим или странно себя вести.

📌 Зачем и когда это нужно:
— Когда нужно направить часть трафика (например, к VPN или другим подсетям) в обход основного маршрута.
— systemd сам не всегда умеет «додумать», как доставить пакет, если маршрут не полный.

🧪 Проверь после старта:

networkctl status eth0
ip route show dev eth0


💡Проверяй journalctl -u systemd-networkd — там видно, почему не применились маршруты.

Сохрани, чтобы не отлаживать сеть часами 😬
А ты правильно пишешь [Route]?

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍4
🛡️ Быстрая проверка iptables-правил с логированием трафика

Нужно быстро понять, почему пакет не доходит? Добавь временное логирование в iptables — это упростит отладку.

💡 Шаги:

1. Вставь логирующее правило перед DROP:


iptables -I INPUT -s 192.168.0.100 -j LOG --log-prefix "DROP DEBUG: " --log-level 4


👉 Меняй -s и -j под нужное направление/адрес.

2. Проверь логи (обычно dmesg или syslog):


dmesg | grep "DROP DEBUG"
# или
grep "DROP DEBUG" /var/log/syslog


3. Удалить правило после отладки:


iptables -D INPUT -s 192.168.0.100 -j LOG --log-prefix "DROP DEBUG: " --log-level 4



📌 Зачем и когда:
— Удобно при отладке фаервола, особенно при сложных правилах.
— Можно логировать и FORWARD/OUTPUT.
— Не забудь убрать, чтобы не заспамить логи!

💥 Лайфхак: добавь -m limit чтобы не заливать логи:


-m limit --limit 5/min


🧠 Сохрани, пригодится при разборе сетевых траблов.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍5
🔥 WireGuard через systemd: автоподключение при старте + автоматический рестарт

WireGuard крут, но не всегда подключается сам при перезагрузке. Особенно, если интерфейс поднимается раньше, чем сеть. Решение — systemd-сервис с зависимостями.

📌 Настраиваем правильный автозапуск

1. Создай кастомный systemd unit:

sudo systemctl edit wg-quick@wg0


2. Вставь следующее:

[Unit]
Description=WireGuard via wg-quick for %i
After=network-online.target
Wants=network-online.target

[Service]
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target


3. Перезапусти демон systemd:

sudo systemctl daemon-reexec


4. Включи автозапуск:

sudo systemctl enable wg-quick@wg0


5. Проверь статус:

systemctl status wg-quick@wg0


🧠 Зачем это нужно?

- After=network-online.target гарантирует, что интерфейс поднимется после появления сети.
- Restart=on-failure полезен, если туннель может не подняться с первого раза (например, из-за временного недоступного пира).

⚠️ Без этого юнита туннель часто не поднимается после ребута на headless-серверах.

💡 Совет: проверь DNS внутри туннеля — в wg0.conf можно указать DNS=..., если используешь resolvconf или systemd-resolved.

Сохрани, пригодится 👇

#Linux@linux_odmin #VPN@linux_odmin #Systemd@linux_odmin

👉 @linux_odmin
👍4
💡 WireGuard через IPv6-only VPS с доступом к IPv4-сайтам

Если у тебя есть VPS только с IPv6 (например, Hetzner), но нужно обеспечить выход в IPv4-интернет — этот пост для тебя.

🔧 Настраиваем NAT64 + DNS64 через WireGuard

1. Устанавливаем и настраиваем WireGuard на сервере (IPv6-only VPS):

apt install wireguard


/etc/wireguard/wg0.conf:

[Interface]
Address = fd00::1/64
ListenPort = 51820
PrivateKey = <серверный_приватный_ключ>
PostUp = sysctl -w net.ipv6.conf.all.forwarding=1
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <клиентский_публичный_ключ>
AllowedIPs = fd00::2/128


2. Добавляем NAT64 с Tayga:

apt install tayga


/etc/tayga.conf:

tun-device nat64
ipv4-addr 192.0.2.1
prefix 64:ff9b::/96



mkdir -p /var/spool/tayga
tayga --mktun
ip link set nat64 up
ip addr add 192.0.2.1 dev nat64
ip addr add 64:ff9b::1 dev nat64
ip route add 64:ff9b::/96 dev nat64


3. Настраиваем DNS64 (через bind9 или unbound):
Пример настройки unbound:

apt install unbound

В unbound.conf:

module-config: "dns64 validator iterator"
dns64-prefix: 64:ff9b::/96


4. WireGuard на клиенте:

[Interface]
PrivateKey = <клиентский_ключ>
Address = fd00::2/128

[Peer]
PublicKey = <серверный_ключ>
Endpoint = [IPv6-адрес]:51820
AllowedIPs = ::/0


⚙️ Зачем это?
Так можно использовать дешевый IPv6-only VPS как NAT64-шлюз и обойтись без дорогого IPv4-адреса. Подходит для роутера или ноутбука за CGNAT.

💡 Фишка:
Можно комбинировать с systemd-resolved или dnsmasq для более гибкого DNS64.

💥 Сохрани, пригодится

#Linux@linux_odmin #WireGuard@linux_odmin #Сеть@linux_odmin

👉 @linux_odmin
👍3
Диагностика “висящих” TCP-соединений: как быстро найти виновника

Когда приложение “подвисает”, а сеть вроде работает — проверь состояние TCP-соединений. Часто помогает ss.

Команда:

ss -o state time-wait '( sport = :http or sport = :https )'

Покажет TCP-соединения в TIME-WAIT на 80/443 портах. Много? Возможно, приложение не успевает освобождать сокеты.

А если хочется увидеть, кто держит ESTABLISHED соединения:

ss -tp state established

Флаг -p покажет PID/имя процесса — удобно для отладки.

Ограничь количество TIME-WAIT через sysctl, если сервер под нагрузкой:

sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=15


Когда использовать:
– Приложение “висит” при подключении;
– Подозрение на сетевое истощение ресурсов;
– Нужна быстрая отладка без лишнего софта.

Сохрани, пригодится в бою.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍4
🔐 Fail2Ban для защиты SSH: настройка за 2 минуты

SSH — первая цель сканеров и брутфорсеров. Один fail2ban-джейл — и атаки больше не проблема.

🛠 Минимальная настройка fail2ban для SSH:

1. Установи fail2ban (если ещё нет):


apt install fail2ban # Debian/Ubuntu
dnf install fail2ban # RHEL/AlmaLinux


2. Создай кастомную конфигурацию:


cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local


3. Включи и настрой SSH-защиту в jail.local:


[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # или /var/log/secure на RHEL
maxretry = 5
bantime = 1h
findtime = 10m


4. Перезапусти fail2ban:


systemctl restart fail2ban


5. Проверка работы:


fail2ban-client status sshd


👀 Что это даёт:
– Блокирует IP после нескольких неудачных попыток входа.
– Автоматическая защита от брутфорса 24/7.
– Простая интеграция с iptables/nftables.

💡 Трюк: Используй bantime = 3600m и recidive-джейл для агрессивных нарушителей.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍7
Как быстро сбросить сетевой интерфейс без перезапуска системы

Иногда после правки конфигурации сети нужно *мягко* применить изменения без ребута. Особенно на продакшене.

🔧 Простейший способ — с помощью ip:


ip link set eth0 down
ip addr flush dev eth0
ip link set eth0 up


Что делают эти команды:
- set down — переводит интерфейс в неактивное состояние.
- flush — очищает IP-адреса интерфейса.
- set up — активирует интерфейс заново.

Когда применять:
🔹 После ручной настройки IP через ip/ifconfig;
🔹 После внесения изменений в /etc/network/interfaces, Netplan, systemd-networkd и пр.;
🔹 Для быстрой переинициализации интерфейса без влияния на другие службы.

Трюк: если используется DHCP-клиент (dhclient), можно сразу запросить новый IP:


dhclient -r eth0 && dhclient eth0

(первое — release, второе — новый запрос)

Важно:
- Для виртуальных интерфейсов (vlan, bridge) могут быть дополнительные зависимости!
- После flush интерфейс теряет все адреса — убедись, что автоматика подтянет их обратно.

Итог: Безопасный способ быстро перезагрузить сетевой стек локально.

Сохрани, пригодится! 🚀

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍3
🔧 Быстрая проверка MTU и поиск проблем с фрагментацией в сети

Иногда нестабильная работа приложений или странные задержки в соединении могут быть связаны с неправильным MTU. Как быстро проверить, где «режется» трафик?

Пошагово:

1. Узнайте текущую MTU на интерфейсе:

ip link show eth0

Ищите строку типа: mtu 1500.

2. Проверьте прохождение пакетов с флагом "Don't Fragment":

ping -M do -s 1472 8.8.8.8

(1472 + 28 байт заголовков = 1500 MTU)

3. Если получаете Frag needed and DF set, уменьшайте -s, пока не пройдут пакеты. Например:

ping -M do -s 1464 8.8.8.8


Зачем это нужно:
MTU mismatch приводит к фрагментации, что убивает производительность VPN, TCP и может ронять нестабильные соединения.

Бонус:
Для автоматизации поиска оптимального MTU:

for i in $(seq 1472 -1 1400); do ping -c1 -M do -s $i 8.8.8.8 >/dev/null && echo "MTU=$(($i+28)) OK" && break; done


📌 Проверь свою сеть — иногда это решает кучу «магических» проблем!

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍3
Хотите быстро проверить, через какой интерфейс и IP ваш Linux-сервер выйдет к определённому адресу, без реального подключения?

Решение:
Используйте ip route get — лёгкая команда для диагностики маршрутизации:


ip route get 8.8.8.8


Что покажет:
- Какой IP-адрес будет использоваться для исходящего соединения;
- Какой сетевой интерфейс (dev eth0 и т.д.);
- Какой шлюз (via) задействован.

Пример вывода:

8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10 uid 0


Пояснение:
- Полезно для диагностики проблем с маршрутизацией, VPN, балансировкой каналов.
- Проверка без реальной отправки пакетов: не создаёт нагрузку и не требует открытых портов.

Бонус:
Проверить маршрут сразу для нескольких целей:

for ip in 8.8.8.8 1.1.1.1; do ip route get $ip; done


Важно:
Если у вас настроены policy-based routing (PBR) или VRF, команда тоже отразит их влияние!

Сохрани, пригодится на проде. 🔥

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍6
🔥 Когда tcpdump врёт: ловим только то, что проходит через iptables

Иногда вы запускаете tcpdump, видите трафик — но приложение его не получает. Почему?

📌 tcpdump по умолчанию работает на уровне интерфейса, а не IP-стека. Он видит весь трафик — даже тот, что будет дропнут iptables.

🛠 Как посмотреть только то, что прошло фильтрацию iptables?

1. Создаём временный NFLOG-правилo:


iptables -I INPUT -p tcp --dport 22 -j NFLOG --nflog-group 1


2. Слушаем лог-группу с tcpdump:


tcpdump -i nflog:1 -nn -vv


3. Потом удалим правило:


iptables -D INPUT -p tcp --dport 22 -j NFLOG --nflog-group 1


📎 Что происходит?
Правило направляет пакеты, которые дошли до этой цепочки, в NFLOG. А tcpdump уже читает их после обработки iptables.

Когда применять:
— Отладка проблем доступа
— Проверка, дропает ли iptables нужный трафик
— Точная диагностика без "шума"

⚠️ Не забудьте убрать правило после отладки, иначе лог будет засоряться.

Сохрани, пригодится. Особенно когда "всё открыто, но не работает" 😉

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍7
🔧 Отключаем IPv6 правильно через sysctl — без костылей и багов

В некоторых окружениях (legacy-сети, специфичные firewall policy, старые софты) требуется полностью отключить IPv6. Многие делают это через GRUB (ipv6.disable=1), но это не всегда корректно: интерфейсы всё равно могут получать link-local адреса (fe80::/10), что приводит к неожиданностям.

📌 Надёжный способ — через sysctl:


cat << 'EOF' > /etc/sysctl.d/99-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF

sysctl --system


🔥 Не забудь:
- Если у тебя кастомные интерфейсы (eth0, ens33, и т.д.) — проверь их через sysctl net.ipv6.conf.<iface>.disable_ipv6.
- Также удали ::1 из /etc/hosts, если не нужен loopback IPv6.

📍 Когда применять:
– нет поддержки IPv6 на маршрутизаторах/файрволах;
– жёсткие требования к аудиту/безопасности;
– снижение attack surface.

⚠️ Важно:
Некоторые демоны (например, Postfix, systemd-resolved) могут логировать ошибки при отсутствии IPv6 — проверь логи!

Сохрани, пригодится. А ты полностью отключаешь IPv6?

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍5
💥 Как настроить systemd-networkd для статического IP и маршрутов

Если ты не используешь NetworkManager (например, на серверах), systemd-networkd — отличный выбор. Ниже — минимальная, но рабочая настройка для интерфейса с ручным IP и маршрутами.


📁 Шаг 1: настрой сеть

Создай файл:

/etc/systemd/network/10-static.network


[Match]
Name=ens33

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8

[Route]
Destination=10.10.0.0/16
Gateway=192.168.1.254


💡 Можно добавить несколько [Route] секций, если нужно.


🔧 Шаг 2: включи systemd-networkd и отключи другие менеджеры


systemctl disable --now NetworkManager
systemctl enable --now systemd-networkd
systemctl enable --now systemd-resolved


⚠️ Проверь, что /etc/resolv.conf ссылается на ../run/systemd/resolve/stub-resolv.conf


🔎 Шаг 3: проверь статус и интерфейс


networkctl status ens33
ip a s ens33
ip r



🧠 Когда применять:
— на headless-серверах
— в минималистичных образах
— если хочешь контроль и простоту без NM

🔥 Трюк: systemd-networkd автоматически применяет маршруты из [Route] при поднятии интерфейса — без лишнего скриптинга.

Сохрани, пригодится!

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍4
🧵 Диагностика странных зависаний сетевых соединений: "всё пингуется, но не работает"

💥 Бывает, что ping идёт, но ssh, curl или apt зависают. Проблема может быть в MTU / фрагментации пакетов.


🔍 Проверка: запусти ping с флагами "do not fragment" и максимальным размером пакета:


ping -M do -s 1472 <IP>


Если видишь Frag needed and DF set, MTU слишком большой. Уменьшай -s, пока не дойдёт.

🧠 Пример:

* 1472 + 28 (заголовки IP+ICMP) = 1500 — стандартный MTU
* если пакет не проходит, а проходит только при -s 1392, значит MTU на пути — 1420 (возможно, GRE/IPsec/WireGuard)


🔧 Решение — задай правильный MTU на интерфейсе (или wg):


sudo ip link set dev eth0 mtu 1420


Для WireGuard:


[Interface]
MTU = 1420


Или временно:


sudo wg set wg0 mtu 1420



💡 Когда применять:
– нестабильный VPN
– apt/ssh/rsync "зависает"
– TCP-соединения обрываются при загрузке больших данных
– странное поведение в Docker/K8s с overlay-сетями


Проверка MTU — обязательный шаг в нетипичной сетевой отладке.
Сохрани, пригодится.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍31
🔥 Падает SSH при нестабильной сети?
Вот способ держать сессию живой с помощью ServerAliveInterval.

💡 Решение: настроим клиентский ssh_config


echo "Host *
ServerAliveInterval 30
ServerAliveCountMax 4" | sudo tee -a /etc/ssh/ssh_config


📌 Что это даёт:

* ServerAliveInterval 30 — каждые 30 сек отправляется keep-alive пакет.
* ServerAliveCountMax 4 — если 4 ответа подряд не получено, соединение рвётся.

Это помогает удерживать SSH-сессию при кратковременных потерях связи (Wi-Fi, моб. сеть, нестабильный канал), особенно полезно при работе в tmux/screen.

⚠️ Важно: это клиентская настройка. Для серверной стороны смотри ClientAliveInterval.

🛠 Применяется как глобально, так и в ~/.ssh/config — удобно для отдельных хостов:


Host bastion
HostName 1.2.3.4
ServerAliveInterval 15


Сохрани, пригодится, если работаешь с нестабильными каналами 👨‍💻

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍3
🚨 iptables: как быстро сбросить соединения от IP-нарушителя

Когда в логи сыпется подозрительная активность от одного IP (DOS, скан, brute-force) — не всегда нужно ждать, пока сработает fail2ban. Можно сразу убить соединения и запретить новые.

🔧 Быстрые действия вручную:


# 1. Сбросить активные соединения от IP
conntrack -D -s 1.2.3.4

# 2. Заблокировать весь трафик от него (до перезапуска iptables)
iptables -I INPUT -s 1.2.3.4 -j DROP


📦 Убедитесь, что установлен пакет conntrack (обычно conntrack-tools).



🧠 Зачем и когда:

* моментально разрывает все TCP/UDP-сессии;
* эффективно при атаках с одного IP;
* можно автоматизировать в реакции на события (через fail2ban action, auditd или кастомный watchdog-скрипт).

⚠️ Не забудь внести в постоянные правила, если блок должен сохраниться после ребута (iptables-save / nftables / firewalld).

Сохрани, чтобы не паниковать в следующий инцидент.
А ты conntrack применяешь?

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍43
🔥 Проблема с медленным DNS в systemd-resolved?

Если dig/ping тормозят, а /etc/resolv.conf ссылается на 127.0.0.53 — виноват systemd-resolved. Разберёмся, как ускорить.


🔧 Решение: обходим кэш и выставляем реальные DNS напрямую

1. Посмотрим, что сейчас в конфиге:


resolvectl status


Если там только 127.0.0.53, идём дальше.

2. Пропишем внешние DNS напрямую (например, Cloudflare + Google):


sudo mkdir -p /etc/systemd/resolved.conf.d
echo -e "[Resolve]\nDNS=1.1.1.1 8.8.8.8\nFallbackDNS=9.9.9.9" | sudo tee /etc/systemd/resolved.conf.d/dns_servers.conf


3. Принудительно отвяжем /etc/resolv.conf от systemd-resolved:


sudo rm /etc/resolv.conf
echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" | sudo tee /etc/resolv.conf


4. Перезапускаем resolved (или отключаем совсем):


sudo systemctl restart systemd-resolved
# или полностью отключить:
# sudo systemctl disable --now systemd-resolved



🧠 Зачем это нужно?
systemd-resolved иногда добавляет задержки из-за кэша, DNS-over-TCP и fallback-механик. Ручная настройка ускоряет резолвинг, особенно в minimal-системах и контейнерах.

⚠️ Важно: если используешь NetworkManager, может перезаписывать /etc/resolv.conf. В этом случае — настрой .nmconnection или отключи автоматическое управление DNS.

💡Для временной проверки без изменений в системе:


dig @1.1.1.1 example.com



🔚 Сохрани — пригодится, если резолвинг вдруг начал тормозить.
А ты используешь systemd-resolved или выпилил его?

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍3
🚀 Открой для себя идеальный путь к лидерству с карьерным тестом от ОЭЗ «Алабуга»! 🌟

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

После прохождения теста вы можете заполнить заявку и получить приглашение на эксклюзивную лидерскую программу. Участие в программе открывает реальные перспективы трудоустройства в ОЭЗ «Алабуга», предоставляя шанс начать путь к профессиональному признанию.

Сделайте первый шаг к своему будущему сегодня! Пройдите тест, подайте заявку и начните строить свою карьеру вместе с нами. 🎯
1🔥1🍾1
🔥 Быстрое сканирование открытых портов без nmap

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


#!/bin/bash

HOST="127.0.0.1"
for PORT in {1..1024}; do
timeout 1 bash -c "echo >/dev/tcp/$HOST/$PORT" 2>/dev/null &&
echo "🔓 Порт $PORT открыт"
done


🔍 Этот скрипт:

* Проверяет порты с 1 по 1024
* Использует встроенный механизм bash /dev/tcp
* Показывает только открытые порты
* Работает без установки дополнительных утилит

⚠️ Не забудь про timeout, чтобы не зависнуть на закрытом порту!

Полезно для быстрого аудита или при ограничениях на установку ПО.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍5
🔥 Bash: мониторинг дискового пространства с уведомлением на email

Хочешь узнать, когда место на диске заканчивается, до того как всё рухнет?
Вот простой скрипт, который проверяет использование диска и шлёт письмо, если занято больше 90%.


#!/bin/bash

# Порог в процентах
THRESHOLD=90
# Email для уведомлений
EMAIL="[email protected]"

# Получаем список файловых систем и используемый процент
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output; do
usep=$(echo "$output" | awk '{ print $1}' | sed 's/%//g')
partition=$(echo "$output" | awk '{ print $2 }')

if [ "$usep" -ge "$THRESHOLD" ]; then
echo "ВНИМАНИЕ: На разделе $partition занято ${usep}%." | mail -s "Disk Alert: $partition почти заполнен" "$EMAIL"
fi
done


📌 Настрой в EMAIL свой адрес и добавь в cron, чтобы запускать, например, каждый час.


0 * * * * /path/to/script.sh


#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍2
🔥 Падает VPN через WireGuard после смены IP? Лови решение!

Сценарий: на VPS с WireGuard провайдер даёт динамический IP. После смены — туннель не работает, клиенты отваливаются.
WireGuard не дружит с изменением IP у интерфейса, если не сообщить об этом.

🛠 Решение — автоматическая переинициализация WG при смене IP:

1. Создай wg-rebind.sh:


#!/bin/bash
IFACE="wg0"
IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
wg set "$IFACE" listen-port 51820


2. Сделай исполняемым:


chmod +x /usr/local/bin/wg-rebind.sh


3. Добавь systemd unit:

/etc/systemd/system/wg-rebind.service


[Unit]
Description=Rebind WireGuard after IP change
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/wg-rebind.sh


4. И таймер:

/etc/systemd/system/wg-rebind.timer


[Unit]
Description=Periodic WireGuard rebind

[Timer]
OnBootSec=1min
OnUnitActiveSec=5min

[Install]
WantedBy=timers.target


5. Активируй:


systemctl daemon-reexec
systemctl enable --now wg-rebind.timer


📌 Зачем: WireGuard кэширует IP клиента/сервера. Если IP сменился — трафик идёт в пустоту. Это особенно критично при NAT/CGNAT.

⚠️ Важно: не забудь проброс портов на новом IP, если фаерволл или хостер требуют это вручную.

Сохрани — выручит, когда WG внезапно "падает" после ребута VPS.

#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin

👉 @linux_odmin
👍2