Модератор: padonki
Padonak
padonki
Сообщения: 3842 Зарегистрирован: 14 авг 2006, 20:43
Контактная информация:
Сообщение
Padonak » 25 ноя 2022, 12:21
Сей код для того, чтоб не дать возможности подключиться на 22 порт по SSH боле 4 раз за последнюю минуту. Остальные коннекты будут обрываться .
Просто скопировать этот код в командную строку и он сам всё сделает. Если побаловались фаерволом - то идёт проверка каждые три часа, если нет правил, то заново применяцца правила.
Код: Выделить всё
#!/bin/bash
mkdir /root/bin
touch /root/bin/ssh_brutforce.sh
chmod +x /root/bin/ssh_brutforce.sh
touch /root/bin/ssh.sh
chmod +x /root/bin/ssh.sh
cat <<EOCONFIG > /root/bin/ssh_brutforce.sh
#!/bin/sh
iptables -t filter -A INPUT -p tcp --destination-port 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -t filter -A INPUT -p tcp --destination-port 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_BRUTFORCE: "
iptables -t filter -A INPUT -p tcp --destination-port 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
EOCONFIG
cat <<EOCONFIG >> /etc/crontab
# ssh brutforce
* */3 * * * root /root/bin/ssh.sh > /dev/null 2>&1
EOCONFIG
cat <<EOCONFIG > /root/bin/ssh.sh
#!/bin/bash
ssh=`iptables -n -L | grep SSH_BRUTFORCE | awk '{print $27}'`
if [ -z "$ssh" ]; then
cd /root/bin && ./ssh_brutforce.sh
fi
exit
EOCONFIG
Вложения
ssh_brutforce.rar
(280 байт) 72 скачивания
ssh.rar
(234 байт) 69 скачиваний
Моя характеристика с детского сада: Хорошо кушает, спит, гуляет! Прошло много лет, ничего не изменилось.
Padonak
padonki
Сообщения: 3842 Зарегистрирован: 14 авг 2006, 20:43
Контактная информация:
Сообщение
Padonak » 18 сен 2026, 23:13
Код: Выделить всё
#!/bin/bash
#
# ssh_protect.sh — защита SSH от брутфорса через iptables + module recent
#
# Идемпотентный: если правила уже стоят — тихо выходит.
# Рассчитан на запуск из /etc/cron.d раз в 15 минут.
#
# Использование:
# ./ssh_protect.sh — поставить правила (если их нет)
# ./ssh_protect.sh status — показать текущие правила
# ./ssh_protect.sh remove — удалить правила
#
set -euo pipefail
IPTABLES="/sbin/iptables"
PORT="22"
SECONDS_WINDOW="60"
HITCOUNT="4"
LOG_PREFIX="SSH_BRUTFORCE: "
require_root() {
[ "$(id -u)" -eq 0 ] || { echo "Запускать от root." >&2; exit 1; }
}
require_iptables() {
[ -x "$IPTABLES" ] || { echo "Не найден $IPTABLES" >&2; exit 1; }
}
rules_present() {
"$IPTABLES" -n -L INPUT 2>/dev/null | grep -q "$LOG_PREFIX"
}
install_rules() {
if rules_present; then
exit 0 # тихо — это норма для cron
fi
"$IPTABLES" -I INPUT 1 -p tcp --destination-port "$PORT" \
-m state --state NEW \
-m recent --set --name SSH \
-j ACCEPT
"$IPTABLES" -I INPUT 2 -p tcp --destination-port "$PORT" \
-m recent --update --seconds "$SECONDS_WINDOW" --hitcount "$HITCOUNT" \
--rttl --name SSH \
-j LOG --log-prefix "$LOG_PREFIX"
"$IPTABLES" -I INPUT 3 -p tcp --destination-port "$PORT" \
-m recent --update --seconds "$SECONDS_WINDOW" --hitcount "$HITCOUNT" \
--rttl --name SSH \
-j DROP
logger -t ssh_protect "Установлены правила защиты SSH от брутфорса"
}
remove_rules() {
if ! rules_present; then
echo "Правил SSH_BRUTFORCE нет."
return 0
fi
echo "Удаляю правила..."
while rules_present; do
num=$("$IPTABLES" -n -L INPUT --line-numbers \
| grep "$LOG_PREFIX" | head -n1 | awk '{print $1}')
[ -n "$num" ] || break
"$IPTABLES" -D INPUT "$num" 2>/dev/null || true
"$IPTABLES" -D INPUT "$num" 2>/dev/null || true
"$IPTABLES" -D INPUT "$num" 2>/dev/null || true
done
logger -t ssh_protect "Правила защиты SSH удалены"
echo "Готово."
}
show_status() {
echo "=== INPUT ==="
"$IPTABLES" -n -L INPUT --line-numbers 2>/dev/null | head -n 20
}
main() {
require_root
require_iptables
case "${1:-install}" in
install|"") install_rules ;;
remove) remove_rules ;;
status) show_status ;;
*)
echo "Использование: $0 [install|remove|status]" >&2
exit 1
;;
esac
}
main "$@"
Код: Выделить всё
# Защита SSH от брутфорса — проверка и восстановление правил iptables
*/15 * * * * root /root/bin/ssh_protect.sh
Установка одной командой
Код: Выделить всё
# 1. Скрипт
vim /root/bin/ssh_protect.sh
chmod +x /root/bin/ssh_protect.sh
# 2. Поставить правила сразу
/root/bin/ssh_protect.sh
# 3. Cron-задача
cat > /etc/cron.d/ssh_protect <<'EOF'
# Защита SSH от брутфорса — проверка и восстановление правил iptables
*/15 * * * * root /root/bin/ssh_protect.sh
EOF
chmod 644 /etc/cron.d/ssh_protect
# 4. Проверка
/root/bin/ssh_protect.sh status
cat /etc/cron.d/ssh_protect
Моя характеристика с детского сада: Хорошо кушает, спит, гуляет! Прошло много лет, ничего не изменилось.