Кто-то сказал мне, что это возможно, но я не могу найти ничего на страницах Google или man.
Мне нужно заблокировать IP-адреса на определенное время, а затем автоматически разблокировать.
Кто-то сказал мне, что это возможно, но я не могу найти ничего на страницах Google или man.
Мне нужно заблокировать 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
Чтобы получить больше информации.
/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
Это предпочтительный способ контролировать это поведение.
В зависимости от того, что именно вы хотите достичь в NETFILTER либо недавние или временные модули могут быть использованы для достижения этой цели .
Оба документа описаны в справочной странице iptables .