Используя CentOS 7, я пытаюсь использовать firewall-cmd --zone=public --add-port=443/tcp --permanent
чтобы добавить 443 к моим разрешенным портам. К сожалению, это вызывает ошибку ALREADY_ENABLED: 443:tcp
. Но когда я использую firewall-cmd --list-ports
он не отображается в списке («80 / tcp 3000 / tcp 26900 / tcp 26900 / udp»).
Я предполагаю, что проблема вызвана конфликтом между firewall-cmd и iptables. Но я понятия не имею, как это отладить и возможно ли это вообще.
Вызов firewall-cmd --list-all
приводит к следующему списку:
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports: 80/tcp 3000/tcp 26900/tcp 26900/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Команда, которую вы выполняете, влияет на постоянную конфигурацию, а не на текущую. Но вы перечисляете текущую конфигурацию. Вот почему вы их не видите.
Вы можете указать постоянную конфигурацию, чтобы подтвердить, что правило было успешно добавлено.
firewall-cmd --list-all --permanent
Вместо этого вы можете добавить правило в текущую конфигурацию:
firewall-cmd --zone=public --add-port=443/tcp
Или вы можете перезагрузить текущую конфигурацию из постоянной конфигурации:
firewall-cmd --reload
Также помните, что firewalld определил службы для общих портов, поэтому обычно нет необходимости открывать их по номерам. Например, вместо открытия портов 80 / tcp и 443 / tcp вы можете вместо этого сказать:
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=https
Наконец, когда возможно, лучше изменить правила в текущей конфигурации, убедиться, что они работают, а затем сохранить конфигурацию, а не наоборот. Это позволяет вам вернуться, если что-то пойдет не так, и вы случайно заблокируете себя из системы.
Вы можете сохранить текущую конфигурацию в постоянной конфигурации, запустив:
firewall-cmd --runtime-to-permanent
(Но некоторые операции работают только с постоянной конфигурацией, например создание новых зон. Для этого вы должны использовать --permanent
а потом сразу --reload
брандмауэр.)