ติดตั้ง shorewall (one interface) บน ubuntu 16.04 server

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 15-08-2559
ดูแลโดย WIBOON

  • เพื่อใช้ในการเปิด ปิด บล็อค IP และ port ที่ต้องการ เป็นการทำ hosting firewall เพิ่มเติมให้กับ ubuntu server
  • ตรวจสอบด้วย ifconfig ก่อนว่า ได้ network interface ชื่อ eth0 หรือ อย่างอื่น
  • หากได้เป็นอย่างอื่น เช่น enp0s3 เป็นต้น เมื่อจะ config shorewall ให้แก้ไขจาก eth0 เป็น enp0s3 ในไฟล์ /etc/shorewall/interfaces ด้วย


ขั้นตอน
1.ติดตั้ง package

mama@ubuntu:~$ sudo apt-get install shorewall


2.คัดลอกตัวอย่างมาใช้เป็นค่าเริ่มต้น

mama@ubuntu:~$ sudo cp /usr/share/doc/shorewall/examples/one-interface/zones /etc/shorewall
mama@ubuntu:~$ sudo cp /usr/share/doc/shorewall/examples/one-interface/interfaces /etc/shorewall
mama@ubuntu:~$ sudo cp /usr/share/doc/shorewall/examples/one-interface/policy /etc/shorewall
mama@ubuntu:~$ sudo cp /usr/share/doc/shorewall/examples/one-interface/rules /etc/shorewall


3.ตรวจสอบค่าต่าง ๆ สำหรับไฟล์เหล่านี้คือ zones, interfaces และ policy ซึ่งยังไม่ได้แก้ไข
ไฟล์ /etc/shorewall/zones

#ZONE   TYPE    OPTIONS                 IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4

ไฟล์ /etc/shorewall/interfaces

###############################################################################
?FORMAT 2
###############################################################################
#ZONE   INTERFACE       OPTIONS
net     eth0            dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0

ไฟล์ /etc/shorewall/policy

#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
$FW             net             ACCEPT
net             all             DROP            info
# The FOLLOWING POLICY MUST BE LAST
all             all             REJECT          info


4.แก้ไขไฟล์ rules

mama@ubuntu:~$ sudo vi /etc/shorewall/rules

ที่บรรทัดนี้ ประมาณบรรทัดที่ 29 หมายถึง ไม่อนุญาตให้ ping มาที่เครื่อง server

Ping(DROP)     net             $FW

เพิ่ม เพื่อให้ ping เครื่อง firewall นี้ได้จากเครื่องใด ๆ ใน net ตัวอย่างเช่น 192.168.1.0/24

ACCEPT net:192.168.1.0/24 $FW icmp
Ping(DROP)     net             $FW

ตรวจสอบว่ามีบรรทัดนี้หรือไม่ (น่าจะมีอยู่แล้ว) เพื่อให้ ping ได้จากเครื่อง firewall นี้

ACCEPT $FW net icmp


และเพิ่มรายการตัวอย่างเหล่านี้

# example drop unwanted intranet net
#DROP loc:10.0.100.193 $FW
# example drop unwanted internet net
#DROP net:42.2.192.0/19 $FW
# default open all ports
ACCEPT all $FW
# or open only SSH
#ACCEPT all $FW tcp 22
# or open only DHCPD
#ACCEPT all $FW udp 67:68
# or open only HTTP,HTTPS
#ACCEPT all $FW tcp 80,443

เลือกใช้แบบที่ต้องการโดยการเอาเครื่องหมาย สี่เหลี่ยม ออก ในบรรทัดที่จะใช้ และ ใส่ สี่เหลี่ยม ในบรรทัดที่จะไม่ใช้

5.ตั้งค่า เปิดใช้งาน shorewall
แก้ไขไฟล์ /etc/default/shorewall
ให้ใช้ค่านี้
startup=1

แก้ไขไฟล์ /etc/shorewall/shorewall.conf
ให้ใช้ค่านี้
STARTUP_ENABLED=Yes
IP_FORWARDING=Yes

6.เปิดใช้งาน

mama@ubuntu:~$ sudo systemctl start shorewall.service


7.ตรวจสอบสถานะ

mama@ubuntu:~$ sudo systemctl status shorewall.service

ผลลัพธ์ อย่างนี้พร้อมใช้งาน

- shorewall.service - Shorewall IPv4 firewall
   Loaded: loaded (/lib/systemd/system/shorewall.service; disabled; vendor prese
   Active: active (exited) since Wed 2016-08-10 10:58:26 ICT; 3s ago
  Process: 2338 ExecStart=/sbin/shorewall $OPTIONS start $STARTOPTIONS (code=exi
 Main PID: 2338 (code=exited, status=0/SUCCESS)

ผลลัพธ์ อย่างนี้ไม่พร้อมใช้งาน

- shorewall.service - Shorewall IPv4 firewall
   Loaded: loaded (/lib/systemd/system/shorewall.service; disabled; vendor prese
   Active: inactive (dead)


8.ตั้งค่าให้ shorewall สตาร์ทด้วยเมื่อ reboot เครื่อง server

mama@ubuntu:~$ sudo systemctl enable shorewall.service

ผลลัพธ์

Created symlink from /etc/systemd/system/basic.target.wants/shorewall.service to /lib/systemd/system/shorewall.service.