Helcode | Хелкод | Скрипты и автоматизация
993 subscribers
52 photos
34 links
☎️ Контакты для связи: @helcodeadm
Download Telegram
Как найти все битые ссылки в системе?

"Мёртвые" симлинки — тихие убийцы свободного места

Битые символьные ссылки (symlinks) не только бесполезны, но и могут сломать скрипты. Найдём и удалим их!

🛠 Bash-команда для поиска:
find /path/to/search -type l ! -exec test -e {} \; -print  



🛠 PowerShell-вариант:
Get-ChildItem -Path C:\ -Recurse -Force -ErrorAction SilentlyContinue |  
Where-Object { $_.Attributes -match "ReparsePoint" -and !(Test-Path $_.FullName) }



🛠 Что дальше?
- Удалить: find ... -delete (осторожно!).
- Заменить на актуальные пути.

А вы часто сталкиваетесь с битыми ссылками?

P.S. Если find ничего не нашёл — либо у вас идеальная система, либо вы искали не там.


🌐 @automate_today | #bash #powershell
👍2
Вы уверены, что ваш cron работает?

🤔 Cron не запускается? Вот где искать проблемы

Если ваш cron молчит, как рыба, вот чек-лист для проверки:

1. Проверьте логи:

   grep CRON /var/log/syslog  



2. Перезапустите cron:

   sudo service cron restart  



3. Проверьте переменные окружения (cron их не видит!):

   * * * * * echo $PATH > /tmp/cron_test.txt  



3. Проверьте права:

   chmod +x /path/to/script.sh  



🛠 Используйте crontab.guru для проверки синтаксиса расписания.

А какие грабли с cronом вас больно били?

P.S. Если cron всё ещё не работает, возможно, он просто вас не любит. Или вы забыли >> /dev/null 2>&1? 😅


🌐 @automate_today | #bash
3
YAML — это новый XML?

YAML: удобный или слишком сложный?

YAML кажется простым, пока не попробуешь написать в нём что-то сложнее key: value.

👉 Пример "просто YAML":
server:  
ports:
- 80
- 443
environment: production



🚨 А вот где начинается боль:
# Это число или строка?  
version: 3.14

# А это?
version: "3.14"

# Многострочный текст с | и >
description: |
Это
многострочный
текст



Почему YAML критикуют?
- Слишком много способов сделать одно и то же.
- Ошибки отступов (как в Python, но без явного синтаксиса).
- Неявное приведение типов ("123" vs 123).

А что вам больше нравится — YAML, JSON, TOML или старый добрый XML?

P.S. Если YAML — это новый XML, то TOML — это новый INI. И так до бесконечности. 🔄


🌐 @helcode | #yaml
👍3
Как автоматизировать переключение VPN при утечке DNS

VPN включён, но DNS сливается? Пора это исправить!

Даже если трафик идёт через VPN, DNS-запросы могут "просачиваться" через ваш провайдер. Вот как автоматически переключать VPN при утечке.

🛠 Решение на Linux (bash + OpenVPN)
#!/bin/bash  

VPN_INTERFACE="tun0"
DNS_SERVER="10.8.0.1" # DNS вашего VPN

while true; do
CURRENT_DNS=$(resolvectl | grep 'Current DNS Server' | awk '{print $4}')
if [ "$CURRENT_DNS" != "$DNS_SERVER" ]; then
echo "Утечка DNS! Перезапускаю VPN..."
systemctl restart openvpn
fi
sleep 60 # Проверка каждую минуту
done



🛠 Решение на Windows (PowerShell)
$VPNInterface = "Ethernet 2"  # Имя интерфейса VPN  
$CorrectDNS = "10.8.0.1"

while ($true) {
$CurrentDNS = (Get-DnsClientServerAddress -InterfaceAlias $VPNInterface).ServerAddresses
if ($CurrentDNS -notcontains $CorrectDNS) {
Write-Host "Обнаружена утечка DNS! Переподключаю VPN..."
Restart-Service -Name "OpenVPNService"
}
Start-Sleep -Seconds 60
}



Что ещё можно сделать?
- Использовать DNS over HTTPS (DoH) для дополнительной защиты.
- Настроить kill-switch в настройках VPN.

А вы проверяете, не "светится" ли ваш реальный IP при работе с VPN?

P.S. Если скрипт постоянно перезапускает VPN, возможно, проблема не в DNS, а в самом VPN-сервере. 🕵️‍♂️


🌐 @helcode | #bash #powershell
👍21
Скрипт для мгновенного развертывания honeypot

Хотите поймать злоумышленников? Разверните honeypot за 5 минут!

🍯 Honeypot ("медовая ловушка") имитирует уязвимый сервис, чтобы записывать атаки.

⚙️ Простейший honeypot на Python (HTTP-сервер с логом)
from http.server import BaseHTTPRequestHandler, HTTPServer  
import datetime

class HoneypotHandler(BaseHTTPRequestHandler):
def do_GET(self):
ip = self.client_address[0]
print(f"[{datetime.datetime.now()}] Попытка доступа от {ip} к {self.path}")
self.send_response(404)
self.end_headers()

server = HTTPServer(('0.0.0.0', 8080), HoneypotHandler)
print("Honeypot запущен на порту 8080...")
server.serve_forever()



🦾 Усложнённый вариант (с записью в файл)
nohup python3 honeypot.py > attacks.log 2>&1 &  



Что можно улучшить?
- Добавить Telegram-уведомления при атаке.
- Развернуть Cowrie (имитация SSH-сервера).

А вы когда-нибудь разворачивали honeypot? Какие инструменты использовали?

P.S. Если ваш honeypot начал "ловить" вас самого, возможно, вы забыли сменить порт. 😅


🌐 @helcode | #python #bash
👍2
Как тихо собрать все метаданные в сети

Passive recon: собираем данные, не привлекая внимания

Прежде чем тестировать безопасность сети, нужно разведать её структуру. Вот как сделать это незаметно.

Сбор информации без сканирования (Linux)
# 1. ARP-таблица (уже подключённые устройства)  
arp -a

# 2. DNS-записи (если есть доступ)
dig example.com ANY

# 3. Слушаем сетевой трафик (только заголовки)
tcpdump -i eth0 -nn -c 100 'port 53 or port 80'



PowerShell-версия (Windows)
# 1. ARP-кэш  
Get-NetNeighbor

# 2. Активные подключения
Get-NetTCPConnection | Where-Object { $_.State -eq "Established" }

# 3. DNS-кэш
Get-DnsClientCache



❗️Важно:
- Не нарушайте законы! Используйте только в своей сети или с разрешения.
- Для этичного тестирования лучше Nmap (nmap -sS -T4 192.168.1.0/24).

Какие инструменты для сбора метаданных вы считаете самыми эффективными?

P.S. Если tcpdump ничего не показывает, проверьте, не блокирует ли брандмауэр трафик.


🌐 @helcode | #bash #powershell
🔥4🤔2
Скрипт для автоматического обновления всех зависимостей

"Апдейты — это скучно" — сказал каждый, пока не сломался prod

Ручное обновление зависимостей — это риск забыть что-то важное. Давайте автоматизируем!

Для Python (pip)

#!/bin/bash  

# Обновляем pip
pip install --upgrade pip

# Обновляем все пакеты
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U

# Проверяем, не сломалось ли что-то
pytest tests/



Для Node.js (npm)
npx npm-check-updates -u  
npm install
npm test



➡️ Дополнительные фичи:
- Уведомления в Telegram при критических обновлениях.
- Откат, если тесты не проходят.

А вы обновляете зависимости вручную или автоматически?

P.S. Если после npm install всё сломалось, вспомните, что package-lock.json существует не просто так. 😬


🌐 @helcode | #bash
👍31
Скрипт для автоудаления старых логов

Старые логи могут заполнить сервер, если их не удалять. Простое решение — find + cron.

Bash-скрипт (удаляет логи старше 30 дней)
#!/bin/bash  
LOG_DIR="/var/log"
find "$LOG_DIR" -type f -name "*.log" -mtime +30 -delete



Добавляем в cron (ежедневно в 3:00)
0 3 * * * /path/to/clean_logs.sh  



Варианты:
- Сжимать логи перед удалением (gzip).
- Исключить важные логи (-not -name "important.log").

Как вы чистите логи? Удаляете, архивируете или отправляете в SIEM?

P.S. Если find ругается на права, попробуйте sudo или настройте logrotate.


🌐 @helcode | #bash
👍6
🔧 Helcode | Хелкод | Скрипты и автоматизация

Друзья, у нас важные новости!

Мы долго работали над улучшением наших решений, и теперь пришло время сделать следующий шаг. Наша группа меняет название - теперь мы Helcode (от help + code), но остаёмся верными своей миссии: давать Вам интересный контент, делиться кейсами и полезными инструментами для автоматизации.

Почему Helcode?
⚙️ Яснее суть - код, который реально помогает в работе
⚙️ Больше масштаб - готовим новые продукты и сервисы
⚙️ Тот же контент - ещё больше скриптов, инструкций и готовых решений

Это не просто смена названия - это наш рост вместе с Вами!

💬 Как вам новое имя? Поделитесь Вашим мнением!
👌6👍5🥴1
Как проверить доступность порта?

Telnet, Netcat, Curl — что быстрее?

🧑‍💻 Проверить, открыт ли порт, можно десятком способов. Вот самые популярные.

telnet (если есть)
telnet example.com 80  


Плюсы: просто.
Минусы: нет таймаута, не везде установлен.

nc (Netcat)
nc -zv example.com 443  


Плюсы: быстро, есть таймаут (-w 5).
Минусы: требует установки.

curl (для HTTP/HTTPS)
curl -I http://example.com:80  


Плюсы: проверяет именно HTTP-ответ.
Минусы: только для веба.


Какой ваш любимый способ проверить порт?

P.S. Если все три метода не работают, возможно, firewall вас ненавидит.



🌐 @helcode | #bash
👍5
Одноразовый HTTP-сервер за 1 команду

Нужно срочно передать файл? Поднимаем сервер за секунду!

Python 3
python3 -m http.server 8000  



Ruby
ruby -run -e httpd . -p 8000  



PHP
php -S 0.0.0.0:8000  



⚙️ Использование:
- Раздача файлов в локальной сети.
- Быстрый тест HTML-страницы.

❗️Важно:
Не оставляйте такой сервер надолго — он не защищён!

Какой вариант вам удобнее?

P.S. Если порт 8000 занят, попробуйте 8080. Или 80, если есть права.


🌐 @helcode | #bash
🔥3
NoSQL — почему это не всегда хорошо?

NoSQL (MongoDB, Redis) — не панацея. Вот когда PostgreSQL лучше:

1. Нужны сложные JOIN-запросы
NoSQL не поддерживает JOIN в классическом виде.

2. Транзакции
PostgreSQL:
BEGIN;  
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT;


MongoDB: много документные транзакции сложнее.

3. ACID-гарантии
Если данные должны быть точными (банк, медсистемы), реляционные БД надёжнее.

В каких проектах вы предпочитаете NoSQL, а где — SQL?

P.S. Если MongoDB — это свобода, то PostgreSQL — это правила. И то, и другое нужно.


🌐 @helcode | #sql
👍4
Как работать с массивами в bash?
Циклы, сортировка, поиск — всё для массивов в bash


1. Создание массива
fruits=("Яблоко" "Груша" "Апельсин")  



2. Доступ к элементам
echo ${fruits[0]}  # Яблоко  
echo ${fruits[@]} # Все элементы



3. Цикл по массиву
for fruit in "${fruits[@]}"; do  
echo "Фрукт: $fruit"
done



4. Фильтрация
# Только элементы с буквой "а"  
printf '%s\n' "${fruits[@]}" | grep "а"



Часто ли вы используете массивы в bash-скриптах?

P.S. Если скрипт работает не так, проверьте кавычки: "${array[@]}" и ${array[*]} — это не одно и то же!


🌐 @helcode | #bash
👍61
Автоматическое обновление Windows-серверов

Модуль PSWindowsUpdate позволяет апдейтить серверы без RDP.

1. Установка модуля
Install-Module -Name PSWindowsUpdate -Force  



2. Проверка обновлений
Get-WindowsUpdate  



3. Установка (с перезагрузкой, если нужно)
Install-WindowsUpdate -AcceptAll -AutoReboot  



4. Добавляем в планировщик
Register-ScheduledJob -Name "AutoUpdate" -ScriptBlock {  
Install-WindowsUpdate -AcceptAll -AutoReboot
} -Trigger (New-JobTrigger -Weekly -At "3:00 AM")



❗️Важно:
- Тестируйте обновления в dev-среде!
- Можно исключить конкретные KB (-NotKBArticleID "KB1234567").

Как вы обновляете Windows-серверы? WSUS, SCCM или скрипты?

P.S. Если после обновления что-то сломалось, вините Patch Tuesday.


🌐 @helcode | #powershell
👍3
Скрипт, который автоматически находит и убивает процессы-зомби

🧟 «Зомби» едят память? Пора их остановить!

Зомби-процессы (со статусом Z) — это завершённые процессы, но ещё не закрытые родителем.

⚙️ Bash-скрипт для поиска и убийства
#!/bin/bash  

# Ищем зомби-процессы
zombies=$(ps aux | awk '{if ($8=="Z") print $2}')

if [ -z "$zombies" ]; then
echo "Зомби не найдены. Все чисто!"
else
echo "Найдены зомби: $zombies"
kill -9 $zombies
fi



Как добавить в cron?
*/10 * * * * /path/to/kill_zombies.sh  



Часто ли вы сталкиваетесь с зомби-процессами?

P.S. Если зомби возвращаются, возможно, проблема в родительском процессе. Ищите root cause!


🌐 @helcode | #bash
👍6
Темная сторона cron: 5 скрытых опасностей

Cron кажется простым, пока не сломает продакшн

1. Переменные окружения
Cron не знает ваш $PATH! Всегда указывайте полные пути:
0 * * * * /usr/bin/python3 /scripts/backup.py  



2. Перенаправление вывода
Без > /dev/null 2>&1 cron будет слать письма на локальную почту.

3. Блокировки (race conditions)
Если скрипт работает дольше интервала, запустятся две копии. Решение:
flock -n /tmp/script.lock /scripts/script.sh  



4. Разные шеллы
Cron использует /bin/sh, а не ваш любимый bash. Тестируйте так:
/bin/sh -c "/scripts/test.sh"  



5. Неправильное время
Cron живёт в UTC, а не в вашем часовом поясе. Проверяйте:
TZ=Europe/Moscow date  



Какие грабли с cronом вас больно били?

P.S. Если cron молчит, проверьте /var/log/syslog — там обычно есть ответ.


🌐 @helcode | #bash
👍31
Автоматизация пентеста: сканирование уязвимостей в один клик

🔓 Хотите проверить свою сеть? Автоматизируем поиск дыр!

1. Быстрое сканирование открытых портов (Nmap)
nmap -sV -T4 192.168.1.0/24 -oN scan.txt  



2. Проверка уязвимостей (Nikto для веба)
nikto -h http://example.com -output vuln.html  



3. Автоматический отчёт (сборка в HTML)
nmap -sV --script=vulners -oX scan.xml 192.168.1.1  
xsltproc scan.xml -o report.html



❗️Важно:
- Делайте только с разрешения!
- Для автоматизации используйте Metasploit Framework или OpenVAS.

Какие инструменты для пентеста вы используете чаще всего?

P.S. Если Nmap ругается на права, попробуйте sudo или nmap -Pn.


🌐 @helcode | #bash
👍5
Скрипт, который автоматически пишет вам оправдания

Генератор случайных "технических" оправданий для начальства. Пост шуточный, всерьез не воспринимайте :)

Python-скрипт
import random  

excuses = [
"Это баг в библиотеке, уже фиксят.",
"Коллега задеплоил без тестов.",
"DNS-кеш.",
"Виноват рефакторинг.",
"Это фича, а не баг.",
]

print(random.choice(excuses))



Bash-версия
#!/bin/bash  

excuses=(
"Это баг в библиотеке, уже фиксят."
"Коллега задеплоил без тестов."
"DNS-кеш."
)

echo ${excuses[$RANDOM % ${#excuses[@]}]}



Какое ваше любимое "техническое" оправдание?

P.S. Если скрипт выдаёт одно и то же, проверьте $RANDOM. Или вините кеш.


🌐 @helcode | #python #bash
👍2
Сколько стоит ваш час? Экономика автоматизации

📖 Миф: «Написание скриптов не окупается».

👉 Реальность: выгода — не только в скорости. Вот что вы упускаете:
1. Когнитивная нагрузка — не нужно запоминать шаги.
2. Цена ошибки — один баг в ручном процессе может стоить дорого.
3. Масштабируемость — ручная работа = линейные затраты, скрипт = 0.

⚙️ Пример:
Скрипт для бэкапа (2 часа на разработку) vs ручное копирование (1 час в день).
Через неделю — экономия 5 часов!

Сколько времени тратите на рутину? Давайте прикинем выгоду от автоматизации.

🌐 @helcode
👍7💯1
Идеальный скрипт: 6 обязательных элементов

Хотите, чтобы скрипты жили долго и не ломались? Добавьте:
1. Метаинформацию (автор, версия) — иначе через месяц забудете, зачем это.
2. Обработку ошибок — if ! command; then exit 1; fi.
3. Логирование — logger -t "скрипт начался".
4. Параметры — THRESHOLD_DAYS=${1:-7}.
5. Документацию — хотя бы комментарии.
6. Тесты — хотя бы «сухой прогон».

Шаблон для Bash:
#!/bin/bash  
# Автор: Вася Пупкин
# Версия: 1.1
# Назначение: Чистит логи старше N дней

LOG_DIR="/var/log"
DAYS=${1:-30} # Параметр по умолчанию

if ! find "$LOG_DIR" -name "*.log" -mtime +$DAYS -delete; then
echo "Ошибка удаления! Проверьте права." >&2
exit 1
fi



Какой элемент кажется вам самым сложным?

🌐 @helcode | #bash
👍4🔥21