iptables入門:郵件伺服器簡單防護

來源:互聯網
上載者:User

本文針對iptables初學者。如果你剛剛學習了iptables的原理和基本文法,但還不清楚線上上伺服器環境中如何實際的利用這個工具,那麼建議閱讀本文。

iptables的兩種主要工作模式

對於iptables的資料包而言,有以下幾個流向:

PREROUTING→FORWARD→POSTROUTING

PREROUTING→INPUT→本機→OUTPUT→POSTROUTING

大家可以留意下,資料包的主要兩種流向其實也是我們後面iptables的兩種工作模式):一是做為NAT路由器,另一種是做為主機防火牆。

iptables資料流入和流出詳細流程建議參考:



圖  iptables資料包流入和流出詳細流程圖

iptables根據不同的資料包處理功能使用不同的規則表。它包括如下三個表:filter、nat和mangle。

  • filter是預設的表,它包含真正的防火牆過濾規則。內建的規則鏈包括:INPUT、OUTPUT和FORWARD。
  • nat表包含源和目的地址及連接埠轉換使用的規則,內建的規則鏈包括PREROUTING、OUTPUT和POSTROUTING。
  • mangle表包含用於設定特殊的資料包路由標誌的規則,這些標誌隨後被filter表中的規則檢查。內建的規則鏈包括:PREROUTING、INPUT、FORWARD、POSTROUTING和OUTPUT。

表對應的相關規則鏈的功能如下:

  • INPUT鏈:當一個資料包由核心中的路由計算確定為本地的Linux系統後,它會通過INPUT鏈的檢查。             
  • OUTPUT鏈:保留給系統自身產生的資料包。
  • FORWARD鏈:經過Linux系統路由的資料包即當iptables防火牆用於串連兩個網路時,兩個網路之間的資料包必須流經該防火牆)。
  • PREROUTING鏈:用於修改目的地地址DNAT)。
  • POSTROUTING鏈:用於修改源地址SNAT)。

iptables詳細文法如下所示:

iptables [-t表名] <-A| I |D |R > 鏈名[規則編號] [-i | o 網卡名稱] [-p 協議類型] [-s 源IP地址 | 源子網][--sport 源連接埠號碼] [-d 目標IP地址 | 目標子網][--dport 目標連接埠號碼] <-j 動作> 

註:此文法規則詳細,邏輯清晰,推薦以此公式記憶。我們在剛開始寫iptables規則時就應該養成好習慣,用公式來規範指令碼,這對於我們的以後工作大有協助。

這一節我們通過編寫一個簡單的用於郵件主機防護iptables指令碼來熟悉iptables文法規則。網路拓樸很簡單,iptables本身機器IP為:192.168.1.101/24,另一台機器的IP為:192.168.1.102。

普通的郵件主機防護指令碼

普通的郵件主機防護指令碼比較容易實現。郵件主機主要開放二個連接埠:80和25,其他連接埠則關閉,另外由於這裡沒有涉及多少功能,所以模組的載入也很簡單,只涉及Filter表,而且指令碼的初始化也很簡單。

我們可以按照編寫iptables的流程順序來寫指令碼,指令碼內容如下:

註:此伺服器置於自己的機房內,所以沒有開放22連接埠,調試時直接進機房調試。如果遠程操作,需要開啟22連接埠。)

#/bin/bashiptables -Fiptables -Xiptables -Z modprobe ip_tablesmodprobe iptable_natmodprobe ip_nat_ftpmodprobe ip_conntrack iptables -P INPUT DROPiptables -P FORWARD ACCEPTiptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT  iptables -A INPUT -p tcp -m multiport --dports 25,80 -j ACCEPTiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

說明一下:

前面三條可以將iptables初始化。

modprobe這段是手動載入模組的過程。一般如果用 service iptables start 來啟動iptables,會載入很多不必要的模組,所以這裡我們採用手動載入的方式。ip_conntrack模組在平時的測試學習環境可以開啟,方便追蹤資料包的流向。不過,生產環境下我不建議大家開啟此模組,以免加重伺服器的負載。

預設規則下方的兩條用於開啟系統迴環連接埠,以免造成不必要的麻煩。具體是什麼樣的麻煩?大家可以先想一想,文末會給出解答。

最後一條是允許RELATED和ESTABLISHED狀態的串連通過iptables。為什麼要這樣設定,也會在文末解答。

iptables指令碼開啟後,我們可以用命令查看一下結果,如下所示:

iptables -nv -L

此命令顯示結果如下:

Chain INPUT (policy DROP 13539 packets, 763K bytes) pkts bytes target     prot opt in     out     source               destination             0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0             480 32744 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,80    13  1411 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED  Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination          Chain OUTPUT (policy ACCEPT 472 packets, 52779 bytes) pkts bytes target     prot opt in     out     source               destination             0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0   

這時80和25之外的連接埠就被iptables成功隱蔽了。比如我們嘗試在另一台機器上nmap掃描這台伺服器:

nmap -sT 192.168.1.101

此命令顯示結果如下:

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2011-05-25 00:46 CSTInteresting ports on 192.168.1.101:Not shown: 1678 filtered portsPORT   STATE SERVICE25/tcp open  ssh80/tcp open  httpMAC Address: 00:E0:62:12:7B:65 (Host Engineering) Nmap finished: 1 IP address (1 host up) scanned in 37.721 seconds

看到這個結果說明iptables生效了。

另外,對剛剛學習iptables的朋友提供一個建議。一開始玩iptables很容易犯的一個錯誤就是把自己鎖在伺服器外面了。針對這種情況,我們可以編寫一個crontab計劃任務,每5分鐘關閉一次防火牆,等完全調試完後再關閉此crontab任務:

vim /etc/crontab*/5 * * * * /etc/init.d/iptables stop

以上只是初級的防護指令碼。至於其它的SYN和Ping及其它攻擊,等大家熟悉瞭解其原理後,可以在此指令碼的基礎上添加。

以下是上文中兩個問題的解答:

一、為什麼要開啟系統迴環介面?

Linux系統預設會有一塊名為lo的環回網路介面,而真正的網卡一般則被Linux系統識別成名為eth0, eth1這樣的網路介面。

一般,lo介面對應的ip地址為127.0.0.1。

當你從一台linux主機向自身發送資料包時,實際上的資料包是通過虛擬lo介面來發送接受的,而不會通過你的物理網卡eth0/eth1。

如果lo介面被牆,會發生ping/telnet/ssh本機本機網域名稱、localhost和127.0.0.1)不通的情況,會給調試帶來一些麻煩。

二、為什麼要設定RELATED、ESTABLISHED狀態檢測?

相對於純IP過濾,狀態防火牆更加智能,效率更高。這個比較適合FTP伺服器。有關iptables的狀態機器制,可參閱這篇文章:http://os.51cto.com/art/201108/285209.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.