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

Почему firewall-cmd выдает ошибку «ALREADY_ENABLED», но порт отсутствует в списке при вызове firewall-cmd --list-ports?

Используя 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 брандмауэр.)