kiến thức Chuyển tiếp cổng Port Forwards đơn giản trên Ubuntu bằng iptables

duongcopi

Junior Member
Chuyển tiếp cổng (Port Forwards) là quá trình chuyển hướng các yêu cầu đến một cổng cụ thể đến máy chủ, mạng hoặc cổng khác. Do quá trình này thay đổi đích đến của gói dữ liệu đang truyền, nó được xem xét là một dạng hoạt động NAT (Network Address Translation).

1705111143404.png

Cài đặt Iptables​

Đối với Debian và Ubuntu, hãy sử dụng lệnh sau:

Bash:
sudo apt update
sudo apt install iptables

Đối với CentOS, Fedora hoặc RHEL, hãy sử dụng:

Bash:
sudo dnf install iptables

Kiểm tra các quy tắc hiện có​

Trước khi bắt đầu sửa đổi các quy tắc iptables của mình, bạn nên xem xét các quy tắc hiện tại.

Bash:
sudo iptables -L -v -n

-L liệt kê các quy tắc, -v hiển thị thông tin chi tiết hơn và -n hiển thị địa chỉ IP và số cổng dưới dạng số trong lệnh iptables.

Kích hoạt chuyển tiếp IP​

Để cho phép chuyển tiếp ở cấp kernel, chúng ta cần kích hoạt chuyển tiếp IP.

Chỉnh sửa tệp /etc/sysctl.conf :

Bash:
sudo nano /etc/sysctl.conf

Thêm hoặc bỏ ghi chú dòng sau:

Bash:
net.ipv4.ip_forward=1

Để áp dụng các thay đổi, hãy chạy:

Bash:
sudo sysctl -p

Cấu hình quy tắc chuyển tiếp​

Để chuyển tiếp không bị gián đoạn bạn cần xoá tất cả các quy tắc đã cài đặt trước đó. (Việc này tốt cho cài đặt chuyển tiếp nhưng không tốt cho các ứng dụng đã cài quy tắc trước đó)

Bash:
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

Lệnh đầu tiên trong danh sách xóa tất cả các quy tắc, lệnh -t nat -F xóa bảng nat, -t mangle -F xóa bảng mangle và lệnh cuối cùng -X xóa tất cả các chuỗi.

Tiếp theo, chúng ta chuyển sang thiết lập các quy tắc, các lệnh này có thể được chạy từng dòng trong bash hoặc thông qua tệp lệnh.

Bash:
IF=eth0
PORT_FROM=80
PORT_TO=80
DEST=192.168.1.175
iptables -t nat -A PREROUTING -i $IF -p tcp — dport $PORT_FROM -j DNAT — to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST — dport $PORT_TO -j MASQUERADE

  • IF= Chọn giao diện muốn định tuyến lưu lượng truy cập.
  • PORT_FROM= Đặt cổng xuất.
  • PORT_TO= Đặt cổng đích.
  • DEST= Xác định địa chỉ IP của máy chủ web mà lưu lượng truy cập sẽ được định tuyến, có thể là trên môi trường ảo (VM).
Dưới đây là ví dụ về chuyển tiếp -p được đặt thành udp.

Bash:
IF=eth0
PORT_FROM=51820
PORT_TO=51820
DEST=192.168.1.20
iptables -t nat -A PREROUTING -i $IF -p udp - dport $PORT_FROM -j DNAT - to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p udp -d $DEST - dport $PORT_TO -j MASQUERADE

Tiếp theo bạn cần kiểm tra thiết bị của bạn đã bật giao thức chuyển tiếp.

Bash:
cat /proc/sys/net/ipv4/ip_forward

Mã này sẽ trả về 0 là tắt hoặc 1 là bật.

Để thiết lập bật giao thức chuyển tiếp chạy lệnh này:

Bash:
sudo sysctl -w net.ipv4.ip_forward=1

Để tắt chạy lệnh này:

Bash:
sudo sysctl -w net.ipv4.ip_forward=0

Các cài đặt trên sẽ có hiệu lực ngay lập tức mà không cần khởi động lại.
 
Chuyển tiếp cổng (Port Forwards) là quá trình chuyển hướng các yêu cầu đến một cổng cụ thể đến máy chủ, mạng hoặc cổng khác. Do quá trình này thay đổi đích đến của gói dữ liệu đang truyền, nó được xem xét là một dạng hoạt động NAT (Network Address Translation).

View attachment 2286264

Cài đặt Iptables​

Đối với Debian và Ubuntu, hãy sử dụng lệnh sau:

Bash:
sudo apt update
sudo apt install iptables

Đối với CentOS, Fedora hoặc RHEL, hãy sử dụng:

Bash:
sudo dnf install iptables

Kiểm tra các quy tắc hiện có​

Trước khi bắt đầu sửa đổi các quy tắc iptables của mình, bạn nên xem xét các quy tắc hiện tại.

Bash:
sudo iptables -L -v -n

-L liệt kê các quy tắc, -v hiển thị thông tin chi tiết hơn và -n hiển thị địa chỉ IP và số cổng dưới dạng số trong lệnh iptables.

Kích hoạt chuyển tiếp IP​

Để cho phép chuyển tiếp ở cấp kernel, chúng ta cần kích hoạt chuyển tiếp IP.

Chỉnh sửa tệp /etc/sysctl.conf :

Bash:
sudo nano /etc/sysctl.conf

Thêm hoặc bỏ ghi chú dòng sau:

Bash:
net.ipv4.ip_forward=1

Để áp dụng các thay đổi, hãy chạy:

Bash:
sudo sysctl -p

Cấu hình quy tắc chuyển tiếp​

Để chuyển tiếp không bị gián đoạn bạn cần xoá tất cả các quy tắc đã cài đặt trước đó. (Việc này tốt cho cài đặt chuyển tiếp nhưng không tốt cho các ứng dụng đã cài quy tắc trước đó)

Bash:
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

Lệnh đầu tiên trong danh sách xóa tất cả các quy tắc, lệnh -t nat -F xóa bảng nat, -t mangle -F xóa bảng mangle và lệnh cuối cùng -X xóa tất cả các chuỗi.

Tiếp theo, chúng ta chuyển sang thiết lập các quy tắc, các lệnh này có thể được chạy từng dòng trong bash hoặc thông qua tệp lệnh.

Bash:
IF=eth0
PORT_FROM=80
PORT_TO=80
DEST=192.168.1.175
iptables -t nat -A PREROUTING -i $IF -p tcp — dport $PORT_FROM -j DNAT — to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST — dport $PORT_TO -j MASQUERADE

  • IF= Chọn giao diện muốn định tuyến lưu lượng truy cập.
  • PORT_FROM= Đặt cổng xuất.
  • PORT_TO= Đặt cổng đích.
  • DEST= Xác định địa chỉ IP của máy chủ web mà lưu lượng truy cập sẽ được định tuyến, có thể là trên môi trường ảo (VM).
Dưới đây là ví dụ về chuyển tiếp -p được đặt thành udp.

Bash:
IF=eth0
PORT_FROM=51820
PORT_TO=51820
DEST=192.168.1.20
iptables -t nat -A PREROUTING -i $IF -p udp - dport $PORT_FROM -j DNAT - to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p udp -d $DEST - dport $PORT_TO -j MASQUERADE

Tiếp theo bạn cần kiểm tra thiết bị của bạn đã bật giao thức chuyển tiếp.

Bash:
cat /proc/sys/net/ipv4/ip_forward

Mã này sẽ trả về 0 là tắt hoặc 1 là bật.

Để thiết lập bật giao thức chuyển tiếp chạy lệnh này:

Bash:
sudo sysctl -w net.ipv4.ip_forward=1

Để tắt chạy lệnh này:

Bash:
sudo sysctl -w net.ipv4.ip_forward=0

Các cài đặt trên sẽ có hiệu lực ngay lập tức mà không cần khởi động lại.
Thêm một bài về nftables hay gộp chung và so sánh cả 2 nữa đi bạn^^
 
Back
Top