Hướng dẫn cài đặt và cách sử dụng Iptables để mở port VPS

Hướng dẫn chi tiết cách cài đặt và sử dụng Iptables một cách đơn giản để mở port VPS cũng như mở những port dịch vụ thường được sử dụng.

Iptables là một hệ thống tường lửa (Firewall) tiêu chuẩn được cấu hình, tích hợp mặc định trong hầu hết các bản phân phối của hệ điều hành Linux (CentOS, Ubuntu…). Iptables hoạt động dựa trên việc phân loại và thực thi các package ra/vào theo các quy tắc được thiết lập từ trước.

Kiểm tra tình trạng đóng/mở 1 port bất kỳ, các bạn sử dụng website: https://ping.eu/port-chk/

1. Cài đặt Iptables

Iptables thường được cài mặc định trong hệ thống. Mặc định trên CentOS 7 dùng firewalld làm tường lửa nên cần sử dụng Iptables chúng ta cần disable firewalld trước.

# yum update -y

# systemctl stop firewalld

# systemctl mask –now firewalld

# yum install iptables-services.x86_64 -y

# systemctl iptables enable && systemctl ip6tables enable

# systemctl iptables start && systemctl ip6tables start

Kiểm tra Iptables đã được cài đặt trong hệ thống trên Centos:

# rpm -q iptables

iptables-1.4.21-34.el7.x86_64

# iptables –version

iptables v1.4.21

Kiểm tra tình trạng của Iptables, cách bật tắt service trên Centos 7:

# systemctl iptables status

# systemctl iptables stop

# systemctl iptables start

# systemctl iptables restart

Tương tự cho cách bật tắt ip6tables:

# systemctl ip6tables status

# systemctl ip6tables stop

# systemctl ip6tables start

# systemctl ip6tables restart

1.1 Các nguyên tắc áp dụng trong Iptables

Để bắt đầu, bạn cần xác định các services muốn đóng/mở và các port tương ứng.

Ví dụ: Với một website và mail server thông thường:

  • Để truy cập VPS bằng SSH, bạn cần mở port SSH – 22.
  • Để truy cập website, bạn cần mở port HTTP – 80 và HTTPS – 443.
  • Để gửi mail, bạn sẽ cần mở port SMTP – 25 và SMTPS – 465/587
  • Để người dùng nhận được email, bạn cần mở port POP3 – 110, POP3s – 995, IMAP – 143 và IMAPs – 993

Sau khi đã xác định được các port cần mở, bạn cần thiết lập các quy tắc tường lửa tương ứng để cho phép.

Bạn có thể xóa toàn bộ các quy tắc firewall mặc định bằng lệnh sau:

Hướng dẫn cài đặt và cách sử dụng Iptables để mở port VPS (1)

$ iptables -F

Cột 1: TARGET hành động sẽ được áp dụng cho mỗi quy tắc

  • Accept: gói dữ liệu được chuyển tiếp để xử lý tại ứng dụng cuối hoặc hệ điều hành
  • Drop: gói dữ liệu bị chặn, loại bỏ
  • Reject: gói dữ liệu bị chặn, loại bỏ đồng thời gửi một thông báo lỗi tới người gửi

Cột 2: PROT (protocol – giao thức) quy định các giao thức sẽ được áp dụng để thực thi quy tắc, bao gồm all, TCP hay UDP. Các ứng dụng SSH, FTP, sFTP… đều sử dụng giao thức TCP.

Cột 4, 5: SOURCE và DESTINATION địa chỉ của lượt truy cập được phép áp dụng quy tắc.

2. Cách sử dụng Iptables để mở port VPS

Để mở port trong Iptables, bạn cần chèn chuỗi ACCEPT PORT. Cấu trúc mở port xxx có 2 cách như sau:

Cách 1: dùng flag -A

# iptables -A INPUT -p tcp -m tcp --dport xxx -j ACCEPT
  • A: Append - chèn rule vào cuối chuỗi INPUT

Cách 2: dùng flag -I

# iptables -I INPUT number -p tcp -m tcp --dport xxx -j ACCEPT
  • I: Insert – chèn rule vào vị trí chỉ định chuỗi INPUT
  • Number: số thứ tự dòng trong chuỗi INPUT muốn chèn vào. Không khai báo khi nhập lệnh sẽ báo lỗi.

2.1 Mở port SSH

Để truy cập VPS từ bất kỳ đâu, bạn cần mở port SSH 22 mặc định trên VPS

# iptables -I INPUT 1 -p tcp -m tcp –dport 22 -j ACCEPT

Khi đó Iptables sẽ thêm rule vào chain INPUT:

Hướng dẫn cài đặt và cách sử dụng Iptables để mở port VPS (2)

Tương tự cho ip6tables:

# ip6tables -I INPUT 1 -p tcp -m tcp –dport 22 -j ACCEPT

Hướng dẫn cài đặt và cách sử dụng Iptables để mở port VPS (3)

2.2 Mở port Webserver

Để cho phép truy cập vào webserver qua port 80/443 chúng ta thực hiện như sau:

# iptables -I INPUT 1 -p tcp -m tcp –dport 80 -j ACCEPT

# iptables -I INPUT 1 -p tcp -m tcp –port 443 -j ACCEPT

Tương tự cho ip6tables:

# ip6tables -I INPUT 1 -p tcp -m tcp –dport 80 -j ACCEPT

# ip6tables -I INPUT 1 -p tcp -m tcp –dport 443 -j ACCEPT

2.3 Mở port Mail

– Để cho phép user sử dụng SMTP servers qua port mặc định 25 và 465:

# iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

– Để user đọc email trên server, bạn cần mở port POP3 (port mặc định 110 và 995)

# iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

Tương tự cho ip6tables:

# ip6tables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# ip6tables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
# ip6tables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# ip6tables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

2.4 Chặn 1 IP truy cập

# iptables -A INPUT -s IP_ADDRESS -j DROP

Chặn 1 IP truy cập 1 port cụ thể:

# iptables -A INPUT -p tcp -s IP_ADDRESS –dport PORT -j DROP

Tương tự cho ip6tables:

# ip6tables -A INPUT -p tcp -s IP_ADDRESS –dport PORT -j DROP

Sau khi đã thiết lập cơ bản đầy đủ, bao gồm tất cả các port cần thiết hay hay hạn chế kết nối, chúng ta cần block toàn bộ các kết nối còn lại và cho phép toàn bộ kết nối ra ngoài từ VPS

# iptables -A OUTPUT -j ACCEPT
# iptables -A INPUT -j DROP
# ip6tables -A OUTPUT -j ACCEPT
# ip6tables -A INPUT -j DROP

Sau khi đã thiết lập xong, bạn có thể kiểm tra lại các quy tắc bằng lệnh sau:

Hướng dẫn cài đặt và cách sử dụng Iptables để mở port VPS (4)

# iptables -nvL --line-numbers

Các bạn lưu ý, lệnh iptables chỉ show các rule áp dụng cho Ipv4, nếu muốn show các rule của Ipv6 các bạn dùng lệnh sau:

Hướng dẫn cài đặt và cách sử dụng Iptables để mở port VPS (5)

# ip6tables -nvL --line-numbers

Sau khi đã kiểm tra mọi thứ hoàn tất, chúng ta cần thực hiện save các rule Iptables để apply cấu hình vào file config của iptables, nếu không thực hiện save lại, khi reboot server sẽ bị mất cấu hình firewall

Hướng dẫn cài đặt và cách sử dụng Iptables để mở port VPS (6)

# service iptables save

3. Những tips khi sử dụng Iptables

3.5.1 Tạo Alias để giảm thời gian gọi lệnh

Các câu lệnh Iptables dùng thường xuyên có thể kế đến ví dụ như là:

# service iptables save

Dùng để save cấu hình iptables

# iptables -nvL –line-numbers

Dùng để show cấu hình iptables

Để tiết kiệm thời gian chúng ta nên thêm alias vào file .bashrc:

# vi ~/.bashrc

alias fwsave=’service iptables save’

alias fwshow=’iptables -nvL –line-numbers’

alias fw6save=’service ip6tables save’

alias fw6show=’ip6tables -nvL –line-numbers’

Sau đó save file lại dùng lệnh 😡 và chạy lệnh source để load lại config của shell.

# source ~/.bashrc

Các bạn lưu ý, alias không nhất thiết phải đặt theo mình, nên chọn từ keyword ngắn gọn và mang tính gợi nhớ. Khi đó mỗi khi thao tác chúng ta chỉ cần nhập lệnh fwsave, fwshow thay vì cặm cụi gõ 1 lệnh shell dài và khó nhớ:

Hướng dẫn cài đặt và cách sử dụng Iptables để mở port VPS (7)

Không cần nhớ lệnh quá dài, chỉ cần nhớ keyword để sử dụng.

3.5.2 Nguyên tắc thêm rule vào Iptables

Iptables hoạt động theo nguyên tắc khi 1 packet đi vào server, bộ lọc của Itpables sẽ đánh giá packet theo các rule có thứ tự từ 1 … n, nếu match với rule nào sẽ thực hiện hành động và dừng việc đánh giá

Việc nắm rõ cách hoạt động của Iptables rất quan trọng, nếu không chú ý sẽ làm Iptables hoạt động sai yêu cầu, chẳng hạn block toàn bộ traffic vào port 22 nếu cấu hình như sau:

# iptables -nvL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

DROP all — * * 0.0.0.0/0 0.0.0.0/0

ACCEPT tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 state NEW,ESTABLISHED

Hành động trên của 1 sysadmin sẽ thực hiện block toàn bộ traffic gồm TCP và UDP từ mọi IP tới máy chủ VPS, hậu quả là sysadmin sẽ không thể SSH được vào server do packet TCP có dest port 22 sẽ match với rule DROP all trước rule ACCEPT dpt 22.

Như vậy nguyên tắc thêm rule vào Iptables cần chú ý:

+ Rules ACCEPT cần ưu tiên lên phía trên ( số thứ tự càng nhỏ), rule DROP/REJECT sẽ để cuối cùng trong chain ( số thứ tự lớn nhất).

Nguồn: vinahost