
Я ищу эквивалент ufw default deny
для firewalld; идея в том, что после того, как я войду через SSH на свой новый сервер, я хочу заблокировать все входящие новые соединения, чтобы у меня было время обновить и защитить систему. Я использую CentOS7 с firewalld.
решение1
Из этого следует, чтосообщение о сбое серверачто ограничение движения на этом более высоком уровнетребует «богатых» правил.
Чтобы реализовать расширенное правило, которое применяется в зоне по умолчанию и отбрасывает любой трафик IPv4:
firewall-cmd --zone=$(firewall-cmd --get-default-zone) \
--add-rich-rule='rule family=ipv4 source address=0.0.0.0/0 drop'
Это эмулирует ufw default deny
поведение; чтобы вместо этого отправить сообщение отклонения ICMP, измените на drop
. reject
Вышеуказанное правило относится только к IPv4; для IPv6 используйте:
firewall-cmd --zone=$(firewall-cmd --get-default-zone) \
--add-rich-rule='rule family=ipv6 source address=::/0 drop'
После расследования выяснилось, что это добавляет запись в iptables, котораяпосле"accept RELATED and ESTABLISHED" соединения, поэтому это не нарушит ваш существующий сеанс ssh. В моем тестировании результирующая "цепочка" iptables выглядит так (для зоны по умолчанию 'public'):
INPUT -> INPUT_ZONES -> IN_public -> IN_public_deny
Если вы ожидаете перезагрузку в рамках обновлений, то добавьте флаг --permanent
.
Если вы не ожидаете перезагрузки в рамках обновлений, то вы можете использовать флаг --timeout
, который принимает такие значения, как 5s
, 10m
, или 15h
для "5 секунд", "10 минут" или "15 часов" соответственно. Такое правило будет удалено по истечении этого периода ожидания.
Если вы хотите удалить добавленное правило, просто выполните то же самое, firewall-cmd
что и раньше, но заменив --add-rich-rule
на --remove-rich-rule
; для примера IPv4:
firewall-cmd --zone=$(firewall-cmd --get-default-zone) \
--remove-rich-rule='rule family=ipv4 source address=0.0.0.0/0 accept'
Ссылка:http://www.firewalld.org/documentation/man-pages/firewalld.richlanguage.html