Come posso avviare automaticamente il servizio iptables dopo il riavvio su CenOS / RHEL7?


8

Sto riscontrando alcuni problemi con un server home appena installato che sto preparando. Ho installato CentOS7 su di esso e ho scoperto che le porte 80 e 443 sono disattivate per impostazione predefinita. Li ho quindi aggiunti a iptables con i seguenti comandi:

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

Ho anche installato il servizio iptable che non era presente. Il problema è che ogni volta che riavvio la macchina vengono cancellate le nuove configurazioni.

Ho provato ad aggiungere il servizio iptable a chkconfig ma ottengo il seguente errore:

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

Presumo che il motivo per cui ottengo questo errore sia perché non esiste uno script iptable in /etc/init.d/, tuttavia qualcuno ha qualche idea se sto effettivamente facendo la cosa giusta e / o se esiste un modo più semplice e solido per farlo Questo? In caso contrario, come posso risolvere questo problema? Alla fine ho solo bisogno di usare il mio server di casa come un server web / mail ...

Ho anche provato ad usare il comando 'systemctl enable iptables' come suggerito gentilmente flemingovirus ma senza successo. Dopo aver inserito il comando ho ottenuto il seguente output:

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

AGGIORNAMENTO: ho esaminato iptables e il comando "service iptables save" ha funzionato correttamente. Il problema sembra essere dovuto al fatto che il servizio non si avvia al riavvio. Sono riuscito a far funzionare il servizio al riavvio dopo aver aggiunto la seguente riga a /etc/rc.local

systemctl start  iptables.service

tuttavia mi chiedo perché il comando 'systemctl enable iptables' non funzioni in questo caso. Mi sto perdendo qualcosa? Grazie

Risposte:


6

Sebbene questa domanda sia vecchia, ho riscontrato lo stesso problema e ho scoperto la soluzione qui .

systemctl mask firewalld
systemctl stop firewalld

Fondamentalmente firewalld è in conflitto con iptables e quindi impedirà il caricamento di 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

...

Sono stato in grado di risolverlo mascherando firewalld per assicurarmi che non si avvii automaticamente e non verrà mai avviato in seguito. Ovviamente dovrai assicurarti che iptables sia abilitato:

systemctl enable iptables

4

gli script init sono spariti. Adesso è systemctl. È disponibile in tutti i documenti di CentOS7. Per chkconfig ipatables o per avviare il servizio iptables all'avvio è necessario utilizzare questo: -

systemctl abilita iptables

Dovresti controllare cose semplici da sapere su systemctl nei documenti Cyberciti su iptables .


Ciao flemingovirus, ho provato quello che mi hai suggerito e ho anche guardato il link ma non funziona ancora. Qualche idea? grazie
Dave,

@Dave hai controllato dove si trova l'iptables? È / sbin / iptables stesso? dpkg -L iptables
Dai

[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 / libitsec / initscripts / legacy-actions / iptables / save / usr / libexec / iptables /usr/libexec/iptables/ip6tables.init / usr /libexec/iptables/iptables.init
Dave,

non c'è dpkg quindi ho usato rpm. questa uscita è sensata? grazie
Dave,

1
@Dave l'output di systemctl dice che è stato messo per l'avvio. Verificare con un riavvio.
flemingovirus,

0

Prima di tutto dovresti provare #chkconfig --add /sbin/iptablesquesto riconoscerà il "iptables". quindi è necessario creare uno script per la configurazione di iptables e quindi fare in modo che lo script si avvii all'avvio. creare uno 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 nominalo per esempio myfirewall. renderlo eseguibile con chmod +x myfirewalle scrivere questo ./myfirewallin /etc/rc.localper avviare lo script al boot.


grazie ma ricevo il seguente errore: "errore nella lettura delle informazioni sul servizio iptables: nessun file o directory" Inoltre, a me sembra un modo davvero complicato per farlo. Non c'è altro modo per implementarlo in CentOS. Alla fine sto solo cercando di usarlo come un server web / mail standard. Come si può usare un server web se le porte 80 e 443 non sono aperte per impostazione predefinita. Sto facendo qualcosa di sbagliato?
Dave,

iptables è integrato in Centos. penso che tu abbia avuto un problema nell'installazione. prova a $sudo service iptables statusscrivere l'output nei commenti.
amir jj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.