Бывает, что доступ к сетевым ресурсам нужно ограничить по определённому расписанию. В iptables существует модуль time, который позволяет выполнить данный вид ограничений.
Допустим, нам нужно, чтобы доступ к FTP-серверу был ограничен в субботу и воскресенье с 15:00 до 21:00:
iptables -I INPUT -p tcp --dport 21 -m time --kerneltz --timestart 15:00 --timestop 21:00 --weekdays Sat,Sun --syn -j DROP
Разберём эту команду подробнее:
—kerneltz — использование времени текущей временной зоны, в противном случае iptables будет работать по времени часового пояса UTC;
—timestart — время начала срабатывания условия. Допустимый диапазон указания времени с 00:00:00 до 23:59:59. Вместо формата ЧЧ:ММ:СС можно использовать формат ЧЧ:ММ. Именно так и сделано в примере;
—timestop — время окончания действия условия. Формат ввода аналогичен тому, что был описан у —timestart;
—weekdays — день или дни недели, когда будет срабатывать условие. Допустимые значения: Mon, Tue, Wed, Thu, Fri, Sat, Sun. Можно использовать порядковые номера дней недели от 1 до 7. Дополнительно поддерживается формат в два символа: Mo, Tu, We и т.д. Если необходимо указать несколько дней, они перечисляются через запятую без пробела;
—monthdays — день месяца, в который будет срабатывать условие. Допустимы значения от 1 до 31.
Например, мы хотим ограничивать доступ к FTP-серверу не по дням недели, а по вторым числам каждого месяца:
iptables -I INPUT -p tcp --dport 21 -m time --kerneltz --timestart 15:00 --timestop 21:00 --monthdays 2 --syn -j DROP
Ранее мы рассмотрели, как можно разрешать и закрывать через iptables определённые порты или IP-адреса.
Статьи по теме: