Centos 7 menyimpan pengaturan iptables

58

Masalah: iptables diatur ulang ke pengaturan default setelah server reboot.

Saya mencoba menetapkan aturan seperti ini:

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

setelah itu saya lakukan:

service iptables save

dan itu menulis kembali sesuatu seperti ini

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

dan setelah ini saya hanya berlari (ini dilakukan sekali):

chkconfig iptables on (Saya telah membaca bahwa ini harus dilakukan untuk mengembalikan pengaturan setelah reboot)

Setelah itu saya reboot dan jalankan perintah ini:

systemctl list-unit-files | grep iptables

dan saya melihat bahwa iptables.service diaktifkan, namun aturan (untuk membuka port 3000) tidak berfungsi lagi.

Bagaimana cara bertahan pengaturan ini?

pengguna1463822
sumber
Mengapa Anda tidak menggunakan firewalld saja? Mungkin masih berjalan.
Michael Hampton
Mungkin karena firewalld tidak cocok untuk lingkungan server ...
Juan Jimenez

Jawaban:

67

CentOS 7 menggunakan FirewallD sekarang!

Contoh:

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

memuat kembali aturan:

firewall-cmd --reload
roothahn
sumber
2
tahu mengapa gambar centos7 dari AWS AMI tidak memiliki firewallD.
Saad Masood
5
ATAU Anda dapat menonaktifkan firewalld dan menginstal paket "iptables-services" untuk mencapai kompatibilitas iptables yang asli :)
vagarwal
1
Saya mencoba mengonfigurasi port forwarding 80 -> 8180 untuk lo ( --zone=trusted) dengan firewalld-cmd tetapi tidak bekerja (berfungsi dengan baik --zone=public) Melakukannya dengan 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 8180berfungsi (tetapi masing-masing firewalld --reloadkehilangan membatalkan ini)
djb
@saad: karena aws sudah menyediakan layanan firewall maka ami dapat disimpan kecil
roothahn
Bukan itu! Saya telah memesan Centos 7 VPS dan memiliki iptables secara default! Versi OS: 7.5.1804 (Core)
codezombie
66

Nonaktifkan firewalld dengan perintah berikut:

systemctl disable firewalld

Kemudian instal iptables-service dengan perintah berikut:

yum install iptables-services

Kemudian aktifkan iptables sebagai layanan:

systemctl enable iptables

Sekarang Anda dapat menyimpan aturan iptable Anda dengan mengikuti perintah:

service iptables save
HosseinGBI
sumber
22

Pada CentOS 7 Minimal Anda mungkin perlu menginstal iptables-servicespaket (terima kasih kepada @RichieACC untuk sarannya ):

sudo yum install -y iptables-services

Dan kemudian aktifkan layanan menggunakan systemd:

sudo systemctl enable iptables.service

Dan jalankan skrip init untuk menyimpan aturan firewall Anda:

sudo /usr/libexec/iptables/iptables.init save
qris
sumber
2

Mungkin skrip seperti ini akan membantu siapa pun?

Berhati-hatilah bahwa Anda akan kehilangan apa pun yang saat ini dikonfigurasikan karena menghapus firewalld dan menghapus semua aturan saat ini dalam tabel 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

Saya kira Anda menginginkan hal yang sama jika sistem Anda dapat dijangkau (sekarang atau kapan pun nanti) oleh lalu lintas 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
sumber
1

Anda dapat memodifikasi secara langsung file / etc / sysconfig / iptables. Muat ulang layanan iptables untuk memuat ulang aturan dari file itu. Namun, seperti yang telah diberitahukan kepada Anda, firewalld adalah sistem firewall default baru untuk Centos, dan ini adalah kesempatan bagus untuk mempelajari cara menggunakannya, bukan begitu?

dirajam
sumber
7
di CentOS7 tidak ada lagi file / etc / sysconfig / iptables
roothahn
1
Maaf @roothahn, tapi itu pasti ada ... kecuali Anda melewatkan beberapa paket tentunya. Dari /usr/lib/systemd/system/iptables.service Anda dapat melihat bahwa apa yang sebenarnya diluncurkan adalah "/usr/libexec/iptables/iptables.init start", yang merupakan skrip lama dan sayang yang mencari file konfigurasi lama yang biasa di / etc / sysconfig
dirajam
1
Ya /etc/sysconfig/iptablesjuga tidak ada untukku. Namun, /etc/sysconfig/iptables-configmemang ada. Tetapi tidak memiliki aturan firewall di dalamnya seperti iptablesfile sebelumnya.
Kentgrav
2
Saya menemukan bahwa file itu tidak ada di default, minimal instal juga. CentOS 7 sepertinya tidak menginstal iptables.service secara default. "yum install -y iptables.service" menginstal layanan dan membuat / etc / sysconfig / iptables default untuk saya.
RichieACC
3
Itu seharusnya "yum install iptables-services"
qris