Tabel IP: memungkinkan akses SSH saja, tidak ada yang masuk atau keluar

11

Bagaimana Anda mengonfigurasi IPTables sehingga hanya mengizinkan SSH masuk, dan tidak mengizinkan lalu lintas masuk atau keluar lainnya ?

Adakah tindakan pencegahan keamanan yang dapat direkomendasikan?

Saya memiliki server yang saya yakini berhasil dimigrasikan dari GoDaddy dan saya yakin tidak lagi digunakan.

Tapi saya ingin memastikan hanya karena ... Anda tidak pernah tahu. :)

Perhatikan bahwa ini adalah server khusus virtual dari GoDaddy ... Itu berarti tidak ada cadangan dan hampir tidak ada dukungan.

Disko
sumber

Jawaban:

13

Anda hanya perlu menetapkan kebijakan default ke DROP pada rantai INPUT dan OUTPUT.

Untuk mengizinkan SSH masuk, Anda memerlukan perintah berikut:

$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Dua perintah terakhir memungkinkan lalu lintas loopback karena ini diperlukan oleh beberapa aplikasi agar berfungsi dengan benar. Anda dapat membatasi akses SSH dari -s source_ipopsi menggunakan IP tertentu .

Menjalankan perintah dalam urutan seperti yang ditunjukkan di atas akan menyebabkan sesi SSH Anda saat ini hang. Ini karena perintah iptables segera berlaku. Anda perlu mengeksekusi mereka dalam skrip shell untuk menghindari kehilangan kemampuan untuk terhubung ke mesin Anda ketika mengeksekusi mereka dari jarak jauh.

Khaled
sumber
4
--state RELATEDpada aturan terakhir tidak perlu; --state ESTABLISHEDcukup. Anda mungkin juga ingin mengizinkan lalu lintas DNS, dan mungkin harus mengizinkan apa pun pada antarmuka loopback, atau segala macam hal mungkin berperilaku sangat aneh.
MadHatter
@ MadHatter: Ya, Anda benar terutama tentang hal-hal loopback :)
Khaled
Terima kasih, mungkinkah mendapatkan seluruh file dari Anda? yaitu, sesuatu yang dapat saya salin dan tempel langsung ke / etc / sysconfig / iptables? Saya tidak cukup berpengalaman dengan hal ini untuk memercayai intuisi saya untuk melakukan pengeditan yang tepat.
Disko
2
ps. membangun koneksi akan ditutup paksa setelah perintah pertama
user956584
3
Anda harus benar-benar mengubah urutan perintah-perintah ini. Baris Kebijakan akan muncul sebagai yang terakhir. Siapa pun yang hanya menyalin ini ke dalam sesi ssh akan di-HUP dan segera ditutup
AndreasT
4

Sesuatu seperti ini:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT  # or iptables -P INPUT DROP

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP
Mikel
sumber
1
Saya pikir maksud Anda -i lotidak -s lo; sekali lagi, hanya ESTABLISHEDdiperlukan dalam aturan negara, dan mungkin harus ada --sport 22di sana juga. Mengapa semua orang begitu ingin mengizinkan RELATED?
MadHatter
@ MadHatter: Tentang RELATED: Ini sebenarnya berguna untuk mencocokkan hal-hal yang bukan TCP, seperti balasan ping dan balasan DNS. Setidaknya, itulah yang selalu saya asumsikan.
Steven Senin
2
Keyakinan saya adalah itu tidak akan cocok dengan keduanya. Sebagai contoh, itu akan cocok dengan respons host ICMP yang secara administratif dilarang, tetapi itu sama bermanfaatnya dengan ICMP; dan jika tidak memenuhi syarat, itu akan cocok dengan lalu lintas terkait, bukan hanya lalu lintas yang terkait dengan baris sebelumnya.
MadHatter
@ MadHatter: Saya kira saya harus menjalankan beberapa tes untuk melihat apakah Anda benar. Terima kasih telah menantang asumsi saya.
Steven Senin
Yap, negara ESTABLISHED adalah semua yang diperlukan untuk mencocokkan balasan DNS UDP dan ICMP echo-reply.
Steven Senin