Como posso fazer o serviço iptables iniciar automaticamente após a reinicialização no CenOS / RHEL7?

8

Estou tendo alguns problemas com um servidor doméstico recém-instalado que estou preparando. Instalei o CentOS7 nele e descobri que as portas 80 e 443 estão desativadas por padrão. Portanto, eu os adicionei ao iptables com os seguintes comandos:

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

Também instalei o serviço iptable que não estava presente. O problema é que toda vez que eu reinicio a máquina, as novas configurações são apagadas.

Tentei adicionar o serviço iptable ao chkconfig, mas recebo o seguinte erro:

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

Presumo que o motivo pelo qual recebo esse erro seja porque não há script iptable no /etc/init.d/, mas alguém tem alguma idéia se estou realmente fazendo a coisa certa e / ou se existe uma maneira mais fácil e sólida de fazer isso isto? Caso contrário, como posso resolver este problema? No final, só preciso usar meu servidor doméstico como servidor de web / email ...

Eu também tentei usar o comando 'systemctl enable iptables' como o flemingovirus sugeriu gentilmente, mas sem sucesso. Depois de inserir o comando, obtive a seguinte saída:

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

ATUALIZAÇÃO: Examinei o iptables e o comando "service iptables save" funcionou corretamente. O problema parece ser devido ao serviço não iniciar na reinicialização. Eu consegui executar o serviço na reinicialização depois de adicionar a seguinte linha ao /etc/rc.local

systemctl start  iptables.service

no entanto, eu me pergunto por que o comando 'systemctl enable iptables' não está funcionando nesse caso. Estou esquecendo de algo? obrigado

Dave
fonte

Respostas:

6

Embora essa pergunta seja antiga, me deparei com o mesmo problema e descobri a solução aqui .

systemctl mask firewalld
systemctl stop firewalld

Basicamente, o firewalld entra em conflito com o iptables e evita que o iptables seja carregado:

# 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

...

Consegui resolver isso mascarando o firewalld para garantir que ele não seja iniciado automaticamente e nunca será iniciado posteriormente. Obviamente, você precisará garantir que o iptables esteja ativado:

systemctl enable iptables
zanegray
fonte
4

scripts de inicialização se foram. Agora é isso systemctl. Está lá fora em todos os documentos do CentOS7. Para chkconfig ipatables ou iniciar o serviço iptables na inicialização, você precisa usar o seguinte: -

systemctl enable iptables

Você deve verificar coisas simples a serem conhecidas sobre o systemctl nos documentos da Cyberciti no iptables .

flemingovirus
fonte
Oi flemingovirus, eu tentei o que você sugeriu e também olhou para o link, mas ele ainda não está funcionando. Alguma ideia? obrigado
Dave
@ Dave você verificou onde está o iptables? É o próprio / sbin / iptables? Confira comdpkg -L iptables
flemingovirus 16/08
[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 / ações herdadas / ip6tables / usr / libexec / initscripts / ações herdadas / ip6tables / panic / usr / libexec / initscripts / ações herdadas / ip6tables / save / usr / libexec / initscripts / legacy Você pode usar o 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
Dave
não há dpkg, então usei o rpm. essa saída é sensata? obrigado #
1655
1
@ Dave a saída do systemctl diz que foi colocado para inicialização. Verifique com uma reinicialização.
Flemingovirus
0

Antes de mais nada, você deve tentar #chkconfig --add /sbin/iptablesreconhecer as "iptables". então você deve criar um script para a configuração do iptables e criar esse script para iniciar na inicialização. crie um script:

#!/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

e nomeie-o por exemplo myfirewall. torná-lo executável com chmod +x myfirewalle escrever este ./myfirewallem /etc/rc.localpara iniciar o script na inicialização.

amir jj
fonte
obrigado, mas recebo o seguinte erro: "erro ao ler informações sobre o serviço iptables: não existe esse arquivo ou diretório" Além disso, para mim, parece uma maneira realmente complicada de fazer isso. Não há outra maneira de implementar isso no CentOS. No final, estou apenas tentando usá-lo como um servidor de web / email padrão. Como se pode usar um servidor web se as portas 80 e 443 não estiverem abertas por padrão. Estou fazendo algo errado?
Dave
O iptables está embutido no Centos. Eu acho que você teve um problema na instalação. por favor, tente $sudo service iptables statusescrever a saída no comentário.
jj Amir