Dải số cổng TCP tốt nhất cho các ứng dụng nội bộ [đã đóng]


95

Tôi làm việc ở một nơi mà mỗi ứng dụng nội bộ của chúng tôi chạy trên một phiên bản Tomcat riêng lẻ và sử dụng một cổng TCP cụ thể. Phạm vi cổng IANA tốt nhất để sử dụng cho các ứng dụng này là gì để tránh xung đột số cổng với bất kỳ quá trình nào khác trên máy chủ?

Dựa trên http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml , đây là các tùy chọn như tôi hiện thấy:

  1. Cổng hệ thống (0-1023): Tôi không muốn sử dụng bất kỳ cổng nào trong số các cổng này vì máy chủ có thể đang chạy dịch vụ trên các cổng tiêu chuẩn trong phạm vi này
  2. Cổng người dùng (1024-49151): Do các ứng dụng là nội bộ, tôi không định yêu cầu IANA đặt trước một số cho bất kỳ ứng dụng nào của chúng tôi. Tuy nhiên, tôi muốn giảm khả năng cùng một cổng được sử dụng bởi một quy trình khác, ví dụ: Oracle Net Listener trên 1521.
  3. Cổng động và / hoặc cổng riêng (49152-65535): Phạm vi này lý tưởng cho số cổng tùy chỉnh. Mối quan tâm duy nhất của tôi là nếu điều này xảy ra:

    a. Tôi định cấu hình một trong các ứng dụng của mình để sử dụng cổng X
    b. Ứng dụng ngừng hoạt động trong vài phút hoặc vài giờ (tùy thuộc vào tính chất của ứng dụng), khiến cổng không được sử dụng trong một thời gian ngắn,
    c. Ví dụ: hệ điều hành phân bổ số cổng X cho một quy trình khác, khi quy trình đó hoạt động như một máy khách yêu cầu kết nối TCP tới một máy chủ khác. Điều này thành công do nó nằm trong phạm vi động và X hiện không được sử dụng đối với hệ điều hành có liên quan và
    d. Ứng dụng không khởi động được vì cổng X đã được sử dụng


2
Tôi đã trả lời một câu hỏi tương tự tại đây stackoverflow.com/a/38141340/3333759 mà bạn có thể thấy hữu ích.
adrianwadey

Câu trả lời:


34

Tôi không thể hiểu tại sao bạn lại quan tâm. Ngoài quy tắc đặc quyền "không sử dụng các cổng dưới 1024", bạn có thể sử dụng bất kỳ cổng nào vì máy khách của bạn phải có thể cấu hình để nói chuyện với bất kỳ địa chỉ IP và cổng nào!

Nếu không, nghĩa là chúng đã không được thực hiện rất tốt. Quay lại và thực hiện chúng đúng cách :-)

Nói cách khác, chạy máy chủ tại địa chỉ IP Xvà cổng, Ysau đó cấu hình các máy khách với thông tin đó. Sau đó, nếu bạn thấy bạn phải chạy một máy chủ khác Xxung đột với máy chủ của bạn Y, chỉ cần định cấu hình lại máy chủ và máy khách của bạn để sử dụng một cổng mới. Điều này đúng cho dù khách hàng của bạn là mã hay người nhập URL vào trình duyệt.

Tôi, cũng như bạn, sẽ không cố gắng lấy các số do IANA ấn định vì số đó được cho là dành cho các dịch vụ phổ biến đến mức nhiều môi trường sẽ sử dụng chúng (nghĩ SSH hoặc FTP hoặc TELNET).

Mạng của bạn là mạng của bạn và nếu bạn muốn máy chủ của mình trên cổng 1234 (hoặc thậm chí là cổng TELNET hoặc FTP cho vấn đề đó) thì đó là việc của bạn. Trong trường hợp điển hình, trong khu vực phát triển máy tính lớn của chúng tôi, cổng 23 được sử dụng cho máy chủ đầu cuối 3270, một con thú hoàn toàn khác với telnet. Nếu bạn muốn telnet đến phía UNIX của máy tính lớn, bạn sử dụng cổng 1023. Điều đó đôi khi gây khó chịu nếu bạn sử dụng máy khách telnet mà không chỉ định cổng 1023 vì nó kết nối bạn với một máy chủ không biết gì về giao thức telnet - chúng tôi phải phá vỡ ra khỏi ứng dụng khách telnet và thực hiện đúng cách:

telnet big_honking_mainframe_box.com 1023

Nếu bạn thực sự không thể định cấu hình phía máy khách, hãy chọn một trong phạm vi thứ hai, chẳng hạn như 48042, và chỉ sử dụng nó, tuyên bố rằng bất kỳ phần mềm nào khác trên các hộp đó (bao gồm bất kỳ phần mềm nào được bổ sung trong tương lai) phải tránh xa bạn. .


Cảm ơn. Sau khi đọc câu trả lời của bạn và suy nghĩ thêm một chút, tôi quyết định chọn sử dụng một cổng trong phạm vi thứ hai. Chúng tôi đã chọn 46xxx vì IANA hiện có rất ít cổng được chỉ định trong liên kết dải phụ này . Chúng tôi đã không chọn phạm vi thứ ba vì tình huống có thể xảy ra về mặt lý thuyết (mặc dù rất khó xảy ra) mà tôi đã mô tả.
Juanal

119

Tôi quyết định tải xuống số cổng được chỉ định từ IANA, lọc ra các cổng đã sử dụng và sắp xếp từng phạm vi "Chưa được chỉ định" theo thứ tự hầu hết các cổng có sẵn, giảm dần. Điều này không hoạt động vì tệp csv có các phạm vi được đánh dấu là "Chưa được chỉ định" chồng lên các đặt chỗ số cổng khác. Tôi đã mở rộng phạm vi số cổng được chỉ định theo cách thủ công , để lại cho tôi danh sách tất cả các số cổng được chỉ định. Sau đó, tôi sắp xếp danh sách đó và tạo danh sách các phạm vi chưa được chỉ định của riêng mình.

Vì trang stackoverflow.com này được xếp hạng rất cao trong tìm kiếm của tôi về chủ đề này, tôi đã tính rằng tôi sẽ đăng những phạm vi lớn nhất ở đây cho bất kỳ ai khác quan tâm. Chúng dành cho cả TCP và UDP trong đó số lượng cổng trong phạm vi ít nhất là 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

Nguồn (thông qua nút tải xuống CSV):

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


"Đó là cả tcp và udp" như trong - tôi có thể mở tất cả các cổng đó, giả sử có 44100-44199vẻ dễ nhớ vì lấy mẫu âm thanh 44100 trên cả udp và tcp một cách an toàn? Cả udp 44100-44199 và tcp 44100-44199 đều miễn phí?
Lapsio

1
Tiếc là không có. Đã có thêm đặt chỗ kể từ khi tôi đăng. Hiện có một cổng trong phạm vi của bạn. "z-wave-tunnel 44123 tcp Đường hầm bảo mật Z-Wave"
David Vereb

Rất may mắn là tôi không nghĩ mình sẽ cài đặt hệ thống an ninh nhà thông minh Z-Wave trên máy chủ phát triển lol. Các phạm vi cổng được sử dụng trước đây bao gồm rất nhiều thứ quan trọng bao gồm một số công cụ VMWare nên nó tệ hơn nhiều. Nếu đó là vụ va chạm duy nhất cho đến bây giờ thì tôi rất tuyệt với điều đó, cảm ơn :)
Lapsio

3
Vì vậy, tôi quyết định chạy lại danh sách để đưa ra một tập hợp phạm vi mới dựa trên dữ liệu mới hơn. Nó chỉ ra rằng các phạm vi "Chưa được chỉ định" dường như không được đánh số chính xác. Ví dụ: 43124-44320 được đánh dấu là chưa được gán, nhưng 44123, nằm trong phạm vi đó, được liệt kê ngay phía trên nó là được gán. Có vẻ như tôi sẽ phải đưa ra các phạm vi chưa được chỉ định theo cách thủ công vì chúng dường như được tính toán không chính xác.
David Vereb

6

Câu trả lời ngắn gọn: sử dụng cổng người dùng chưa được chỉ định

Over achiever's answer - Chọn và triển khai giải pháp khám phá tài nguyên. Yêu cầu máy chủ chọn động một cổng riêng. Yêu cầu khách hàng sử dụng tài nguyên khám phá.

Rủi ro rằng một máy chủ sẽ bị lỗi vì cổng mà nó muốn lắng nghe không khả dụng là có thật; ít nhất nó đã xảy ra với tôi. Một dịch vụ khác hoặc một khách hàng có thể đến đó trước.

Bạn gần như hoàn toàn có thể giảm thiểu rủi ro từ khách hàng bằng cách tránh các cổng riêng, được cung cấp động cho khách hàng.

Rủi ro từ một dịch vụ khác là tối thiểu nếu bạn sử dụng cổng người dùng. Rủi ro của một cổng chưa được chỉ định chỉ là một dịch vụ khác tình cờ được cấu hình (hoặc một cách sai lầm) sử dụng cổng đó. Nhưng ít nhất điều đó có thể nằm trong tầm kiểm soát của bạn.

Tài liệu khổng lồ với tất cả các nhiệm vụ cổng, bao gồm cả Cổng người dùng, có tại đây: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt tìm mã thông báo Chưa được chỉ định .


4
Không phải tốt hơn nếu sử dụng một cổng được chỉ định cho một giao thức sẽ không bao giờ được sử dụng trên mạng của bạn? Một cổng chưa được chỉ định có thể được chỉ định bất cứ lúc nào và gây ra cho bạn sự cố.
adrianwadey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.