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?

user1463822
fonte
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
roothahn
fonte
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
HosseinGBI
fonte
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
qris
fonte
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
JohannesB
fonte
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?

apedrejado
fonte
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