Назад | Перейти на главную страницу

Как сделать так, чтобы правила iptables истекли?

Кто-то сказал мне, что это возможно, но я ничего не могу найти в Google или на страницах руководства.

Мне нужно заблокировать IP-адреса на определенное время, а затем автоматически разблокировать.

Если вы хотите, чтобы iptables полностью удалил правило, вы не сможете этого сделать, насколько я знаю. Какая у этого цель? Если вам нужен какой-то автоматический временный бан, стандартное решение - fail2ban.

В качестве альтернативы вы можете использовать задание 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 Чтобы получить больше информации.

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

Обратите внимание, что самое последнее ядро ​​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 имеет метод автоматического добавления 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» и «черный» и 2 списка; «таймер» и «черный список».

Вкратце; последняя показанная выше цепочка является «дверным проемом» в цепочку ssh.

  • Правило 1 в цепочке ssh проверяет, находится ли исходный IP-адрес в списке «черный список». В этом случае соединение разрывается и 24-часовой таймер черного списка перезапускается. Если правило 1 неверно, мы переходим к правилу 2.
  • Правило 2 в цепочке ssh проверяет, сделал ли исходный IP-адрес более 4 попыток подключения за 5 минут. Если это так, он отправляет пакет в цепочку «черный», где он добавляется в список «черный список». Цепочка «черный» затем ОТКЛЮЧАЕТ соединение, и все готово.
  • Правило 3 в цепочке «ssh» достигается, только если правила 1 и 2 ложны. Если это так, пакет принимается, и исходный IP-адрес добавляется в список «таймер», чтобы мы могли отслеживать частоту попыток подключения.

Параметр «--reap» указывает ядру выполнить поиск по списку и удалить все элементы, которые старше установленного ограничения по времени; 5 минут для списка «таймер» и 24 часа для списка «черный список».

примечание: дополнительные пробелы предназначены для удобства чтения и не являются обязательными в вашем сценарии оболочки.

IPTables имеет особенность, созданную специально для этого: IP Set. Вы создаете правило один раз, и оно сохраняется, как обычно, но проверяет набор IP-адресов (или портов) на совпадения. Замечательно то, что этот набор можно динамически и эффективно обновлять, не мешая остальной части брандмауэра.

Главный интернет сайт, Примеры.

Итак, чтобы использовать его, вам все равно придется использовать 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

Это предпочтительный способ контролировать такое поведение.

Мне нужно заблокировать IP-адреса на определенное время, а затем автоматически разблокировать.

Вы можете попробовать следующий

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

В зависимости от того, что именно вы хотите выполнить, либо сетевой фильтр недавний или для этого можно использовать временные модули.

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