Bagaimana saya bisa memblokir port 6379 untuk lalu lintas luar di ubuntu?

8

Saya ingin memblokir akses ke port 6379 di server saya, tetapi saya masih ingin terhubung secara internal. Aplikasi redis-server berjalan pada port itu dan saya ingin terhubung hanya secara lokal (127.0.0.1). Bagaimana saya bisa melakukan ini?

Steve Rodrigue
sumber

Jawaban:

11

Untuk melakukan ini, Anda perlu memastikan bahwa aturan IPTables Anda dikonfigurasi dengan benar. Ubuntu secara umum membiarkan server mereka terbuka lebar secara default, itulah sebabnya saya masih tidak merekomendasikan penggunaannya sebagai server kecuali Anda sudah mengetahui cara melakukannya dengan benar.

Saya membayangkan iptables -L -nvpenampilan Anda seperti ini, ya?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

Itu kosong dan terbuka lebar. Ubuntu IPTables HowTo mungkin akan membantu sedikit dengan ini. ( https://help.ubuntu.com/community/IptablesHowTo )

Saya merekomendasikan sesuatu seperti ini, yang memungkinkan SSH pada antarmuka apa pun dan tcp 6379 antarmuka apa pun tetapi yang tidak Anda inginkan:

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

Anda kemudian akan menyimpan file ini di /etc/iptables.rules.

Jelas, port lain yang ingin Anda buka secara khusus harus ditambahkan.

Catatan: Saya telah menambahkan 6379 baris khusus untuk kejelasan. Bagian bawah ACCEPT tepat sebelum COMMIT benar-benar akan mengizinkan ini karena semua koneksi loopback harus diizinkan pada sistem Linux untuk operasi yang tepat.

Anda juga harus meletakkan aturan di file / etc / network / interfaces Anda, untuk memastikan bahwa aturan tersebut ditambahkan saat antarmuka muncul dan tidak lebih baru dalam proses boot. Disarankan menambahkan sesuatu seperti ini:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

Sunting: Untuk memuat konfigurasi ini pada awalnya, Anda perlu menjalankan perintah iptables-restore yang dirujuk di atas:

iptables-restore < /etc/iptables.rules
Magellan
sumber
Saya berasumsi ini akan membuka port 6379 ke seluruh web, kan? Apa yang harus saya lakukan untuk membuatnya terbuka hanya untuk 127.0.0.1?
Steve Rodrigue
Tidak, karena aturan defaultnya adalah DROP. Jika tidak memiliki aturan ACCEPT eksplisit, itu diblokir oleh DROP default di sebelah: INPUT di atas.
Magellan
Secara pribadi, saya pikir aturan ACCEPT default hanya kriminal dalam penyebaran "server". Tapi itu tidak mengherankan karena Ubuntu adalah distribusi desktop pertama dan terutama.
Magellan
Ok, saya hanya melakukan persis apa yang Anda minta, tetapi sepertinya saya masih dapat terhubung ke port 6379 dari luar. Haruskah saya reboot server atau sesuatu?
Steve Rodrigue
1
Ya, tapi saya tidak terlalu peduli dengan counter dan ini bekerja untuk saya. Merasa bebas mengedit jawaban agar sesuai dengan proses yang lebih ketat.
Magellan
3

Yah, saya akan menyarankan untuk menggunakan "firewall tidak rumit" (ufw), yang juga direkomendasikan oleh kanonik. Membaca dan menulis iptables terlalu rumit untuk tugas penguncian port sesekali.

Lihat di sini: https://wiki.ubuntu.com/UncomplicatedFirewall

mojovski
sumber
1
Versi UFW yang lebih lama tidak memiliki kemampuan untuk menerapkan aturan ke port yang dipilih, semuanya atau tidak sama sekali. Dan sysadmin profesional harus terbiasa memahami apa yang dilakukan pengaturan iptables mereka dan bagaimana rantai bekerja.
Magellan
2

Sesuatu seperti

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

Harus bekerja

Kedare
sumber
Ini memberi saya kesalahan ini: iptables v1.4.4: opsi tidak diketahui `--port '
Steve Rodrigue
Bisakah Anda mencoba lagi dengan perintah baru? Saya menambahkan bagian --protocol dan -i (beradaptasi dengan antarmuka Anda), seharusnya sudah berfungsi.
Kedare
Masalah yang saya miliki dengan saran ini adalah bahwa ia tidak menyimpan seluruh reboot kecuali perintah lain yang diperlukan dijalankan dan mengasumsikan bahwa hanya ada 1 antarmuka non-loopback.
Magellan
Saya akan merekomendasikan menggunakan operator negasi: -i! lo
Magellan
Adrian: maksud Anda jika saya me-reboot server, modifikasi itu tidak lagi aktif?
Steve Rodrigue
0

Untuk versi yang lebih baru dari Redis Anda dapat menggunakan bind 127.0.0.1dalam redis.confuntuk melakukan hal ini secara langsung tanpa konfigurasi iptables tambahan

lihat artikel ini

itaintme
sumber