跳至內容

Debian上設定VPN的完整指南

更新時間
连续6年不跑路的安全速度最适合国人VPN
连续6年不跑路的安全速度最适合国人VPN

概述

本文旨在引導使用者如何在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規則之前,您需要知道您要為哪個介面編寫規則。可以使用ifconfigip 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,您的網路配置也已正確對齊。下一步是建立憑證授權機構,以處理所有加密金鑰。這個過程沒有這一步長,但同樣重要。

更新時間