Как сделать так, чтобы сервис iptables запускался автоматически после перезагрузки на CenOS / RHEL7?

8

У меня есть несколько проблем с недавно установленным домашним сервером, который я готовлю. Я установил CentOS7 и обнаружил, что порты 80 и 443 по умолчанию отключены. Поэтому я добавил их в iptables с помощью следующих команд:

iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save

Я также установил iptable сервис, которого нет. Проблема в том, что каждый раз, когда я перезагружаю машину, новые конфигурации стираются.

Я попытался добавить службу iptable в chkconfig, но получаю следующую ошибку:

[root@CentOS-7]# chkconfig --add iptables
error reading information on service iptables: No such file or directory

Я предполагаю, что причина, по которой я получаю эту ошибку, заключается в том, что в /etc/init.d/ нет сценария iptable, однако есть у кого-нибудь какие-либо идеи, если я на самом деле поступаю правильно и / или если есть более простой и надежный способ сделать это это? Если нет, то как я могу решить эту проблему? В конце мне просто нужно использовать мой домашний сервер в качестве веб / почтового сервера ...

Я также попытался использовать команду «systemctl enable iptables», как любезно предложил флеминговирус, но безуспешно. После ввода команды я получил следующий вывод:

ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants`/iptables.service'`

ОБНОВЛЕНИЕ: я посмотрел на iptables, и команда «service iptables save» работала правильно. Кажется, проблема связана с тем, что служба не запускается при перезагрузке. Мне удалось запустить службу при перезагрузке после добавления следующей строки в /etc/rc.local

systemctl start  iptables.service

однако мне интересно, почему команда 'systemctl enable iptables' не работает в этом случае. Я что-то пропустил? Спасибо

Дейв
источник

Ответы:

6

Хотя этот вопрос старый, я столкнулся с той же проблемой и нашел решение здесь .

systemctl mask firewalld
systemctl stop firewalld

В основном firewalld конфликтует с iptables и поэтому не позволяет загружать iptables:

# cat /usr/lib/systemd/system/firewalld.service 
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before=NetworkManager.service
Conflicts=iptables.service ip6tables.service ebtables.service

...

Я смог решить эту проблему, маскируя firewalld, чтобы он не запускался автоматически и никогда не запустится после этого. Конечно, вам нужно убедиться, что iptables включен:

systemctl enable iptables
zanegray
источник
4

Скрипты инициализации исчезли. Теперь его systemctl. Это есть во всех документах CentOS7. Чтобы запустить chkconfig ipatables или запустить службу iptables при запуске, вы должны использовать это: -

systemctl включить iptables

Вам следует ознакомиться с простыми сведениями о systemctl в документации Cyberciti по iptables .

flemingovirus
источник
Привет, Flemingovirus, я попробовал то, что вы предложили, а также посмотрел на ссылку, но она все еще не работает. Любые идеи? спасибо
Дейв
@ Дэйв, ты проверил, где находится iptables? Это / sbin / iptables само по себе? Проверьте это сdpkg -L iptables
flemingovirus
[root @ CentOS-7} # rpm -ql iptables-services.x86_64 / etc / sysconfig / ip6tables / etc / sysconfig / iptables /usr/lib/systemd/system/ip6tables.service / usr / lib / systemd / system / iptables .service / usr / libexec / initscripts / legacy-actions / ip6tables / usr / libexec / initscripts / legacy-actions / ip6tables / panic / usr / libexec / initscripts / legacy-actions / ip6tables / save / usr / libexec / initscripts / legacy -actions / iptables / usr / libexec / initscripts / legacy-actions / iptables / panic / usr / libexec / initscripts / legacy-actions / iptables / save / usr / libexec / iptables /usr/libexec/iptables/ip6tables.init / usr /libexec/iptables/iptables.init
Дейв
нет dpkg, поэтому я использовал rpm. этот вывод имеет смысл? спасибо
Дейв
1
@ Дейв вывод systemctl говорит, что он был помещен для запуска. Проверьте с перезагрузкой.
флеминговирус
0

Прежде всего, вы должны попробовать #chkconfig --add /sbin/iptablesэто распознает «iptables». Затем вы должны создать скрипт для вашей конфигурации iptables и затем запустить этот скрипт при загрузке. создать скрипт:

#!/bin/bash
#
iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/service iptables save

и назовите это например myfirewall. сделать его исполняемым chmod +x myfirewallи записать это ./myfirewallв , /etc/rc.localчтобы запустить скрипт при загрузке.

Амир Джей
источник
спасибо, но я получаю следующую ошибку: «ошибка чтения информации о службе iptables: такой файл или каталог отсутствуют». Кроме того, для меня это выглядит как действительно сложный способ сделать это. Нет ли другого способа реализовать это в CentOS. В конце концов я только пытаюсь использовать его как стандартный веб / почтовый сервер. Как можно использовать веб-сервер, если порты 80 и 443 не открыты по умолчанию. Я делаю что-то неправильно?
Дейв
iptables встроен в Centos. Я думаю, что у вас были проблемы при установке. пожалуйста, попробуйте $sudo service iptables statusи напишите вывод в комментарии.
Амир Джей