Freebsd

在 FreeBSD 上,我如何在 WAN 上打開一個埠而不在 LAN 上打開一個埠?

  • August 25, 2015

我有一台 FreeBSD 機器,用作 playbox/server/torrentbox。這是我區域網路的一部分。這是語義(根據 OpenBSD 網站上的範例更改):

[ desktop ]    [ laptop ]
   |            |                               
---+------+-----+------- [switch] -------- ( DSL modem )
          |
      [ FreeBSD playbox ]

我已在 10.0.0.0/24 範圍內的所有設備中設置靜態 IP。所以我的 DSL 調製解調器是 10.0.0.1,我的桌面是 10.0.0.2,FreeBSD 盒子是 10.0.0.3。還啟用了 DHCP,因此每台沒有靜態 IP 的機器(朋友帶來一台筆記型電腦)都會由 DSL 調製解調器分配一個,範圍為 10.0.0.30 - 10.0.0.60。

我只有一張乙太網卡 (em0),我想在 WAN 上打開一個埠,但不在 LAN 上。這樣做:

block in all
pass out all keep state
pass in proto tcp from any to any port 22

也會打開區域網路上的埠。

在我看到的所有將 WAN 和 LAN 分開的範例中,它具有兩個 NIC,而 FreeBSD 扮演了中間人(防火牆)的角色。

那麼,如何僅在 WAN 上打開埠?

這個問題有後續。我想在 LAN 和 WAN 中都打開一些埠,但我想對 WAN 施加一些限制。這是我在網上找到的一個例子:

# Setup a table and ruleset that prevents excessive abuse by hosts
# that attempt to brute force the ssh daemon with repeated requests.
# any host that hammers more than 3 connections in 5 seconds gets
# all their packet states killed and dropped into a blackhole table.
table <wan_abuse> persist
block in quick from <wan_abuse>
pass in on $eth proto tcp to any port $wan_servers_tcp flags S/SA keep \
state (max-src-conn 10, max-src-conn-rate 3/5, overload <wan_abuse> flush)

阻止 LAN 訪問:如果pf.conf知道您的 LAN 子網是什麼,您可以有選擇地阻止來自它的流量。使用您的範例:

block in all
pass out all keep state

lan_subnet = "10.0.0.0/24"
block in quick proto tcp from $lan_subnet to any port 22
pass in proto tcp from any to any port 22

限制 WAN 而不是 LAN的速率:例如,您想限制來自 Internet 的 80 和 8080 埠上的流量,但不對這些埠的 LAN 進行速率限制。此程式碼段將跟踪和阻止濫用 WAN 主機,同時允許從 LAN 訪問:

table <http_abuse> persist
http_ports = "{ 80 8080 }"

pass in quick proto tcp from $lan_subnet to any port $http_ports
block in quick proto tcp from <http_abuse> to any port $http_ports

pass in proto tcp from any to any port $http_ports \
   flags S/SA keep state \
   (source-track rule, max-src-conn 50, max-src-conn-rate 25/2, \
    overload <http_abuse> flush)

對於更靈活的速率限制和阻塞,您可以使用sshguard之類的工具,該工具可從ports 和 packages方便地獲得。

引用自:https://unix.stackexchange.com/questions/225127