Khi làm việc với VPS, hoặc một máy chủ triển khai mà có cài cắm nhiều ứng dụng, dịch vụ với các cổng khác nhau. Thì chúng ta cần phải đưa ra yêu cầu chỉ cho phép các cổng hợp lệ được truy cập từ bên ngoài internet vào máy chủ.

Chắc hẳn bạn nghĩ ngay đến việc bật Firewall trên máy chủ. Việc làm này là cần thiết để chống lại các truy cập bất hợp pháp và bạn cần phải thiết lập các qui tắc chặn các truy cập của riêng mình. Nâng cao tính an toàn của hệ thống máy chủ. Trong các bản phân phối của Linux như CentOS, Ubuntu, Fedora, … đều có tích hợp công cụ tường lửa là iptables.

Bài viết này sẽ tổng hợp các lệnh cơ bản để bạn có thể học được cách sử dụng iptables nhưng vẫn đảm bảo cho hệ thống được an toàn ở mức độ tối thiểu.

Để xem các luật đang có trong iptables, dùng lệnh:

iptables -L -v

Một danh sách dư lày hiện ra:

TARGET    PROT   OPT  IN   OUT   SOURCE     DESTINATION
ACCEPT    all    --   lo   any   anywhere   anywhere
ACCEPT    all    --   any  any   anywhere   anywhere    ctstate  RELATED,ESTABLISHED
ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:ssh
ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:http
ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:https
DROP      all    --   any  any   anywhere   anywhere

Bảng trên liệt kê các dịch vụ cơ bản được công khai ra bên ngoài internet, như vậy. Từ bên ngoài, bản có thể sử dụng được các dịch vụ là http(80), https(443), ssh(22).

Ý nghĩa của các cột như sau:

  • TARGET: Hành động sẽ thực thi cho mỗi chuỗi quy tắc.
  • PROT: Là viết tắt của chữ Protocol, nghĩa là giao thức. Tức là các giao thức sẽ được áp dụng để thực thi quy tắc này. Ở đây chúng ta có 3 lựa chọn là all, tcp hoặc udp. Các ứng dụng như SSH, FTP, sFTP,.. đều sử dụng giao thức kiểu TCP.
  • IN: Thiết bị mạng nhận kết nối vào được áp dụng cho quy tắc, chẳng hạn như lo, eth0, eth1.
  • OUT: Thiết bị mạng phục vụ nhu cầu gửi kết nối ra ngoài được áp dụng quy tắc.
  • DESTINATION: Địa chỉ của lượt truy cập được phép áp dụng quy tắc.

Cụ thể:

Luật thứ 1: Chấp nhận toàn bộ các kết nối cục bộ thông qua interface ảo lo Loopback Interface, mặc định interface này có địa chỉ 127.0.0.1

ACCEPT    all    --   lo   any   anywhere   anywhere

Lệnh: iptables -A INPUT -j DROP

Luật thứ 2: Cho phép giữ lại các kết nối hiện tại. Nghĩa là khi bạn đang ở trong SSH và sửa đổi lại Firewall, nó sẽ không sút bạn ra khỏi SSH nếu bạn không thỏa mãn quy tắc.

ACCEPT    all    --   any  any   anywhere   anywhere    ctstate  RELATED,ESTABLISHED

Luật thứ 3: Cho phép kết nối SSH Server ở bất kì thiết bị nào đó. Mặc định sẽ hiển thị dpt:ssh biểu diễn cổng 22 của SSH.

ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:ssh

Luật thứ 4, 5: Dịch vụ website quả cổng 80443

ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:http
ACCEPT    tcp    --   any  any   anywhere   anywhere    tcp      dpt:https

Luật thứ 6: Đi từ trên xuống, nếu không thỏa mãn các luật trên thì luật này sẽ ngắt tất cả các kết nối đến từ bên ngoài vào.

DROP      all    --   any  any   anywhere   anywhere

Lệnh: iptables -A INPUT -j DROP

Tạo một luật mới

Nếu iptables của bạn chưa có luật nào được thiết lập, khi gõ lệnh iptables -L -v nó sẽ trả về kết quả giống thế này:

Chain INPUT (policy ACCEPT 2245 packets, 200K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 1795 packets, 147K bytes)
 pkts bytes target     prot opt in     out     source               destination

Qua trên bạn thấy iptables chia làm 3 nhóm với 3 kiểu qui tắc đó là:

  • INPUT: áp dụng cho các kết nối đi vào.
  • FORWARD: áp dụng cho các kết nối đã được trỏ đến một vị trí khác.
  • OUTPUT: áp dụng cho các kết nối ra ngoài từ máy chủ.

Để tạo một luật mới, sử dụng lệnh sau: tương ứng tạo ra luật 1 ở trên

iptables -A INPUT -i lo -j ACCEPT

Lệnh này có nghĩa là:

  • -A INPUT: khai báo kiểu kết nối sẽ được áp dụng (A nghĩa là Append).
  • -i lo: Khai báo thiết bị mạng được áp dụng (i nghĩa là Interface).
  • -j ACCEPT: khai báo hành động sẽ được áp dụng cho quy tắc này (j nghĩa là Jump).

Gõ lại lệnh iptables -L -v bạn sẽ thấy 1 luật mới xuất hiện

after-created-iptables-rule

Sau khi thêm mới hoặc thay đổi bất cứ gì, hãy gõ lệnh lưu và khởi động lại iptables để áp đặt các thay đổi.

service iptables save
service iptables restart

Tiếp tục bây giờ chúng ta thêm một luật mới để cho phép lưu lại các kết nối hiện tại để tránh hiện tượng tự block bạn ra khỏi máy chủ.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Cho phép các cổng được truy cập từ bên ngoài vào qua giao thức tcp: SSH(22), HTTP(80), HTTPS(443)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • -p tcp: Giao thức được áp dụng (tcp, udp, all)
  • –dport 22: Cổng cho phép áp dụng. 22 là cho SSH

Và cuối cùng, chặn toàn bộ các kết nối truy cập từ bên ngoài vào không thỏa mãn những luật trên. Tương ứng với luật 5 ở trên.

iptables -A INPUT -j DROP

Đến đây cơ bản bạn đã có đủ các qui tắt cần thiết để thiết lập các chính sách của bạn cho máy chủ truy cập 🙂

Bổ sung một luật mới

Nếu bạn muốn chèn 1 luật mới vào 1 vị trí (hàng) nào đó, ví dụ là vị trí thứ 2. Thì bạn hãy thay tham số -A bằng tham số INSERT -I.

iptables -I INPUT 2 -p tcp --dport 8080 -j ACCEPT

Xóa 1 luật

Để xóa 1 luật mà bạn đã tạo ra tại vị trí 4, ta sẽ sử dụng tham số -D

iptables -D INPUT 4

Xóa toàn bộ các luật chứa hành động DROP có trong iptables:

iptables -D INPUT -j DROP

Nhớ gõ lại lệnh kiểm tra lệnh xóa thành công hay không nhé.

About The Author