Bagaimana saya bisa membuat layanan iptables mulai secara otomatis setelah reboot pada CenOS / RHEL7?

8

Saya mengalami beberapa masalah dengan server rumah yang baru diinstal saya sedang mempersiapkan. Saya telah menginstal CentOS7 di atasnya dan saya menemukan bahwa port 80 dan 443 tidak aktif secara default. Karena itu saya menambahkannya ke iptables dengan perintah berikut:

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

Saya juga menginstal layanan iptable yang tidak ada. Masalahnya adalah bahwa setiap kali saya me-reboot mesin, konfigurasi baru dihapus.

Saya mencoba menambahkan layanan iptable ke chkconfig tetapi saya mendapatkan kesalahan berikut:

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

Saya berasumsi bahwa alasan saya mendapatkan kesalahan ini adalah karena tidak ada skrip iptable di /etc/init.d/ tetapi ada yang punya ide jika saya benar-benar melakukan hal yang benar dan / atau jika ada cara yang lebih mudah dan lebih solid untuk melakukan ini? Jika tidak, bagaimana saya bisa mengatasi masalah ini? Pada akhirnya saya hanya perlu menggunakan server rumah saya sebagai server web / mail ...

Saya juga telah mencoba menggunakan perintah 'systemctl enable iptables' seperti yang disarankan flemingovirus tetapi tidak berhasil. Setelah saya memasukkan perintah saya mendapat hasil sebagai berikut:

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

PEMBARUAN: Saya telah melihat iptables dan perintah "service iptables save" telah berfungsi dengan baik. Masalahnya tampaknya karena layanan tidak mulai saat reboot. Saya telah berhasil menjalankan layanan saat reboot setelah menambahkan baris berikut ke /etc/rc.local

systemctl start  iptables.service

namun saya bertanya-tanya mengapa perintah 'systemctl enable iptables' tidak berfungsi dalam kasus ini. Apakah saya melewatkan sesuatu? Terima kasih

Dave
sumber

Jawaban:

6

Meskipun pertanyaan ini sudah lama, saya menemukan masalah yang sama dan menemukan solusinya di sini .

systemctl mask firewalld
systemctl stop firewalld

Pada dasarnya firewalld konflik iptables dan karenanya akan mencegah iptables memuat:

# 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

...

Saya dapat menyelesaikan ini dengan menutup firewalld untuk memastikan itu tidak memulai secara otomatis dan tidak akan pernah dimulai sesudahnya. Tentu saja Anda perlu memastikan iptables diaktifkan:

systemctl enable iptables
zanegray
sumber
4

skrip init hilang. Sekarang ini systemctl. Di luar sana di semua dokumen CentOS7. Untuk chkconfig ipatables atau untuk memulai layanan iptables saat startup, Anda perlu menggunakan ini: -

systemctl mengaktifkan iptables

Anda harus memeriksa hal-hal sederhana untuk diketahui tentang systemctl di dokumen Cyberciti di iptables .

flemingovirus
sumber
Hai flemingovirus, saya sudah mencoba apa yang Anda sarankan dan juga melihat tautannya tetapi masih tidak berfungsi. Ada ide? terima kasih
Dave
@ Pernahkah Anda memeriksa di mana iptables berada? Apakah itu / sbin / iptables sendiri? Lihatlahdpkg -L iptables
flemingovirus
[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 / skrip init / legacy-action / ip6tables / usr / libexec / skrip init / legacy-action / ip6tables / panic / usr / libexec / initscripts / legacy-actions / ip6tables / save / usr / libexec / initststs / legacy -aksi / iptables / usr / libexec / skrip init / legacy-action / iptables / panik / usr / libexec / skrip init / legacy-aksi / iptables / save / usr / libexec / iptables / usr /libexec/iptables/ip6tables.init / usr /libexec/iptables/iptables.init
Dave
tidak ada dpkg jadi saya menggunakan rpm sebagai gantinya. apakah output ini masuk akal? terima kasih
Dave
1
@Dave output dari systemctl mengatakan telah dimasukkan untuk startup. Periksa dengan reboot.
flemingovirus
0

Pertama-tama Anda harus mencoba #chkconfig --add /sbin/iptablesini akan mengenali "iptables". maka Anda harus membuat skrip untuk konfigurasi iptables Anda dan kemudian membuat skrip untuk memulai saat boot. buat skrip:

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

dan beri nama misalnya myfirewall. membuatnya menjadi executable dengan chmod +x myfirewalldan menulis ini ./myfirewalldi /etc/rc.localmulai script boot.

amir jj
sumber
terima kasih tetapi saya mendapatkan kesalahan berikut: "kesalahan membaca informasi tentang iptables layanan: Tidak ada file atau direktori" Juga, bagi saya sepertinya cara yang sangat rumit untuk melakukan ini. Apakah tidak ada cara lain untuk mengimplementasikan ini di CentOS. Pada akhirnya saya hanya mencoba menggunakannya sebagai server web / mail standar. Bagaimana seseorang dapat menggunakan server web jika port 80 dan 443 tidak dibuka secara default. Apakah saya melakukan sesuatu yang salah?
Dave
iptables dibangun di Centos. saya pikir Anda punya masalah dalam instalasi. silakan coba $sudo service iptables statusdan tulis output dalam komentar.
amir jj