Назад | Перейти на главную страницу

Firewalld: как внести в белый список только два IP-адреса, не принадлежащих к одной подсети

Я использую 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