ข่าว: ข่าวประกาศ

  • 26 เมษายน 2024, 22:02:11

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ผู้เขียน หัวข้อ: บทเรียนเรื่องการสร้าง Firewall ด้วย IPTABLES  (อ่าน 40327 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
บทเรียนเรื่องการสร้าง Firewall ด้วย IPTABLES
« เมื่อ: 30 พฤษภาคม 2008, 05:30:55 »
จุดประสงค์ คือ เรียนรู้และทำความเข้าใจการทำงานของ iptables และสามารถนำไปประยุกต์ใช้กับ Firewall ได้

เริ่มต้นการเรียนด้วย คำสั่งแรก

iptables -L  (List the rules in all chain)

จะได้ผลลัพธ์เป็น

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

ประกอบด้วย Chain จำนวน 3 Chain
INPUT คือ Packet ที่วิ่งเข้ามายังเครื่อง Server ทั้งทางขา LAN และขา WAN
FORWARD คือ Packet ที่วิ่งผ่าน Server จากทาง LAN --> WAN และ จาก WAN --> LAN
OUTPUT คือ Packet ที่วิ่งออกจากเครื่อง Server ทั้งทางขา LAN และขา WAN

และ policy จะเป็น ACCEPT
INPUT คือ อนุญาติให้ทุก Packet วิ่งเข้ามายัง Server
FORWARD คือ อนุญาติให้ทุก Packet วิ่งผ่าน Server
OUTPUT คือ อนุญาติให้ทุก Packet วิ่งออกจาก Server

ในการใช้งานนั้น Chain INPUT/OUTPUT จะใช้ในกรณีที่เครื่องเราทำหน้าที่เป็น Server
และ Chain FORWARD นั้น จะใช้ในกรณีที่เครื่องเราทำหน้าที่เป็น Gateway

« แก้ไขครั้งสุดท้าย: 31 พฤษภาคม 2008, 05:34:37 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: บทเรียนเรื่องการสร้าง Firewall ด้วย IPTABLES
« ตอบกลับ #1 เมื่อ: 31 พฤษภาคม 2008, 05:35:42 »
ปูพื้นฐานเรื่องความรู้เรื่อง port , ip และ Protocol กันก่อน
IP
หมายเลข IP จะประกอบด้วย 32 bit  4 กลุ่ม คั่นด้วย . นั่นก็คือ   8bit . 8bit . 8bit . 8bit
192.168.0.100 = 11000000.10101000.00000000.01100100
172.16.20.5 = 10101100.00010000.00010100.00000101
10.0.100.1 = 00001010.00000000.01100100.00000001

NetMask จะประกอบด้วย จำนวนเลข 1 ทางซ้ายมือ และจำนวนเลข 0 ทางขวามือ
11111111.11111111.11111111.11111111 = 255.255.255.255 หรือ /32 (บิตที่เป็น 0 ไม่มี)
11111111.11111111.11111111.00000000 = 255.255.255.0 หรือ /24 (บิตที่เป็น 1 มีจำนวน 24 บิต)
11111111.11111111.00000000.00000000 = 255.255.0.0 หรือ /16 (บิตที่เป็น 1 มีจำนวน 16 บิต)
11111111.00000000.00000000.00000000 = 255.0.0.0 หรือ /8 (บิตที่เป็น 1 มีจำนวน 8 บิต)
00000000.00000000.00000000.00000000 = 0.0.0.0 หรือ /0 (บิตที่เป็น 1 ไม่มี)

Network และ Subnet
ในการอ้างอิง Network นั้นจะต้องระบุ ชื่อ Network และ Netmask เพื่อระบุขนาด เช่น
192.168.200.0/255.255.255.0 โดยที่ /255.255.255.0 สามารถแทนได้ด้วย /24
จะได้เป็น 192.168.200.0/24 จะมีความหมายเหมือนกัน

Private IP และ Public IP
Private IP ที่ใช้กันคือ
10.0.0.0/8  172.16.0.0/12  192.168.0.0/16
IP ที่นอกเหนือจากนี้จะถือเป็น Public IP

Port
System Port คือ Port ตั้งแต่ 1 ถึง 1024
Application Port คือ Port ตั้งแต่ 1025 ถึง 65535

Protocol
TCP
UDP
ICMP
« แก้ไขครั้งสุดท้าย: 31 พฤษภาคม 2008, 05:56:19 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: บทเรียนเรื่องการสร้าง Firewall ด้วย IPTABLES
« ตอบกลับ #2 เมื่อ: 31 พฤษภาคม 2008, 09:43:30 »
การเดินทางของ Packet ผ่าน Server จะแบ่งได้เป็น 3 กรณี คือ

1. ข้อมูลวิ่งมายังเครื่อง Server
กรณีนี้คือ เครื่อง Server เป็นผู้ให้บริการ เช่น ftp, web, mail, dns หรือ proxy เป็นต้น
แล้วเครื่องลูกข่าย หรือเครื่องจากภายนอก วิ่งเข้ามายังเครื่อง Server

การเดินทางของ Packet จะเป็นดังนี้ คือ

จาก Interface ของ Server เช่น eth0, ppp0 หรืออื่น ๆ ที่ข้อมูลวิ่งเข้ามา จะวิ่งเข้ามายัง
Chain PREROUTING  --> Conntrack , mangle , nat ตามลำดับ  จากนั้นก็จะวิ่งไปยัง
Routing Process
Chain INPUT --> Filter , Conntrack , mangle ตามลำดับ จากนั้นก็จะวิ่งไปยัง
Local Process

สรุปง่าย ๆ คือ  Interface -> PREROUTING --> Routing Process --> INPUT --> Local Process

2. ข้อมูลวิ่งออกจากเครื่อง Server
กรณีนี้คือ เมื่อเครื่อง Server ได้รับการติดต่อมาจากภายนอก แล้วทำการตอบกลับ ก็จะมีการส่งข้อมูลออก
เช่น การปิงมายัง Server , การส่งข้อมูลไปยังเครื่องลูกข่าย

การเดินทางของ Packet จะเป็นดังนี้

Local Process
Chain OUTPUT --> Conntrack , mangle , nat , filter ตามลำดับ จากนั้นจะวิ่งไปยัง
Routing Process
Chain POSTROUTING --> mangle , nat , Conntrack ตามลำดับ จากนั้นก็จะวิ่งไปยัง
สู่ Interface ของ Server เช่น ppp0, eth0 เพื่อส่งข้อมูลออกไป

สรุป ง่าย ๆ คือ Local Process --> OUTPUT --> Routing Process --> POSTROUTING --> Interface

3. ข้อมูลวิ่งผ่านเครื่อง Server
ในกรณีที่เครื่องของเราทำหน้าที่เป็น Gateway ก็จะมีข้อมูลวิ่งจาก Interface นึงไปยังอีก Interface นึง
ไม่ว่าจะเป็นจาก WAN --> LAN  หรือ จาก LAN --> WAN ก็จะมีลักษณะเหมือนกัน

ซึ่งจะแทนด้วย Interface A ไปยัง Interface B การเดินทางของ Packet จะเป็นดังนี้

เริ่มต้นจากเข้ามาสู่ Interface A
Chain PREROUTING --> Conntrack , mangle , nat ตามลำดับ จากนั้นจะวิ่งไปยัง
Routing Process
Chain FORWARD --> mangle , filter ตามลำดับ จากนั้นจะวิ่งไปยัง
Chain POSTROUTING --> mangle , nat , Conntrack ตามลำดับ จากนั้นจะวิ่งไปยัง
วิ่งออกทาง Interface B

สรุป ง่าย ๆ คือ Interface A --> PREROUTING --> Routing Process --> FORWARD --> POSTROUTING --> Interface B

<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: บทเรียนเรื่องการสร้าง Firewall ด้วย IPTABLES
« ตอบกลับ #3 เมื่อ: 31 พฤษภาคม 2008, 10:07:48 »
การทำ Firewall นั้น ก็คือการสร้างกฎเพื่อกำหนดการเข้าและออกของข้อมูล

กรณีที่มี 1 Interface หรือเป็นแค่เพียง Server ให้บริการธรรมดา ก็จะต้องกำหนดกฎ 2 รูปแบบ
1. กำหนดข้อมูลที่วิ่งเข้ามายัง Server
2. กำหนดข้อมูลที่วิ่งออกจาก Server

กรณีที่มี 2 Interface และทำหน้าที่เป็น Gateway และให้บริการด้วย จะต้องกำหนดกฎ 4 รูปแบบ
1. กำหนดข้อมูลที่วิ่งเข้ามายัง Server ทางขา WAN และ ขา LAN
2. กำหนดข้อมูลที่วิ่งออกจาก Server ทางขา WAN และ ขา LAN
3. ข้อมูลที่วิ่งจาก Localnet ออกไปยัง InterNet
4. ข้อมูลที่วิ่งจาก InterNet เข้ามายัง LocalNet

กรณีที่มี 3 Interface ทำหน้าที่เป็น Gateway และมี Interface DMZ เพิ่มขึ้นมา เพื่อรักษาความปลอดภัยให้ Server ภายใน
1. กำหนดข้อมูลที่วิ่งเข้ามายัง Server ทางขา WAN ,ขา LAN และขา DMZ
2. กำหนดข้อมูลที่วิ่งออกจาก Server ทางขา WAN ,ขา LAN และขา DMZ
3. ข้อมูลที่วิ่งจาก Localnet ออกไปยัง InterNet
4. ข้อมูลที่วิ่งจาก Localnet ออกไปยัง DMZ
5. ข้อมูลที่วิ่งจาก DMZ ออกไปยัง Internet
6. ข้อมูลที่วิ่งจาก DMZ ออกไปยัง LocalNet
7. ข้อมูลที่วิ่งจาก Internet เข้ามายัง LocalNet
8. ข้อมูลที่วิ่งจาก Internet เข้ามายัง DMZ

<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 3820
    • ดูรายละเอียด
    • อีเมล์
Re: บทเรียนเรื่องการสร้าง Firewall ด้วย IPTABLES
« ตอบกลับ #4 เมื่อ: 31 พฤษภาคม 2008, 10:56:09 »
ในการทำ Firewall นั้น เราจะต้องทราบข้อมูลเข้าและข้อมูลออกทั้งหมดของ Server โดยจะต้องระบุ IP ต้นทาง, IP ปลายทาง, Port และ Protocol เป็นอย่างน้อย

ยกตัวอย่างกรณีแรก เครื่อง Server ทำหน้าที่เป็น Web Server และ Proxy Server
มี 1 Interface คือ eth0 โดยมี IP เป็น 172.16.6.11

ดังนั้น กฎที่เราต้องสร้างขึ้นจะมี 2 รูปแบบ ก็กำหนดได้โดย
1. กำหนดข้อมูลที่วิ่งเข้ามายัง Server
- สามารถเชื่อมต่อมายัง Server ต้นทาง IP 172.16.6.0/24 ด้วย Protocol TCP Port 80 (Web Server)
- สามารถเชื่อมต่อมายัง Server ต้นทาง IP 172.16.6.0/24 ด้วย Protocol TCP Port 8080 (Proxy Server)
- สามารถเชื่อมต่อมายัง Server ได้เฉพาะกลุ่ม IP 172.16.6.200-254 ด้วย Protocol TCP Port 22 (SSH Server)
- สามารถเชื่อมต่อมายัง Server ได้เฉพาะกลุ่ม IP 172.16.6.200-254 ด้วย Protocol TCP Port 10000 (Webmin)
- สามารถปิงเข้ามายัง Server ได้ ต้นทาง IP 172.16.6.0/24
- นอกเหนือจากกฎเหล่านี้ให้ DROP
2. กำหนดข้อมูลที่วิ่งออกจาก Server
- สามารถออกได้หมดทุก ip/port/protocol

เริ่มต้นในการ set firewall นั้น จะเริ่มทำการปิด หรือ DROP policy ของทุก Chain ก่อน

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP


#1. กำหนดข้อมูลที่วิ่งเข้ามายัง Server
#สามารถเชื่อมต่อมายัง Server ต้นทาง IP 172.16.6.0/24 ด้วย Protocol TCP Port 80 (Web Server)
iptables -A INPUT -i eth0 -s 172.16.6.0/24 -d 172.16.6.11 -p tcp --dport 80 -j ACCEPT

#สามารถเชื่อมต่อมายัง Server ต้นทาง IP 172.16.6.0/24 ด้วย Protocol TCP Port 8080 (Proxy Server)
iptables -A INPUT -i eth0 -s 172.16.6.0/24 -d 172.16.6.11 -p tcp --dport 8080 -j ACCEPT

#สามารถเชื่อมต่อมายัง Server ได้เฉพาะกลุ่ม IP 172.16.6.200-254 ด้วย Protocol TCP Port 22 (SSH Server)
iptables -A INPUT -i eth0 -m iprange --src-range 172.16.6.200-172.16.6.254 -d 172.16.6.11 -p tcp --dport 22 -j ACCEPT

#สามารถเชื่อมต่อมายัง Server ได้เฉพาะกลุ่ม IP 172.16.6.200-254 ด้วย Protocol TCP Port 10000 (Webmin)
iptables -A INPUT -i eth0 -m iprange --src-range 172.16.6.200-172.16.6.254 -d 172.16.6.11 -p tcp --dport 10000 -j ACCEPT

#สามารถปิงเข้ามายัง Server ได้ ต้นทาง IP 172.16.6.0/24
iptables -A INPUT -i eth0 -s 172.16.6.0/24 -d 172.16.6.11 -p icmp -j ACCEPT

#2. กำหนดข้อมูลที่วิ่งออกจาก Server
iptables -A OUTPUT -o eth0 -j ACCEPT

เป็นอันเรียบร้อย สำหรับตัวอย่างแรก

ลองใช้คำสั่ง iptables -nvL เพื่อดู rule ที่เพิ่มเข้าไป
« แก้ไขครั้งสุดท้าย: 31 พฤษภาคม 2008, 11:28:47 โดย admin »
<a href="http://www.hadyaiinternet.com/images/inetcafe.swf" target="_blank" rel="noopener noreferrer" class="bbc_link bbc_flash_disabled new_win">http://www.hadyaiinternet.com/images/inetcafe.swf</a>