Como posso usar o iptables no centos 7? [fechadas]

154

Instalei o CentOS 7 com configuração mínima (ferramentas os + dev). Estou tentando abrir a porta 80 para o httpdserviço, mas algo errado com o meu serviço iptables ... o que há de errado com ele? O que estou fazendo de errado?

# ifconfig/sbin/service iptables save
bash: ifconfig/sbin/service: No such file or directory


# /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

# sudo service iptables status
Redirecting to /bin/systemctl status  iptables.service
iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

# /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

# sudo service iptables start
Redirecting to /bin/systemctl start  iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.
Meiblorn
fonte
tente este /etc/init.d/iptables save
Satya
8
Eu tenho a resposta aqui . RHEL 7 usos firewalld instad de iptables
Meiblorn

Respostas:

333

Com o RHEL 7 / CentOS 7, o firewalld foi introduzido para gerenciar as tabelas de ip. IMHO, o firewalld é mais adequado para estações de trabalho do que para ambientes de servidor.

É possível voltar a uma configuração mais clássica do iptables. Primeiro, pare e oculte o serviço firewalld:

systemctl stop firewalld
systemctl mask firewalld

Em seguida, instale o pacote iptables-services:

yum install iptables-services

Habilite o serviço no momento da inicialização:

systemctl enable iptables

Gerenciando o serviço

systemctl [stop|start|restart] iptables

Salvar suas regras de firewall pode ser feito da seguinte maneira:

service iptables save

ou

/usr/libexec/iptables/iptables.init save
Sgaduuw
fonte
5
Não está salvando o iptables. A reinicialização do servidor perde todas as alterações.
roosevelt
2
No meu sistema, as iptables são salvas corretamente. Você garantiu que o serviço iptables seja iniciado na inicialização? Você pode fazer isso executando 'systemctl permitir iptables'
Sgaduuw
1
Você também pode ter o firewalld em execução, que adicionará regras adicionais de tabelas de ip à lista (toda vez que você reiniciar o sistema). Para parar o firewalld, execute "systemctl mask firewalld"
TroodoN-Mike
Adicionado a informação sobre mascarando firewalld para a resposta, como @ Troodon-Mike sugeriu
Sgaduuw
8
@Sgaduuw Você pode explicar por que você acha que o fitewalld não é / menos adequado para servidores?
Alexander Groß
98

O RHEL e o CentOS 7 usam firewall-cmd em vez de iptables . Você deve usar esse tipo de comando:

# add ssh port as permanent opened port
firewall-cmd --zone=public --add-port=22/tcp --permanent

Em seguida, você pode recarregar as regras para ter certeza de que está tudo bem

firewall-cmd --reload

Isso é melhor do que usar iptable-save, espacialmente, se você planeja usar contêineres lxc ou docker. O lançamento dos serviços do docker adicionará algumas regras que o comando iptable-save solicitará. Se você salvar o resultado, terá muitas regras que NÃO devem ser salvas. Como os contêineres do docker podem alterá-los endereços IP na próxima reinicialização.

O cmd do firewall com opção permanente é melhor para isso.

Marque "man firewall-cmd" ou consulte os documentos oficiais do firewalld para ver as opções. Existem muitas opções para verificar zonas, configuração, como funciona ... a página de manual está realmente completa.

Eu recomendo fortemente não usar o iptables-service desde o Centos 7

Metal3d
fonte
1
Ótima explicação - funcionou perfeitamente para mim. Obrigado!
Digitalformula
1
firewall-cmd --reload não está funcionando. Eu tive que reiniciar usando "systemctl restart firewalld" para que as alterações entrassem em vigor.
Basil Musa
"Como o firewalld é dinâmico, as alterações em sua configuração podem ser feitas a qualquer momento e implementadas imediatamente. Nenhuma parte do firewall precisa ser recarregada; portanto, não há interrupção não intencional das conexões de rede existentes" - nos documentos oficiais do firewalld
yicone
Eficiente e limpo. Muito obrigado
Vaibhav
17

Eu tive o problema de que a reinicialização não iniciaria o iptables.

Isso corrigiu:

yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables
par
fonte
No CentOS 7 não funciona: # systemctl start iptablesFailed to start iptables.service: Unit not found.e # systemctl start ip6tablesFailed to start ip6tables.service: Unit not found.
PKHunter 30/03
14

Tente o seguinte comando iptables-save.

João Chambel
fonte
man iptables-save - transfere as regras do iptables para o stdout.
Paul Hargreaves
1
então podemos usariptables-save > /etc/sysconfig/iptables
dgregory
5

Eu modifiquei a /etc/sysconfig/ip6tables-configalteração do arquivo:

IP6TABLES_SAVE_ON_STOP="no"

Para:

IP6TABLES_SAVE_ON_STOP="yes"

E isto:

IP6TABLES_SAVE_ON_RESTART="no"

Para:

IP6TABLES_SAVE_ON_RESTART="yes"

Isso pareceu salvar as alterações que eu fiz usando os comandos iptables por meio de uma reinicialização.

Cavado
fonte
1

Coloque a configuração do IPtables no arquivo tradicional e ele será carregado após a inicialização:

/ etc / sysconfig / iptables

BVB Media
fonte
1

No mês passado, tentei configurar o iptables em um contêiner LXC VM, mas todas as vezes após a reinicialização a configuração do iptables não era carregada automaticamente.

A única maneira de fazê-lo funcionar era executando o seguinte comando:

yum -y instala o iptables-services; systemctl desativar firewalld; máscara systemctl firewalld; serviço iptables reiniciar; serviço iptables salvar

BVB Media
fonte
0

E para adicionar, você também deve fazer o mesmo com o ip6tables após executar o systemctl mask firewalldcomando:

    systemctl start ip6tables.service
    systemctl enable ip6tables.service
jman594
fonte
0

Se você fizer isso e estiver usando o fail2ban, precisará ativar os filtros / ações adequados:

Coloque as seguintes linhas em /etc/fail2ban/jail.d/sshd.local

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
maxretry = 5
bantime = 86400

Ative e inicie o fail2ban:

systemctl enable fail2ban
systemctl start fail2ban

Referência: http://blog.iopsl.com/fail2ban-on-centos-7-to-protect-ssh-part-ii/

Sebas
fonte