คำถามเกี่ยวกับ UFW แต่คำตอบนี้ใช้ iptables โดยตรงและอาจไม่ใช่สิ่งที่ต้องการ
คุณสามารถบล็อกแพ็กเก็ตเครือข่ายขาออกและขาเข้าได้ ยกเว้นแพ็กเก็ต SSH ของคุณด้วยสคริปต์ iptables นี้:
#!/bin/sh
FWVER=0.01
#
# ask1393247 Smythies 2022.02.16 เวอร์ชั่น:0.01
# ดูที่นี่:
# https://askubuntu.com/questions/1393247/does-ufw-allow-all-incoming-traffic-in-response-to-outbound-requests?noredirect=1#comment2409932_1393247
# เรียกใช้เป็น sudo บน s19
#เริ่มต้นจากด้านล่าง:
#
# ask1368071 Smythies 2021.10.08 เวอร์ชั่น:0.01
# ดูที่นี่:
# https://askubuntu.com/questions/1368071/iptables-that-only-allow-incoming-traffic-to-openssh-and-block-all-other-traffic
# เรียกใช้เป็น sudo บน s19
# รายการบันทึกใช้สำหรับแต่ละแพ็กเก็ต ssh ใหม่เท่านั้น ดูเหมือนว่าไม่มีเหตุผลที่จะบันทึกทุกแพ็กเก็ต ssh แต่ก็สามารถทำได้
#
echo "กำลังโหลดรุ่นชุดกฎ ask1393247 $FWVER..\n"
# ตำแหน่งของโปรแกรม iptables
#
IPTABLES=/sbin/iptables
#การตั้งค่าอินเทอร์เฟซและที่อยู่ภายนอกและภายในสำหรับเครือข่าย
#
# ตั้งค่าสำหรับคอมพิวเตอร์ Smythies s19 (สำหรับการทดสอบ) แก้ไขสำหรับคอมพิวเตอร์ของ ask1393247
EXTIF="br0"
EXTIP="192.168.111.136"
เครือข่าย="192.168.111.0/24"
จักรวาล="0.0.0.0/0"
# ล้างการกำหนดค่าใด ๆ ก่อนหน้านี้
#ระวังตรงนี้ ฉันสามารถทำได้ใน s19 แต่ไม่รู้
# เกี่ยวกับคอมพิวเตอร์ของผู้ใช้รายอื่น
#
echo " กำลังล้างกฎที่มีอยู่และตั้งค่านโยบายเริ่มต้น.."
$IPTABLES -P อินพุตลดลง
$IPTABLES -F อินพุต
$IPTABLES -P เอาต์พุตลดลง
$IPTABLES -F เอาต์พุต
$IPTABLES -P ยอมรับไปข้างหน้า
$IPTABLES -F ส่งต่อ
$IPTABLES -t แนท -F
# ลบเชนที่ผู้ใช้กำหนด
$IPTABLES -X
# รีเซ็ตตัวนับ IPTABLES ทั้งหมด
$IPTABLES -Z
# Smythies: แม้ว่าการอ้างอิงของฉันจะไม่มี แต่ฉันคิดว่าสิ่งนี้จำเป็น
$IPTABLES -t แนท -Z
# อินเทอร์เฟซย้อนกลับถูกต้อง
#
$IPTABLES -A อินพุต -i lo -s $UNIVERSE -d $UNIVERSE -j ยอมรับ
# อนุญาตให้ทราฟฟิกที่เกี่ยวข้องกลับมาที่เซิร์ฟเวอร์
# ด้วยเหตุผลที่ไม่ทราบสาเหตุ ask1393247 ไม่ต้องการเวอร์ชันทั่วไป จึงแสดงความคิดเห็นออกไป)
#$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ยอมรับ
# ask1393247 ดูเหมือนจะต้องการสิ่งนี้:
เสียงสะท้อน "ธง 1"
$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -p tcp --dport 22 -j ยอมรับ
เสียงสะท้อน "ธง 2"
# อนุญาตและบันทึกการเชื่อมต่อ SSH ใหม่ ไม่จำเป็นหากคุณไม่ต้องการบันทึกเซสชัน แต่คุณต้องเพิ่ม NEW ด้านบน
# หมายเหตุ: ฉันใช้พอร์ต 22 เพราะไม่มีใครสามารถมาที่นี่ได้ เปลี่ยนเป็นพอร์ตของคุณ
#
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW -p tcp -s $UNIVERSE -d $EXTIP --dport 22 -j LOG --log-prefix "ssh traffic:" --log-ข้อมูลระดับ
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW -p tcp -s $UNIVERSE -d $EXTIP --dport 22 -j ยอมรับ
# ตอนนี้ปล่อย ssh เท่านั้น:
$IPTABLES -A OUTPUT -o $EXTIF -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ยอมรับ
# หมายเหตุ: หากคอมพิวเตอร์ของคุณใช้ DCHP คุณจะต้องอนุญาตทั้งขาเข้าและขาออก
# เสร็จแล้ว.
#
echo ask1393247 กฎชุดเวอร์ชัน $FWVER เสร็จแล้ว
และนี่คือผลลัพธ์:
doug@s19:~/iptables/misc$ sudo iptables -xvnL
Chain INPUT (นโยบาย DROP 133 แพ็คเก็ต, 11819 ไบต์)
pkts bytes target prot เลือกใช้ปลายทางต้นทาง
0 0 ยอมรับทั้งหมด -- จริง * 0.0.0.0/0 0.0.0.0/0
202 13689 ยอมรับ tcp -- br0 * 0.0.0.0/0 192.168.111.136 สถานะที่เกี่ยวข้อง ก่อตั้ง tcp dpt:22
4 280 LOG tcp -- br0 * 0.0.0.0/0 192.168.111.136 state NEW tcp dpt:22 LOG flag 0 level 6 prefix "ssh traffic:"
4 280 ยอมรับ tcp -- br0 * 0.0.0.0/0 192.168.111.136 สถานะ ใหม่ tcp dpt:22
เชน FORWARD (นโยบายยอมรับ 0 แพ็กเก็ต 0 ไบต์)
pkts bytes target prot เลือกใช้ปลายทางต้นทาง
Chain OUTPUT (นโยบาย DROP 14 แพ็คเก็ต, 3240 ไบต์)
pkts bytes target prot เลือกใช้ปลายทางต้นทาง
164 25505 ยอมรับ tcp -- * br0 0.0.0.0/0 0.0.0.0/0 tcp spt:22 รัฐที่เกี่ยวข้อง ก่อตั้ง