Rentang nomor port TCP terbaik untuk aplikasi internal [ditutup]

97

Saya bekerja di tempat di mana setiap aplikasi internal kami berjalan pada instance Tomcat individu dan menggunakan port TCP tertentu. Apa rentang port IANA terbaik yang digunakan untuk aplikasi ini untuk menghindari benturan nomor port dengan proses lain di server?

Berdasarkan http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml , berikut adalah opsi yang saya lihat saat ini:

  1. Port Sistem (0-1023): Saya tidak ingin menggunakan salah satu port ini karena server mungkin menjalankan layanan pada port standar dalam kisaran ini
  2. Port Pengguna (1024-49151): Mengingat bahwa aplikasi bersifat internal, saya tidak bermaksud meminta IANA untuk mencadangkan nomor untuk aplikasi kami mana pun. Namun, saya ingin mengurangi kemungkinan port yang sama digunakan oleh proses lain, misalnya, Oracle Net Listener pada 1521.
  3. Port Dinamis dan / atau Pribadi (49152-65535): Rentang ini ideal untuk nomor port khusus. Satu-satunya kekhawatiran saya adalah jika ini terjadi:

    Sebuah. Saya mengkonfigurasi salah satu aplikasi saya untuk menggunakan port X
    b. Aplikasi mati selama beberapa menit atau jam (tergantung pada sifat aplikasi), membiarkan port tidak digunakan untuk sementara waktu,
    c. Sistem operasi mengalokasikan nomor port X ke proses lain, misalnya, saat proses tersebut bertindak sebagai klien yang memerlukan koneksi TCP ke server lain. Ini berhasil karena ia berada dalam rentang dinamis dan X saat ini tidak digunakan sejauh menyangkut sistem operasi, dan
    d. Aplikasi gagal memulai karena port X sudah digunakan

Juanal
sumber
2
Saya menjawab pertanyaan serupa di sini stackoverflow.com/a/38141340/3333759 yang mungkin berguna bagi Anda.
adrianwadey

Jawaban:

35

Saya tidak mengerti mengapa Anda akan peduli. Selain aturan hak istimewa "jangan gunakan port di bawah 1024", Anda harus dapat menggunakan port apa pun karena klien Anda harus dapat dikonfigurasi untuk berbicara dengan alamat IP dan port mana pun!

Jika tidak, maka itu belum dilakukan dengan baik. Kembali dan lakukan dengan benar :-)

Dengan kata lain, jalankan server di alamat IP Xdan port Ykemudian konfigurasikan klien dengan informasi itu. Kemudian, jika Anda menemukan Anda harus menjalankan server yang berbeda pada Xkonflik dengan Anda Y, cukup konfigurasi ulang server dan klien Anda untuk menggunakan port baru. Ini benar apakah klien Anda adalah kode, atau orang yang mengetik URL ke browser.

Saya, seperti Anda, tidak akan mencoba mendapatkan nomor yang ditetapkan oleh IANA karena itu seharusnya untuk layanan yang begitu umum sehingga banyak, banyak lingkungan akan menggunakannya (pikirkan SSH atau FTP atau TELNET).

Jaringan Anda adalah jaringan Anda dan, jika Anda ingin server Anda pada port 1234 (atau bahkan port TELNET atau FTP dalam hal ini), itu adalah urusan Anda. Contohnya, di area pengembangan mainframe kami, port 23 digunakan untuk server terminal 3270 yang sangat berbeda dengan telnet. Jika Anda ingin melakukan telnet ke sisi UNIX dari mainframe, Anda menggunakan port 1023. Terkadang hal itu mengganggu jika Anda menggunakan klien telnet tanpa menentukan port 1023 karena ini menghubungkan Anda ke server yang tidak mengetahui apa-apa tentang protokol telnet - kita harus memutuskan keluar dari klien telnet dan lakukan dengan benar:

telnet big_honking_mainframe_box.com 1023

Jika Anda benar - benar tidak dapat membuat sisi klien dapat dikonfigurasi, pilih satu di kisaran kedua, seperti 48042, dan gunakan saja, nyatakan bahwa perangkat lunak lain pada kotak itu (termasuk yang ditambahkan di masa mendatang) harus menghalangi Anda .

paxdiablo
sumber
Terima kasih. Setelah membaca jawaban Anda dan memberikan sedikit pemikiran lagi, saya memutuskan untuk menggunakan opsi menggunakan port dalam rentang kedua. Kami memilih 46xxx karena IANA saat ini memiliki sangat sedikit port yang ditetapkan di tautan subrange ini . Kami tidak memilih kisaran ketiga karena secara teoritis mungkin (meskipun sangat tidak mungkin) skenario yang saya jelaskan.
Juanal
119

Saya memutuskan untuk mengunduh nomor port yang ditetapkan dari IANA, menyaring port yang digunakan, dan mengurutkan setiap rentang "Tidak ditetapkan" dalam urutan sebagian besar port yang tersedia, menurun. Ini tidak berhasil, karena file csv memiliki rentang yang ditandai sebagai "Tidak ditetapkan" yang tumpang tindih dengan reservasi nomor port lain. Saya secara manual memperluas rentang nomor port yang ditetapkan , meninggalkan saya dengan daftar semua nomor port yang ditetapkan. Saya kemudian mengurutkan daftar itu dan membuat daftar rentang yang belum ditetapkan.

Karena halaman stackoverflow.com ini berperingkat sangat tinggi dalam pencarian saya tentang topik tersebut, saya pikir saya akan memposting rentang terbesar di sini untuk siapa pun yang tertarik. Ini untuk TCP dan UDP di mana jumlah port dalam rentang setidaknya 500.

Total   Start   End
829     29170   29998
815     38866   39680
710     41798   42507
681     43442   44122
661     46337   46997
643     35358   36000
609     36866   37474
596     38204   38799
592     33657   34248
571     30261   30831
563     41231   41793
542     21011   21552
528     28590   29117
521     14415   14935
510     26490   26999

Sumber (melalui tombol unduh CSV):

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

David Vereb
sumber
"Ini adalah tcp dan udp" seperti dalam - Saya dapat membuka semua port tersebut, katakanlah 44100-44199terlihat mudah diingat karena audio 44100 sampling pada udp dan tcp dengan aman? Baik udp 44100-44199 dan tcp 44100-44199 gratis?
Lapsio
1
Sayangnya tidak ada. Ada reservasi tambahan sejak saya memposting. Ada port dalam jangkauan Anda sekarang. "terowongan-z-gelombang 44123 tcp Terowongan Aman Z-Wave"
David Vereb
untungnya saya tidak berpikir saya akan menginstal sistem keamanan rumah pintar Z-Wave di server pengembangan lol. Rentang port yang digunakan sebelumnya mencakup banyak hal penting termasuk beberapa alat VMWare sehingga jauh lebih buruk. Jika itu satu-satunya tabrakan untuk saat ini maka saya tenang dengan itu terima kasih :)
Lapsio
3
Jadi saya memutuskan untuk menjalankan daftar lagi untuk menghasilkan serangkaian rentang baru berdasarkan data yang lebih baru. Ternyata rentang "Belum ditetapkan" tampaknya tidak diberi nomor dengan benar. Misalnya, 43124-44320 ditandai sebagai belum ditetapkan, namun 44123, yang berada dalam kisaran itu, terdaftar tepat di atasnya sebagai ditetapkan. Sepertinya saya harus secara manual membuat rentang yang belum ditetapkan karena tampaknya dihitung dengan salah.
David Vereb
6

Jawaban singkat: gunakan port pengguna yang belum ditetapkan

Lebih dari jawaban yang berprestasi - Pilih dan terapkan solusi penemuan sumber daya. Minta server memilih porta pribadi secara dinamis. Minta klien menggunakan penemuan sumber daya.

Risiko bahwa server akan gagal karena port yang ingin didengarkan tidak tersedia adalah nyata; setidaknya itu terjadi pada saya. Layanan lain atau klien mungkin sampai di sana lebih dulu.

Anda hampir dapat sepenuhnya mengurangi risiko dari klien dengan menghindari port pribadi, yang secara dinamis diberikan kepada klien.

Risiko dari layanan lain minimal jika Anda menggunakan port pengguna. Risiko port yang tidak ditetapkan hanya bahwa layanan lain kebetulan dikonfigurasi (atau secara dinamis) menggunakan port tersebut. Tapi setidaknya itu mungkin di bawah kendali Anda.

Dokumen besar dengan semua penetapan port, termasuk Port Pengguna, ada di sini: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt mencari token Tidak ditetapkan .

Ben Hyde
sumber
4
Bukankah lebih baik menggunakan port yang ditetapkan untuk protokol yang tidak akan pernah digunakan di jaringan Anda? Port yang belum ditetapkan dapat ditetapkan kapan saja dan menimbulkan masalah bagi Anda.
adrianwadey