ฉันใช้ Ubuntu 11.10 - ตั้งค่า NFS เพื่อแชร์ไดเรกทอรีระหว่างเซิร์ฟเวอร์อื่น ๆ พอร์ตใดที่จำเป็นต้องเปิดในไฟร์วอลล์
ฉันใช้ Ubuntu 11.10 - ตั้งค่า NFS เพื่อแชร์ไดเรกทอรีระหว่างเซิร์ฟเวอร์อื่น ๆ พอร์ตใดที่จำเป็นต้องเปิดในไฟร์วอลล์
คำตอบ:
$ rpcinfo -p | grep nfs
พอร์ต 111 (TCP และ UDP) และ 2049 (TCP และ UDP) สำหรับเซิร์ฟเวอร์ NFS
นอกจากนี้ยังมีพอร์ตสำหรับสถานะคลัสเตอร์และไคลเอนต์ (พอร์ต 1110 TCP สำหรับอดีตและ 1110 UDP สำหรับหลัง) รวมถึงพอร์ตสำหรับตัวจัดการล็อก NFS (พอร์ต 4045 TCP และ UDP) มีเพียงคุณเท่านั้นที่สามารถพิจารณาได้ว่าพอร์ตใดที่คุณต้องอนุญาตทั้งนี้ขึ้นอยู่กับบริการที่ต้องใช้ข้ามเกตเวย์
grep nfs
แต่ฉันซ้ายปิด grep ที่จะเรียนรู้ที่ 111 portmapper
สำหรับ ยังดีที่จะรู้! (และเช่นเดียวกับที่คุณพูดถึงจำเป็น)
นอกเหนือจาก 111 สำหรับ portmapper และ 2049 สำหรับ nfs คุณจะต้องอนุญาตให้พอร์ต mountd และอาจเป็น rquotad, lockd และ statd ซึ่งทั้งหมดนี้สามารถเป็นแบบไดนามิก คู่มือความปลอดภัย NFS ที่ยอดเยี่ยมนี้แนะนำให้เปลี่ยนสคริปต์เริ่มต้นและโมดูลเคอร์เนลเพื่อบังคับให้ใช้พอร์ตแบบคงที่
นอกเหนือจากคำแนะนำข้างต้นซึ่งมีส่วนในไฟร์วอลล์ดูคำตอบของฉันสำหรับคำถามอื่นเกี่ยวกับการทำให้ NFS แข็งตัว
RPCMOUNTDOPTS="--port 34567"
จากนั้นรีสตาร์ทพร้อมsysctl --system
และ/etc/init.d/nfs-kernel-server restart
ฉันพบคำแนะนำที่เป็นประโยชน์สำหรับปัญหาของฉันในหน้านี้ แต่ไม่มีเรื่องง่ายที่จะติดตาม ดังนั้นนี่คือสูตรของฉัน
TL; DR - ต้องอนุญาตทั้งพอร์ต nfs (111, 2049) และพอร์ต mountd หลังจากแก้ไขแล้ว
คำแนะนำ:
gksudo gedit /etc/default/nfs-kernel-server
RPCMOUNTDOPTS=--manage-gids
RPCMOUNTDOPTS="--port 33333"
หรือหมายเลขพอร์ตอื่น ๆ
ตอนนี้พยายามรีเซ็ต nfs โดยใช้:
sudo service nfs-kernel-server restart
และทดสอบว่ามันช่วยในการใช้:
rpcinfo -p | grep "tcp.*mountd"
สำหรับฉันมันไม่เพียงพอ แต่การรีสตาร์ทแบบเต็มสามารถแก้ไขปัญหาได้
( เครดิต )
(1) ลบกฎเก่าทำด้วยตนเองหรือรีเซ็ตหากใช้เฉพาะกับไฟร์วอลล์:
sudo ufw reset
sudo ufw enable
(2) เพิ่มพอร์ต 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
(เปลี่ยนเป็น IP ในพื้นที่ของคุณหรือเป็น " any
" แทน10.0.0.1/20
)
นั่นคือทั้งหมดที่มีไป
sudo service nfs-config restart
ก่อนที่จะเริ่มใหม่nfs-kernel-server
จะทำได้ดี
systemctl
systemctl restart nfs-kernel-server.service
sudo nfs allow proto tcp from 10.0.0.1/20 to any port 111,2049,33333
ตามด้วย (OK สอง foops sudo nfs allow proto udp from 10.0.0.1/20 to any port 111,2049,33333
บวม) หมายเหตุพอร์ต 33333 เป็นตัวอย่างข้างต้น คุณอาจใช้พอร์ตอื่นตามที่ระบุไว้
สิ่งนี้จะให้รายการของพอร์ตทั้งหมดที่ใช้โดยโปรแกรมที่เกี่ยวข้องกับ NFS ทั้งหมด:
rpcinfo -p | awk '{print $3" "$4}' | sort -k2n | uniq
ด้วย FERM คุณสามารถใช้Backticksเพื่อรับพอร์ตจาก rpcinfo ตัวอย่างเช่น
เซิร์ฟเวอร์:
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
}}
ลูกค้า:
proto udp {saddr ($SERVER) {ACCEPT;}} # NFS
(หากคุณกำลังจะใช้ TCP คุณจะต้องใช้เพียงproto tcp
บางส่วนเท่านั้น)
สำหรับบันทึกฉันต้องเพิ่มการอนุญาตสำหรับพอร์ต 111, 2049 และ 1048 สำหรับการกำหนดค่าที่การแชร์ NFS ถูกส่งออกโดยเซิร์ฟเวอร์ Windows 2008 R2 และไคลเอนต์คือ Ubuntu 12.04.4
ฉันหวังว่านี่จะช่วยให้ใครบางคน