Freebsd
在 FreeBSD 上,我如何在 WAN 上打開一個埠而不在 LAN 上打開一個埠?
我有一台 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方便地獲得。