尋找有關 AWS 安全組行為方式的良好解釋
我正在努力了解 AWS 安全組描述的埠範圍以及它們的行為方式。我是一名擁有多年編寫網路軟體經驗的軟體開發人員,所以我可能只是把事情複雜化了。
我真正想要的是一種將我的網路知識與 AWS 的命名和行為聯繫起來的方法。
最讓我困惑的是,在 TCP 或 UDP 數據包上有兩個埠號(發送方和接收方)。這適用於數據包是從伺服器發送到客戶端還是從客戶端發送到伺服器。所以防火牆規則理論上可以引用4個不同的埠:
- 入站數據包接收埠
- 入站數據包發送埠
- 出站數據包接收埠
- 出站數據包發送埠
我意識到任何(TCP)連接實際上只有兩個埠,因為入站和出站數據包是彼此的鏡像。
現在考慮到所有這些,AWS 控制台只有一個用於入站規則的埠和一個用於出站規則的埠。當我查找範例時,它們通常包含允許同一組中的每個埠出站作為單個埠入站的參考(請參閱terraform 範例)。
這究竟是做什麼的?
**我很擔心,因為…**我似乎需要這個出口規則。這似乎允許任何客戶端從任何埠連接到埠 443。(沒關係)。但是,一個安全組的出口規則能否與另一個安全組的入口規則結合使用?
例如:如果我添加一個網路組讓我的機器充當 HTTP(S) 伺服器,就像範例一樣,然後我添加另一個規則讓它充當 HTTP(S) 客戶端,那麼我將有一個規則允許來自任何軟體的任何埠和一個允許任何埠到任何地方的規則。這是否完全打開了防火牆,還是每個數據包都必須完全匹配一個安全組?
AWS 安全組只是一個防火牆。
允許一切的出口規則只是允許您的實例與任何地方建立傳出連接。
如果您在兩個實例之間建立連接,則出口規則適用於建立傳出連接的實例,而入口規則適用於接收傳入連接的實例。這些可能位於不同的安全組、不同的區域,甚至不同的 AWS 賬戶中。另一個實例甚至可能在 Internet 上的其他地方。在大多數情況下,您無法看到另一端的防火牆規則,它們也不相關,因為它們不是您負責的系統。
至於為什麼只指定一個埠,幾乎總是只有一個埠是相關的:目標埠。源埠幾乎總是動態分配的,對防火牆沒有用處。只有在極少數情況下,源埠在理論上甚至在防火牆規則中都很重要,而且我想不出在 AWS 上執行實例時會遇到任何問題。