คำถาม
คุณจะส่งต่อพอร์ตย่อย 1024 ที่มีสิทธิพิเศษไปยังพอร์ต 1024+ ที่ไม่มีสิทธิพิเศษด้วยไฟร์วอลล์ได้อย่างไร
เหตุผล
ทำไมเราถึงทำเช่นนี้? เราต้องการสลับพอร์ต 1050 ที่ไม่ได้รับสิทธิพิเศษบนเกตเวย์และใช้เซิร์ฟเวอร์อีเมลอัปสตรีมอื่น ตัวอย่างเช่น หากต้องการทดสอบโซลูชันสแปมอื่น ให้ใช้พอร์ต 1051 เพื่อส่งเมลไปยังเซิร์ฟเวอร์เมลอื่นที่มีโซลูชันการกรองสแปมอื่น
เซิร์ฟเวอร์อีเมลจะเชื่อมต่อกับเกตเวย์โดยอัตโนมัติเมื่อเริ่มทำงาน การเชื่อมต่ออัตโนมัติจะเกิดขึ้นได้บนพอร์ตที่ไม่มีสิทธิ์พิเศษที่เป็น 1024+ เท่านั้น
เค้าโครงและการตั้งค่า
เค้าโครง
++--------+ +----------------------------+ +---------------- +
| วาน | | 1,050 | <- | |
| ลูกค้า | | เกตเวย์ | \ | เมลเซิร์ฟเวอร์ |
| | <---> | 25 | -> | 25 |
++--------+ +----------------------------+ +---------------- +
ตั้งค่าไฟร์วอลล์
ล้างไฟร์วอลล์ เปิดพอร์ต ตั้งค่าพอร์ตไปข้างหน้า และเพิ่มบริการบางอย่าง
root@gateway:~# ไฟร์วอลล์-cmd --reload
root@gateway:~# firewall-cmd --zone=public --add-port=25/tcp
root@gateway:~# firewall-cmd --zone=public --add-forward-port=port=25:proto=tcp:toport=1050
root@gateway:~# firewall-cmd --add-service={http,https,smtp}
ตรวจสอบไฟร์วอลล์
ยืนยันการตั้งค่าไฟร์วอลล์...
root@gateway:~# firewall-cmd --list-all
สาธารณะ (ใช้งานอยู่)
เป้าหมาย: ค่าเริ่มต้น
icmp-block-inversion: ไม่
อินเทอร์เฟซ: etho0
แหล่งที่มา:
บริการ: dhcpv6-client http https smtp ssh
พอร์ต: 25/tcp
โปรโตคอล:
สวมหน้ากาก: ไม่
ส่งต่อพอร์ต: port=25:proto=tcp:toport=1050:toaddr=
พอร์ตต้นทาง:
icmp บล็อก:
กฎมากมาย:
นี่คือสิ่งที่เราคาดว่าจะเห็นในกฎไฟร์วอลล์
ผลลัพธ์
นี่คือสิ่งที่เราได้รับเมื่อเรา telnet เซิร์ฟเวอร์อีเมลอัปสตรีมบนเกตเวย์...
root@gateway:~# telnet localhost 1050
ลอง 127.0.0.1...
เชื่อมต่อกับ localhost
อักขระ Escape คือ '^]'
220 debian10email.debian10email ESMTP Postfix (เดเบียน/GNU)
นี่คือสิ่งที่เราได้รับจากเครื่องไคลเอนต์ระยะไกล...
client@client123:~$ telnet gateway.example.org 25
กำลังพยายาม <IP_of_gateway>...
เชื่อมต่อกับ gateway.example.org
อักขระ Escape คือ '^]'
เรายังคาดหวังว่าจะได้เห็น 220 debian10email.debian10email ESMTP Postfix (เดเบียน/GNU)
เส้นแต่ไม่ใช่
ตรวจสุขภาพ...
การทดสอบ
เพียงเพื่อยืนยันว่ากฎการส่งต่อพอร์ตนั้นเขียนถูกต้อง เรา...
- เปิดพอร์ต 1025 บนไฟร์วอลล์
- ส่งต่อพอร์ต 1025 ถึง 1050
- จากนั้นตรวจสอบสิ่งที่เราเห็นบนไคลเอนต์ระยะไกล
ปรับไฟร์วอลล์
ล้างไฟร์วอลล์ เปิดพอร์ต ตั้งค่าพอร์ตไปข้างหน้า และบริการบางอย่าง
root@gateway:~# ไฟร์วอลล์-cmd --reload
root@gateway:~# firewall-cmd --zone=public --add-port=1025/tcp
root@gateway:~# firewall-cmd --zone=public --add-forward-port=port=1025:proto=tcp:toport=1050
root@gateway:~# firewall-cmd --add-service={http,https,smtp}
ตรวจสอบไฟร์วอลล์
root@gateway:~# firewall-cmd --list-all
สาธารณะ (ใช้งานอยู่)
เป้าหมาย: ค่าเริ่มต้น
icmp-block-inversion: ไม่
อินเทอร์เฟซ: etho0
แหล่งที่มา:
บริการ: dhcpv6-client http https smtp ssh
พอร์ต: 1025/tcp
โปรโตคอล:
สวมหน้ากาก: ไม่
ส่งต่อพอร์ต: port=1025:proto=tcp:toport=1050:toaddr=
พอร์ตต้นทาง:
icmp บล็อก:
กฎมากมาย:
ผลลัพธ์
client@client123:~$ telnet gateway.example.org 1025
กำลังพยายาม <IP_of_gateway>...
เชื่อมต่อกับ gateway.example.org
อักขระ Escape คือ '^]'
220 debian10email.debian10email ESMTP Postfix (เดเบียน/GNU)
เรามีสิ่งที่คาดหวัง 220 debian10email.debian10email ESMTP Postfix (เดเบียน/GNU)
ดังนั้นไฟร์วอลล์จึงส่งต่อพอร์ตตามที่คาดไว้
บทสรุป
การส่งต่อระหว่างพอร์ตที่มีสิทธิพิเศษและไม่ได้รับสิทธิพิเศษนั้นแตกต่างจากการส่งต่อระหว่างพอร์ตที่ไม่มีสิทธิพิเศษ
เราจะส่งต่อพอร์ตย่อย 1024 ที่มีสิทธิพิเศษไปยังพอร์ต 1024+ ที่ไม่มีสิทธิพิเศษด้วยไฟร์วอลล์บน Debian 10 Buster ได้อย่างไร หากมีคำตอบที่ใดโปรดชี้ให้เห็นเราไม่สามารถหามันได้