Як зробити так, щоб термін дії iptables закінчувався?


18

Хтось сказав мені, що це можливо, але я не можу знайти нічого на сторінках Google або man.

Мені потрібно заборонити IP-адреси протягом певного часу, а потім автоматично заборонити.

Відповіді:


18

Якщо ви маєте на увазі для 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для отримання додаткової інформації.


О, вау "робота" на роботі виглядає чудово. Чи можна комбінувати його з nohup та &? Як?
HappyDeveloper

Не потрібно використовувати nohup - завдання at work виконується незалежно від терміналу, який ви використовували для його створення. Це означає, що він запущений у оболонці, яка не успадковує ваші змінні середовища, до речі, і /bin/shза замовчуванням. Але це, мабуть, не буде проблемою в цьому випадку.
Едуардо Іванець

9

Поставте коментар із позначкою часу (можливо, секунд з епохи) у правилах. Періодично підмітайте правила, що минули.

Зауважте, що найновіше ядро ​​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замість того, щоб надрукувати команду.


чудова ідея. Не знаю, як це зробити підмітаючу частину, хоча я буду думати ..
HappyDeveloper

+1 Дуже гарна ідея, можливо, не найпростіша, але точно акуратна.
Кайл Сміт

1
@HappyDeveloper: Наведений приклад для додавання / розгортання
Сет Робертсон

1
Ха-ха, я також повинен був це зробити, я використав awk для мого прибирання: 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"
Кайл Сміт,

Мої 2 копійки за iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
перл

5

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 ланцюг.

  • Правило 1 у ланцюжку ssh перевіряє, чи є IP-код джерела у списку "чорний список". Якщо так, то з'єднання припиняється, і таймер 24-годинного чорного списку перезапускається. Якщо правило 1 помилкове, ми переходимо до правила 2.
  • Правило 2 в ланцюзі ssh перевіряє, чи IP-код джерела здійснив більше 4 спроб з'єднання за 5 хвилин. Якщо це так, він надсилає пакет до ланцюга "чорний", де він додається до списку "чорний список". Ланцюжок "чорний" потім перериває з'єднання, і ми закінчили.
  • Правило 3 у ланцюжку "ssh" досягається лише в тому випадку, якщо правила 1 і 2 є помилковими. Якщо це так, пакет ACCEPTed і вихідний IP додається до списку "таймер", щоб ми могли відстежувати частоту спроби з'єднання.

Параметр "--reap" вказує ядру здійснювати пошук за списком та очищення будь-яких елементів, які є старшими встановленого часового обмеження; 5 хвилин для списку "таймер" та 24 години для списку "чорний список".

зауважте: додаткові пробіли призначені для читання та є необов’язковими для вашого сценарію оболонки.


3

IPTables має чітко для цього функцію: IP Set. Ви робите правило один раз, і воно зберігається як завжди, але воно перевіряє набір ips (або портів) на відповідність. Прикольне те, що цей набір можна динамічно та ефективно оновлювати, не порушуючи решту брандмауера.

Основний веб-сайт , приклади .

Отже, для його використання вам все одно доведеться використовувати atабо cronпланувати видалення.



2

Як уже хтось сказав: Ви повинні використовувати 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

Це кращий спосіб контролю такої поведінки.


0

Мені потрібно заборонити IP-адреси протягом певного часу, а потім автоматично заборонити.

Ви можете спробувати наступне

# iptables -I INTPUT -s xxx.xxx.xxx.xxx -m time --utc --datestart 2013-09-09T15:00 --datestop 2013-09-09T15:30 -j DROP

0

Залежно від того, що саме ви хочете виконати, останні або мережеві модулі можуть бути використані для цього.

Обидва вони задокументовані на сторінці iptables man .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.