Kết nối mồ côi ở trạng thái CLOSE_WAIT


30

Tôi đã có một máy SLES tích lũy các kết nối TCP ở trạng thái CLOSE_WAIT cho những gì dường như là mãi mãi. Những mô tả này cuối cùng hút tất cả bộ nhớ có sẵn. Hiện tại, tôi đã có 3037 người trong số họ, nhưng nó đã cao hơn nhiều trước khi khởi động lại nhanh chóng gần đây.

Điều thú vị là chúng không phải từ các kết nối đến các cổng cục bộ mà tôi mong đợi có quá trình lắng nghe. Chúng không có PID liên quan và bộ định thời của chúng dường như đã hết hạn.

# netstat -ton | grep CLOSE_WAIT
tcp      176      0 10.0.0.60:54882     10.0.0.12:31663      CLOSE_WAIT  off (0.00/0/0)
tcp       54      0 10.0.0.60:60957     10.0.0.12:4503       CLOSE_WAIT  off (0.00/0/0)
tcp       89      0 10.0.0.60:50959     10.0.0.12:3518       CLOSE_WAIT  off (0.00/0/0)

# netstat -tonp | grep CLOSE_WAIT
tcp       89      0 10.0.0.59:45598     10.0.0.12:1998       CLOSE_WAIT  -                   
tcp       15      0 10.0.0.59:60861     10.0.0.12:1938       CLOSE_WAIT  -                   
tcp        5      0 10.0.0.59:56173     10.0.0.12:1700       CLOSE_WAIT  -     

Tôi không phải là đai đen khi nói đến ngăn xếp TCP hoặc mạng kernel, nhưng cấu hình TCP có vẻ lành mạnh, vì các giá trị này là mặc định, trên mỗi trang man:

# cat /proc/sys/net/ipv4/tcp_fin_timeout 
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time 
7200

Vì vậy, những gì cho? Nếu bộ định thời đã hết hạn, không nên ngăn xếp tự động xóa công cụ này? Tôi thực sự mang lại cho mình một DoS dài hạn khi những thứ này tích tụ.


Ồ, và nghiên cứu của tôi cho thấy những người khác đang nhìn thấy những cổ vật như thế này trong 'lsof -i'. Tôi không thấy bất cứ điều gì kỳ lạ ở đó.
pboin

2
Hãy thử sudo netstat -tonpxem chương trình này đang xảy ra với.
BillThor

1
Bài đăng và câu trả lời của tôi stackoverflow.com/a/17697733/540323 sẽ giúp.
Amil Waduwawara

Câu trả lời:


16

Không, không có thời gian chờ cho CLOSE_WAIT. Tôi nghĩ đó là những gì offcó nghĩa trong đầu ra của bạn.

Để thoát ra CLOSE_WAIT, ứng dụng phải đóng ổ cắm một cách rõ ràng (hoặc thoát).

Xem cách phá CLOSE_WAIT .

Nếu netstatđược hiển thị -trong cột quá trình:

  • bạn có đang chạy với các đặc quyền và khả năng phù hợp (ví dụ như root) không?
  • chúng có thể là các tiến trình kernel (ví dụ: nfsd)

Khi làm netstats, tôi có đầy đủ tư nhân, vâng. Tôi sẽ kiểm tra góc xử lý kernel - đó là một ý tưởng tốt. Tôi thực sự bối rối, bởi vì không có bất kỳ ổ cắm nghe nào, ngoại trừ hai hoặc ba cổng đặc quyền nổi tiếng. Có lẽ đó là một vấn đề iptables wierd. Tôi cũng sẽ kiểm tra xem.
pboin

1
Liên kết bị hỏng.
Nathan


10

CLOSE_WAITchỉ ra rằng máy khách đang đóng kết nối nhưng ứng dụng chưa đóng hoặc máy khách thì không. Bạn nên xác định chương trình hoặc chương trình nào đang gặp vấn đề này. Hãy thử sử dụng netstat -tonp 2>&1 | grep CLOSEđể xác định chương trình nào đang giữ các kết nối.

Nếu không có chương trình nào được liệt kê, thì dịch vụ đang được cung cấp bởi kernel. Đây có thể là các dịch vụ RPC như nfshoặc rpc.lockd. Nghe dịch vụ kernel có thể được liệt kê với netstat -lntp 2>&1 | grep -- -.

Trừ khi các dịch vụ RPC bị ràng buộc với các cổng cố định, chúng sẽ liên kết với các cổng phù du khi các kết nối của bạn xuất hiện. Bạn cũng có thể muốn kiểm tra các quy trình và gắn kết trên máy chủ khác.

Bạn có thể liên kết các dịch vụ NFS của mình với các cổng cố định bằng cách thực hiện như sau:

  1. Chọn bốn cổng không sử dụng cho NFS (32763-32766 được sử dụng tại đây)
  2. Thêm các cổng cố định cho NFS vào /etc/services
    rpc.statd-bc 32763 / udp # RCP statd phát sóng
    rpc.statd-bc 32763 / tcp
    rpc.statd 32764 / udp # RCP statd lắng nghe
    rpc.statd 32764 / tcp
    rpc.mountd 32765 / udp # RPC mountd
    rpc.mountd 32765 / tcp
    rpc.lockd 32766 / udp # RPC lockd / nlockmgr
    rpc.lockd 32766 / tcp
  3. Cấu hình statd để sử dụng các tùy chọn --port 32763 --outgoing-port 32764
  4. Cấu hình rpcmountd để sử dụng tùy chọn --port 32765
  5. Tắt máy và khởi động lại dịch vụ NFS và RPC.

Tôi đã viết rằng không có PID, nhưng không thể hiện công việc của tôi. Tôi đã thực hiện một chỉnh sửa nhanh chóng theo đề nghị của bạn, cảm ơn.
pboin

@opboin: Đã thêm nhận xét về các cổng không có PIDS (dịch vụ kernel).
BillThor

3
ĐÓNG-WAIT có nghĩa là thiết bị ngang hàng đã đóng và hệ điều hành cục bộ đang chờ ứng dụng cục bộ đóng.
dùng207421
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.