Iptables

本地機器 Ubuntu iptables 上的條件埠重定向

  • December 9, 2016

我是這個社區的新手,也是我想使用的工具的新手iptables,所以請多多包涵我的無能^_^

無論如何,我的情況如下:

  1. 我有一個帶有私有 IP 地址的私有 LAN。
  2. LAN 通過路由器連接到我組織的網路,該網路具有固定的 IP 地址範圍。
  3. 反過來,該網路通過網關連接到網際網路。
  4. 在我的私人區域網路中,我正在執行一個在埠監聽的伺服器A
  5. 它接受來自我的私有 LAN 中所有電腦的所有請求 port A
  6. 它是一個以請求/響應模式執行的 TCP 伺服器,即我需要與它進行通信。
  7. 無法從我的專用 LAN 之外的任何地方訪問它。
  8. 作業系統是Ubuntu 16.04,iptables已安裝。

我可以輕鬆地配置我的路由器以將所有傳入的 TCP 連接轉發到我的伺服器的埠B到埠A。這意味著來自外部的任何人,無論是組織的網路還是網際網路,都可以連接到我路由器的 IP 地址埠B,並將被轉發到我的伺服器埠A。但是,我只希望允許我組織網路中的使用者這樣做。對於來自網際網路的普通使用者,應該無法訪問我的伺服器。

我想iptables在我的伺服器上實現的是。

  1. 我的專用 LAN 的行為與以前一樣。我區域網路中電腦上的所有程序仍然可以使用其私有 IP 地址和埠連接到我的伺服器A
  2. 我組織網路中的使用者(由 IP 地址範圍或子網遮罩標識)可以訪問我的路由器和埠的 IP 地址B以使用我的服務,他們的包被轉發到我的伺服器及其埠A
  3. 不應該轉發既不在我的私人區域網路中也不在組織網路中的使用者,他們不要連接到我寶貴的伺服器。
  4. 如果我的私有 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 做你想做的一切。

引用自:https://serverfault.com/questions/819418