Shorewall là phần mềm quản lý tường lửa nguồn mở trên Linux, cho phép thiết lập các quy tắc bảo mật phức tạp thông qua giao diện cấu hình dạng file văn bản, thay vì thao tác trực tiếp với iptables. Trong bài viết này, mình sẽ hướng dẫn bạn quy trình cài đặt, định nghĩa vùng mạng và thiết lập các chính sách bảo mật cơ bản với Shorewall trên nền tảng Linux.
Những điểm chính
- Định nghĩa Shorewall: Hiểu rõ Shorewall là phần mềm quản lý tường lửa qua file văn bản, giúp đơn giản hóa việc thiết lập bảo mật so với
iptablesphức tạp. - Các đối tượng sử dụng chính: Xác định được liệu Shorewall có phù hợp với vai trò của bạn hay không, từ quản trị viên hệ thống, DevOps đến người dùng cá nhân.
- Hướng dẫn cài đặt: Nắm vững các lệnh cài đặt Shorewall một cách nhanh chóng trên các bản phân phối Linux phổ biến như Debian/Ubuntu và CentOS/RHEL.
- Hướng dẫn thiết lập cấu hình: Nắm vững quy trình từng bước để thiết lập một tường lửa hoàn chỉnh, từ việc khai báo vùng mạng, thiết lập chính sách đến định nghĩa các quy tắc bảo mật chi tiết.
- Lưu ý khi sử dụng: Nắm được các lưu ý quan trọng để sử dụng Shorewall một cách an toàn và hiệu quả, giúp tránh các lỗi phổ biến như tự khóa truy cập SSH.
- Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các vấn đề nâng cao như ưu điểm so với iptables, khả năng tích hợp xác thực người dùng và tính phù hợp với môi trường cloud.
Shorewall là gì?
Shorewall là phần mềm giúp quản lý và kiểm soát tường lửa trên Linux một cách dễ dàng, linh hoạt. Thay vì phải thao tác trực tiếp với iptables, Shorewall cho phép bạn thiết lập các quy tắc bảo mật thông qua những file cấu hình văn bản rõ ràng. Với Shorewall, bạn có thể chia mạng thành nhiều vùng, kiểm soát lưu lượng giữa các mạng (LAN, DMZ, Internet), hỗ trợ NAT, Forwarding, VPN và điều chỉnh chính sách bảo mật tuỳ ý theo nhu cầu sử dụng.
Các tính năng nổi bật của Shorewall:
- Quản lý theo vùng: Shorewall cho phép phân chia mạng thành các vùng logic (Internet, LAN, DMZ) để dễ dàng kiểm soát.
- Hỗ trợ đa tính năng: Shorewall tích hợp sẵn NAT, Port Forwarding, Traffic Shaping và VPN.
- Kiểm soát trạng thái: Bạn có thể theo dõi trạng thái kết nối trên Shorewall để xử lý gói tin chính xác.
- Khả năng mở rộng: Shorewall cho phép bạn quản lý firewall đơn giản cho hệ thống từ nhỏ đến quy mô doanh nghiệp.

Các đối tượng sử dụng chính của Shorewall
Dưới đây là các nhóm đối tượng sử dụng chính của Shorewall:
- Quản trị viên hệ thống: Cần giải pháp thay thế cú pháp
iptablesphức tạp để bảo vệ server, quản lý port và chặn IP dễ dàng thông qua file cấu hình văn bản. - Quản trị viên mạng: Muốn biến máy chủ Linux thành Router/Gateway chuyên dụng hỗ trợ các tính năng cao cấp như Multi-ISP, cân bằng tải và quản lý băng thông (QoS).
- Kỹ sư DevOps và Cloud: Cần quản lý cấu hình tường lửa dưới dạng mã nguồn để dễ dàng lưu trữ trên Git và triển khai tự động qua Ansible/Puppet.
- Người dùng Home Lab và SOHO: Muốn tận dụng phần cứng cũ hoặc Raspberry Pi để xây dựng hệ thống Firewall/Router mạnh mẽ, chi phí thấp thay thế cho modem nhà mạng.

Hướng dẫn cài đặt Shorewall chi tiết
Để minh họa cho bài viết, mình sẽ thiết lập Shorewall trên một máy chủ Linux đóng vai trò Gateway với 2 giao diện mạng vật lý:
- eth0 (Zone: net): Giao diện kết nối trực tiếp với Internet (WAN).
- eth1 (Zone: loc): Giao diện kết nối với mạng nội bộ (LAN).
Trên Debian/Ubuntu
Bạn sử dụng trình quản lý gói apt để cài đặt với cú pháp như sau:
sudo apt update
sudo apt install shorewall
Trên RHEL/CentOS/Fedora
Để cài đặt, bạn sử dụng trình quản lý gói yum với cú pháp như sau:
sudo yum install shorewallHướng dẫn sử dụng Shorewall để thiết lập cấu hình
1. Khởi tạo cấu hình ban đầu
Shorewall không hoạt động ngay sau khi được cài đặt, do đó bạn cần sao chép các file cấu hình mẫu để làm cơ sở chỉnh sửa. Hệ thống cung cấp sẵn các mẫu cấu hình trong thư mục tài liệu, bạn hãy sao chép mẫu two-interfaces vào thư mục cấu hình chính /etc/shorewall:
Bạn thực thi lệnh sau:
sudo cp /usr/share/doc/shorewall/examples/two-interfaces/* /etc/shorewall
cd /etc/shorewall
ls
2. Khai báo các vùng mạng
File zones dùng để khai báo các vùng logic trong hệ thống mạng. Để mở file và chỉnh sửa, bạn thực thi lệnh sau:
sudo nano /etc/shorewall/zones
Giải thích:
fw(Firewall): Là máy chủ cài đặt Shorewall.net(Internet): Là vùng mạng bên ngoài (IPv4).loc(Local): Là vùng mạng nội bộ.
Các zone này sẽ được sử dụng xuyên suốt trong những file cấu hình quan trọng khác của Shorewall như:
- interfaces: Dùng để ánh xạ các card mạng vật lý như eth0, eth1,… vào từng zone, giúp Shorewall biết mỗi vùng tương ứng với những giao diện mạng nào.
- policy: Xác định chính sách mặc định cho lưu lượng đi giữa các zone.
- rules: Khai báo các luật firewall chi tiết để cho phép, chặn, chuyển hướng,… một số loại kết nối hoặc port nhất định.
Việc phân chia này giúp bạn thiết lập các luật bảo mật dựa trên nguồn và đích của vùng thay vì địa chỉ IP cụ thể.
3. Thiết lập chính sách mặc định
File policy quy định hành động mặc định khi một gói tin đi từ vùng này sang vùng khác mà chưa có quy tắc cụ thể (rules) nào xử lý.
Để mở file cấu hình, bạn thực thi lệnh sau:
sudo nano /etc/shorewall/policy
Phân tích các dòng chính sách quan trọng:
loc net ACCEPT:- Ý nghĩa: Cho phép (ACCEPT) toàn bộ lưu lượng khởi tạo từ mạng nội bộ (
loc) đi ra Internet (net). - Ứng dụng: Các máy tính trong LAN có thể truy cập web, SSH, ping,… ra bên ngoài..
- Ý nghĩa: Cho phép (ACCEPT) toàn bộ lưu lượng khởi tạo từ mạng nội bộ (
net all DROP $LOG_LEVEL:- Ý nghĩa: Hủy bỏ (DROP) mọi gói tin từ Internet (
net) gửi đến bất kỳ vùng nào (all), bao gồm cả fw (firewall) và loc (LAN). - Tham số $LOG_LEVEL: Ghi lại hành động này vào log hệ thống, thường ở mức
infohoặcnoticetrongshorewall.confđể phục vụ giám sát.
- Ý nghĩa: Hủy bỏ (DROP) mọi gói tin từ Internet (
all all REJECT $LOG_LEVEL:- Ý nghĩa: Quy tắc này đóng vai trò như một bộ lọc tổng hợp ở cuối bảng chính sách. Mọi lưu lượng không khớp với các quy tắc trên sẽ bị từ chối (REJECT).
- Sự khác biệt:
REJECTsẽ gửi trả lại một gói tin báo lỗi cho người gửi, giúp minh bạch hóa việc từ chối kết nối.
4. Ánh xạ giao diện mạng
File interfaces dùng để gán các giao diện vật lý vào các vùng logic. Bạn thực thi lệnh sau:
sudo nano /etc/shorewall/interfaces
Giải thích cấu hình:
?FORMAT 2: Chỉ thị cho Shorewall sử dụng định dạng phiên bản 2, cho phép sử dụng biến số.- Cột ZONE: Tên vùng (
net,loc). - Cột INTERFACE: Là tên giao diện vật lý, thường được đặt dưới dạng biến như
NET_IF(thường là eth0) vàLOC_IF(thường là eth1). Bạn cần đảm bảo các biến này khớp với thực tế hoặc điền trực tiếp tên interface (ví dụ:eth0,eth1).
5. Thiết lập rule chi tiết
File rules là nơi định nghĩa các ngoại lệ cụ thể, cho phép hoặc chặn các dịch vụ chi tiết dựa trên giao thức và cổng. Để mở file, bạn thực hiện lệnh sau đây:
sudo nano /etc/shorewall/rules
Giải thích:
Các dòng đặc biệt ở đầu file:
?SECTION ALL
?SECTION ESTABLISHED
?SECTION RELATED
?SECTION INVALID
?SECTION UNTRACKED
?SECTION NEWDưới là các section markers giúp Shorewall phân loại các rule theo trạng thái kết nối:
| Section | Mô tả |
| ALL | Áp dụng cho tất cả các gói |
| ESTABLISHED | Gói thuộc kết nối đã thiết lập |
| RELATED | Gói liên quan đến kết nối đã được chấp nhận |
| INVALID | Gói không hợp lệ |
| UNTRACKED | Gói không được connection tracking xử lý |
| NEW | Gói bắt đầu kết nối mới |
Phân tích các section và rule ví dụ:
Invalid(DROP) net all tcp:- Hành động: Loại bỏ (DROP) các gói tin TCP có trạng thái không hợp lệ (INVALID) từ Internet gửi đến mọi vùng.
- Mục đích: Bảo vệ hệ thống khỏi các gói tin bị lỗi header hoặc các dạng tấn công làm sai lệch gói tin.
DNS(ACCEPT) $FW net:- Hành động: Cho phép chính máy firewall (
$FW) gửi yêu cầu DNS (cổng 53 UDP/TCP) ra Internet (net). - Mục đích: Giúp server phân giải tên miền.
- Hành động: Cho phép chính máy firewall (
SSH(ACCEPT) loc $FW:- Hành động: Cho phép kết nối SSH (cổng 22) từ mạng nội bộ (
loc) vào firewall ($FW). - Mục đích: Cho phép quản trị viên truy cập điều khiển server từ mạng LAN.
- Hành động: Cho phép kết nối SSH (cổng 22) từ mạng nội bộ (
Ping(ACCEPT) loc $FW:- Hành động: Cho phép mạng nội bộ gửi gói tin ICMP (Ping) đến firewall.
- Mục đích: Hỗ trợ việc kiểm tra kết nối mạng, phát hiện sự cố.
6. Kích hoạt Shorewall
Mặc định, Shorewall sẽ bị vô hiệu hóa để tránh việc người dùng bị khóa khỏi hệ thống do cấu hình sai, do đó bạn cần kích hoạt Shorewall thủ công. Để chỉnh sửa file cấu hình toàn cục, bạn thực hiện lệnh dưới đây:
sudo nano /etc/shorewall/shorewall.confSau đó, bạn tìm biến STARTUP_ENABLED và đổi giá trị thành Yes:
STARTUP_ENABLED=Yes
Tiếp theo, bạn khởi động dịch vụ và thiết lập tự động chạy cùng hệ thống với lệnh sau đây:
sudo systemctl restart shorewall
sudo systemctl enable shorewall
7. Kiểm tra và xác thực
Kiểm tra trạng thái dịch vụ
Bạn sử dụng lệnh sau để xác nhận Shorewall đang hoạt động và các zone đã được nạp đúng:
sudo shorewall status
Kiểm tra kết nối
Từ một máy trạm trong mạng LAN, bạn hãy thực hiện lệnh ping tới địa chỉ IP của máy chủ Shorewall. Nếu được cấu hình chính xác, máy chủ sẽ phản hồi.

Lưu ý khi sử dụng Shorewall
Dưới đây là những lưu ý quan trọng khi sử dụng Shorewall:
- Ưu tiên lệnh safe-restart: Bạn hãy dùng shorewall safe-restart thay vì restart khi thao tác từ xa vì lệnh này cho phép tự động khôi phục cấu hình cũ nếu bạn vô tình chặn mất kết nối SSH của chính mình.
- Vô hiệu hóa Firewall khác: Bạn tắt hoàn toàn các trình quản lý tường lửa mặc định như UFW (Ubuntu) hay Firewalld (CentOS) để tránh xung đột quyền kiểm soát với Shorewall.
- Kiểm tra cú pháp: Luôn chạy lệnh sudo shorewall check sau khi chỉnh sửa file cấu hình để phát hiện lỗi chính tả hoặc logic trước khi bạn khởi động dịch vụ.
- Dự phòng quyền truy cập Console: Đảm bảo bạn có quyền truy cập qua KVM hoặc màn hình Console vật lý để khôi phục server trong trường hợp lỡ tay cấu hình chặn toàn bộ mạng.
- Cấu hình Log hợp lý: Bạn thiết lập mức Log (như INFO) trong file Policy cho các gói tin bị chặn (DROP/REJECT) để phục vụ việc tra cứu và gỡ lỗi sau này.

Câu hỏi thường gặp
Shorewall có ưu điểm kỹ thuật nào vượt trội so với việc sử dụng trực tiếp iptables trong môi trường doanh nghiệp?
Shorewall cung cấp cấu hình tường lửa dạng file văn bản giúp việc quản lý và triển khai tự động qua các công cụ như Git, Ansible, Puppet dễ dàng hơn. Nhờ mô hình quản lý theo vùng, các chính sách bảo mật được tổ chức rõ ràng, tối ưu hóa cho hệ thống nhiều lớp mạng.
Điều này giúp đơn giản hóa quy trình kiểm soát khi cần mở rộng hạ tầng hoặc tích hợp nhiều gateway/network segment, thay vì phải duyệt thủ công từng rule phức tạp như với iptables.
Shorewall có tích hợp xác thực người dùng hoặc quản lý truy cập theo danh tính không?
Shorewall tập trung quản lý truy cập dựa trên vùng, địa chỉ IP và port, chưa hỗ trợ trực tiếp xác thực theo danh tính người dùng. Để kiểm soát chi tiết truy cập theo user, bạn nên tích hợp thêm hệ thống xác thực riêng biệt trên dịch vụ cần bảo vệ, đồng thời sử dụng chính sách của Shorewall để giới hạn truy cập ở tầng mạng, hỗ trợ cho tầng ứng dụng xử lý xác thực nội bộ.
Shorewall có phù hợp cho môi trường cloud, ảo hóa hoặc hybrid cloud không?
Shorewall được thiết kế tương thích tốt với máy chủ vật lý và ảo hóa, dễ dàng cấu hình cho container, bridge interface hoặc các overlay network trong môi trường cloud. Việc lưu trữ cấu hình dạng text cho phép đồng bộ qua git, triển khai qua các CI/CD pipeline, đồng thời áp dụng mẫu cấu hình với variable – giúp nhất quán policy trên hàng loạt instance. Bạn chỉ cần chỉnh sửa template và tự động hoá khâu deploy lên các máy chủ cần bảo vệ.
Shorewall là giải pháp tường lửa nguồn mở mạnh mẽ dành cho Linux, nổi bật với khả năng quản lý linh hoạt qua các file cấu hình văn bản. Việc tổ chức hệ thống theo mô hình vùng mạng giúp kiểm soát luồng dữ liệu hiệu quả, đồng thời đơn giản hóa triển khai các chính sách bảo mật phức tạp. Chúc bạn cấu hình thành công và hẹn gặp lại bạn trong các bài viết tiếp theo.




