|
สมมุติว่ามีปัญหาอยู่อย่างนี้ครับ
ถ้าท่านเป็นผู้ให้บริการอินเตอร์เน็ตเช่นประเภท
Internet Corporate Access โดยจำนวน
IP
ที่ท่านให้กับลูกค้าแต่ละรายอาจจะมีจำนวนเป็น 16,32,64
หรือ 128 IP
ก็แล้วแต่ว่าผู้ให้บริการแต่ละรายจะมีนโยบายให้กันเท่าไหร่นะครับ
ท่านคงจะได้เจอปัญหานี้มาแล้วบ้างที่ว่า
เมื่อจำนวนของเครื่องคอมพิวเตอร์หรือ Server
ของลูกค้ามีมากกว่าจำนวน IP
ที่ท่านให้แล้วท่านจะให้คำปรึกษากับลูกค้าอย่างไร
หรือถ้าเป็นในส่วนของลูกค้า จะต้องทำอย่างไร
ปัญหาที่กล่าวมานี้สามารถแก้ปัญหาได้ด้วยการใช้
Linux Server ซึ่งเป็น
OS แบบ Open Source
และสามารถใช้ได้ฟรีโดยไม่ต้องซื้อ
Software ราคาแพงมาใช้
แต่อาจจะไม่สะดวกเท่ากับ Software
ที่มีราคาแพง ๆ นะครับ แต่ก็นั่นแหละครับ
มันสามารถประหยัดต้นทุนลงไปได้มากทีเดียว
สมมุติฐาน
สมมุติว่าหน่วยงานที่มีปัญหาได้เช่า
Internet Corporate Access (Internet
เป็นแบบ Leased Line)
จาก ISP มา
และได้ IP Address จาก
ISP สำหรับวง LAN
เป็น 16 ip
คือ 202.129.48.160/28
(ใช้งานจริงได้ 14 ip)
แต่มีจำนวนของเครื่องคอมพิวเตอร์หรือเซิร์ฟเวอร์ภายในสำนักงานมากกว่า
14 ip
โดย ip ที่ได้จาก
ISP เป็นดังนี้ครับ :
LAN IP : 202.129.48.160/28 นั่นคือจะมี IP
ภายในวงแลนของผู้ใช้บริการเป็น 16
IP คือ 202.129.48.160-175
แต่ใช้ได้จริงแค่ 14 ip
เพราะไอพี 202.129.48.160 เป็น Network IP
และไอพี 202.129.48.175
เป็น Broadcast IP
WAN IP : 202.129.19.244/30
นั่นคือจะมี wan ip
ฝั่ง ISP เป็น
202.129.19.245 และ wan ip
ฝั่งผู้ใช้บริการเป็น 202.129.19.246
วิธีการแก้ปัญหา
เนื่องจาก
IP
ที่ได้จาก
ISP
นั้นไม่เพียงพอต่อการใช้งาน ดังนั้น
วิธีแก้ก็คือการใช้
Private IP
ร่วมกับการทำเกตเวย์
โดยเครื่องที่จะเอามาทำเกตเวย์นั้นก็สามารถเอาเครื่อง
PC ที่มีสเปคพอใช้ได้หน่อยมาทำ
หรือจะใช้ Server จริง ๆ
เลยก็ได้ ส่วน OS
ที่ลงบนเครื่องเกตเวย์ให้ลง Linux
นะครับ สำหรับ Private
IP มาตรฐานนั้นมี 3 ชุดด้วยกันคือ
10.0.0.0 -
10.255.255.255
สำหรับ Class A
172.16.0.0 - 172.31.255.255
สำหรับ Class B
192.168.0.0 - 192.168.255.255
สำหรับ Class C
ในที่นี้ผมขอเลือกใช้
Class C นะครับ
โดยวิธีการที่จะทำนั้นก็คือการเอาเกตเวย์มาคั่นระหว่างเราเตอร์กับเครือข่าย
LAN ภายใน ดังรูปที่ 1
โดยเครือข่าย LAN
ภายในนั้นให้ใช้ IP Address
เป็น Private IP
ซึ่งสามารถกำหนดได้โดยไม่จำกัด ซึ่งในที่นี้กำหนด
IP เริ่มต้นที่
192.168.1.11 เป็นต้นไป
ส่วนของตัวเกตเวย์ควรจะมีการ์แลน 2 การ์ดนะครับ
โดยกำหนดให้การ์หนึ่งมี IP
อยู่ในกลุ่มของ IP
ที่ได้จาก ISP
โดยในที่นี้เลือกเป็น 202.129.48.162
และอีกการ์ดให้กำหนด IP
เป็น Private IP
โดยในที่นี้กำหนดเป็น 192.168.1.1
ดังนั้นจากรูปจะเห็นว่า
ถ้าจะให้เครื่องภายในวงแลนสามารถออกสู่อินเตอร์เน็ตได้
ก็ต้องกำหนดให้เครื่องคอมพิวเตอร์ภายในชี้
default gateway ไปที่
192.168.1.1
และที่เกตเวย์จะต้องมีการเซ็ตว่าจะอนุญาตให้แพ็คเก็ตข้อมูลที่ส่งมาจากเครือข่ายภายในประเภทไหนบ้างผ่านไปยังเครือข่ายอินเตอร์เน็ตได้
และในทางกลับกันก็จะตัองทำการเซ็ตว่าจะอนุญาตให้แพ็คเก็ตข้อมูลไดบ้างจากภายนอกหรืออินเตอร์เน็ตสามารถผ่านเข้าไปสู่เครือข่ายภายในได้ด้วย

รูปที่ 1 การทำเกตเวย์โดยใช้การ์ดแลน 2 การ์ด
การเซ็ตเพื่อจะกำหนดว่าจะให้เครือข่ายภายในสามารถติดต่อกับเครือข่ายภายนอกได้หรือไม่
นั้นจะต้องใช้คำสั่ง ipchains
บนเครื่อง gateway ครับ
โดยคำสั่ง ipchains
เป็นคำสั่งในการทำไฟร์วอลลบน Linux
ครับ
ซึ่งจะมีรูปแบบและพารามิเตอร์ที่หลายหลายมาก
โดยในที่นี้ผมจะยกตัวอย่างเท่าที่จำเป็นเท่านั้นนะครับสมมุติว่าจะให้ผู้ใช้ภายในเครือข่ายสามารถที่จะใช้บริการทุกอย่างได้โดยผ่าน
gateway ก็ให้ใช้คำสั่ง
ipchains ดังนี้ครับ
#echo 1 > /proc/sys/net/ipv4/ip_forward
#/sbin/ipchains -A forward -s 192.168.1.0/24 -d 0/0
-j MASQ
จากคำสั่งดังกล่าว คำสั่งแรกเป็นการ
enable ip_forward
ส่วนคำสั่งที่ 2 เป็นการทำ IP Masquerading
ซึ่งจะหมายถึง
การทำแพ็คเก็ตข้อมูลที่ส่งมาจากเครือข่ายภายในให้เปลี่ยนแปลงเป็นแพ็คเก็ตข้อมูลเสมือนว่ามีแอสเดรสต้นทางของแพ็คเก็ตมากจากเครื่อง
Linux เอง
แต่จะมีการกำหนดพอร์ตเพิ่มเติมเพื่อที่จะให้ทราบได้ว่าส่งมาจากโฮสต์ใดของเครือข่ายภายใน
โดยขั้นตอนในการกำหนด Masquerade Gatewate
มีขั้นตอนดังนี้
-
แจ้งให้โฮสต์บนโลคัลเน็ตเวิร์ค
(เครือข่ายภายใน)
ทราบว่าช่องทางที่จะเชื่อมต่อกับอินเตอร์เน็ตเป็นช่องทางใดบน
Linux Server อาจจะเป็น
eth1 (การ์ดแลนฝั่งที่ติดต่อกับเครือข่ายภายนอก
จากรูปที่ 1 คือการ์ดด้านขวามือ)
หรือในการณีที่เชื่อมต่ออินเตอร์เน็ตผ่าน
dialup อาจะเป็น ppp0
หรือ ppp1
นะครับ
-
เมื่อมีแพ็คเกตจากโลคัลเน็ตเวิร์คเดินทางมาถึง
Masqueraded Gateway ตัว
Masqueraded Gateway
ก็จะเปลี่ยนข้อมูลที่เป็นแอสเดรสต้นทางในแพ็คเก็ต
พร้อมกับการกำหนดพอร์ตบนโปรโตคอล TCP/IP
ใหม่เพื่อที่จะให้สามารถจำแนกโฮสต์บนโลคัลเน็ตเวิร์คได้
-
เมื่อมีแพ็คเกตจากอินเตอร์เน็ตเดินทางมาถึง
Masqueraded Gateway ตัว
Masqueraded Gateway
ก็จะค้นหาข้อมูลบนพอร์ตของโปรโตคอล TCP/IP
เพื่อจะให้ทราบว่าเป็นข้อมูลของโฮสต์ใดบนโลคัลเน็ตเวิร์ค
จากนั้นก็จะกำหนดแอดเดรสปลายทางของแพ็คเกตใหม่
เพื่อส่งไปยังโฮสต์บนโลคัลเน็ตเวิร์ค
-
การทำงานดังกล่าวเป็น
Transparent
ต่อโฮสต์ต้นทางหรือปลายทางที่รับ/ส่งข้อมูล
ซึ่งก็คล้ายกันการทำ NAT
แบบมี IP
จริงแค่ IP เดียวนะครับ
ส่วนรูปที่ 2 ก็เป็นหลักการเดียวกันกับรูปที่ 1 นะครับ
เพียงแต่ว่าบนตัว Gateway
มีการ์ดแลนแค่การ์ดเดียว
การแก้ปัญหาก็ทำได้ด้วยการกำหนดค่า IP Address
บนการ์ดนั้นให้มี IP
เป็น 2 ค่า
(Linux สามารถทำได้) คือ
ip จริงค่าหนึ่งและอีกค่าเป็น
Private IP
และให้เครือข่ายภายในกำหนด IP
ของทุกเครื่องเป็น Private IP
หมด โดยให้ชี้ default dateway
มาที่ Private IP ของ
Gateway
แต่วิธีนี้ไม่ขอแนะนำให้ใช้นะครับเพราะแพ็กเกตข้อมูลที่เป็นของอินเตอร์เน็ตปนเปอยู่กับแพ็คเกตข้อมูลภายใน
และยูสเซอร์ก็สามารเปลี่ยน IP
ของเครื่องเป็น IP จริงได้

รูปที่ 2 การทำเกตเวย์โดยใช้การ์ดแลน 1 การ์ด
การใช้
ipchains
ที่ผ่านมานั้นเป็นการเปิดบริการให้ยูสเซอร์ที่อยู่ในวงเครือข่ายภายในสามารถใช้บริการบนอินเตอร์เน็ตได้ทุกอย่าง
นั่นคือไม่มีการห้ามใช้บริการประเภทใด
ในบางสถานะการณ์นั้น
เราสามารถห้ามไม่ให้ยูสเซอร์ใช้บริการบางอย่างได้
เช่นห้ามเล่น ICQ ห้ามใช้
POP3 เป็นต้น
และบางครั้งตัวเกตเวย์ของเราเองอาจจะถูกโจมตีจากบุคคลที่ไม่หวังดีได้
ดังนั้นถ้าเรามีการป้องกันการโจมตีไว้ด้วยก็จะเป็นสิ่งที่ดี
ซึ่ง ipchains
สามารถจะป้องกันตรงนี้ได้
การทำไฟร์วอลล์ด้วย
ipchains
ตัวอย่างต่อไปนี้เป็นตัวอย่างหนึ่งของการทำไฟร์วอลล์ที่ผมใช้งานอยู่จริง
โดยมีรูปแบบการเชื่อมต่อของเครือข่ายเป็นดังรูปที่ 1
ซึ่งในตัวไฟร์วอลล์เองมีบริการอื่นที่รันอยู่ด้วยคือ
Web Server (ทำเป็น
Webmail ติดต่อกับ mail
server คือเครื่องตัวเองผ่าน
smtp และ imap), DNS Server,
Proxy Server, Mail Server (เปิดให้
client คอนเน็กผ่านทั้ง
pop3 และ imap), Ftp Server
และอนุญาตให้เครือข่ายภายในสามารถออกไปใช้บริการอินเตอร์เน็ตที่ประกอบด้วย
ftp,telnet,smtp,pop3,imap,webcache,http,https,icq,ping,dns
และมีการห้ามพอร์ตบางพอร์ตของ
tcp และ
udp
ซึ่งสามารถสรุปเป็นตารางดังต่อไปนี้
|
ลำดับ |
Source |
Destination |
Service |
Port No. |
Action |
|
1 |
Internal |
any |
ftp |
21 tcp |
accept |
|
2 |
Internal |
any |
telnet |
23 tcp |
accept |
|
3 |
any |
any |
smtp |
25 tcp |
accept |
|
4 |
any |
any |
http |
80 tcp |
accept |
|
5 |
Internal |
any |
pop3 |
110 tcp |
accept |
|
6 |
Internal |
any |
imap |
143 tcp |
accept |
|
7 |
localhost |
localhost |
imap |
143 tcp |
accept |
|
8 |
Internal |
any |
https |
443 tcp |
accept |
| 9 |
any |
any |
dns |
53 udp |
accept |
|
10 |
Intenal |
any |
icq |
4000 udp |
accept |
|
11 |
ไม่ใช่ Internal |
any |
webcache
(proxy) |
8080 tcp |
reject |
|
12 |
Internal |
any |
เป็นการทำ NAT (MASQ) |
|
forward |
|
13 |
any |
any |
tcp port 0-1023 |
0-1023
tcp |
reject |
|
14 |
any |
any |
tcp Network File
System (NFS) |
2049 tcp |
reject |
|
15 |
any |
any |
udp port 0-1023 |
0-1023 udp |
reject |
|
16 |
any |
any |
udp Network File
System (NFS) |
2049 udp |
reject |
|
17 |
any |
any |
x windows system |
6000-6009 tcp |
reject |
|
18 |
any |
any |
X Font Service |
7100 tcp |
reject |
1: #ipchains -A input -s 192.168.1.0/24 -d 0/0
21 -p tcp -y -j ACCEPT
2:
#ipchains -A input -s 192.168.1.0/24 -d 0/0 23 -p
tcp -y -j ACCEPT
3:
#ipchains -A input -s 0/0 -d 0/0 25 -p
tcp -y -j ACCEPT
4: #ipchains -A input -s 0/0 -d 0/0 80 -p
tcp -y -j ACCEPT
5:
#ipchains -A input -s 192.168.1.0/24 -d 0/0 110 -p
tcp -y -j ACCEPT
6:
#ipchains -A input -s 192.168.1.0/24 -d 0/0 143 -p
tcp -y -j ACCEPT
7: #ipchains -A input -s 127.0.0.1 -d 127.0.0.1 143 -p
tcp -y -j ACCEPT
8: #ipchains -A input -s
192.168.1.0/24 -d 0/0 443 -p
tcp -y -j ACCEPT
9:
#ipchains -A input -s 0/0 -d 0/0 53 -p udp -j ACCETP
10: #ipchains -A input -s 192.168.1.0/24 -d 0/0 4000 -p
udp -j ACCEPT
11: #ipchains -A input -s !
192.168.1.0/24 -d 0/0 8080 -p tcp -y -j REJECT
12:#ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j
MASQ
13:#ipchains -A input -s 0/0 -d 0/0 0:1023 -p tcp -y -j
REJECT
14:#ipchains -A input -s 0/0 -d 0/0 2049 -p tcp -y -j
REJECT
15:#ipchains -A input -s 0/0 -d 0/0 0:1023 -p udp -j
REJECT
16:#ipchains -A input -s 0/0 -d 0/0 2049 -p udp -j
REJECT
17:#ipchains -A input -s 0/0 -d 0/0 6000:6009 -p tcp -y
-j REJECT
18:#ipchains -A input -s 0/0 -d 0/0 7100 -p tcp -y -j
REJECT
(ดูรายละเอียดของ tcp ports
และ udp ports ได้ที่
http://www.southcat.net/technology/computer/tcp_ports.html และ
http://www.southcat.net/technology/computer/udp_ports.html )
ความหมายแต่ละบรรทัด:
1.อนุญาตให้เครือข่ายภายใน ftp
ไปยังปลายทางที่ไหนก็ได้
2.อนญาติให้เครือข่ายภายใน
telnet ไปยังปลายทางที่ไหนก็ได้
3.อนุญาตให้รับส่งเมล์ผ่าน
smtp
ได้ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
4.อนุญาตให้ใช้เรียกใช้งานเว็บได้ไม่ว่าจะเรียกจากที่ไหน
และเรียกไปที่ไหนก็ได้
5.อนุญาตให้ mail client
ของเครือข่ายภายในรับส่งเมล์กับ
mail server ที่ไหนก็ได้ผ่าน
POP3
6.อนุญาตให้ mail client
ของเครือข่ายภายในรับส่งเมล์กับ
mail server ที่ไหนก็ได้ผ่าน
IMAP
7.อนุญาตให้ localhost
สามารถใช้ imap
ติดต่อกับ localhost
ได้ เพื่อทำ webmail
8.อนุญาตให้เครือข่ายภายในใช้
https ได้
9.อนุญาตให้ใช้งาน DNS
ได้ ไม่ว่าต้นทางและปลายทางอยู่ที่ไหน
10.อนุญาตให้เครือข่ายภายในใช้
ICQ ได้
11.ไม่อนุญาตให้เครือข่ายที่นอกเหนือจากเครือข่ายภายในสามารถใช้งาน
Proxy Server ได้
12.ทำ NAT
ให้เครือข่ายภายในติดต่อกับเครือข่ายภายนอกที่ไหนก็ได้
13.ไม่อนุญาตให้ใช้งาน tcp
พอร์ต 0-1023
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
14.ไม่อนุญาตให้ใช้งาน tcp
พอร์ต 2049 (NFS)
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
15.ไม่อนุญาตให้ใช้งาน udp
พอร์ต 0-1023
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
16.ไม่อนุญาตให้ใช้งาน udp
พอร์ต 2049 (NFS)
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
17.ไม่อนุญาตให้ใช้งาน tcp
พอร์ต 6000-6009 (เป็น
x11 สำหรับ X-windows)
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
18.ไม่อนุญาตให้ใช้งาน tcp
พอร์ต 7100 (X Font Service)
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
จากคำสั่งข้างบน เนื่องจาก webmail
จะต้องมีการติดต่อกับ Mail Server
ผ่าน imap
ดังนั้นในบรรทัดที่ 7 เราจึงต้องอนุญาตให้
localhost
สามารถเชื่อมต่อ IMAP
กับ localhost
ได้ ซึ่งอาจจะใช้คำสั่งเป็นอีกแบบ ดังนี้ได้ครับ
:
#ipchains -A input -s 0/0 -d 0/0 -i lo -j
ACCEPT
จากตัวอย่างที่ผ่านมา
อาจจะมีบางคนสงสัยว่าทำไมในส่วนท้ายของชุดคำสั่งไฟร์วอลล์ที่ผ่านมา
(บรรทัดที่ 13-18)
จึงไม่ Reject ทั้ง TCP
และ UDP
ให้หมดเลยด้วยการใช้คำสั่งแค่ 2 บรรทัด ต่อไปนี้ (แทนที่บรรทัด 13-18
ของคำสั่งข้างบนเป็นคำสั่งใหม่บรรทัดที่ 13-14)
1: #ipchains -A input -s 192.168.1.0/24 -d 0/0
21 -p tcp -y -j ACCEPT
2:
#ipchains -A input -s 192.168.1.0/24 -d 0/0 23 -p
tcp -y -j ACCEPT
3:
#ipchains -A input -s 0/0 -d 0/0 25 -p
tcp -y -j ACCEPT
4: #ipchains -A input -s 0/0 -d 0/0 80 -p
tcp -y -j ACCEPT
5:
#ipchains -A input -s 192.168.1.0/24 -d 0/0 110 -p
tcp -y -j ACCEPT
6:
#ipchains -A input -s 192.168.1.0/24 -d 0/0 143 -p
tcp -y -j ACCEPT
7: #ipchains -A input -s 127.0.0.1 -d 127.0.0.1 143 -p
tcp -y -j ACCEPT
8: #ipchains -A input -s
192.168.1.0/24 -d 0/0 443 -p
tcp -y -j ACCEPT
9:
#ipchains -A input -s 0/0 -d 0/0 53 -p udp -j ACCETP
10: #ipchains -A input -s192.168.1.0/24 -d 0/0 4000 -p
udp -j ACCEPT
11: #ipchains -A input -s !
192.168.1.0/24 -d 0/0 8080 -p tcp -y -j REJECT
12:#ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j
MASQ
13:#ipchains -A input -s 0/0 -d 0/0 -p udp -j
REJECT
14:#ipchains -A input -s 0/0 -d 0/0 -p tcp -y
-j REJECT
ถ้าทำแบบนี้จะมีปัญหาคือ
เครือข่ายภายในไม่สามารถเล่น
ICQ ได้ เพราะ ICQ
นอกจากจะทำงานที่ UDP port
4000 แล้ว มันยังทำงานที่ TCP
port ที่ค่าพอร์ตมากกว่า 1023
อีกด้วย
และปัญหาอีกอย่างที่ผมเจอคือเครือข่ายภายในไม่สามารถใช้บริการ
DNS ไปยังภายนอกได้
ซึ่งผมคิดว่าน่าจะมีสาเหตุจากการทำ
Masquerade
ที่ไม่มีความสามารถเท่ากับการทำ NAT
จริง ๆ
ออปชันที่เป็น -y
ซึ่งมีเฉพาะที่ใช้กับโปรโตคอล tcp
เท่านั้น กล่าวคือ TCP
เป็นโปรโตคอลแบบ "connection
oriented"
คือต้องสถาปนาการเชื่อมต่อระหว่างสถานีต้นทางและปลายทางก่อนการส่งข้อมูล
ซึ่งจะต่าง กับ UDP ที่เป็นแบบ
"connectionless"
คือไม่มีการสถาปนาการเชื่อมต่อระหว่างต้นทางและปลายทาง
การใช้ -y ก็เพื่อที่จะอนุญาต/ไม่อนุญาต
ให้มีการสถาปนาการเชื่อมต่อ (initiate
communication) สำหรับโปรโตคอล
TCP นั่นเอง
ในเรื่องของ ipchains
นั้นมีรายละเอียดเกี่ยวกับการใช้งานมาก
ซึ่งไม่ขออธิบายรายละเอียดในที่นี้
การทำไฟร์วอลล์หรือเกตเวย์
ถ้าต้องการความปลอดภัยมาก ๆ ก็อาจจะต้องใช้คำสั่งของ
ipchains ที่ยุ่งยากมากกว่านี้
แต่ยิ่งมีจำนวน chains
มากขึ้นเท่าไหร่ก็จะมีผลทำให้ Server
ต้องทำงานหนักขึ้น ซึ่งส่งผลให้
Server ทำงานช้าลงได้
ในการใช้งานจริง ๆ ท่านสามารถพลิกแพรง
ได้ตามความเหมาะสมนะครับ ไม่ต้องเอาตามของผม
ของผมอาจจะจะไม่ปลอดภัยมากนักนะครับ
มันขึ้นอยู่กับระดับความปลอดภัยที่ต้องการนะครับว่าจะให้มากน้อยขนาดไหน
Demilitarized Zone (DMZ)
ต่อไปผมจะขอยกตัวอย่างในกรณีที่ผู้ใช้บริการมี
Server ต่าง ๆ อยู่ด้วย
ในที่นี่สมมุติว่ามี Web Server, FTP Server,
DNS Server , Proxy Server,
Mail Server และ
MySql Serer
แล้วเราจะทำอย่างไรล่ะ
วิธีการที่นิยมกันคือการเพิ่มโซนของเครือข่ายมาอีกโซนหนึ่งนั่นคือ
Demilitarized Zone (DMZ)
ซึ่งถ้าแปลตรง ๆ ก็คือ "เขตปลอดทหาร"
เช่น
ที่กำหนดขึ้นที่เขตแดนระหว่างประเทศเกาหลีเหนือและประเทศเกาหลีใต้ในระหว่างการสงบศึกชั่วคราวของสงครามเกาหลี
สำหรับในเรื่อง Network Security
แล้ว DMZ
เป็นคำจำกัดความของโซนอีกประเภทหนึ่งที่ไม่ใช่ทั้ง
Internal (เครือข่ายภายใน) และ
External
(เครือข่ายภายนอกหรือเครือข่ายอินเตอร์เน็ต)
แต่หมายถึงเครือข่ายที่ต้องมีการสื่อสารกับทั้งเครือข่ายภายในและเครือข่ายภายนอกนั่นเอง
และดังนั้นผมจึงได้จัดให้ Server
ทั้ง 5
ซึ่งต้องติตต่อกับทั้งเครือข่ายภายในและเครือข่ายภายนอกให้อยู่ใน
DMZ ดังรูปที่ 3
อาจจะสงสัยบ้างว่าถ้ามี DHCP Server
ด้วยจะเอาไว้ตรงไหน เนื่องจาก
DHCP Server
ไม่ต้องมีการติดต่อสื่อสารกับเครือข่ายภายนอก
จึงสามารถวางไว้ที่เครือข่ายภายในได้เลยครับ หรือถ้า
Gateway มี Spec
สูงหน่อย ก็สามารถวางไว้บน
gateway เลยก็ได้ครับ

รูปที่ 3
การทำไฟร์วอลล์แบบที่มี DMZ
ที่จัดแบ่งไอพีไม่ถูกต้อง
จากรูปข้างบนนี้ผมลองทำดูแล้วมีปัญหาครับ คือ
Linux ไม่ยอมรับลักษณะที่มีการ์ดแลนด์
2 การ์ดแต่มีค่า IP
อยู่ในวงเดียวกันนั่นคือการ์ด 202.129.48.162 กับการ์ด
202.29.48.163 ซึ่งเป็น IP
ที่อยู่ในวงเดียวกันคืออยู่ในวง 202.129.48.160/28
เมื่อเป็นแบบนี้วิธีการแก้ปัญหาก็สามารถทำได้ด้วยการแบ่ง
subnet ออกเป็น 2
subnet คือแบ่งไอพีวงแลนที่ได้จาก
ISP เป็น 2 วงแลนนั่นเอง
โดยวงแลนวงที่หนึ่งจะให้เป็นของ External
และวงที่สองเป็นของ DMZ
ซึ่งสามารถแบ่งได้เป็นดังนี้ :
วงที่ 1 : 202.129.48.160/29
ซึ่งจะมีไอพีเป็น 8 ไอพีที่อยู่ในช่วง
202.129.48.160 ถึง
202.129.48.167 แต่จะใช้งานได้จริงเป็น 6 ip
คือ 202.129.48.161 ถึง
202.129.48.166
วงที่ 2 : 202.129.48.168/29
ซึ่งจะมีไอพีเป็น 8 ไอพีที่อยู่ในช่วง
202.129.48.168 ถึง 202.129.48.175
แต่จะใช้งานได้จริงเป็น 6 ip
คือ 202.129.48.169 ถึง 202.129.48.174
และแล้วก็จะได้รูปแบบของการจัดวางเครือข่ายทั้งหมดใหม่เป็นดังรูปที่
4

รูปที่ 4
การทำไฟร์วอลล์แบบที่มี
DMZ ที่ถูกต้อง
เพื่อความสะดวกในการทำ ipchains
เราควรจัดทำตารางแอคเซสรูลขึ้นมาก่อน
เพื่อแสดงความต้องการในการใช้งานว่าเราต้องการจะยอมรับหรือปฏิเสธแอปปลิเคชันอันไหนบ้าง
โดยความต้องการในที่นี้ขออ้างถึงรูปที่ 4
และได้ดังตารางต่อไปนี้ :
|
ลำดับ |
Source |
Destination |
Service |
Port No. |
Action |
|
1 |
internal |
any |
เป็นการทำ NAT (MASQ) |
|
forward |
|
2 |
internal |
any |
ftp |
21 tcp |
accept |
|
3 |
internal |
any |
dns |
53 udp |
accept |
|
4 |
dmz |
any |
dns |
53 udp |
accept |
|
5 |
any |
dmz |
dns |
53 udp |
accept |
|
6 |
any |
any |
http |
80 tcp |
accept |
|
7 |
Internal |
any |
telnet |
23 tcp |
accept |
|
8 |
any (external) |
internal |
telnet |
23 tcp |
reject |
|
9 |
any |
any |
smtp |
25 tcp |
accept |
| 10 |
internal |
any |
pop3 |
110 tcp |
accept |
|
11 |
Intenal |
any |
imap |
143 tcp |
accept |
|
12 |
Internal |
any |
https |
443 tcp |
accept |
|
13 |
Internal |
any |
ping |
icmp |
accept |
|
14 |
ไม่ใช่ Internal |
any |
webcache
(proxy) |
8080 tcp |
reject |
|
15 |
any
(external) |
dmz |
ping |
icmp |
reject |
|
16 |
any |
any |
tcp port 0-1023 |
0-1023 tcp |
reject |
|
17 |
any |
any |
tcp Network File
System (NFS) |
2049 tcp |
reject |
|
18 |
any |
any |
udp port 0-1023 |
0-1023 udp |
reject |
|
19 |
any |
any |
udp Network File
System (NFS) |
2049 udp |
reject |
|
20 |
internal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม SubSeven |
2773 tcp |
reject |
|
21 |
internal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม SubSeven |
6771 tcp |
reject |
|
22 |
internal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม SubSeven |
6713 tcp |
reject |
|
23 |
internal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม SubSeven |
7215 tcp |
reject |
|
24 |
internal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม SubSeven |
27374 tcp |
reject |
|
25 |
internal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม SubSeven |
27573 tcp |
reject |
|
26 |
internal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม SubSeven |
54283 tcp |
reject |
|
27 |
any |
dmz |
x windows system |
6000-6009 tcp |
reject |
|
28 |
any |
dmz |
X Font Service |
7100 tcp |
reject |
|
29 |
intenal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม Back
Orifice 2000 |
8787 tcp |
reject |
|
30 |
internal |
any |
ดักจับโฮสต์ภายในที่ติดโปรแกรม Back
Orifice 2000 |
54320-54321 |
reject |
1:#ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ
2:#ipchains -A input -s 192.168.1.0/24 -d 0/0 21 -p tcp
-y -j ACCEPT
3.:#ipchains -A input -s
192.168.1.0/24 -d 0/0 53 -p udp
-j ACCEPT
4:#ipchains -A input -s 202.129.48.168/29 -d 0/0 53
-p udp -j ACCEPT
5:#ipchains -A input -s 0/0 -d 202.129.48.168/29 53
-p udp -j ACCEPT
6:#ipchains -A input -s 0/0 -d 0/0 80 -p tcp -y -j
ACCEPT
7:#ipchains -A input -s 192.168.1.0/24 -d 0/0 23 -p tcp
-y -j ACCEPT
8:#ipchains -A input -s 0/0 -d 202.129.48.168/29
23 -p
tcp -y -j REJECT
9:#ipchains -A input -s 0/0 -d 0/0 25 -p tcp -y -j
ACCEPT
10:#ipchains -A input -s 192.168.1.0/24 -d 0/0 110 -p tcp
-y -j ACCEPT
11:#ipchains -A input -s 192.168.1.0/24 -d 0/0 143 -p tcp
-y -j ACCEPT
12:#ipchains -A input -s 192.168.1.0/24 -d 0/0 443 -p tcp
-y -j ACCEPT
13:#ipchains -A input -s 192.168.1.0/24 -d 0/0 -p icmp
--icmp-type ping -j ACCEPT
14: #ipchains -A input -s !
192.168.1.0/24 -d 0/0 8080 -p tcp -y -j REJECT
15:#ipchains -A input -s 0/0 -d 202.129.48.168/29 -p
icmp --icmp-type ping -j REJECT
16:#ipchains -A input -s 0/0 -d 0/0 0:1023 -p tcp -y
-j REJECT
17:#ipchains -A input -s 0/0 -d 0/0 2049 -p tcp -y -j
REJECT
18:#ipchains -A input -s 0/0 -d 0/0 0:1023 -p udp -j
REJECT
19:#ipchains -A input -s 0/0 -d 0/0 2049 -p udp -j
REJECT
20:#ipchains -A input -s 192.168.1.0/24 -d 0/0 2773 -p tcp -y -j
REJECT
21:#ipchains -A input -s 192.168.1.0/24 -d 0/0 6771 -p tcp -y -j
REJECT
22:#ipchains -A input -s 192.168.1.0/24 -d 0/0 6713 -p tcp -y -j
REJECT
23#ipchains -A input -s 192.168.1.0/24 -d 0/0 7215
-p tcp -y -j REJECT
24:#ipchains -A input -s 192.168.1.0/24 -d 0/0 27374
-p tcp -y -j REJECT
25:#ipchains -A input -s 192.168.1.0/24 -d 0/0 27573 -p tcp -y -j
REJECT
26:#ipchains -A input -s 192.168.1.0/24 -d 0/0 54283 -p tcp -y -j
REJECT
27:#ipchains -A input -s 0/0 -d 202.129.48.168/29 6000:6009 -p tcp -y
-j REJECT
28:#ipchains -A input -s 0/0 -d 202.129.48.168/29 7100 -p tcp -y -j
REJECT
29:#ipchains -A input -s 192.168.0.1/24 -d 0/0 8787 -p
tcp -y -j REJECT
30:#ipchains -A input -s 192.168.0.1/24 -d 0/0
54320:54321 -p udp -j REJECT
:
ความหมายแต่ละบรรทัด:
1.ทำ NAT
ให้เครือข่ายภายในเพื่อจะให้สามารถออกสู่เครือข่ายภายนอกได้
2.อนุญาตให้เครือข่ายภายใน ftp
ไปที่ไหนก็ได้
3.อนุญาตให้เครือข่ายภายในใช้
DNS ของที่ไหนก็ได้
4.อนุญาตให้ DMZ
ไปใช้ DNS
ของที่ไหนก็ได้
ซึ่งตรงนี้เป็นการอนุญาตให้ทั้งเครือข่าย จริง ๆ
แล้วอาจจะอนุญาตให้เฉพาะ Proxy Server
กับ DNS Sever
ก็พอแล้ว โดยให้ระบุ IP address
ของ Server
ไปได้เลย นั่นคือต้องใช้คำสั่งนี้สองบรรทัดนะ
5.อนุญาตให้ต้นทางที่ไหนก็ได้มาใช้
DNS ใน DMZ
ได้
ซึ่งไอพีของปลายทางสามารถจะระบุเฉพาะ IP
ของ DNS Server
ไปเลยก็ได้
6.อนุญาตให้ใช้ http
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
7.อนุญาตให้เครือข่ายภายในสามารถจะ
telnet ไปที่ไหนก็ได้
8.ไม่อนุญาตให้ต้นทางที่ไหนก็ได้
telnet เข้ามา DMZ
ได้ แต่เมื่อย้อนไปดูข้อ 7
ก็สรุปว่าอนุญาตให้เฉพาะเครือข่ายภายในเท่านั้นที่
telnet เข้า DMZ
ได้
9.อนุญาตให้ต้นทางที่ไหนสามารถใช้
smtp ที่ปลายทางที่ไหนก็ได้
10.อนุญาตให้เครือข่ายภายในไปใช้
pop3 ที่ปลายทางที่ไหนก็ได้
11.อนุญาตให้เครือข่ายภายในไปใช้
imap ณ ปลายทางที่ไหนก็ได้
12.อนุญาตให้เครือข่ายภายในไปใช้
https ณ ปลายทางที่ไหนก็ได้
13.อนุญาตให้เครือข่ายภายใน
ping ไปที่ไหนก็ได้
14.ไม่อนุญาตให้เครือข่ายที่นอกเหนือจากเครือข่ายภายในสามารถใช้งาน
Proxy Server ได้
15.ไม่อนุญาตให้ทุกที่ ping
เข้ามาใน DMZ
แต่เมื่อย้อนไปดูข้อ 13 แล้ว
สรุปเป็นว่าอนุญาตให้เฉพาะเครือข่ายภายในเท่านั้นที่
ping เข้า dmz
ได้
16.ห้ามการใช้งานที่พอร์ต 0-1023
tcp
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
แต่จะอนุญาตให้เฉพาะกฎข้อก่อนหน้านี้เท่านั้น
17.ห้ามการใช้งาน tcp Network File
System (NFS)
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
18.ห้ามการใช้งานที่พอร์ต 0-1023
udp
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
แต่จะอนุญาตให้เฉพาะกฎข้อก่อนหน้านี้เท่านั้น
19.ห้ามการใช้งาน udp Network File
System (NFS)
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
20-26
ดักจับโฮสต์ภายในที่ติดโปรแกรม SubSeven
27.ห้ามต้นทางที่ไหนก็แล้วแต่
ติดต่อเข้าไปยัง x windows system
ของ DMZ
28.ไม่อนุญาตให้ใช้งาน tcp
พอร์ต 7100 (X Font Service)
ไม่ว่าจะเป็นต้นทางและปลายทางที่ไหน
29-30
ดักจับโฮสต์ภายในที่ติดโปรแกรม Back
Orifice 2000
|