С обновлением CentOS с версии 7.6 до 7.7 пришли новые проблемы. Причём пришли все разом, одновременно. В прошлой статье рассказывал о том, что NGINX начал ругаться фразами «Can’t open PID file», а в этой затрону тему фаервола. А точнее фаервола на среднестатистической VPS, на которой обычно закрыт доступ к ядру.
К сожалению, на многих VPS нельзя установить дополнительный модуль в ядро. Поэтому команда:
modprobe nf_conntrack
Будет выдавать что-то вроде:
modprobe: ERROR: could not find module by name=’nf_conntrack’
modprobe: ERROR: could not insert ‘nf_conntrack’: Function not implemented
modprobe: ERROR: Error running install command for nf_conntrack
modprobe: ERROR: could not insert ‘nf_conntrack’: Operation not permitted
В версии CentOS 7.6 сервис firewalld-0.5.* запускался и работал без этого модуля. В новой CentOS используется firewalld-0.6.*, который не может без nf_conntrack даже запуститься. Конечно, и в firewalld-0.5.* были сообщения об ошибки и невозможности загрузить модуль, но всё работало.
Если Вы обновились до CentOS 7.7, сразу же проверьте работу фаервола:
systemctl status firewalld
Вы получите такой результат:
Active: inactive (dead)
…
ноя 06 11:33:19 vps60156 firewalld[32592]: WARNING: ipset not usable, disabling ipset usage in firewall.
ноя 06 11:33:19 vps60156 firewalld[32592]: ERROR: Failed to load nf_conntrack module: modprobe: ERROR: could not find module by name=’nf_conntrack’
modprobe: ERROR: could not insert ‘nf_conntrack’: Function not implemented
modprobe: ERROR: Error running install command for nf_conntrack…
ноя 06 11:33:19 vps60156 firewalld[32592]: ERROR: Raising SystemExit in run_server
Такую картину можно наблюдать, если ваша VPS использует старое ядро CentOS, к примеру, версии 2.6.32 (как у меня). Первый (и правильный) выход из ситуации — обновить ядро системы до версии 3.10.0-1062.1.1.el7.x86_64 или свежее. Просить об этом нужно хостинговую компанию.
Второй выход — это даунгрейдить фаервол до версии, которая была установлена в CentOS 7.6. Для этого сначала скачайте firewalld, firewalld-filesystem и python-firewall в нужной версии командой:
wget http://vault.centos.org/7.6.1810/os/x86_64/Packages/firewalld-0.5.3-5.el7.noarch.rpm http://vault.centos.org/7.6.1810/os/x86_64/Packages/firewalld-filesystem-0.5.3-5.el7.noarch.rpm http://vault.centos.org/7.6.1810/os/x86_64/Packages/python-firewall-0.5.3-5.el7.noarch.rpm
Затем установите скачанные пакеты командой:
yum downgrade firewalld-0.5.3-5.el7.noarch.rpm firewalld-filesystem-0.5.3-5.el7.noarch.rpm python-firewall-0.5.3-5.el7.noarch.rpm
Теперь можно перезапустить фаервол:
systemctl restart firewalld
И затем проверить работоспособность:
systemctl status firewalld
Состояние должно быть:
Active: active (running)