Centos 7 salva configurações de iptables


58

Problema: o iptables é redefinido para as configurações padrão após a reinicialização do servidor.

Estou tentando definir regras como esta:

iptables -I INPUT -p tcp --dport 3000 -j ACCEPT

depois disso eu faço:

service iptables save

e escreve de volta algo como isto

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

e depois disso eu apenas corri (isso foi feito uma vez):

chkconfig iptables on (Li que isso deve ser feito para restaurar as configurações após a reinicialização)

Depois disso, reinicializo e executei este comando:

systemctl list-unit-files | grep iptables

e vejo que o iptables.service está ativado, no entanto, a regra (para abrir a porta 3000) não funciona mais.

Como persisto essas configurações?


Por que você não usou o firewalld? Provavelmente ainda está em execução.
Michael Hampton

Provavelmente porque firewalld não é adequado para ambientes de servidor ...
Juan Jimenez

Respostas:


67

O CentOS 7 está usando o FirewallD agora!

Exemplo:

firewall-cmd --zone=public --add-port=3000/tcp --permanent

recarregar regras:

firewall-cmd --reload

2
qualquer ideia de por que a imagem centos7 da AWS AMI não possui firewallD.
Saad Masood

5
OU você pode desativar firewalld e instalar "iptables-serviços" pacote para alcançar perto compatibilidade iptables nativa :)
vagarwal

11
Eu tentei configurar o encaminhamento de porta 80 -> 8180 para lo ( --zone=trusted) com firewalld-cmd, mas ele não funciona (ele funciona em --zone=public) Fazer isso com iptables sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8180 ; sudo /sbin/iptables -t nat -I OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8180obras (mas cada um firewalld --reloadperde desfaz este)
DJB

@saad: porque AWS já oferece um serviço de firewall, portanto, a ami pode ser mantido pequeno
roothahn

Não é! Encomendei um Centos 7 VPS e ele tem iptables por padrão! A versão do sistema operacional: 7.5.1804 (Core)
codezombie 28/09

66

Desative o firewalld pelo seguinte comando:

systemctl disable firewalld

Em seguida, instale o iptables-service, seguindo o comando:

yum install iptables-services

Ative o iptables como serviços:

systemctl enable iptables

Agora você pode salvar suas regras de iptable seguindo o comando:

service iptables save

22

No CentOS 7 Minimal, você pode precisar instalar o iptables-servicespacote (obrigado a @RichieACC pela sugestão ):

sudo yum install -y iptables-services

E habilite o serviço usando systemd:

sudo systemctl enable iptables.service

E execute o initscript para salvar suas regras de firewall:

sudo /usr/libexec/iptables/iptables.init save

2

Talvez um script como este tivesse sido útil para alguém?

Lembre-se de que você perderá qualquer coisa configurada atualmente porque remove o firewalld e libera quaisquer regras atuais na tabela INPUT :

yum remove firewalld && yum install iptables-services

iptables --flush INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv4 is OK
iptables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service iptables save       # Save IPv4 IPTABLES rules van memory naar disk
systemctl enable iptables   # To make sure the IPv4 rules are reloaded at system startup

Eu acho que você quer o mesmo caso o seu sistema possa ser alcançado (agora ou a qualquer momento depois) pelo tráfego IPv6:

ip6tables --flush INPUT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv6 is OK
ip6tables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service ip6tables save       # Save IPv6 IPTABLES rules van memory naar disk
systemctl enable ip6tables   # To make sure the IPv6 rules are reloaded at system startup

1

Você pode modificar diretamente o arquivo / etc / sysconfig / iptables. Recarregue o serviço iptables para recarregar as regras desse arquivo. No entanto, como já foi dito, o firewalld é o novo sistema de firewall padrão do Centos, e esta é uma boa chance de aprender a usá-lo, não acha?


7
em CentOS7 não há mais a / etc / sysconfig / iptables arquivo
roothahn

11
Desculpe @roothahn, mas definitivamente existe ... a menos que você perca alguns pacotes, é claro. Em /usr/lib/systemd/system/iptables.service, você pode ver que o que é realmente lançado é "/usr/libexec/iptables/iptables.init start", que é o script antigo e caro que procura o arquivo de configuração antigo usual em / etc / sysconfig
chapado

11
Sim /etc/sysconfig/iptablestambém não existe para mim. No entanto, /etc/sysconfig/iptables-configexiste. Mas ele não possui regras de firewalls, como o iptablesarquivo tinha antes.
Kentgrav 30/09

2
Descobri que o arquivo não estava lá em uma instalação mínima padrão. O CentOS 7 não instala o iptables.service por padrão, ao que parece. "yum install -y iptables.service" instalou o serviço e criou um / etc / sysconfig / iptables padrão para mim.
precisa saber é o seguinte

3
Isso deve ser "yum install iptables-services"
qris
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.