<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] 安全是最好分層完成的事情之一。我們稱之為深度安全。因此,在任何給定的公司網絡上,你都會發現一個防火墻設備,它將互聯網與存放面向互聯網服務器的非軍事區( **demilitarized zone, DMZ**)分隔開來。您還可以在DMZ 和內部 LAN 之間找到一個防火墻設備,并在每個服務器和客戶機上安裝防火墻軟件。我們希望讓入侵者盡可能難以抵達我們網絡內的最終目的地。 有趣的是,在所有主流的 Linux 發行版中,只有 SUSE 發行版和 Red Hat 類型的發行版已經設置和啟用了 firewalld。當你查看你的 Ubuntu 虛擬機的時候,你會發現它是完全開放的,就好像它對任何想成為入侵者的人表示衷心的歡迎一樣。 # 1. 防火墻概述 在一個典型的業務環境中,特別是在大型企業中,您可能會在不同的地方遇到各種類型的 firewalld,這些 firewalld 可以提供各種類型的功能。一些例子如下: - 將 internet 與內部網絡分離的邊緣設備將可路由的公共 IP 地址轉換為不可路由的私有 IP 地址。他們還可以提供各種類型的訪問控制來阻止未經授權的人。通過提供各種類型的數據包檢查服務,它們可以幫助防止對內部網絡的攻擊,防止惡意軟件,并防止敏感信息從內部網絡泄漏到互聯網。 - 大型企業網絡通常被劃分為子網絡或子網絡,每個公司部門都有一個子網來稱為自己的子網絡。最佳實踐規定使用 firewalld 分隔子網。這有助于確保只有經過授權的人員才能訪問任何給定的子網。 - 當然,您還可以在單個服務器和工作站上運行 firewalld。通過提供某種形式的訪問控制,它們可以幫助防止入侵者在網絡上對一臺機器進行橫向移動。它們還可以配置為防止某些類型的端口掃描和拒絕服務(DoS)攻擊。 # 2. iptables 概述 一個常見的誤解是 iptables 是 Linux 防火墻的名稱。實際上,Linux 防火墻的名字叫 netfilter,每個 Linux 發行版都內置了它。我們所知道的是,iptables 只是我們可以用來管理 netfilter 的幾個命令行實用程序之一。它最初是作為 Linux 內核版本2.6的一個特性引入的,所以它已經存在了很長時間。使用 iptables,你確實有一些優勢: - 它已經存在了足夠長的時間,大多數 Linux 管理員已經知道如何使用它。 - 在 shell 腳本中使用 iptables 命令來創建自己的自定義防火墻配置非常容易。 - 它具有很大的靈活性,因為您可以使用它來設置一個簡單的端口過濾器、路由器或虛擬專用網絡。 - 它幾乎在每個 Linux 發行版上都預先安裝了,盡管大多數發行版都沒有預先配置它。 - 它有很好的文檔記錄,并且在互聯網上有免費的,詳細的教程和書籍。 然而,正如你可能知道的,它也有一些缺點: - Ipv4和 ipv6都需要各自特殊的 iptables 實現。因此,如果您的組織在遷移到 ipv6的過程中仍然需要運行 IPv4,那么您必須在每個服務器上配置兩個 firewalld,并為每個服務器運行一個單獨的守護進程(一個用于 IPv4,另一個用于 IPv6)。 - 如果您需要做 MAC 橋接,那就需要 ebtables,它是 iptables 的第三個組件,具有自己獨特的語法。 - arptables,Iptables 的第四個組件,也需要它自己的守護進程和語法。 - 無論何時向正在運行的 iptables 防火墻添加規則,都必須重新加載整個 iptables 規則集,這會對性能產生巨大影響。 直到最近,只有普通的 iptables 是每個 Linux 發行版的默認防火墻管理器。它仍然出現在大多數發行版中,但是 Red Hat Enterprise Linux 7或更高版本現在使用新的 firewalld 作為一個更容易使用的前端來配置 iptables 規則。Ubuntu 提供了一個易于使用的 iptables 前端 Uncomplicated Firewall。我們將探討的一種更新的技術是 nftables,它可以作為 Debian/Ubuntu 系統的一個選項。在 Red Hat 8/CentOS 8系統上,nftables 已經取代 iptables 作為 firewalld 的默認后端。 ## 2.1 iptables 基礎 Iptables 由五個規則表組成,每個規則表都有其獨特的用途: - **Filter table**(過濾表): 為了基本保護我們的服務器和客戶機,這可能是我們使用的唯一表。 - **NAT table**: NAT 用于將公共因特網連接到私有網絡。 - **Mangle table**: 當網絡數據包通過防火墻時,用于修改它們。 - **Raw table**(原始表): 這是不需要連接跟蹤的數據包。 - **Security table**(安全表): 安全表僅用于安裝了 SELinux 的系統。 因為我們目前只對基本的主機保護感興趣,所以我們暫時只看過濾器表。每個表由規則鏈組成,過濾器表由 `INPUT`、 `FORWARD` 和 `OUTPUT` 鏈組成。 > 雖然 Red Hat Enterprise Linux 7/8或更高版本確實安裝了 iptables 服務,但它默認是禁用的,所以我們可以使用 firewalld。不可能同時運行 iptables 服務和 firewalld 服務,因為它們是兩個完全不同的東西,完全不兼容。因此,如果您需要在 Red Hat 7/8系統上運行 iptables 服務,就必須禁用 firewalld。 但是,如果您的組織仍然使用 Red Hat 或 CentOS 的版本6運行其網絡,那么您的機器仍然使用 iptables 運行,因為它們不能使用 firewalld。 首先,我們使用 `sudo iptables -l` 命令查看當前配置: ```shell donnie@ubuntu:~$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination donnie@ubuntu:~$ ``` 還記得我們說過你需要一個獨立的 iptables 組件來處理 ipv6嗎?這里,我們使用 `sudo ip6tables -l` 命令: ```shell donnie@ubuntu:~$ sudo ip6tables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination donnie@ubuntu:~$ ``` 在這兩種情況下,您都可以看到沒有規則,并且機器是完全開放的。不像 SUSE 和Red Hat,Ubuntu 希望你做所有建立防火墻的工作。我們將首先創建一個規則,允許我們從主機請求連接的服務器傳入數據包: ```shell sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT ``` 命令的分解: - `-A INPUT` :`-A` 在指定鏈的末尾放置一個規則,在本例中是`INPUT`鏈。使用`-I`可以把規則放在鏈條的開始。 - `-m`: 這在 iptables 模塊中調用。在這種情況下,我們調用 conntrack 模塊來跟蹤連接狀態。此模塊允許 iptables 確定我們的客戶機是否已經連接到另一臺機器。 - `--ctstate state`: 其中 state 是用逗號分隔的要匹配的連接狀態列表。\*\*ESTABLISHED\*\* 表示已經響應請求或者已經建立連接的數據包,\*\*RELATED\*\* 表示與已建立的連接有相關性的,比如FTP數據連接等。 - `-j ACCEPT`: 此規則將接受從客戶機請求連接的服務器返回的數據包。 我們的新規則集是這樣的: ```shell donnie@ubuntu:~$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination donnie@ubuntu:~$ ``` 接下來,我們將打開端口22,這樣我們就可以通過 Secure Shell 連接: ```shell sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT ``` 命令的分解: - `-p tcp`: `-p` 指示此規則影響的協議。此規則影響安全 Shell 所屬的 TCP 協議。 - `--dport ssh` : `--dport` 選項指定我們希望此規則對其進行操作的目標端口。(注意,我們還可以將規則的這一部分列為 `--dport 22`,因為22是 SSH 端口。) 現在,假設我們希望這臺機器是一臺 DNS 服務器。為此,我們需要為 TCP 和 UDP 協議打開端口53: ```shell sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT ``` 最后,我們有一個幾乎完整的、可用的 INPUT 鏈規則集: ```shell donnie@ubuntu:~$ sudo iptables -L ?Chain INPUT (policy ACCEPT) target prot opt source destination ?ACCEPT all -- anywhere anywhere ctstate ?RELATED,ESTABLISHED ?ACCEPT tcp -- anywhere anywhere tcp dpt:ssh DROP all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination donnie@ubuntu:~$ ``` 然而,這只是幾乎完成,因為還有一件小事我們忘記了。也就是說,我們需要允許環回接口的流量。這沒關系,因為它給了我們一個很好的機會,看看如果我們不想在最后插入一個規則,那么如何插入我們想要的規則。在這種情況下,我們將在 `INPUT 1`插入規則,這是 `INPUT` 鏈的第一個位置: ```shell sudo iptables -I INPUT 1 -i lo -j ACCEPT ``` \>在為 `lo` 接口插入 `ACCEPT` 規則之前,您可能已經注意到 sudo 命令需要很長時間才能完成,并且您正在獲取 `sudo: unable to resolve host. . .Resource temporarily unavailable`。這是因為 sudo 需要知道機器的主機名,這樣它就可以知道哪些規則允許在特定的機器上運行。它使用環回接口來幫助解析主機名。如果`lo` 接口被阻塞,則 sudo 解析主機名需要更長的時間。 我們的規則集現在是這樣的: ```shell donnie@ubuntu:~$ sudo iptables -L Chain INPUT (policy ACCEPT) target ? ? prot opt source destination ACCEPT ? ? all ?-- ?anywhere ? ? ? ? ? ? anywhere ? ? ? ? ? ? ACCEPT ? ? all ?-- ?anywhere ? ? ? ? ? ? anywhere ? ? ? ? ? ? ctstate RELATED,ESTABLISHED ACCEPT ? ? tcp ?-- ?anywhere ? ? ? ? ? ? anywhere ? ? ? ? ? ? tcp dpt:ssh ACCEPT ? ? tcp ?-- ?anywhere ? ? ? ? ? ? anywhere ? ? ? ? ? ? tcp dpt:domain ACCEPT ? ? udp ?-- ?anywhere ? ? ? ? ? ? anywhere ? ? ? ? ? ? udp dpt:domain Chain FORWARD (policy ACCEPT) target ? ? prot opt source destination Chain OUTPUT (policy ACCEPT) target ? ? prot opt source destination donnie@ubuntu:~$ ``` 請注意端口53默認顯示domain端口名。要查看端口號而不是端口名,我們可以使用`-n`查看: ```shell donnie@ubuntu3:~$ sudo iptables -L -n Chain INPUT (policy ACCEPT) target ? ? prot opt source destination ACCEPT ? ? all ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ? ACCEPT ? ? all ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ? ?ctstate RELATED,ESTABLISHED ACCEPT ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ? ?tcp dpt:22 ACCEPT ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ? ?tcp dpt:53 ACCEPT ? ? udp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ? ?udp dpt:53 Chain FORWARD (policy ACCEPT) target ? ? prot opt source destination Chain OUTPUT (policy ACCEPT) target ? ? prot opt source destination donnie@ubuntu3:~$ ``` 現在,就目前的情況來看,我們仍然允許一切通過,因為我們仍然沒有創建一個規則,阻止我們沒有特別允許的東西。不過,在我們這樣做之前,讓我們再看一些我們可能希望允許的事情。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看