Iptables
本地機器 Ubuntu iptables 上的條件埠重定向
我是這個社區的新手,也是我想使用的工具的新手
iptables
,所以請多多包涵我的無能^_^無論如何,我的情況如下:
- 我有一個帶有私有 IP 地址的私有 LAN。
- LAN 通過路由器連接到我組織的網路,該網路具有固定的 IP 地址範圍。
- 反過來,該網路通過網關連接到網際網路。
- 在我的私人區域網路中,我正在執行一個在埠監聽的伺服器
A
。- 它接受來自我的私有 LAN 中所有電腦的所有請求 port
A
。- 它是一個以請求/響應模式執行的 TCP 伺服器,即我需要與它進行通信。
- 無法從我的專用 LAN 之外的任何地方訪問它。
- 作業系統是Ubuntu 16.04,
iptables
已安裝。我可以輕鬆地配置我的路由器以將所有傳入的 TCP 連接轉發到我的伺服器的埠
B
到埠A
。這意味著來自外部的任何人,無論是組織的網路還是網際網路,都可以連接到我路由器的 IP 地址埠B
,並將被轉發到我的伺服器埠A
。但是,我只希望允許我組織網路中的使用者這樣做。對於來自網際網路的普通使用者,應該無法訪問我的伺服器。我想
iptables
在我的伺服器上實現的是。
- 我的專用 LAN 的行為與以前一樣。我區域網路中電腦上的所有程序仍然可以使用其私有 IP 地址和埠連接到我的伺服器
A
。- 我組織網路中的使用者(由 IP 地址範圍或子網遮罩標識)可以訪問我的路由器和埠的 IP 地址
B
以使用我的服務,他們的包被轉發到我的伺服器及其埠A
。- 不應該轉發既不在我的私人區域網路中也不在組織網路中的使用者,他們不要連接到我寶貴的伺服器。
- 如果我的私有 LAN 中的電腦嘗試使用 port 訪問伺服器
B
,那應該沒問題並且是可以接受的,即,我們可以重定向任何訪問埠B
的人,但來自外部網際網路的人除外。現在我以前從未使用
iptables
過,我什至不確定是否可以使用它,儘管我認為它可能可以完成。我看過一些例子,但它們似乎沒有做我想做的事,我不確定我是否充分理解它們,不會因為玩弄而破壞某些東西。非常感謝,托馬斯。
假設您的 LAN 有 192.168.0.0/24,您的組織網路有 172.16.0.0/24,您的路由器有 192.168.0.1(在 eth1 上)和 172.16.0.1(在 eth0 上)地址,並且您想通過 192.168 訪問您的伺服器.0.2:80 或 172.16.0.1:8080
為了轉發數據包,您需要添加
net.ipv4.ip_forward = 1
/etc/sysctl.conf#!/bin/bash iptables -P INPUT DROP # if no rule match, drop the packet iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # router can access everything iptables -A PREROUTING -s 172.16.0.0 -d 172.16.0.1 -p tcp --dport 8080 -j DNAT 192.168.0.1:80 # destination nat with ACL iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # only accept established connections from LAN to router iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # established connections iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT # LAN to ORG or INET iptables -A FORWARD -i eth0-s 172.16.0.0/24 -d 192.168.0.2 -p tcp --dport 80 -j ACCEPT # this rule comes after the dnat one, so destination already changed iptables -A POSTROUTING -i eth1 -s 192.168.0.0 -j SNAT --to-source 192.168.0.1 # source nat
您可能必須使用 iptables 並根據您的需要進行自定義。
你需要知道的是:是的,你可以用 iptables 做你想做的一切。