Lập trình

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

Port Forwarding là một quá trình chuyển tiếp của một cổng kết nối trong mạng máy tính từ một máy tính hoặc thiết bị mạng, địa chỉ IP hoặc cổng kết nối ngoài mạng đến một máy tính hoặc thiết bị mạng khác trên mạng. Quá trình này cho phép người dùng truy cập vào các dịch vụ hoặc ứng dụng trên các thiết bị mạng khác nhau trong mạng cục bộ hoặc trên internet.

Cài đặt Iptables

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

sudo apt update 
sudo apt install iptables

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

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.

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 :

sudo nano /etc/sysctl.conf

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

net.ipv4.ip_forward=1

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

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 đó)

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.

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.

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.

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:

sudo sysctl -w net.ipv4.ip_forward=1

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

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.

Chat