Сколько времени нужно для применения правила iptables?
Я использую сценарий с приведенным ниже кодом, пытаясь заблокировать хосты, но они не работают немедленно. Есть ли задержка, iptables не работает или код просто неверный?
#!/bin/sh
echo $1 >> /etc/dropped_hosts
iptables -A INPUT -s $1 -j DROP
iptables -A OUTPUT -d $1 -j DROP
iptables
правила вступают в силу немедленно. Поскольку ваш скрипт добавляет (-A) к цепочкам INPUT и OUTPUT, ваши правила добавляются в конец этих цепочек. Если у вас есть другие правила завершения, которые предшествуют этим правилам, они вступят в силу (а более поздние правила - нет).
Например, очень часто бывает -m state --state ESTABLISHED,RELATED -j ACCEPT
правило на ранней стадии в цепочках INPUT / OUTPUT, и это правило вступит в силу с приоритетом перед любыми правилами, которые идут после него. Это правило позволяет продолжать установленные соединения, даже если они поступают с / с IP-адресов, которые вы добавили в свой брандмауэр с помощью сценария.
Если у вас есть УСТАНОВЛЕННОЕ, СВЯЗАННОЕ правило в цепочках ВВОДА / ВЫВОДА (или какое-либо другое правило, которое отменяет более поздние правила), то вам придется либо согласиться с тем, что ваши новые правила не вступят в силу немедленно, либо вы можете получить свое скрипт вставляет правила DROP IP-адреса перед правилом ESTABLISHED, RELATED. Этого можно достичь, изменив ваш сценарий на Insert (-I), а не на Append (-A) правила DROP вашего IP-адреса, например
iptables -I INPUT -s $1 -j DROP
iptables -I OUTPUT -d $1 -j DROP
iptables
правила вступают в силу немедленно.
Поскольку этот скрипт добавляется, перед ним может быть правило, которое говорит, что нужно автоматически разрешать хосты, которые вы пытаетесь заблокировать. iptables читает правила сверху вниз и прерывается, как только находит совпадение (поэтому, если у вас было что-то, в котором говорилось `` разрешить badhostx '', а затем следующая строка была `` drop badhostx '', он никогда не упадет, так как правило для этого уже согласовано хост.
Если вы используете -A в скрипте, вы можете захотеть очистить свои таблицы перед (iptables --flush), чтобы убедиться, что правила точно такие, как вы применяете их в скрипте (но также убедитесь, что у вас есть ВСЕ правила в этом сценарии).
Другой вариант вместо запуска этого сценария - получить нужные вам правила, а затем выполнить либо «service iptables save», либо «/etc/init.d/iptables save». Надеюсь это поможет.
Вы должны добавить свои правила в начало таблицы фильтров. Поэтому вы должны использовать -I (вставить) вместо -A (добавить)