Câu trả lời:
$ rpcinfo -p | grep nfs
Cổng 111 (TCP và UDP) và 2049 (TCP và UDP) cho máy chủ NFS.
Ngoài ra còn có các cổng cho trạng thái Cụm và máy khách (Cổng 1110 TCP cho trước và 1110 UDP cho sau) cũng như một cổng cho trình quản lý khóa NFS (Cổng 4045 TCP và UDP). Chỉ bạn mới có thể xác định cổng nào bạn cần cho phép tùy thuộc vào dịch vụ nào là cổng chéo cần thiết.
grep nfs
, nhưng tôi đã rời khỏi grep để biết rằng 111 là dành cho portmapper
. Cũng tốt để biết! (và như bạn đã đề cập, cần thiết)
Ngoài 111 cho portmapper và 2049 cho nfs, bạn sẽ cần cho phép cổng mountd và có thể rquotad, lockd và statd, tất cả đều có thể động. Hướng dẫn bảo mật NFS tuyệt vời này khuyên bạn nên thay đổi tập lệnh khởi động và cấu hình mô-đun hạt nhân để buộc chúng sử dụng các cổng tĩnh.
Ngoài hướng dẫn ở trên, có một phần trên tường lửa , hãy xem câu trả lời của tôi cho một câu hỏi khác về việc làm cứng NFS.
RPCMOUNTDOPTS="--port 34567"
và sau đó khởi động lại với sysctl --system
và/etc/init.d/nfs-kernel-server restart
Tôi tìm thấy hướng dẫn hữu ích cho vấn đề của mình trên trang này, nhưng không dễ để làm theo công thức. Vì vậy, đây là công thức của tôi.
TL; DR - cần cho phép cả cổng nfs (111, 2049) và cổng mountd sau khi sửa.
Hướng dẫn:
gksudo gedit /etc/default/nfs-kernel-server
RPCMOUNTDOPTS=--manage-gids
RPCMOUNTDOPTS="--port 33333"
Hoặc bất kỳ số cổng khác.
Bây giờ hãy thử thiết lập lại nfs bằng cách sử dụng:
sudo service nfs-kernel-server restart
Và kiểm tra nếu nó giúp sử dụng:
rpcinfo -p | grep "tcp.*mountd"
Đối với tôi nó không đủ, nhưng khởi động lại đầy đủ đã khắc phục vấn đề.
( tín dụng )
(1) xóa các quy tắc cũ, thực hiện thủ công hoặc đặt lại nếu đây là cách sử dụng duy nhất cho tường lửa:
sudo ufw reset
sudo ufw enable
(2) thêm cổng nfs & mountd
sudo ufw allow in from 10.0.0.1/20 to any port 111
sudo ufw allow in from 10.0.0.1/20 to any port 2049
sudo ufw allow in from 10.0.0.1/20 to any port 33333
(Thay đổi thành IP cục bộ của bạn hoặc thành " any
" thay vì 10.0.0.1/20
)
Đó là tất cả để có nó.
sudo service nfs-config restart
trước khi khởi động lại nfs-kernel-server
sẽ làm tốt.
systemctl
, nó systemctl restart nfs-kernel-server.service
.
sudo nfs allow proto tcp from 10.0.0.1/20 to any port 111,2049,33333
tiếp theo (ok, hai lá phồng) sudo nfs allow proto udp from 10.0.0.1/20 to any port 111,2049,33333
. Lưu ý cổng 33333 là theo ví dụ trên. Bạn có thể sử dụng một cổng khác như câu trả lời chỉ ra.
Điều này sẽ đưa ra một danh sách tất cả các cổng được sử dụng bởi tất cả các chương trình liên quan đến NFS:
rpcinfo -p | awk '{print $3" "$4}' | sort -k2n | uniq
Với FERM, người ta có thể sử dụng Backticks để lấy các cổng từ rpcinfo, ví dụ:
Người phục vụ:
proto tcp {saddr ($CLIENT) {
dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:tcp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
proto udp {saddr ($CLIENT) {
dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:udp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
Khách hàng:
proto udp {saddr ($SERVER) {ACCEPT;}} # NFS
(Nếu bạn chỉ sử dụng TCP thì bạn chỉ cần proto tcp
một phần).
Đối với các bản ghi, tôi đã phải thêm quyền cho các cổng 111, 2049 VÀ 1048 cho cấu hình trong đó chia sẻ NFS được xuất bởi máy chủ Windows 2008 R2 và các máy khách là Ubuntu 12.04.4.
Tôi hi vọng điêu nay se giup được ai đo.