В Centos 7 я хочу заблокировать трафик с исходного IP (пример 3.3.3.3) и для этого я применяю следующее правило:
# firewall-cmd --permanent --zone=drop --add-source=3.3.3.0/24
# firewall-cmd --reload
После этой команды я проверил, что мое правило применяется:
firewall-cmd --list-all --zone=drop
drop (active)
target: DROP
icmp-block-inversion: no
interfaces:
sources: 3.3.3.0/24
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Здесь вы можете увидеть вывод всех остальных активных правил:
firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: eno4
sources:
services: dhcpv6-client ssh
ports: 5060/udp 16384-32768/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
firewall-cmd --list-all --zone=internal
internal (active)
target: default
icmp-block-inversion: no
interfaces: eno1
sources:
services: mdns dhcpv6-client samba-client ssh
ports: 80/tcp 60024/tcp 5080/udp 8080/tcp 5060/tcp 161/udp 5080/tcp 5060/udp 16384-32768/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
В таблице маршрутизации публичная зона указана в той, которая маршрутизирует трафик для 3.3.3.0/24.
ip route
default via 1.1.1.1 dev eno4
10.1.1.0/24 via 10.1.1.1 dev eno1
Итак, это правило применяется, но я все еще получаю трафик (UDP) с этого исходного IP на прослушиваемом порту (5060) на моей машине Centos. Что не так с моим правилом?
ОБНОВЛЯТЬ как упомянул Майкл, есть вывод iptables -nvL
iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
46M 33G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
53342 3122K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
315K 35M INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
315K 35M INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
315K 35M INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
85 3916 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
1908 87293 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_direct all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_IN_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_IN_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_OUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_OUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 46M packets, 21G bytes)
pkts bytes target prot opt in out source destination
46M 21G OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD_IN_ZONES (1 references)
pkts bytes target prot opt in out source destination
0 0 FWDI_public all -- eno4 * 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 FWDI_internal all -- eno1 * 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 FWDI_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_IN_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
0 0 FWDI_drop all -- * * 3.3.3.0/24 0.0.0.0/0
0 0 FWDI_drop all -- * * 3.3.3.0/24 0.0.0.0/0
Chain FORWARD_OUT_ZONES (1 references)
pkts bytes target prot opt in out source destination
0 0 FWDO_public all -- * eno4 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 FWDO_internal all -- * eno1 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 FWDO_public all -- * + 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_OUT_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
0 0 FWDO_drop all -- * * 0.0.0.0/0 3.3.3.0/24
0 0 FWDO_drop all -- * * 0.0.0.0/0 3.3.3.0/24
Chain FORWARD_direct (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_drop (2 references)
pkts bytes target prot opt in out source destination
0 0 FWDI_drop_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDI_drop_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDI_drop_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDI_drop_allow (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_drop_deny (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_drop_log (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_internal (1 references)
pkts bytes target prot opt in out source destination
0 0 FWDI_internal_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDI_internal_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDI_internal_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDI_internal_allow (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_internal_deny (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_internal_log (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_public (2 references)
pkts bytes target prot opt in out source destination
0 0 FWDI_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDI_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDI_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDI_public_allow (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_public_deny (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_public_log (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_drop (2 references)
pkts bytes target prot opt in out source destination
0 0 FWDO_drop_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDO_drop_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDO_drop_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDO_drop_allow (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_drop_deny (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_drop_log (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_internal (1 references)
pkts bytes target prot opt in out source destination
0 0 FWDO_internal_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDO_internal_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDO_internal_allow all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDO_internal_allow (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_internal_deny (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_internal_log (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_public (2 references)
pkts bytes target prot opt in out source destination
0 0 FWDO_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDO_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDO_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDO_public_allow (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_public_deny (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_public_log (1 references)
pkts bytes target prot opt in out source destination
Chain INPUT_ZONES (1 references)
pkts bytes target prot opt in out source destination
272K 32M IN_public all -- eno4 * 0.0.0.0/0 0.0.0.0/0 [goto]
42964 2736K IN_internal all -- eno1 * 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 IN_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain INPUT_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
0 0 IN_drop all -- * * 3.3.3.0/24 0.0.0.0/0
0 0 IN_drop all -- * * 3.3.3.0/24 0.0.0.0/0
Chain INPUT_direct (1 references)
pkts bytes target prot opt in out source destination
Chain IN_drop (2 references)
pkts bytes target prot opt in out source destination
0 0 IN_drop_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 IN_drop_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 IN_drop_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain IN_drop_allow (1 references)
pkts bytes target prot opt in out source destination
Chain IN_drop_deny (1 references)
pkts bytes target prot opt in out source destination
Chain IN_drop_log (1 references)
pkts bytes target prot opt in out source destination
Chain IN_internal (1 references)
pkts bytes target prot opt in out source destination
42964 2736K IN_internal_log all -- * * 0.0.0.0/0 0.0.0.0/0
42964 2736K IN_internal_deny all -- * * 0.0.0.0/0 0.0.0.0/0
42964 2736K IN_internal_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain IN_internal_allow (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- * * 0.0.0.0/0 224.0.0.251 udp dpt:5353 ctstate NEW
201 15678 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:137 ctstate NEW
627 144K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:138 ctstate NEW
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
969 50388 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW
39727 2400K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:60024 ctstate NEW
7 4458 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:5080 ctstate NEW
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 ctstate NEW
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5060 ctstate NEW
1252 90788 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:161 ctstate NEW
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5080 ctstate NEW
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:5060 ctstate NEW
140 28000 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpts:16384:32768 ctstate NEW
Chain IN_internal_deny (1 references)
pkts bytes target prot opt in out source destination
Chain IN_internal_log (1 references)
pkts bytes target prot opt in out source destination
Chain IN_public (2 references)
pkts bytes target prot opt in out source destination
272K 32M IN_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
272K 32M IN_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
272K 32M IN_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
5 196 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain IN_public_allow (1 references)
pkts bytes target prot opt in out source destination
1184 70012 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
388 271K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:5060 ctstate NEW
268K 31M ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpts:16384:32768 ctstate NEW
Chain IN_public_deny (1 references)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 3.3.3.0/24 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- * * 3.3.3.0/24 0.0.0.0/0 reject-with icmp-port-unreachable
Chain IN_public_log (1 references)
pkts bytes target prot opt in out source destination
Chain OUTPUT_direct (1 references)
pkts bytes target prot opt in out source destination
ОБНОВЛЯТЬ На следующей лестничной диаграмме (sngrep) вы можете видеть, что на запрос Option Ping (5060) отвечает мое приложение, поэтому правило брандмауэра не действует.
ОБНОВЛЕНИЕ 2 Ошибка возникает снова, и теперь я перезагружаю правило фильтрации, и IP не применяется к списку выпадающих адресов. Я понимаю, что проблема возникает, если на интерфейсе есть нагрузка по трафику. После выключения сервера и перезапуска правило применяется. Но мне нужен способ применить правило выпадающих адресов также, если на сервере есть нагрузка.
решение1
У меня были такие же/похожие проблемы. После нескольких часов устранения неполадок у меня есть следующие наблюдения.
Порядок цепочки правил iptables (для зоны «public») следующий:
IN_public_log
IN_public_deny
IN_public_allow
Это означает, что правила «запретить» обрабатываются до правил «разрешить», поэтому это важно для понимания порядка сопоставления правил. Я не знаю, можно ли изменить этот порядок.
Я столкнулся с той же проблемой: отправка сообщения, firewalld-cmd --reload
похоже, не влияла на то, будут ли приниматься или отбрасываться пакеты SIP, но перезагрузка решила ее.
Однако я нашел firewalld-cmd --complete-reload
команду, и она, кажется, работает лучше - хотя я думаю, что это сбросит все существующие сеансы. Но, по крайней мере, я могу изменить правила firewalld и не перезагружать его, чтобы они полностью/правильно применились.
Я также заметил, что sngrep, похоже, все еще может захватывать и отображать SIP-сообщение, даже если оно заблокировано, но оно отображается со счетчиком сообщений 1 и без ответного сообщения (потому что оно фактически заблокировано).
ОБНОВЛЯТЬ:Я понимаю, что sngrep (начиная с версии 0.1.0) использует libpcap - см.https://github.com/irontec/sngrep/wiki. Согласно этому посту, libpcap обрабатывает (входящие) пакеты до того, как они будут обработаны «брандмауэром». Я предполагаю, что «брандмауэр» в этом случае может также означать firewalld. СмотритеУвидит ли tcpdump пакеты, отбрасываемые iptables?
Примечание: CentOS 7, похоже, поставляется с firewalld версии 0.4.4.4. Последняя версия — 0.6.0, но я пока не знаю, как ее обновить. Надеюсь, что более новые версии решат/исправят указанные выше проблемы.
решение2
Пытаясь заставить правило работать, я создаю правило блокировки двумя разными способами. Первый способ — поместить IP в зону сброса с помощью:
firewall-cmd --permanent --zone=drop --add-source=3.3.3.0/24
и забываем команду перезагрузки, чтобы правило не применялось, далее я создаю эту запись в брандмауэре.
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=3.3.3.0/24 reject'
И я не могу заставить правило работать с обеими записями в брандмауэре. После очистки брандмауэра от всех записей, относящихся к сети 3.3.3.0/24 и повторного создания правила с зоной сброса, оно у меня работает.
решение3
Вам не хватает некоторых основ. Есть интерфейсы, и интерфейсы принадлежат зоне (общедоступной по умолчанию). Правила для этой зоны реализованы на всех интерфейсах, которые принадлежат ей. У вас есть два интерфейсаено1(в зоневнутренний) иru4(в зонепубличный). Как и предложил Насир Райли, вам нужно реализовать правило в зоне, к которой принадлежит желаемый интерфейс. Вы пытаетесь что-то сделать с зоной "уронить" но в этой зоне нет интерфейса. Из документации Red Hat дляуронитьзона:
«Все входящие сетевые пакеты отбрасываются; ответа нет. Возможны только исходящие сетевые соединения».
Итак, вы можете поместить желаемый интерфейс в эту зону, но сначала удалите правило, которое вы добавили. И тщательно пройдитеРуководство по безопасности RHEL 7, есть много информации о firewalld.