พอร์ตใดที่ฉันต้องเปิดในไฟร์วอลล์เพื่อใช้ NFS


73

ฉันใช้ Ubuntu 11.10 - ตั้งค่า NFS เพื่อแชร์ไดเรกทอรีระหว่างเซิร์ฟเวอร์อื่น ๆ พอร์ตใดที่จำเป็นต้องเปิดในไฟร์วอลล์


6
ขึ้นอยู่กับรุ่นของโปรโตคอลที่คุณต้องการใช้ NFS 4 ต้องการเพียง 2049 ในขณะที่รุ่นเก่าต้องการมากกว่า
lzap

คำตอบ:


97
$ rpcinfo -p | grep nfs

พอร์ต 111 (TCP และ UDP) และ 2049 (TCP และ UDP) สำหรับเซิร์ฟเวอร์ NFS

นอกจากนี้ยังมีพอร์ตสำหรับสถานะคลัสเตอร์และไคลเอนต์ (พอร์ต 1110 TCP สำหรับอดีตและ 1110 UDP สำหรับหลัง) รวมถึงพอร์ตสำหรับตัวจัดการล็อก NFS (พอร์ต 4045 TCP และ UDP) มีเพียงคุณเท่านั้นที่สามารถพิจารณาได้ว่าพอร์ตใดที่คุณต้องอนุญาตทั้งนี้ขึ้นอยู่กับบริการที่ต้องใช้ข้ามเกตเวย์


4
ฉันไม่รู้เกี่ยวกับ rpcinfo ซึ่งค่อนข้างมีประโยชน์ ฉันไม่เห็นพอร์ต 111 ด้วยgrep nfsแต่ฉันซ้ายปิด grep ที่จะเรียนรู้ที่ 111 portmapperสำหรับ ยังดีที่จะรู้! (และเช่นเดียวกับที่คุณพูดถึงจำเป็น)
เคนนี

@KennyYounger rpcinfo ก็มีประโยชน์เช่นกัน หากสิ่งนี้ตอบคำถามของคุณอย่าลืมทำเครื่องหมายว่าเป็นคำตอบเพื่อประโยชน์ของผู้ดูในอนาคต
Wesley

6
คุณต้องเปิด mountd เมื่อคุณติดตั้งระบบไฟล์เป็นครั้งแรก มันทำงานบนพอร์ตแบบไดนามิกดังนั้นจึงไม่เหมือนกันเสมอไป ฉันใส่ลิงค์ไปยังคำแนะนำในคำตอบของฉัน
bonsaiviking

1
ขอบคุณ @bonsaiviking ข้อมูลที่สำคัญสำหรับกระบวนการนี้ ฉันยกระดับคำตอบของคุณ!
เคนนี

คุณสามารถให้คำอธิบายสั้น ๆ เกี่ยวกับบริการเหล่านั้น ("สถานะคลัสเตอร์และไคลเอนต์", "ตัวจัดการล็อก NFS") ทำและเมื่อจำเป็น หากบริการเหล่านั้นถูกบล็อกโดยไฟร์วอลล์เซิร์ฟเวอร์และไคลเอนต์ของ NFS จะลดระดับลงอย่างงดงามหรือเพียงแค่รอการตอบกลับหรือไม่
Nathan Craike

27

นอกเหนือจาก 111 สำหรับ portmapper และ 2049 สำหรับ nfs คุณจะต้องอนุญาตให้พอร์ต mountd และอาจเป็น rquotad, lockd และ statd ซึ่งทั้งหมดนี้สามารถเป็นแบบไดนามิก คู่มือความปลอดภัย NFS ที่ยอดเยี่ยมนี้แนะนำให้เปลี่ยนสคริปต์เริ่มต้นและโมดูลเคอร์เนลเพื่อบังคับให้ใช้พอร์ตแบบคงที่

นอกเหนือจากคำแนะนำข้างต้นซึ่งมีส่วนในไฟร์วอลล์ดูคำตอบของฉันสำหรับคำถามอื่นเกี่ยวกับการทำให้ NFS แข็งตัว


7
เราชอบเนื้อหามากกว่าชี้ไปที่เนื้อหา ข้อกำหนดเบื้องต้นของเนื้อหาที่มีลิงก์ก็ใช้ได้เช่นกันและต้องการลิงค์
user9517

2
ไม่แน่ใจเกี่ยวกับ 2012 แต่คำแนะนำในลิงก์ดูเหมือนว่าล้าสมัยอย่างไม่มีการลด NFS บน TCP เป็นที่ต้องการด้วยเหตุผลหลายประการและ NFS บน UDP สามารถทำให้ข้อมูลเสียหายอย่างเงียบ ๆ บนลิงค์ด่วนเนื่องจากข้อ จำกัด โปรโตคอล คู่มือความปลอดภัยไม่มีการกล่าวถึง Kerberos / GSS ฯลฯ
Maciej Piechotka

เกี่ยวกับ mountd ชีวิตจะง่ายขึ้นมากถ้าคุณกำหนดค่าใหม่เพื่อให้แน่ใจว่าพอร์ต mountd ได้รับการแก้ไข บนระบบเดเบียนแก้ไขค่า RPCMOUNTDOPTS เป็นอย่างเช่นRPCMOUNTDOPTS="--port 34567"จากนั้นรีสตาร์ทพร้อมsysctl --systemและ/etc/init.d/nfs-kernel-server restart
user45793

14

ฉันพบคำแนะนำที่เป็นประโยชน์สำหรับปัญหาของฉันในหน้านี้ แต่ไม่มีเรื่องง่ายที่จะติดตาม ดังนั้นนี่คือสูตรของฉัน

TL; DR - ต้องอนุญาตทั้งพอร์ต nfs (111, 2049) และพอร์ต mountd หลังจากแก้ไขแล้ว

คำแนะนำ:


การตั้งค่าพอร์ตคงที่สำหรับ 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)

นั่นคือทั้งหมดที่มีไป


3
คุณไม่จำเป็นต้องรีสตาร์ทกล่องทั้งหมด ง่าย ๆsudo service nfs-config restartก่อนที่จะเริ่มใหม่nfs-kernel-serverจะทำได้ดี
showp1984

@ showp1984 ขอบคุณฉันจะลองดูครั้งต่อไป
Amir Uval

หรือถ้าระบบของคุณใช้มันsystemctl systemctl restart nfs-kernel-server.service
fbicknel

นอกจากนี้คุณยังสามารถทำมันได้ทั้งหมดใน foop บวมที่หนึ่ง: 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 เป็นตัวอย่างข้างต้น คุณอาจใช้พอร์ตอื่นตามที่ระบุไว้
fbicknel

5

สิ่งนี้จะให้รายการของพอร์ตทั้งหมดที่ใช้โดยโปรแกรมที่เกี่ยวข้องกับ NFS ทั้งหมด:

rpcinfo -p | awk '{print $3" "$4}' | sort -k2n | uniq

3

ด้วย 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บางส่วนเท่านั้น)


1

สำหรับบันทึกฉันต้องเพิ่มการอนุญาตสำหรับพอร์ต 111, 2049 และ 1048 สำหรับการกำหนดค่าที่การแชร์ NFS ถูกส่งออกโดยเซิร์ฟเวอร์ Windows 2008 R2 และไคลเอนต์คือ Ubuntu 12.04.4

ฉันหวังว่านี่จะช่วยให้ใครบางคน


2
อาจช่วยอธิบายได้ว่าเหตุใดคุณจึงต้องใช้พอร์ต 1048 และวิธีการที่คุณกำหนด
HBruijn

3
ตรงไปตรงมาฉันไม่มีเงื่อนงำทำไมฉันต้องเพิ่มสิทธิ์สำหรับ 1,048 แต่การเพิ่มที่แก้ไขปัญหาของฉัน ฉันแค่อยากจะแบ่งปันว่าจะช่วยประหยัดเวลาให้กับคนอื่นในอนาคตได้หรือไม่ ฉันขอโทษที่ไม่สามารถตอบคำถามได้
Erdem KAYA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.