Apakah aman untuk me-reboot server yang terbuka ke internet?

29

Secara khusus

Saya memiliki aturan iptables yang ditentukan pada server yang menjalankan CentOS. Apakah saya dijamin / dapatkah saya jamin / bagaimana saya bisa menjamin bahwa ketika jaringan online (baik saat boot mesin, atau setelah memulai kembali layanan jaringan) iptables ruleset sudah diterapkan (dan jika iptables gagal untuk memulai atau gagal untuk menerapkan aturan tersebut antarmuka jaringan akan gagal muncul)?

(Saya tahu ini adalah pertanyaan noob, tapi saya tidak pernah menjalankan server pada apa pun kecuali jaringan tepercaya di belakang DHCP NAT yang menyamar dan firewall, jadi ... harap pertanyaan noob dari noobs.)

Tembakan Parthian
sumber
15
Benar-benar bukan pertanyaan noob sama sekali. Ini pada dasarnya adalah bagaimana peretas masuk ke jaringan PlayStation kembali pada tahun 2011, menyebabkan 24 hari pemadaman dan pemukiman $ 15MM. Ketika firewall mereka reboot (seperti yang mereka lakukan setiap bulan), firewall terbuka lebar untuk beberapa saat - tampaknya cukup lama.
Chris S
@ ChrisS Hal yang paling aneh tentang itu, bagi saya, adalah bahwa saya yakin sysadmin yang bertanggung jawab untuk jaringan itu hampir pasti akan cukup pintar untuk menolak jika seseorang menyarankan mematikan firewall, tetapi tidak berani, bulanan , mematikannya ... lalu hidupkan kembali. Tidak yakin yang kombinasi ini akan menjelaskannya, meskipun.
Parthian Shot
Pilihan lain adalah menonaktifkan port pada switch jaringan sampai server sepenuhnya boot - jika Anda berada di situs dan memiliki akses switch. Ini tidak ideal, tetapi pasti akan berhasil, kecuali server memiliki ketergantungan jaringan seperti NFS.
jftuga
@ jftuga Yah, tentu. Tetapi kemudian server tidak akan terhubung ke Internet, dan sehingga solusi secara teknis tidak termasuk dalam lingkup pertanyaan ini. Jika saya di situs, saya bisa mencabut kabel ethernet saat reboot. Dan masalah mendasarnya akan tetap dengan solusi pemblokiran port; bahwa komputer lain yang menyerang jaringan tidak akan dihentikan oleh firewall lokal. Jika router diretas, atau malfungsi, atau orang lain di jaringan lokal dikompromikan, permainan masih berakhir.
Parthian Shot
@ jftuga Bahkan, masalahnya bahkan lebih buruk dari itu. Dengan asumsi seseorang telah mendapatkan perangkat lunak untuk dijalankan pada mesin lokal, tetapi firewall saya tidak menyaring jalan keluar, katakan aturannya adalah bahwa paket keluar hanya diperbolehkan jika mereka dibuat atau terkait, dan koneksi baru yang masuk hanya diizinkan untuk port 80 Biasanya, itu akan mencegah shell terbalik dari akun yang tidak memiliki hak pribadi. Tetapi jika koneksi dimulai saat boot, itu akan dipertahankan melalui inisialisasi firewall. Saya kira itu juga berarti aturan firewall harus berubah, tapi itu kesalahan yang mudah dibuat.
Parthian Shot

Jawaban:

18

Di luar kotak, Anda dijamin bahwa iptables akan mulai sebelum antarmuka ditampilkan berdasarkan urutan skrip startup. Lihatlah baris "chkconfig" di setiap skrip startup dan Anda akan melihat runlevel itu "on" saat aktif, urutan mulai, dan urutan berhenti.

Anda tidak dijamin bahwa antarmuka tidak akan ditampilkan jika iptables ruleset tidak diterapkan dengan benar (atau tidak sama sekali).

Contoh:
chkconfig: 2345 08 92
Baris ini menyatakan bahwa layanan yang dimaksud akan aktif di runlevel 2, 3, 4, dan 5, dan akan mulai dari 8 dan berhenti di 92. Apa pun dengan nilai "awal" yang lebih besar akan dimulai hanya setelah skrip ini selesai, tetapi kesalahan penulisan skrip ini dianggap selesai dan tidak akan mencegah skrip downstream berjalan.

Harap perhatikan jawaban ini berlaku untuk CentOS 6 dan sebelumnya, tidak harus untuk CentOS 7. Saya belum meneliti 7 secara pribadi untuk menjawab pertanyaan ini untuk 7.

John
sumber
1
+1 Dan ... tidak terlihat seperti kuda hadiah di mulut, karena jawaban Anda cukup membantu, tapi ... Apakah Anda kebetulan mengetahui cara standar untuk memberikan layanan urutan ketergantungan, sehingga jika ada yang gagal di awal rantai yang berikutnya tidak dimulai? Ooh- dan juga jika seseorang berhasil menabrak firewall (entah bagaimana) bahwa antarmuka jaringan akan "turun dengan kapal"? Idealnya, saya ingin semuanya gagal aman, bahkan jika ada yang punya waktu 0 hari untuk melakukan firewall ...
Parthian Shot
5
Dengan skrip startup SysV (yaitu CentOS 6 dan sebelumnya), tidak ada cara yang baik untuk melakukannya. CentOS 7 melakukan dependensi seperti yang Anda inginkan - jika B bergantung pada A dan A gagal, B tidak memulai. Untuk 7, untuk melihat dependensi gunakan systemctl list-dependencies --all(saya baru saja melihat halaman manual untuk itu 30 detik yang lalu).
John
Sementara berita itu sedikit mengecewakan (saya ada di 6 saat ini), setidaknya saya sekarang tahu bahwa memodifikasi skrip init adalah hack yang bisa diterima.
Parthian Shot
5
Berhati-hatilah dalam memodifikasi skrip init - hal itu dapat menyebabkan alarm palsu pada perangkat lunak deteksi intrusi apa pun yang Anda miliki, dan modifikasi akan ditimpa jika initscriptspaket tersebut diperbarui (misalnya rilis errata). Saya benar-benar tidak merekomendasikan melakukan itu.
John
Saya belum menyiapkan IDS, jadi alarm palsu bukan masalah saat ini (server belum hidup, dan saya tahu saya belum siap untuk ditempatkan; pertanyaan ini adalah bagian dari persiapan saya. Tapi saya akan dimasukkan ke dalam HIDS). Saya akan berhati-hati mungkin, dan jika ada cara yang tidak melibatkan secara manual memodifikasi bagian inti dari konfigurasi init, saya pasti melakukan itu.
Parthian Shot
1

Anda juga dapat menggunakan opsi ifup-post di centos:

/ etc / sysconfig / network-scripts / ifup-post

Disebut ketika perangkat jaringan KECUALI perangkat SLIP muncul. Panggilan / etc / sysconfig / network-scripts / ifup-routes untuk memunculkan rute statis yang bergantung pada perangkat itu. Panggilan / etc / sysconfig / network-scripts / ifup-alias untuk memunculkan alias untuk perangkat itu. Atur nama host jika belum ditetapkan dan nama host dapat ditemukan untuk IP untuk perangkat itu. Mengirim SIGIO ke program apa pun yang meminta pemberitahuan acara jaringan.

Dapat diperluas untuk memperbaiki konfigurasi nameservice, memanggil skrip sewenang-wenang, dll, sesuai kebutuhan.

Script ini berjalan dan setelah yang di atas (ifup-route dan ifup-alias) ia mencari ifup-local

if [ -x /sbin/ifup-local ]; then
   /sbin/ifup-local ${DEVICE}
fi

Jadi Anda dapat membuat file ini dan memastikannya memanggil iptables lagi misalnya menggunakan iptables-restore:

iptables-restore < /etc/sysconfig/iptables
Moti
sumber
1

Tambahan kecil: untuk memastikan aturan yang diperlukan akan ada di sana saat Anda mem-boot server lagi, simpan bersama

sudo sh -c "iptables-save > /etc/iptables.rules"
manu
sumber