Vì sao Samba từ chối các máy khách VPN vẫn đến được máy chủ
Máy khách VPN có thể đến được máy chủ Samba mà vẫn bị hosts allow từ chối. Hãy kiểm tra nguồn mà smbd nhìn thấy và chính sách ở cấp chia sẻ trước khi sửa.
Một máy khách VPN ping máy chủ tệp, phân giải tên của nó và vẫn không mở được một chia sẻ. Chính sách máy chủ của Samba là một trong bốn tầng có thể từ chối kết nối đó, và đó là tầng mà mọi người sửa cuối cùng. Danh sách cho phép được đánh giá dựa trên địa chỉ nguồn mà smbd thực sự nhận được, và đó có thể không phải địa chỉ mà máy khách nghĩ mình có. Xác định đúng nguồn đó biến một vấn đề quyền mơ hồ thành một thay đổi cấu hình một dòng.
Bốn tầng cùng thất bại với một thông báo
Việc từ chối có thể đến từ tuyến, tường lửa của máy chủ, chính sách máy chủ của Samba hoặc danh tính SMB. Mỗi tầng tạo ra cho máy khách một thông báo nói gần như cùng một điều, vì thế đoán mò tốn cả buổi chiều. Sắp xếp các kiểm tra từ mạng vào trong sẽ loại bỏ phần lớn việc đoán mò.
Hãy bắt đầu với vận chuyển. Nếu cổng 445 không bao giờ đến được máy chủ thì không cấu hình Samba nào có ý nghĩa, và một bản bắt gói trên giao diện máy chủ sẽ giải quyết trong vài giây. Tiếp theo là tường lửa của máy chủ ngay trên máy chủ đó, thứ có thể bỏ một nguồn được phép trước khi smbd kịp thấy nó. Chỉ sau khi hai tầng này qua, danh sách cho phép mới trở thành ứng viên. Xác thực đến cuối cùng, vì đăng nhập thất bại và bị máy chủ từ chối trông khác nhau trong nhật ký máy chủ, ngay cả khi máy khách báo cả hai là bị từ chối truy cập. Thứ tự quan trọng hơn công cụ, vì mỗi tầng có một lệnh trả lời nó.
Tìm địa chỉ nguồn mà smbd thực sự nhìn thấy
Khi truy cập qua tuyến, máy chủ thường thấy địa chỉ của máy khách từ nhóm VPN. Khi có dịch địa chỉ nguồn trên cổng vào, nó thấy địa chỉ LAN của cổng vào thay vào đó, và mọi máy khách phía sau cổng đó trở nên không thể phân biệt.
Sự khác biệt đó quyết định một mục trong danh sách cho phép là chính sách hay là lỗ hổng. Cho phép một địa chỉ cổng vào đã dịch sẽ nhận mọi người phía sau nó, điều mà một quy tắc cho từng máy khách hiếm khi muốn diễn đạt. Hãy đọc nguồn trên máy chủ chứ không phải từ ý niệm của máy khách về địa chỉ của chính nó. Bắt gói trên giao diện máy chủ là cách rẻ nhất để thấy nó, và cùng bản bắt gói đó chứng minh gói tin có đến hay không. Giới hạn bản bắt gói bằng số gói và thêm bộ lọc máy chủ khi biết mình đang theo dõi máy khách nào. Bảng phiên của Samba là nửa còn lại của câu trả lời: trong smbstatus -b, cột máy khách của mỗi dòng phiên là đối tác mà smbd đã ghi lại, và đó là xác nhận nhanh nhất về địa chỉ thực sự đến được dịch vụ.
sudo tcpdump -ni any -c 20 'tcp port 445'
sudo smbstatus -b
ss -tnp | grep ':445'
Đọc danh sách cho phép theo cách Samba đọc
Cấu hình hosts allow nhận một danh sách địa chỉ, mạng hoặc tên, và nó có thể ở mức toàn cục hoặc bên trong một chia sẻ. Hai mục trông có vẻ tương đương với bạn có thể không tương đương với bộ phân tích, nên cấu hình hiệu lực mới là thứ cần kiểm tra. Điều đó nghĩa là góc nhìn hợp nhất chứ không phải tệp bạn tình cờ sửa.
Một cặp tiền tố minh họa trông như dòng dưới đây, và đây là ví dụ chứ không phải thay thế cho các mục đã có. Hãy giữ các máy khách quản trị và ứng dụng vẫn kết nối hợp pháp hôm nay, và đọc mọi danh sách cấm trong cùng một lượt. Việc một máy chủ có được chấp nhận phụ thuộc vào toàn bộ chính sách, nên hãy thử đúng máy khách thay vì lý luận về thứ tự ưu tiên. Quyền của máy chủ cũng không nói gì về quyền chia sẻ hay chế độ hệ thống tệp, vốn là những cổng riêng. Thành công của công cụ kiểm tra chỉ có nghĩa là chính sách máy chủ chấp nhận nguồn đó, và không hơn thế.
hosts allow = 192.168.50.0/24 10.90.0.0/24
testparm -s
testparm -s /etc/samba/smb.conf client.example 10.90.0.14
Sửa tệp tồn tại qua lần khởi động lại
Trên một máy chủ Linux thông thường, đường dẫn cấu hình là cố định và dịch vụ đọc lại khi khởi động lại. Trên bộ định tuyến hoặc thiết bị, tệp smb.conf đang chạy thường được tạo khi khởi động, và chỉnh sửa thủ công sẽ biến mất ở lần khởi động lại tiếp theo. Hãy dùng cơ chế tùy biến được thiết bị hỗ trợ, thường là một tệp cấu hình riêng.
Cám dỗ ở điểm này là nạp phần sụn thay thế vì một luồng báo rằng nó hoạt động. Đó là thay đổi lớn cho một vấn đề chính sách nhỏ, và đưa thiết bị ra khỏi trạng thái được hỗ trợ. Trước hết hãy xác định điều khiển được hỗ trợ, vì hầu hết thiết bị hiển thị danh sách cho phép qua giao diện riêng. Nếu họ thực sự không làm vậy, giới hạn đó là lập luận cho phần cứng khác chứ không phải cho bản dựng không được hỗ trợ.
Ghi lại bạn đã sửa tệp nào và điều gì tạo lại nó, để người tiếp theo không lặp lại chẩn đoán.
Thử một máy khách được phép và một máy khách bị loại trừ
Hãy thử cả hai kết quả, không chỉ kết quả bạn muốn. Một máy khách được phép kết nối được chứng minh thay đổi hoạt động; một máy khách bị loại trừ vẫn bị từ chối chứng minh quy tắc không chỉ đơn giản mở tất cả.
smbclient -L //fileserver -U alice
sudo testparm -s /etc/samba/smb.conf alice-laptop 10.90.0.14
sudo tail -n 40 /var/log/samba/log.smbd
Khi kết nối không bao giờ đến được smbd, câu trả lời nằm ở định tuyến hoặc ở tường lửa của máy chủ. Nếu máy chủ được phép mà đăng nhập thất bại, vấn đề là danh tính và mở rộng danh sách cho phép sẽ không giúp gì. Giữ đầu ra chẩn đoán ở chế độ riêng tư, vì nhật ký Samba chi tiết có thể lộ đường dẫn chia sẻ và tên tài khoản. Chỉ thay đổi một tầng mỗi lần thử, nếu không kết quả tiếp theo sẽ không cho bạn biết điều gì.