linux防火牆iptables初學者教程

來源:互聯網
上載者:User
Iptables是專為Linux作業系統打造的極其靈活的防火牆工具。對Linux極客玩家和系統管理員來說,iptables非常有用。本文將向你展示如何配置最通用的Linux防火牆。

關於iptables

Iptables是一個基於命令列的防火牆工具,它使用規則鏈來允許/阻止網路流量。當一條網路連接試圖在你的系統中建立時,iptables會尋找其對應的匹配規則。如果找不到,iptables將對其採取預設操作。
幾乎所有的Linux發行版都預裝了iptables。在Ubuntu/Debian中更新/安裝iptables的命令為:

sudo apt-get install iptables

現有的一些圖形介面軟體也可以替代iptables,如Firestarter。但iptables用起來並不難。配置iptables的規則時要特別小心,特別是在你遠程登陸伺服器的時候。因為這時的一個錯誤有可能讓你和伺服器永久失去串連,而你必須要到伺服器面前才能解決它。

Iptables規則鏈的類型

Iptables的規則鏈分為三種:輸入、轉寄和輸出。

輸入——這條鏈用來過濾目的地址是原生串連。例如,如果一個使用者試圖使用SSH登陸到你的PC/伺服器,iptables會首先匹配其IP地址和連接埠到iptables的輸入鏈規則。

轉寄——這條鏈用來過濾目的地址和源地址都不是原生串連。例如,路由器收到的絕大數資料均需要轉寄給其它主機。如果你的系統沒有開啟類似於路由器的功能,如NATing,你就不需要使用這條鏈。
有一個安全且可靠的方法可以檢測你的系統是否需要轉寄鏈:

iptables -L -v

是對一台已經運行了幾個星期的伺服器的。這台伺服器沒有對輸入和輸出做任何限制。從中可以看到,輸入鏈和輸出鏈已經分別處理了11GB和17GB的資料,而轉寄鏈則沒有處理任何資料。這是因為此伺服器沒有開啟類似於路由器的轉寄功能。


輸出——這條鏈用來過濾源地址是原生串連。例如,當你嘗試ping howtogeek.com時,iptables會檢查輸出鏈中與ping和howtogeek.com相關的規則,然後決定允許還是拒絕你的串連請求。

注意:當ping一台外部主機時,看上去好像只是輸出鏈在起作用。但是請記住,外部主機返回的資料要經過輸入鏈的過濾。當配置iptables規則時,請牢記許多協議都需要雙向通訊,所以你需要同時配置輸入鏈和輸出鏈。人們在配置SSH的時候通常會忘記在輸入鏈和輸出鏈都配置它。

鏈的預設行為

在配置特定的規則之前,也許你想配置這些鏈的預設行為。換句話說,當iptables無法匹配現存的規則時,你想讓它作出何種行為。
你可以運行如下的命令來顯示當前iptables對無法匹配的串連的預設動作:

iptables -L

正如上面所顯示的,我們可以使用grep來使輸出的結果變得更加簡潔。在上面的中,所有的鏈預設情況下均接受所有的串連。
通常情況下,你會希望你的系統預設情況下接收所有的網路資料。這種設定也是iptables的預設配置。接收網路連接的配置命令是:

iptables --policy INPUT ACCEPT iptables --policy OUTPUT ACCEPT iptables --policy FORWARD ACCEPT

你也可以在使用預設配置的情況下,添加一些命令來過濾特定的IP地址或連接埠號碼。我們稍後在本文介紹這些命令。
如果你想預設情況下拒絕所有的網路連接,然後在其基礎上添加允許的IP地址或連接埠號碼,你可以將預設配置中的ACCEPT變成DROP,如所示。這對於一些含有敏感性資料的伺服器來說是極其有用的。通常這些伺服器只允許特定的IP地址訪問它們。

iptables --policy INPUT DROP iptables --policy OUTPUT DROP iptables --policy FORWARD DROP

對特定串連的配置

下面來看看如何對特定的IP地址或連接埠作出設定。本文主要介紹三種最基本和常見的設定。

Accept – 接收所有的資料。

Drop – 丟棄資料。應用情境:當你不想讓資料的來源地址意識到你的系統的存在(最好的處理方法)。

Reject – 不允許建立串連,但是返回一個錯誤回應。應用情境:當你不想讓某個IP地址訪問你的系統,但又想讓它們知道你的防火牆阻止了其訪問。

為了直觀的區分上述三種情況,我們使用一台PC來ping一台配置了iptables的Linux電腦:

允許或阻止特定的串連

在配置完基本的規則鏈之後,你就可以配置iptables來允許或者阻止特定的IP地址或者連接埠。
注意:在這些例子中,我們使用iptables -A將額外的規則添加到現存的鏈中。Iptables在執行匹配的時候,會從列表的頂端開始搜尋。你可以使用iptables -I [chain] [number]將新的規則插入到列表的指定位置。

來自同一IP地址的串連
下面這個例子展示了如何阻止來自IP地址為10.10.10.10的所有串連。

iptables -A INPUT -s 10.10.10.10 -j DROP

來自一組IP地址的串連
下面這個例子展示了如何阻止來自子網10.10.10.0/24內的任意IP地址的串連。你可以使用子網路遮罩或者標準的/符號來標示一個子網:

iptables -A INPUT -s 10.10.10.0/24 -j DROP

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

特定連接埠的串連
這個例子展示了如何阻止來自10.10.10.10的SSH串連。

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

你可以將“ssh”替換成其它任何協議或者連接埠號碼。上述命令中的-p tcp告訴iptables串連使用的是何種協議。

下面這個例子展示了如何阻止來自任意IP地址的SSH串連。

iptables -A INPUT -p tcp --dport ssh -j DROP

串連狀態

我們之前提到過,許多協議均需要雙向通訊。例如,如果你打算允許SSH串連,你必須同時配置輸入和輸出鏈。但是,如果你只想允許來自外部的SSH請求,那該怎麼做?
下面這個例子展示了如何允許源IP地址為10.10.10.10同時阻止目的地址為10.10.10.10的SSH串連:

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

儲存更改

上述方法對iptables規則作出的改變是臨時的。如果你想永久儲存這些更改,你需要運行額外的命令(不同Linux發行版下的儲存命令也不相同):

Ubuntu:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

或者

/etc/init.d/iptables save

其它命令

列出iptables的當前配置:

iptables -L

使用-v選項將顯示資料包和位元組資訊;使用-n選項將以數字形式列出資訊,即不將IP位址解析為網域名稱。
換句話講,主機名稱,協議和網路都以數位形式列出。

清除當前所有的配置規則:

iptables -F

原文 The Beginner’s Guide to iptables, the Linux Firewall

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.