Я использую firwalld на VPS / веб-сервере.
В public
зона active
и default
(и я не хочу этого менять). Как мне разрешить только эти два внешних IP-адреса для доступа к VPS (то есть ко всем сервисам, которые я определил в public
зона):
IP1: 11.22.33.44/24
IP2: 55.66.77.88/24
Эти поддельные IP-адреса и обратите внимание, что они намеренно не в той же подсети.
Думаю, я понимаю, почему следующее не работает (блокирует тот или иной IP-адрес).
user$ sudo firewall-cmd --zone=public --permanent --add-source=11.22.33.44/24
user$ sudo firewall-cmd --zone=public --permanent --add-source=55.66.77.88/24
user$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="11.22.33.44/24" invert="True" drop'
user$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="55.66.77.88/24" invert="True" drop'
user$ sudo firewall-cmd --reload
Что мне нужно изменить, чтобы это работало (чтобы он не блокировал один IP-адрес, другой или оба)?
Спасибо! знак равно
РЕДАКТИРОВАТЬ: Согласно первому комментатору ниже, я также попробовал /32
битовая маска для всех четырех команд выше. К сожалению, это не помогло. Все еще ищу решение.
Думаю, логика может звучать примерно так: if IP1 or IP2, allow it and stop processing the chain.
еще Continue processing the chain, where the very next rule would be to DROP.
. Что-то такое.
РЕДАКТИРОВАТЬ2: Публикация вывода sudo firewall-cmd --list-all-zones
ниже. Обратите внимание, что я удалил все правила, упомянутые выше, поскольку они не работали. Итак, приведенное ниже возвращается к исходной точке.
user$ sudo firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
drop
target: DROP
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
external
target: default
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
home
target: default
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
internal
target: default
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (active)
target: default
icmp-block-inversion: no
interfaces: venet0:0 venet0
sources:
services: ssh-vps http https
ports: 8080/tcp 8080/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks: echo-reply echo-request timestamp-reply timestamp-request
rich rules:
trusted
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
work
target: default
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Там есть хороший ответ на другом сайте.
Поэтому я попытался сделать это на тестовой ВМ с помощью таких команд:
firewall-cmd --zone=public --change-interface=eth0 --permanent
firewall-cmd --zone=public --add-source=192.168.1.2/32 --permanent
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.2/32" invert="True" drop' --permanent
И эта работа, тестовая ВМ не доступна ни с одного IP, кроме одного.
Выход для firewall-cmd --zone=public --list-all
является:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources: 192.168.1.2/32
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source NOT address="192.168.1.2/32" drop