
概述
本文旨在引導使用者如何在Debian 9 Stretch上設定自己的VPN。雖然本指南針對Debian 9進行了測試,但它也可能適用於其他較新的Debian版本。
要求
本文假設您在VPS或遠端伺服器上執行Debian,因為這通常是使用VPN的主要場景。
- 一個可用的Debian Stretch安裝,並具有root存取權限。
難度
中等
約定
-
#
- 需要以root使用者身分直接執行給定的Linux指令,或使用sudo
指令。 -
$
- 需要以普通非特權使用者身分執行給定的Linux指令。
設定Iptables
建立自己的VPN並非易事,但有很多理由讓您想要這樣做。首先,當您運行自己的VPN時,您可以完全控制它,並確切知道它在做什麼。
安全性是VPN的重要因素。雖然可以在幾分鐘內設定一個簡單的VPN,但它可能完全不安全。因此,您需要採取適當的步驟,以確保伺服器和連線保持私密和加密。
在開始之前,您可能想要考慮加密磁碟,使用SELinux或PAX增強核心安全性,並確保其他一切都已鎖定。
找到您的WAN介面
在編寫iptables規則之前,您需要知道您要為哪個介面編寫規則。可以使用ifconfig
或ip a
指令來尋找伺服器連接到網際網路的介面。
本文將把該介面稱為eth0
,但這可能不是您的實際名稱。請確保用您伺服器的網路介面名稱替換它。
建立Iptables規則
每個Linux使用者和管理員都喜歡寫iptables規則,對吧?其實不會太複雜。您將建立一個包含所有命令的文件,然後將其恢復到iptables中。
建立文件。您可以將其放在任何您想要保存的位置,或直接放在/tmp
中。無論如何,iptables會保存您的規則,因此/tmp
也是可以的。
bash
$ vim /tmp/v4rules
開始檔案時,加入*filter
以告知iptables這些是過濾規則。
回環規則
從最簡單的一組規則開始,即回環介面規則。這些規則告訴iptables只接受來自本地主機的回環流量。
bash
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A OUTPUT -o lo -j ACCEPT
允許Ping
接下來,您可能希望能夠ping通您的伺服器。這組規則允許ping通過。
bash
-A INPUT -p icmp -m state --state NEW --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
SSH設定
您可能需要將SSH端口更改為其他端口,因此請讓您的規則反映這一點。
bash
-A INPUT -i eth0 -p tcp -m state --state NEW,ESTABLISHED --dport 22 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state --state ESTABLISHED --sport 22 -j ACCEPT
允許OpenVPN透過
顯然,您會希望允許OpenVPN流量通過。本文將使用UDP進行OpenVPN。如果您選擇使用TCP,請相應調整規則。
bash
-A INPUT -i eth0 -p udp -m state --state NEW,ESTABLISHED --dport 1194 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state ESTABLISHED --sport 1194 -j ACCEPT
DNS
您還需要允許DNS流量通過您的VPN伺服器。這將透過UDP和TCP進行。
bash
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
HTTP/S用於更新
允許HTTP/S流量似乎有些奇怪,但您確實希望Debian能夠更新自己,對吧?這些規則允許Debian發起HTTP請求,但不允許外部接收請求。
bash
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED --sport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED --sport 443 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state --state NEW,ESTABLISHED --dport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m state --state NEW,ESTABLISHED --dport 443 -j ACCEPT
NTP同步時鐘
假設您不會手動同步伺服器時鐘和客戶端時鐘,您需要NTP。也允許它。
bash
-A INPUT -i eth0 -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
TUN透過VPN隧道
本指南使用TUN通過VPN隧道,如果您使用的是TAP,請相應調整。
bash
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
為了讓VPN將您的流量轉送到互聯網,您需要啟用從TUN到實體網路介面的轉送。
bash
-A FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
記錄被阻止的流量
您可能希望iptables記錄被封鎖的流量。這樣,您就可以意識到任何潛在威脅。
bash
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: " --log-level 4
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FORWARD_denied: " --log-level 4
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_OUTPUT_denied: " --log-level 4
拒絕所有其他流量
現在您已經記錄了所有不符合現有規則的流量,請拒絕它。
bash
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A OUTPUT -j REJECT
不要忘記用COMMIT
結束文件。
NAT
這部分需要一個不同的表格。您不能將其新增至同一個檔案中,因此您需要手動執行命令。
使來自VPN的流量偽裝成來自實體網路介面的流量。
『`bash
```
阻止所有IPv6流量
流量可能透過IPv6洩漏,而現在確實沒有必要使用IPv6。最簡單的方法是完全關閉它。
建立另一個檔案並放入規則以拒絕所有IPv6流量。
『`bash $ vim /tmp/v6rules *filter
-A INPUT -j REJECT -A FORWARD -j REJECT -A OUTPUT -j REJECT
COMMIT ```
提交所有內容
首先,清空所有現有的iptables規則。
『`bash
```
匯入您建立的每個規則檔案。
『`bash
```
使其生效
Debian有一個套件可以自動載入您的iptables規則,因此您不必建立cron作業或其他操作。
『`bash
```
安裝過程會詢問您是否要儲存配置。請回答「是」。
將來,您可以透過執行以下Linux命令來更新規則。
『`bash
```
其他配置
您還需要做幾件事,以確保所有網路介面正常運作。
首先,開啟/etc/hosts
並註解掉所有IPv6行。
接下來,開啟/etc/sysctl.d/99-sysctl.conf
。找到並取消註解以下行。
bash
net.ipv4.ip_forward=1
新增以下行以完全停用IPv6。
bash
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
最後,應用您的變更。
『`bash
```
下一步
到此為止,您的伺服器防火牆已準備好運行OpenVPN,您的網路配置也已正確對齊。下一步是建立憑證授權機構,以處理所有加密金鑰。這個過程沒有這一步長,但同樣重要。