วันนี้จะพาไปแนะนำการใช้งานไฟร์วอลง่าย ๆ นั่นก็คือ shorewall ที่สามารถทำงานได้บนระบบปฏิบัติการลินุกส์ได้เป็นอย่างดี โดยเราจะรัน shorewall บนเครื่อง guest เป็น Ubuntu 14.04.5 LTSนั่นเอง โดยเราเข้าไปดูคอนฟิกตัวอย่างที่ไฟร์วอล shorewall แนะนำมาให้ดังนี้
/usr/share/doc/shorewall/examples/one-interface
zones เป็นตัวกำหนดว่าเราจัดแบ่งระบบไฟร์วอลเป็นแบบไหน ในตัวอย่างเป็นการกำหนดให้ fw เป็นตัวไฟร์วอล(firewall) และตัวเน็ต(net)เป็นตัวไอพีเวอร์ชั่น 4
#ZONE TYPE OPTIONS fw firewall net ipv4
interfaces เป็นส่วนสำคัญในการกำหนดค่าให้ว่ามีอินเทอร์เฟสใดอยู่บ้างในโฮสต์(host) ตามตัวอย่างมีเพียงอินเทอร์เฟสเดียวคือ eth0
#ZONE INTERFACE OPTIONS net eth0 dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
policy เป็นส่วนของนโยบายที่จะบังคับระหว่าง ต้นทาง(source) และปลายทาง(destination) ว่าจะให้ทำงานยังไง จากค่าดีฟอลต์นโยบายกำหนดให้ต้นทางจากไฟร์วอล($FW) ไปยังเน็ต(net)ได้รับการยอมรับ(ACCEPT) ส่วนนโยบายจากเน็ต(net)ไปยังปลายทางอื่น ๆ(all) ให้ดร็อปทั้งหมดและบันทึกล็อกเป็นข้อมูล(info) ส่วนนโยบายสุดท้ายหรือเราเรียกว่านโยบายปิด(close policy) ให้ปฏิเสธ(reject)ทั้งหมด
#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST $FW net ACCEPT net all DROP info # The FOLLOWING POLICY MUST BE LAST all all REJECT inforules เป็นส่วนที่สำคัญหรือเรียกว่ากฏของไฟร์วอลที่จะกำหนดให้ว่า ต้องการให้บริการเซอร์วิสใดบ้าง จากตัวอย่างต้องการเปิดบริการ เวบไซต์ที่พอร์ต 80 และอนุญาตให้ใช้งาน ssh mที่พอร์ต 22 เป็นต้น
# Drop packets in the INVALID state Invalid(DROP) net $FW tcp
# Drop Ping from the "bad" net zone.. and prevent your log from being flooded.. Ping(DROP) net $FW
# Permit all ICMP traffic FROM the firewall TO the net zone ACCEPT $FW net icmp ACCEPT net $FW tcp 80 ACCEPT net $FW tcp 22
ข้างต้นเป็นการกำหนดค่าคอนฟิกเบื้องต้นให้กับไฟร์วอล เมื่อเราสั่งให้ไฟร์วอลทำงาน ระบบจะสร้างชุด iptables rule ต่าง ๆ มากมายพร้อมทั้งยังป้องกันการโจมตีจากโฮสต์ต่าง ๆ ได้ผลดีเป็นอย่างยิ่ง ด้านล่างสุดเป็นตัวอย่างที่นำมาให้ดูหลังจากเปิดไฟร์วอลให้ทำงาน
ต้องขอขอบพระคุณบจก.ไทย พรอสเพอรัส ไอที ผู้นำด้านการให้บริการระบบ gps ติดตามรถ สมบูรณ์แบบคุ้มค่า ทนทาน ผ่านมาตรฐานกสทชและกรมการขนส่งทางบก
# Generated by iptables-save v1.4.21 on Sat Sep 24 21:07:16 2016 *raw :PREROUTING ACCEPT [5964:4496168] :OUTPUT ACCEPT [4748:554229] -A PREROUTING -p udp -m udp --dport 10080 -j CT --helper amanda -A PREROUTING -p tcp -m tcp --dport 21 -j CT --helper ftp -A PREROUTING -p udp -m udp --dport 1719 -j CT --helper RAS -A PREROUTING -p tcp -m tcp --dport 1720 -j CT --helper Q.931 -A PREROUTING -p tcp -m tcp --dport 6667 -j CT --helper irc -A PREROUTING -p udp -m udp --dport 137 -j CT --helper netbios-ns -A PREROUTING -p tcp -m tcp --dport 1723 -j CT --helper pptp -A PREROUTING -p tcp -m tcp --dport 6566 -j CT --helper sane -A PREROUTING -p udp -m udp --dport 5060 -j CT --helper sip -A PREROUTING -p udp -m udp --dport 161 -j CT --helper snmp -A PREROUTING -p udp -m udp --dport 69 -j CT --helper tftp -A OUTPUT -p udp -m udp --dport 10080 -j CT --helper amanda -A OUTPUT -p tcp -m tcp --dport 21 -j CT --helper ftp -A OUTPUT -p udp -m udp --dport 1719 -j CT --helper RAS -A OUTPUT -p tcp -m tcp --dport 1720 -j CT --helper Q.931 -A OUTPUT -p tcp -m tcp --dport 6667 -j CT --helper irc -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns -A OUTPUT -p tcp -m tcp --dport 1723 -j CT --helper pptp -A OUTPUT -p tcp -m tcp --dport 6566 -j CT --helper sane -A OUTPUT -p udp -m udp --dport 5060 -j CT --helper sip -A OUTPUT -p udp -m udp --dport 161 -j CT --helper snmp -A OUTPUT -p udp -m udp --dport 69 -j CT --helper tftp COMMIT # Completed on Sat Sep 24 21:07:16 2016 # Generated by iptables-save v1.4.21 on Sat Sep 24 21:07:16 2016 *nat :PREROUTING ACCEPT [18:928] :INPUT ACCEPT [18:928] :OUTPUT ACCEPT [4:247] :POSTROUTING ACCEPT [4:247] COMMIT # Completed on Sat Sep 24 21:07:16 2016 # Generated by iptables-save v1.4.21 on Sat Sep 24 21:07:16 2016 *mangle :PREROUTING ACCEPT [5964:4496168] :INPUT ACCEPT [5964:4496168] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [4748:554229] :POSTROUTING ACCEPT [4748:554229] :tcfor - [0:0] :tcin - [0:0] :tcout - [0:0] :tcpost - [0:0] :tcpre - [0:0] -A PREROUTING -j tcpre -A INPUT -j tcin -A FORWARD -j MARK --set-xmark 0x0/0xff -A FORWARD -j tcfor -A OUTPUT -j tcout -A POSTROUTING -j tcpost COMMIT # Completed on Sat Sep 24 21:07:16 2016 # Generated by iptables-save v1.4.21 on Sat Sep 24 21:07:16 2016 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] :Broadcast - [0:0] :Drop - [0:0] :Reject - [0:0] :dynamic - [0:0] :fw2net - [0:0] :logdrop - [0:0] :logflags - [0:0] :logreject - [0:0] :net2fw - [0:0] :reject - [0:0] :shorewall - [0:0] :smurflog - [0:0] :smurfs - [0:0] :tcpflags - [0:0] -A INPUT -i eth0 -j net2fw -A INPUT -i lo -j ACCEPT -A INPUT -j Reject -A INPUT -j LOG --log-prefix "Shorewall:INPUT:REJECT:" --log-level 6 -A INPUT -g reject -A FORWARD -j Reject -A FORWARD -j LOG --log-prefix "Shorewall:FORWARD:REJECT:" --log-level 6 -A FORWARD -g reject -A OUTPUT -o eth0 -j fw2net -A OUTPUT -o lo -j ACCEPT -A OUTPUT -j Reject -A OUTPUT -j LOG --log-prefix "Shorewall:OUTPUT:REJECT:" --log-level 6 -A OUTPUT -g reject -A Broadcast -m addrtype --dst-type BROADCAST -j DROP -A Broadcast -m addrtype --dst-type MULTICAST -j DROP -A Broadcast -m addrtype --dst-type ANYCAST -j DROP -A Drop -A Drop -j Broadcast -A Drop -p icmp -m icmp --icmp-type 3/4 -m comment --comment "Needed ICMP types" -j ACCEPT -A Drop -p icmp -m icmp --icmp-type 11 -m comment --comment "Needed ICMP types" -j ACCEPT -A Drop -m conntrack --ctstate INVALID -j DROP -A Drop -p udp -m multiport --dports 135,445 -m comment --comment SMB -j DROP -A Drop -p udp -m udp --dport 137:139 -m comment --comment SMB -j DROP -A Drop -p udp -m udp --sport 137 --dport 1024:65535 -m comment --comment SMB -j DROP -A Drop -p tcp -m multiport --dports 135,139,445 -m comment --comment SMB -j DROP -A Drop -p udp -m udp --dport 1900 -m comment --comment UPnP -j DROP -A Drop -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP -A Drop -p udp -m udp --sport 53 -m comment --comment "Late DNS Replies" -j DROP -A Reject -A Reject -j Broadcast -A Reject -p icmp -m icmp --icmp-type 3/4 -m comment --comment "Needed ICMP types" -j ACCEPT -A Reject -p icmp -m icmp --icmp-type 11 -m comment --comment "Needed ICMP types" -j ACCEPT -A Reject -m conntrack --ctstate INVALID -j DROP -A Reject -p udp -m multiport --dports 135,445 -m comment --comment SMB -j reject -A Reject -p udp -m udp --dport 137:139 -m comment --comment SMB -j reject -A Reject -p udp -m udp --sport 137 --dport 1024:65535 -m comment --comment SMB -j reject -A Reject -p tcp -m multiport --dports 135,139,445 -m comment --comment SMB -j reject -A Reject -p udp -m udp --dport 1900 -m comment --comment UPnP -j DROP -A Reject -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP -A Reject -p udp -m udp --sport 53 -m comment --comment "Late DNS Replies" -j DROP -A fw2net -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A fw2net -p icmp -j ACCEPT -A fw2net -j ACCEPT -A logdrop -j DROP -A logflags -j LOG --log-prefix "Shorewall:logflags:DROP:" --log-level 6 --log-ip-options -A logflags -j DROP -A logreject -j reject -A net2fw -m conntrack --ctstate INVALID,NEW,UNTRACKED -j dynamic -A net2fw -m conntrack --ctstate INVALID,NEW,UNTRACKED -j smurfs -A net2fw -p tcp -j tcpflags -A net2fw -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A net2fw -p tcp -m conntrack --ctstate INVALID -j DROP -A net2fw -d 192.168.122.33/32 -p tcp -m tcp --dport 22 -m comment --comment SSH -j ACCEPT -A net2fw -d 192.168.122.33/32 -p udp -m udp --dport 53 -m comment --comment DNS -j ACCEPT -A net2fw -d 192.168.122.33/32 -p tcp -m tcp --dport 53 -m comment --comment DNS -j ACCEPT -A net2fw -d 192.168.122.33/32 -p icmp -m icmp --icmp-type 8 -m comment --comment Ping -j ACCEPT -A net2fw -p tcp -m tcp --dport 80 -j ACCEPT -A net2fw -j Drop -A net2fw -j LOG --log-prefix "Shorewall:net2fw:DROP:" --log-level 6 -A net2fw -j DROP -A reject -m addrtype --src-type BROADCAST -j DROP -A reject -s 224.0.0.0/4 -j DROP -A reject -p igmp -j DROP -A reject -p tcp -j REJECT --reject-with tcp-reset -A reject -p udp -j REJECT --reject-with icmp-port-unreachable -A reject -p icmp -j REJECT --reject-with icmp-host-unreachable -A reject -j REJECT --reject-with icmp-host-prohibited -A shorewall -m recent --set --name %CURRENTTIME --mask 255.255.255.255 --rsource -A smurflog -j LOG --log-prefix "Shorewall:smurfs:DROP:" --log-level 6 -A smurflog -j DROP -A smurfs -s 0.0.0.0/32 -j RETURN -A smurfs -m addrtype --src-type BROADCAST -g smurflog -A smurfs -s 224.0.0.0/4 -g smurflog -A tcpflags -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -g logflags -A tcpflags -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -g logflags -A tcpflags -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -g logflags -A tcpflags -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -g logflags -A tcpflags -p tcp -m tcp --sport 0 --tcp-flags FIN,SYN,RST,ACK SYN -g logflags COMMIT # Completed on Sat Sep 24 21:07:16 2016
ไม่มีความคิดเห็น:
แสดงความคิดเห็น