Cài đặt và cấu hình firewall với Awall trên Alpine Linux

Với mục đích tối giản hạ tầng cho ứng dụng, rất nhiều doanh nghiệp, tổ chức sử dụng Alpine Linux làm hệ điều hành cho server. Do đó, nhu cầu sử dụng firewall cũng vì thế mà phát sinh. Awall (Alpine Wall) chính là công cụ mã nguổn mở chuyên dụng được sử dụng làm firewall cho Alpine Linux. Hôm nay, mình sẽ hướng dẫn bạn cách cài đặt và cấu hình Awall trên Alpine Linux.

Cài đặt Awall #

Thực thi các câu lệnh bên dưới để cài đặt Awall và kiểm tra trạng thái dịch vụ:

# apk update && apk upgrade
## Install both IPv4 and IPv6 version of IPtables ##
# apk add ip6tables iptables
## Install awall ##
# apk add -u awall
## Verify it ##
# apk version awall

Cấu hình Awall #

Đầu tiên bạn cần kích hoạt một số module cho firewall:

# modprobe -v ip_tables ip6_tables # IPv4
# modprobe -v ip6_tables # if IPv6 is used
# modprobe -v iptable_nat # if NAT is used aka router
# insmod /lib/modules/5.4.43-1-virt/kernel/net/netfilter/x_tables.ko 
# insmod /lib/modules/5.4.43-1-virt/kernel/net/ipv4/netfilter/ip_tables.ko ip6_tables

Kế tiếp, bạn hãy kích hoạt cho Awall luôn khởi động cùng hệ thống:

# rc-update add iptables
* service ip6tables added to runlevel default
# rc-update add ip6tables
* service ip6tables added to runlevel default

Tiếp theo, để bảo vệ OS, thực hiện tạo rule chặn toàn bộ lưu lượng incoming:

# vi /etc/awall/optional/cloud-server.json

Thêm đoạn cấu hình sau vào file:

{
  "description": "Default awall policy to protect Cloud server",
 
  "variable": { "internet_if": "eth0" },
 
  "zone": {
    "internet": { "iface": "$internet_if" }
  },
 
  "policy": [
    { "in": "internet", "action": "drop" },
    { "action": "reject" }
  ]
 
}

Tiếp tục tạo rule cho phép các kết nối TCP trên port 22:

# vi /etc/awall/optional/ssh.json

Thêm đoạn cấu hình sau vào file:

{
 
    "description": "Allow incoming SSH access (TCP/22)",
 
    "filter": [
        {
            "in": "internet",
            "out": "_fw",
            "service": "ssh",
            "action": "accept",
            "conn-limit": { "count": 3, "interval": 60 }
        }
    ]
}

Trong đó:

  • “in”: “internet”,: chỉ định rule sẽ áp dụng cho loại lưu lượng incoming từ internet.
  • “out”: “_fw”,: Zone bao gồm các rule của Awall, mặc định là “_fw”.
  • “service”: “ssh”,: Cho phép dịch vụ nào được đi qua firewall.
  • “action”: “accept”,: Cho phép lưu lượng trên firewall.
  • “conn-limit”: { “count”: 3, “interval”: 60 }: Giới hạn các kết nối tối đa từ một địa chỉ IP trong vòng 60 giây.

Nếu bạn muốn chỉ định các địa chỉ IP hoặc dải địa chỉ IP nào sẽ được ssh tới server thì cấu hình như bên dưới:

{
    "description": "Allow incoming SSH access (TCP/22) only from our office VPN at 1.2.3.4",
    "filter": [
        {
            "in": "internet",
            "out": "_fw",
            "service": "ssh",
            "action": "accept",
            "src": [ "1.2.3.4", "192.168.2.0/24", "202.54.5.1" ],
            "conn-limit": { "count": 3, "interval": 60 }
        }
    ]
}

Trong đó:

  • “src”: [ “1.2.3.4”, “192.168.2.0/24”, “202.54.5.1” ], : là địa chỉ IP hoặc dải địa chỉ IP được cho phép.

Tiếp theo, bạn hãy chỉ định rule cho các lưu lượng outgoing:

# vi /etc/awall/optional/outgoing.json

Thêm đoạn cấu hình sau vào file:

{
 
    "description": "Allow outgoing connections for dns, http/https, ssh, ntp, ssh and ping",
 
    "filter": [
       {
            "in": "_fw",
            "out": "internet",
            "service": [ "dns", "http", "https", "ssh", "ntp", "ping" ],
            "action": "accept"
        }
    ]
}

Lưu lại file và thực hiện kiểm tra các rule đã thêm trên firewall:

# awall list

Bạn sẽ có các rule hiển thị trên màn hình như bên dưới:

cloud-server  disabled  Default awall policy to protect Cloud server
outgoing      disabled  Allow outgoing connections for dns, http/https, ssh, ntp, ssh and ping
ssh           disabled  Allow incoming SSH access (TCP/22)

Để các rule vừa thêm được kích hoạt trên tường lửa, hãy thực thi câu lệnh bên dưới:

# awall enable cloud-server
# awall enable ssh
# awall enable outgoing
# awall activate

Trong đó, câu lệnh awall activate cần phải được thực thi sau mỗi lần bạn thay đổi rule trên firewall. Sau khi các rule được cập nhật, bạn có thể kiểm tra với iptables như bên dưới:

# ip6tables -S
# iptables -S

Trong quá trình firewall hoạt động, bạn có thể kiểm tra log để biết xem các kết nối nào đã bị chặn:

# dmesg
## See dropped packets from SSH port ##
# dmesg | grep -w DPT=22

Bên dưới là các kết nối SSH đã bị chặn trên firewall:

[ 3532.077008] IN=eth0 OUT= MAC=f2:3c:92:64:16:11:aa:01:9d:43:81:e6:08:00 SRC=194.180.224.130 DST=172.105.xx.yy LEN=60 TOS=0x00 PREC=0x20 TTL=49 ID=9647 DF PROTO=TCP SPT=33106 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0 
[ 3532.077347] IN=eth0 OUT= MAC=f2:3c:92:64:16:11:aa:01:9d:43:81:e6:08:00 SRC=194.180.224.130 DST=172.105.xx.yy LEN=60 TOS=0x00 PREC=0x20 TTL=50 ID=35762 DF PROTO=TCP SPT=33110 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0 
[ 3533.078293] IN=eth0 OUT= MAC=f2:3c:92:64:16:11:aa:01:9d:43:81:e6:08:00 SRC=194.180.224.130 DST=172.105.xx.yy LEN=60 TOS=0x00 PREC=0x20 TTL=50 ID=35763 DF PROTO=TCP SPT=33110 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0

Tắt và reset Awall #

Nếu như bạn muốn tắt firewall đồng thời reset các rule trên iptables thì có thể làm như bên dưới:

# rc-service iptables stop
# rc-service ip6tables stop

Kết luận #

Như vậy, mình đã hướng dẫn bạn cách cài Awall làm firewall trên Alpine Linux cũng như một số thac tác trên firewall cơ bản. Cuối cùng, bất kì thắc mắc nào thì bạn hãy bình luận bên dưới để mình hỗ trợ nhé.

Nguồn bài viết: https://www.cyberciti.biz/

Mình là Tùng, hiện đang là DevOps tại Công Ty CP EcoIT. Với kinh nghiệm có được từ trong công việc, mình muốn chia sẻ cho bạn đọc cùng biết và cùng nhau học thêm nhiều điều mới trong lĩnh vực DevOps.

Powered by BetterDocs

Để lại bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *