基於 Ubuntu 16.04 的防火牆的 Iptables 規則

基於 Ubuntu 16.04 的防火牆的 Iptables 規則

我正在嘗試在我的伺服器中設定 iptables 規則,以將其用作基於 Ubuntu 16.04 的防火牆。我對 Ubuntu 有一定的了解。我在 Ubuntu 幫助網站和 Askubuntu 中進行了一些搜尋。我提出了以下規則,可以將其保存在文件中並以 root 身份執行(sudo sh 文件):

#!/bin/bash

WAN_IF="enp2s0"
WAN_IP=$(/sbin/ip addr show dev "$WAN_IF" | perl -lne 'if(/inet (\S+)/){print$1;last}');
LAN_IF="enp4s9"
LAN_IP=$(/sbin/ip addr show dev "$LAN_IF" | perl -lne 'if(/inet (\S+)/){print$1;last}');
##### Internal network address (in CIDR notation)
LAN_NET="192.168.17.0/24"

echo
echo "[WAN Interface: $WAN_IF] [WAN IP: $WAN_IP]"
echo "[LAN Interface: $LAN_IF] [LAN IP: $LAN_IP] [Network: $LAN_NET]"
echo
echo -n "Enabling IP Forwarding...\n"

##### Enabling IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

echo
echo -n "Loading Firewall Rules...\n"
echo -n "Enabling NAT Rewriting on IN/OUT Packets...\n"

/sbin/iptables-restore <<-EOF;
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

##### INPUT RULES
-A INPUT -i lo -j ACCEPT
-A INPUT -i $LAN_IF -j ACCEPT
-A INPUT -i $WAN_IF -s $LAN_NET -j DROP
-A INPUT -i $WAN_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

##### FORWARD RULES
-A FORWARD -i $LAN_IF -o $WAN_IF -j ACCEPT
-A FORWARD -i $WAN_IF -o $LAN_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

##### OUTPUT RULES
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o $WAN_IF -d $LAN_NET -j DROP
-A OUTPUT -o $LAN_IF -s $LAN_IP -d $LAN_NET -j ACCEPT
-A OUTPUT -o $WAN_IF -s $WAN_IP -j ACCEPT

##### All Other Requests are DROPPED
-A OUTPUT -j DROP
-A INPUT -j DROP
COMMIT


##### NAT Rewriting on IN/OUT Packets
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o $WAN_IF -j MASQUERADE
COMMIT
EOF


echo -n "Bloacking IP6...\n"
/sbin/ip6tables-restore <<-EOF;
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT
EOF

echo
echo "Done!"
echo

我的問題是:

我有以下網路拓撲:

網際網路 >>>>> [ WAN <<<>>> 伺服器 <<<>>> LAN ] <<<<< 本機用戶

  1. 在我的伺服器上,我想阻止 WAN 上的所有傳入流量(包括 ping 和其他發現和/或駭客請求),但允許伺服器和 LAN 上的本地用戶通過網路流量。上面的程式碼符合這樣的規則嗎?

  2. 我的伺服器上有一些服務(如MYSQL 和SSH),我直接從伺服器本身管理這些服務,我想阻止LAN 上的本機使用者和WAN 上的網路使用者存取或連接到我的伺服器上的服務和所有內容。上面的程式碼符合這樣的規則嗎?

  3. 上述規則是否有任何可能出現的註解或安全缺陷?

  4. 如果我使用以下規則,在 WAN 上開啟連接 Internet 的 SSH 連接埠是否安全? (注意:我將僅使用 ssh 公鑰身份驗證,沒有明文密碼。)

    -A INPUT -i $WAN_IF -m conntrack --ctstate NEW,ESTABLISHED,RELATED -p tcp -d $WAN_IP --dport 22 -j ACCEPT
    

非常感謝大家。

相關內容