IST · บทที่ 4 Inter-VLAN Routing

หัวข้อ 14 · 15 นาที

Extended ACL และการทดสอบด้วย Kali

นึกภาพก่อน

เปิด ROAS แล้วทุก VLAN คุยกันได้หมด เหมือนตึกที่ทุกชั้นขึ้นลงลิฟต์ได้อิสระ ซึ่งไม่ใช่สิ่งที่ต้องการเสมอไป: พนักงานควรเปิดเว็บภายในได้ แต่ไม่ควร SSH เข้า server

ACL คือ รปภ. หน้าลิฟต์ที่ถือรายการ: ใครจากไหน ไปไหน ทำอะไร ได้หรือไม่ได้ และตรวจ จากบรรทัดบนลงล่าง เจอบรรทัดแรกที่ตรงก็ตัดสินทันที

Extended ACL

โดย default เมื่อเปิด ROAS ทุก VLAN คุยกันได้อิสระ ต้องใช้ Extended ACL บน router เพื่อกรอง traffic ระดับ Layer 3 / Layer 4

โจทย์ความปลอดภัยในสไลด์

ให้ VLAN 10 (Staff) เข้าถึง Web Server ใน VLAN 20 ได้ เฉพาะ TCP port 80 และ 443 ห้ามสแกนพอร์ตอื่น หรือใช้ ICMP / SSH

หลักการผูก ACL

ผูกทิศทาง in บน sub-interface ต้นทาง เพื่อให้ router drop packet ทันทีที่รับเข้ามา ประหยัด CPU เพราะไม่ต้องประมวลผล routing table ให้ packet ที่จะถูกทิ้งอยู่แล้ว

การตั้งค่า

cisco
! 1. สร้าง Extended Access List
ip access-list extended STAFF_TO_SERVER
 permit tcp 192.168.10.0 0.0.0.255 host 192.168.20.100 eq 80
 permit tcp 192.168.10.0 0.0.0.255 host 192.168.20.100 eq 443
 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
 permit ip any any

! 2. ผูกเข้ากับ sub-interface ต้นทาง
interface GigabitEthernet0/0/0.10
 ip access-group STAFF_TO_SERVER in

อ่านทีละบรรทัด:

บรรทัดความหมาย
permit tcp 192.168.10.0 0.0.0.255 host 192.168.20.100 eq 80ยอม TCP จาก VLAN 10 ไปยัง web server port 80
... eq 443ยอม port 443
deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255ทิ้งทุกอย่างที่เหลือจาก VLAN 10 ไป VLAN 20 (รวม ICMP, SSH)
permit ip any anyที่เหลือผ่าน (เช่น VLAN 10 ไปที่อื่น)
  • wildcard mask กลับด้านกับ subnet mask: 0.0.0.255 หมายถึง "สามส่วนแรกต้องตรง ส่วนสุดท้ายเป็นอะไรก็ได้" (= /24)
  • host 192.168.20.100 = เครื่องเดียว (เท่ากับ wildcard 0.0.0.0)
  • ท้าย ACL ทุกตัวมี implicit deny (ทิ้งทุกอย่างที่ไม่ตรงกับบรรทัดใด) ถ้าไม่มี permit ip any any VLAN 10 จะออกไปไหนไม่ได้เลย
ขั้นที่ 1 / 7เริ่มต้น
ต้นทาง
ปลายทาง
บริการ
Extended ACL
  1. ต้นทาง
  2. Switch
  3. trunk ↑
  4. Router
  5. trunk ↓
  6. Switch
  7. ปลายทาง

192.168.10.50 → 192.168.20.100 · ICMP (ping) · frame: untagged

Router: sub-interface และ routing table

C192.168.10.0/24Gi0/0/0.10dot1Q 10192.168.10.1
C192.168.20.0/24Gi0/0/0.20dot1Q 20192.168.20.1
C192.168.99.0/24Gi0/0/0.99dot1Q 99192.168.99.1
C = connectedtrunk เส้นเดียว ใช้ทั้งขาขึ้นและขาลง
1.0×

คำอธิบายทีละขั้น

Router-on-a-Stick

router ต่อกับ switch ด้วย trunk เส้นเดียว และมี sub-interface หนึ่งตัวต่อ VLAN แต่ละตัวถือ IP ของ default gateway ของ VLAN นั้น ดูว่า packet ข้าม VLAN ถูกใส่และลอก tag ที่ใดบ้าง

เลือก preset "ACL ยอม TCP 80" และ "ACL ทิ้ง SSH" เพื่อดูว่า ACL จับที่บรรทัดใด และ preset "ping จาก Kali" เพื่อดูว่า traffic ที่เข้ามาทาง sub-interface อื่นไม่ถูกตรวจ

ทดสอบด้วย Kali Linux

Kali อยู่ใน VLAN 99 (192.168.99.10) ใช้เครื่องมือสามกลุ่ม:

เครื่องมือใช้ทำอะไร
fpingส่ง ICMP Echo Request ตรวจว่า host ปลายทาง หลาย subnet ออนไลน์หรือไม่อย่างรวดเร็ว (ping sweep)
nmapสแกนหา host (-sn) และพอร์ตบริการ (-sS) ข้าม VLAN เพื่อ ทดสอบการทำงานของ ACL
traceroute และ Wiresharkดู routing hop และดักจับ packet เพื่อตรวจ 802.1Q tag

fping

bash
fping -a -g 192.168.10.0/24
fping 192.168.10.50 192.168.20.100
ผลความหมาย
is aliverouter routing packet ICMP ข้าม VLAN ได้สำเร็จ
ICMP Host Unreachableตรวจ default gateway บนเครื่องปลายทาง หรือ สถานะ sub-interface ของ router

nmap

bash
nmap -sn 192.168.20.0/24
sudo nmap -sS -p 22,80,443 192.168.20.100
optionทำอะไร
-snhost discovery — หาว่าเครื่องใดออนไลน์ ไม่สแกนพอร์ต
-sSSYN scan — ส่ง SYN ไปที่พอร์ตแล้วดูคำตอบ
สถานะความหมาย
openpacket ผ่าน ACL ไปถึง server และ server ตอบ SYN-ACK กลับมา
filteredACL ดักและ drop packet ไม่มีคำตอบกลับมาเลย
closed (เสริม)packet ไปถึง แต่ไม่มีบริการที่พอร์ตนั้น server ตอบ RST

filtered จึงเป็นหลักฐานว่า ACL ทำงาน

traceroute และ Wireshark

bash
traceroute 192.168.10.50

Hop ที่ 1 แสดง IP ของ sub-interface ของ router (192.168.99.1) พิสูจน์ว่า packet ถูกส่งขึ้นไปประมวลผลที่ Layer 3 ก่อนข้ามไป VLAN 10

Wireshark บน interface ที่เห็น trunk (เช่นพอร์ต mirror) จะเห็น 802.1Q header ระหว่าง Source MAC กับ Type พร้อม VID

ตัวอย่างไล่ทีละขั้น

โจทย์: หลังผูก ACL ข้างบนที่ขาเข้าของ Gi0/0/0.10 ทำนายผลของแต่ละการทดสอบ

จากทดสอบผลเหตุผล
Staff (VLAN 10)เปิดเว็บ http://192.168.20.100ได้ตรงบรรทัด permit tcp … eq 80
Staffnmap -sS -p 443openตรงบรรทัด eq 443
Staffnmap -sS -p 22filteredไม่ตรงสองบรรทัดแรก ตกที่ deny ip
Staffping 192.168.20.100ไม่ได้ICMP ไม่ใช่ TCP 80/443 ตกที่ deny ip
Staffping 192.168.99.10ได้ปลายทางไม่ใช่ VLAN 20 ผ่านที่ permit ip any any
Kali (VLAN 99)fping 192.168.20.100is aliveเข้ามาทาง Gi0/0/0.99 ซึ่งไม่มี ACL
Server (VLAN 20)ตอบ HTTP กลับไปหา Staffได้ขากลับเข้ามาทาง Gi0/0/0.20 ไม่มี ACL ขาเข้า

สองแถวสุดท้ายสำคัญ: ACL มีผลเฉพาะ interface และทิศทางที่ผูกไว้

จุดที่มักพลาด

1. ลืม implicit deny

ACL ที่มีแต่ permit สองบรรทัดจะทิ้งทุกอย่างที่เหลือ รวมถึง traffic ที่ไม่เกี่ยวกับ VLAN 20

2. เรียงบรรทัดผิด

ถ้าวาง deny ip … ไว้ก่อน permit tcp … eq 80 จะไม่มีอะไรผ่านเลย เพราะ ACL หยุดที่บรรทัดแรกที่ตรง

3. ใช้ subnet mask แทน wildcard mask

ACL ใช้ wildcard: /24 คือ 0.0.0.255 ไม่ใช่ 255.255.255.0

4. ผูกผิด interface หรือผิดทิศ

สไลด์ผูก in บน sub-interface ต้นทาง

5. สลับ open กับ filtered

open = ผ่านและได้ SYN-ACK · filtered = ถูก drop ไม่มีคำตอบ

6. คิดว่า ACL บน .10 กัน Kali ด้วย

Kali เข้ามาทาง .99 ซึ่งเป็นอีก sub-interface

ที่มา: มาตรฐานและเทคโนโลยีเครือข่าย (2).pdf หน้า 15–21