Хтось сказав мені, що це можливо, але я не можу знайти нічого на сторінках Google або man.
Мені потрібно заборонити IP-адреси протягом певного часу, а потім автоматично заборонити.
Хтось сказав мені, що це можливо, але я не можу знайти нічого на сторінках Google або man.
Мені потрібно заборонити IP-адреси протягом певного часу, а потім автоматично заборонити.
Відповіді:
Якщо ви маєте на увазі для iptables повністю видалити це правило, ви не зможете це зробити, наскільки я знаю. Яка мета цього? Якщо вам потрібна якась автоматична тимчасова заборона, стандартне рішення не є2 .
Крім того, ви можете використовувати cron завдання, щоб видалити додане вами правило, а ще краще, якщо ви хочете робити це в інтерактивному режимі at
:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
Погляньте також на recent
модуль iptables. Це з його --seconds
варіантом може допомогти, залежно від ваших реальних потреб. man iptables
для отримання додаткової інформації.
/bin/sh
за замовчуванням. Але це, мабуть, не буде проблемою в цьому випадку.
Поставте коментар із позначкою часу (можливо, секунд з епохи) у правилах. Періодично підмітайте правила, що минули.
Зауважте, що найновіше ядро Linux має підтримку динамічного завантаження IP-адрес у кеш, з якими звертаються правила iptable, а не як прямі правила iptables.
Приклад:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
Звичайно, iptables -D INPUT $1
замість того, щоб надрукувати команду.
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
там, де правила зроблені на кшталт:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
iptables має метод автоматичного додавання IP-адрес до списку, якщо дотримуються визначені користувачем умови. Я використовую наступне, щоб уникнути автоматизованих спроб злому в моєму порту ssh:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
Це допомагає обмежити автоматизовані спроби отримати доступ до сервера, обмеживши спроби з'єднання з однієї і тієї ж IP адреси однією кожні 60 секунд.
Якщо ви хочете дозволити задану кількість спроб у часовій рамці, наприклад, 4 за 5 хвилин, а після відмови, а потім у чорному списку їх протягом більш тривалого періоду, наприклад 24 години, ви можете зробити щось на кшталт:
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
У вищесказаному ми створюємо 2 ланцюги; "ssh" і "black", і 2 списки; "таймер" і "чорний список".
Коротко; останній ланцюг, показаний вище, - це «дверний проріз» у ssh ланцюг.
Параметр "--reap" вказує ядру здійснювати пошук за списком та очищення будь-яких елементів, які є старшими встановленого часового обмеження; 5 хвилин для списку "таймер" та 24 години для списку "чорний список".
зауважте: додаткові пробіли призначені для читання та є необов’язковими для вашого сценарію оболонки.
IPTables має чітко для цього функцію: IP Set. Ви робите правило один раз, і воно зберігається як завжди, але воно перевіряє набір ips (або портів) на відповідність. Прикольне те, що цей набір можна динамічно та ефективно оновлювати, не порушуючи решту брандмауера.
Основний веб-сайт , приклади .
Отже, для його використання вам все одно доведеться використовувати at
або cron
планувати видалення.
Ви можете використовувати fail2ban, щоб заборонити ip адреси та налаштувати тривалість часу заборони адреси.
Як уже хтось сказав: Ви повинні використовувати ipset для цієї функції.
ipset може додати ip-адресу зі значенням тайм-ауту. Коли закінчиться час очікування, запис буде автоматично видалено з ipset.
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
Це кращий спосіб контролю такої поведінки.
Залежно від того, що саме ви хочете виконати, останні або мережеві модулі можуть бути використані для цього.
Обидва вони задокументовані на сторінці iptables man .