References:

http://www.itwizard.info/technology/linux/dmz_firewall_private_ip_server_and_transparent_proxy.html

http://www.it-guides.com/lesson/network10.html

http://www.itwizard.info/technology/linux/gateway_firewall.html

ในองค์กรไม่ว่าจะเป็นขนาดเล็ก ขนาดกลาง หรือขนาดใหญ่ ถ้ามีการเชื่อมต่อกับระบบอินเทอร์เน็ต อินทราเน็ต ทั้งภายในและภายนอก ผลพวงที่ได้รับอาจเกิดปัญหาในเรื่องการไวรัส และที่สำคัญอีกส่วนหนึ่งการถูกเจาะระบบโดยผู้ไม่ประสงค์ดี อย่างไรก็ตามการติดต่อสื่อสารก็ยังจำเป็นจะต้องเกิดขึ้น ดังนั้นเราจึงจำเป็นต้องมีการป้องกัน และมีการจัดแบ่งระบบเครือข่ายของเราเป็นโซน เพื่อให้เกิดความสะดวกในการควบคุมและจัดการ โดยเฉพาะการติดตั้งระบบ Firewall ทั้งนี้เพื่อให้เกิดความปลอดภัยในข้อมูล และปลอดภัยในระบบเครือข่ายของเรา

ประเภทของ Zoning แบ่งออกได้เป็น 3 ประเภทใหญ่ๆ ดังนี้

  1. Internal Zone
    หมายถึง ระบบเครือข่ายภายในองค์กรของเรา ซึ่งถือว่าเป็น zone ที่มีความปลอดภัยและน่าเชื่อถือสูงสุด
  2. External Zone
    หมายถึง ระบบเครือข่ายภายนอก ซึ่งถือว่าเป็น zone ที่มีความปลอดภัยต่ำมาก (ทั้งนี้ไม่ได้หมายความว่า เครือข่ายนอกองค์ของเรานั้น จะเป็นเครือข่ายที่ไม่น่าเชือถือ) อย่างไรก็ตามเนื่องเราอาจจำเป็นต้องมีการติดต่อกับเครือข่ายภายนอก ดังนั้นเราจำเป็นจะต้องมีการควบคุมในเรื่องของการสื่อสาร ตัวอย่าง External Zone เช่น คอมพิวเตอร์ต่างๆ ภายนอกองค์กร รวมทั้งระบบเครือข่าย internet ที่เราติดต่ออยู่ด้วย เป็นต้น
  3. Demilitarized Zone (DMZ)
    เป็น Zone พิเศษที่ไม่ใช่ทั้ง Internal Zone และ External Zone การทำงานของ DMZ นั้น จะติดต่อโดยตรงทั้ง Internal และ External Zone ตัวอย่างของ DMZ เช่น Mail server, Web server เป็นต้น

Demilitarized Zone (DMZ)
ตัวอย่างในกรณีที่ผู้ใช้บริการมี
Server ต่าง ๆ อยู่ด้วย ในที่นี่สมมุติว่ามี Web Server, FTP Server, DNS Server , Proxy Server, Mail Server และ MySql  Server
วิธีการที่นิยมกันคือการเพิ่มโซนของเครือข่ายมาอีกโซนหนึ่งนั่นคือ Demilitarized Zone (DMZ) ซึ่งถ้าแปลตรง ๆ ก็คือ "เขตปลอดทหาร" เช่น ที่กำหนดขึ้นที่เขตแดนระหว่างประเทศเกาหลีเหนือและประเทศเกาหลีใต้ในระหว่างการสงบศึกชั่วคราวของสงครามเกาหลี

สำหรับในเรื่อง
Network Security แล้ว DMZ เป็นคำจำกัดความของโซนอีกประเภทหนึ่งที่ไม่ใช่ทั้ง Internal (เครือข่ายภายใน) และ External (เครือข่ายภายนอกหรือเครือข่ายอินเตอร์เน็ต) แต่หมายถึงเครือข่ายที่ต้องมีการสื่อสารกับทั้งเครือข่ายภายในและเครือข่ายภายนอกนั่นเอง 


อาจจะสงสัยบ้างว่าถ้ามี

DHCP Server ด้วยจะเอาไว้ตรงไหน  เนื่องจาก DHCP Server ไม่ต้องมีการติดต่อสื่อสารกับเครือข่ายภายนอก จึงสามารถวางไว้ที่เครือข่ายภายในได้เลย หรือถ้า Gateway มี Spec สูงหน่อย ก็สามารถวางไว้บน gateway เลยก็ได้

ตัวอย่างการทำ Firewall แบบ DMZ พร้อม Transparent Proxy (DMZ ใช้ Private IP)

(Linux IPTABLES)

เครือข่ายตัวอย่างนี้ จะประกอบไปด้วยเครือข่าย 3 ส่วนด้วยกัน คือ
1 .เครือข่ายภายใน  (trusted internal network) จะเป็นส่วนที่ไม่อนุญาตให้เครือข่ายภายนอกเข้ามาได้ ซึ่งส่วนใหญ่จะเป็นส่วนของ Client

2. เครือข่าย
DMZ เป็นส่วนที่เครือข่ายภายนอกและเครือข่ายภายในเข้ามาใช้งานได้ตามกฎที่ Firewall ได้ตั้งไว้
3.เครือข่ายภายนอก (Internet)

โดยการเชื่อมต่อใช้งานจะต้องมี
Linux Server ตัวหนี่งทำหน้าที่เป็น Firewall ซึ่งจะต้องประกอบด้วยการ์ดแลน 3 การ์ด ดังรูปที่ 1


เพื่อให้เข้าใจได้ง่ายขึ้นจึงขอใช้รูปตัวอย่างการเชื่อมต่อจริง ๆ ดังรูปที่ 2  ซึ่งที่ Linux Firewall จะมี Ethernet Card 3 การ์ดคือ eth0 ใช้เชื่อมต่อกับเครือข่ายภายนอก, eth1 ใช้เชื่อมต่อกับเครือข่ายภายใน  และ eth2 ใช้เชื่อมต่อกับเครือข่าย DMZ  ในส่วนของ eth0 นั้นมี IP Address เป็น 3 ค่าคือ
1. 202.129.49.194
แทนตัวเองซึ่งเป็น Firewall

2. 202.129.49.195 ใช้แทน
HTTP
3. 202.129.49.196
ใช้แทน DNS

หมายเหตุ Proxy ไม่จำเป็นต้องให้บริการกับบุคคลภายนอก จึงไม่จำเป็นต้องใช้ IP จริง

หน้าที่ของ Linux Firewall
1.ทำ NAT (Outbound) ให้เครือข่ายภายใน (trusted internal network) สามารถเชื่อมต่อไปยังเครือข่ายภายนอกได้
2.ในกรณีที่เครือข่ายภายในออกไปใช้งานเครือข่ายภายนอกเป็นการเรียกใช้ http ให้ redirect ไปยัง Proxy ของ DMZ (Transparent Proxy)
3.
Linux Server ต้องอนุญาตให้เครือข่ายภายในสามารถใช้งาน DNS Server ในวง DMZ ทั้งการเรียกโดยใช้ IP จริงและ IP ปลอมได้ (ทั้ง 202.129.49.196 และ 192.168.2.3)
4.
Linux Server ต้องอนุญาตให้เครือข่ายภายในสามารถใช้งาน Web Server ในวง DMZ ทั้งการเรียกโดยใช้ IP จริงและ IP ปลอม (ทั้ง 202.129.49.195 และ 192.168.2.2)
5
.ทำ NAT (Inbound) ให้เครือข่ายภายนอกเข้ามาใช้ Web Server และ DNS Server ในวง  DMZ ได้
6.ทำหน้าที่เป็น
Firewall

คำสั่ง
iptables ที่ใช้
คำสั่งที่ใช้ทั้งหมดเป็นดังนี้
:

#-----Start script------#

#กำหนดตัวแปรของแต่ละ Interfaces
LAN_IP="192.168.1.1"
LAN_BCAST_ADRESS="192.168.1.255"
LAN_IFACE="eth1"

INET_IP="202.129.49.194"
INET_IFACE="eth0"

HTTP_IP="202.129.49.195"
DNS_IP="202.129.49.196"

DMZ_IP="192.168.2.1"
DMZ_IFACE="eth2"

DMZ_HTTP_IP="192.168.2.2"
DMZ_DNS_IP="192.168.2.3"
DMZ_PROXY_IP="192.168.2.4"

LO_IP="127.0.0.1"
LO_IFACE="lo"

#เปิดการทำงานของ IP Forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward

#เคลียร์ Rules ต่างๆ ใน Chain เสียก่อน

iptables -F
iptables -X allowed
iptables -X icmp_packets
iptables -t nat -F

# ดรอปแพคเกจทั้งขาเข้าและขาออก และ Forwarding
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Chain หรือ กฎที่ ตรงตาม Rules ที่กำหนดไว้ จะอนุญาตให้ผ่านไปได้
iptables -N allowed
iptables -A allowed -p TCP --syn -j ACCEPT
iptables -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A allowed -p TCP -j DROP

# ICMP rules, ยอมรับการ Ping, Traceroute
iptables -N icmp_packets
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 5 -j ACCEPT
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

# ทำ NAT ที่ Interfaces ขาออกไปยัง Internet แบบ SNAT (Static Public IP)
iptables -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP

# Rules สำหรับ Packet ขาเข้า

# Rules  ในการป้องกัน IP Spoofing

iptables -t nat -A PREROUTING -i $INET_IFACE -s 192.168.0.0/16 -j DROP
iptables -t nat -A PREROUTING -i $INET_IFACE -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i $INET_IFACE -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i $INET_IFACE -s $INET_IP -j DROP

# ยอมให้ Packet ขาเข้า Connect เข้าสู่ Server ใน DMZ Zone


iptables -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $HTTP_IP --dport 80 -j DNAT --to-destination $DMZ_HTTP_IP
iptables -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $DNS_IP --dport 53 -j DNAT --to-destination $DMZ_DNS_IP
iptables -t nat -A PREROUTING -p UDP -i $INET_IFACE -d $DNS_IP --dport 53 -j DNAT --to-destination $DMZ_DNS_IP

 

# อนุญาติให้ Network ภายใน Connect สู่ Server ภายใน DMZ Zone


iptables -t nat -A PREROUTING -p TCP -i $LAN_IFACE -d $HTTP_IP --dport 80 -j DNAT --to-destination $DMZ_HTTP_IP
iptables -t nat -A PREROUTING -p TCP -i $LAN_IFACE -d $DNS_IP --dport 53 -j DNAT --to-destination $DMZ_DNS_IP
iptables -t nat -A PREROUTING -p UDP -i $LAN_IFACE -d $DNS_IP --dport 53 -j DNAT --to-destination $DMZ_DNS_IP

# ทำ Transparent Proxy ให้ Redirect จาก Port 80 ไปยัง Port 3128 (Squid Proxy ต้องถูกติดตั้ง)


iptables -t nat -A PREROUTING -p TCP -i $LAN_IFACE -s 192.168.1.0/24 -d ! $DMZ_HTTP_IP --dport 80 -j DNAT --to-dest 192.168.2.4:3128

# Rules ในการ Forwarding

 # ไม่รับ TCP Packet ที่ไม่ตรงตาม Rules และ แจ้ง Log Messages
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP

 

# DMZ section : General rules


iptables -A FORWARD -i $DMZ_IFACE -o $INET_IFACE -j ACCEPT
iptables -A FORWARD -i $INET_IFACE -o $DMZ_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $LAN_IFACE -o $DMZ_IFACE -j ACCEPT
iptables -A FORWARD -i $DMZ_IFACE -o $LAN_IFACE -j ACCEPT

 # DMZ section : HTTP server
iptables -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP --dport 80 -j allowed
iptables -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_HTTP_IP -j icmp_packets          

#DMZ section : DNS server
iptables -A FORWARD -p TCP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP --dport 53 -j allowed
iptables -A FORWARD -p UDP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP --dport 53 -j ACCEPT
iptables -A FORWARD -p ICMP -i $INET_IFACE -o $DMZ_IFACE -d $DMZ_DNS_IP -j icmp_packets                   

# LAN section
iptables -A FORWARD -i $LAN_IFACE -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# เก็บ Log Files ของ Packet (Debug)

iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "

# Rules ในการ Input Packet

# INPUT chain

# ไม่รับ TCP Packet ที่ไม่ตรงตาม Rules และ แจ้ง Log Messages

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Packets from the Internet to this box
iptables -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

# Packets from LAN, DMZ or LOCALHOST

# From DMZ Interface to DMZ firewall IP
iptables -A INPUT -p ALL -i $DMZ_IFACE -d $DMZ_IP -j ACCEPT

# From LAN Interface to LAN firewall IP
iptables -A INPUT -p ALL -i $LAN_IFACE -d $LAN_IP -j ACCEPT
iptables -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BCAST_ADRESS -j ACCEPT

 # From Localhost interface to Localhost IP
iptables -A INPUT -p ALL -i $LO_IFACE -d $LO_IP -j ACCEPT

#established and related packets ทั้งหมดจาก Internet เข้าสู่เครื่อง Firewall
iptables -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT

 # เก็บ Log Files ของ Packet (Debug)
iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT INPUT packet died: "

# Rules ในการ Output Packet

#  ไม่รับ TCP Packet ที่ไม่ตรงตาม Rules และ แจ้ง Log Messages

iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# ไม่อนุญาติให้ Host ภายในทำการ Spoofing IP

iptables -A OUTPUT -p ALL -o $LO_IFACE -s $LO_IP -j ACCEPT
iptables -A OUTPUT -p ALL -o $LAN_IFACE -s $LAN_IP -j ACCEPT
iptables -A OUTPUT -p ALL -o $INET_IFACE -s $INET_IP -j ACCEPT

# เก็บ Log Files ของ Packet (Debug)
iptables -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "

#-----End script------#

 

ที่มา : http://www.msit.mut.ac.th

Comment

Comment:

Tweet

sad smile

#3 By (58.9.187.44) on 2008-09-26 13:57

ดีคะ ดีมากเลย น่ารัก มีประโยชน์

#2 By (203.172.130.227) on 2008-08-25 16:14

ดีนะคัฟให้ความรู้มากbig smile open-mounthed smile confused smile sad smile angry smile tongue question embarrassed surprised smile wink double wink cry

#1 By bow (203.172.130.227) on 2008-08-25 16:10