Linux下的防火牆

來源:互聯網
上載者:User

Linux下的防火牆
Linux防火牆簡介:首先,網路封包要進入你主機,需要經過的流程:通過防火牆、伺服器軟體程式(驗證帳號)、SELinux與檔案系統(許可權rwx等)等。 防火牆的主要類別:1,Netfilter (封包過濾機制); 2,TCP Wrappers (程式控管); 3,Proxy (Proxy 伺服器)。 Netfilter可做的事:1,、拒絕讓 Internet 的封包進入主機的某些連接埠口; 2、拒絕讓某些來源 IP 的封包進入 3、拒絕讓帶有某些特殊旗標 (flag) 的封包進入 4、分析硬體地址 (MAC) 來決定聯機與否
TCP Wrappers :是透過 /etc/hosts.allow, /etc/hosts.deny 這兩個寶貝蛋來管理的一個類似防火牆的機制, 但並非所有的軟體都可以透過這兩個檔案來控管,只有底下的軟體才能夠透過這兩個檔案來管理防火牆規則,分別是:1、由 super daemon (xinetd) 所管理的服務;2、有支援 libwrap.so 模組的服務。
Proxy :

Netfilter :iptables機制因為iptables用得更多範圍更廣,所以這裡只詳細介紹Netfilter :iptables防火牆,其他兩個,請想深入瞭解的讀者自行百度。
iptables簡介:註:當一個網路封包要進入到主機之前,會先經由 NetFilter 進行檢查,那就是 iptables 的規則了。 檢查通過則接受 (ACCEPT) 進入本機取得資源,如果檢查不通過,則可能予以丟棄 (DROP) ! 中主要的目的在告知你:『規則是有順序的』!例如當網路封包進入 Rule 1 的比對時, 如果比對結果符合 Rule 1 ,此時這個網路封包就會進行 Action 1 的動作,而不會理會後續的 Rule 2, Rule 3.... 等規則的分析了。

Linux 的 iptables 至少就有三個表格,包括管理本機進出的 filter 、管理後端主機 (防火牆內部的其他電腦) 的 nat 、管理特殊旗標使用的 mangle (較少使用) 。 這裡筆者只介紹filter: 1、INPUT:主要與想要進入我們 Linux 原生封包有關; 2、OUTPUT:主要與我們 Linux 本機所要送出的封包有關; 3、FORWARD:這個東東與 Linux 本機比較沒有關係, 他可以『轉遞封包』到後端的電腦中,與 nat table 相關性較高。
iptables文法:規則的觀察與清除:查看:

 [root@www ~]# iptables [-t tables] [-L] [-nv]         選項與參數: -t :後面接 table ,例如 nat 或 filter ,若省略此項目,則使用預設的 filter                                  -L :列出目前的 table 的規則                                  -n :不進行 IP 與 HOSTNAME 的反查,顯示訊息的速度會快很多!                                 -v :列出更多的資訊,包括通過該規則的封包總位元、相關的網路介面等

例如:iptables -L -n iptables-save 這個指令也可以觀察防火牆規則。
清除:
    [root@www ~]# iptables [-t tables] [-FXZ]         選項與參數: -F :清除所有的已訂定的規則;                                -X :殺掉所有使用者 "自訂" 的 chain (應該說的是 tables )囉;                                -Z :將所有的 chain 的計數與流量統計都歸零
定義預設政策 (policy):
    [root@www ~]# iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]         選項與參數: -P :定義政策( Policy )。注意,這個 P 為大寫啊!                                 ACCEPT :該封包可接受                                 DROP :該封包直接丟棄,不會讓 client 端知道為何被丟棄。
在本機方面的預設政策中,假設你對於內部的使用者有信心的話, 那麼 filter 內的 INPUT 鏈方面可以定義的比較嚴格一點,而 FORWARD 與 OUTPUT 則可以訂定的松一些!
       範例:將原生 INPUT 設定為 DROP ,其他設定為 ACCEPT                                  [root@www ~]# iptables -P INPUT DROP                                  [root@www ~]# iptables -P OUTPUT ACCEPT                                  [root@www ~]# iptables -P FORWARD ACCEPT


封包的基礎比對:IP, 網域及介面裝置:
 [root@www ~]# iptables [-AI 鏈名] [-io 網路介面] [-p 協議]  [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP|REJECT|LOG]        選項與參數: -AI 鏈名:針對某的鏈進行規則的 "插入" 或 "累加"                                  -A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則, 使用 -A 就可以加上第五條規則!                                  -I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。 例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號 鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。                                -io 網路介面:設定封包進出的介面規範                                -i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合;                                -o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合;                               -p 協定:設定此規則適用於哪種封包格式 主要的封包格式有: tcp, udp, icmp 及 all 。                               -s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,                                             例如: IP :192.168.0.100                                                          網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。                                                          若規範為『不許』時,則加上 ! 即可,例如: -s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;                               -d 目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。                               -j :後面接動作,主要的動作有接受(ACCEPT)、丟棄(DROP)、拒絕(REJECT)及記錄(LOG)
TCP, UDP 的規則比對:針對連接埠設定:
 [root@www ~]# iptables [-AI 鏈] [-io 網路介面] [-p tcp,udp]  [-s 來源IP/網域] [--sport 埠口範圍]  [-d 目標IP/網域] [--dport 埠口範圍] -j [ACCEPT|DROP|REJECT]        選項與參數: --sport 埠口範圍:限制來源的連接埠口號碼,連接埠口號碼可以是連續的,例如 1024:65535                                  --dport 埠口範圍:限制目標的連接埠口號碼。
註:因為僅有 tcp 與 udp 封包具有連接埠,因此你想要使用 --dport, --sport 時,得要加上 -p tcp 或 -p udp 的參數才會成功喔
iptables 外掛模組:mac 與 state:
    [root@www ~]# iptables -A INPUT [-m state] [--state 狀態]         選項與參數:             -m :一些 iptables 的外掛模組,主要常見的有:                   state :狀態模組                 --state :一些封包的狀態,主要有:                             INVALID :無效的封包,例如資料破損的封包狀態                             ESTABLISHED:已經聯機成功的聯機狀態;                             NEW :想要建立立聯機的封包狀態;                            RELATED :這個最常用!表示這個封包是與我們主機發送出去的封包有關                   mac :網路卡硬體地址 (hardware address)                --mac-source :就是來源主機的 MAC 啦!
ICMP 封包規則的比對:針對是否響應 ping 來設計:小知識:ICMP 協定當中我們知道 ICMP 的類型相當的多,而且很多 ICMP 封包的類型都是為了要用來進行網路檢測用的!所以最好不要將所有的 ICMP 封包都丟棄!如果不是做為路由器的主機時,通常我們會把 ICMP type 8 (echo request) 拿掉而已,讓遠程主機不知道我們是否存在,也不會接受 ping 的響應就是了。
 [root@www ~]# iptables -A INPUT [-p icmp] [--icmp-type 類型] -j ACCEPT         選項與參數:               --icmp-type :後面必須要接 ICMP 的封包類型,也可以使用代號, 例如 8 代表 echo request 的意思。
IPv4 的核心管理功能: /proc/sys/net/ipv4/*
    echo "1" > /proc/sys/net/ipv4/tcp_syncookies        阻斷式服務 (DoS) 攻擊法當中的一種方式,就是利用 TCP 封包的 SYN 三向交握原理所達成的, 這種方式稱為 SYN Flooding,上面指令就是啟用核心的 SYN Cookie 模組來防止這種情況。    echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts        讓核心自動取消 ping 的響應。/proc/sys/net/ipv4 內的 icmp_echo_ignore_broadcasts (僅有 ping broadcast 地址時才取消 ping 的回應) 及 icmp_echo_ignore_all (全部的 ping 都不回應)。
/proc/sys/net/ipv4/conf/網路介面/*
        rp_filter:稱為逆向路徑過濾 (Reverse Path Filtering), 可以藉由分析網路介面的路由資訊配合封包的來源地址,來分析該封包是否為合理。舉例來說,你有兩張網卡,eth0 為 192.168.1.10/24 ,eth1 為 public IP 。那麼當有一個封包自稱來自 eth1 ,但是其 IP 來源為 192.168.1.200 , 那這個封包就不合理,應予以丟棄。這個設定值建議可以啟動的。        log_martians:這個設定資料可以用來開機記錄不合法的 IP 來源, 舉例來說,包括來源為 0.0.0.0、127.x.x.x、及 Class E 的 IP 來源,因為這些來源的 IP 不應該應用於 Internet 啊。 記錄的資料預設放置到核心放置的登入檔 /var/log/messages。        accept_source_route:或許某些路由器會啟動這個設定值, 不過目前的裝置很少使用到這種來源路由,你可以取消這個設定值。        accept_redirects:當你在同一個實體網域內架設一部路由器, 但這個實體網域有兩個 IP 網域,例如 192.168.0.0/24, 192.168.1.0/24。此時你的 192.168.0.100 想要向 192.168.1.100 傳送訊息時,路由器可能會傳送一個 ICMP redirect 封包告知 192.168.0.100 直接傳送資料給 192.168.1.100 即可,而不需透過路由器。因為 192.168.0.100 與 192.168.1.100確實是在同一個實體線路上 (兩者可以直接互連),所以路由器會告知來源 IP 使用最短路徑去傳遞資料。但那兩部主機在不同的 IP 段,卻是無法實際傳遞訊息的!這個設定也可能會產生一些輕微的安全風險,所以建議關閉他。        send_redirects:與上一個類似,只是此值為發送一個 ICMP redirect 封包。 同樣建議關閉。
案例以下介紹是基於一台伺服器,系統為centos7:
#!/bin/bash#網卡資訊,環境變數EXTIF="eno1"#公網網卡介面INIF="eno16777736"#內部LAN介面INNET="192.168.1.0/24"#內部網FILEDIR="/usr/local/erdangjiade/iptables/"#allow、deny檔案的存放路徑export EXTIF INIF INNET FILEDIR#設定核心的網路功能echo "1" > /proc/sys/net/ipv4/tcp_syncookiesecho "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcastsfor i in /proc/sys/net/ipv4/conf/*/{rp_filter,log_martians}; doecho "1" > $idonefor i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects,send_redirects}; doecho "0" > $idone#設定規則PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin;export PATHiptables -Fiptables -Xiptables -Ziptables -P INPUT DROPiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPTiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -p TCP -m state --state NEW -i $INIF -j ACCEPTiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT#允許內網pingiptables -A INPUT -i $INIF -p icmp -j ACCEPT#個別設定if [ -f ${FILEDIR}iptables.deny ]; thensh ${FILEDIR}iptables.denyfiif [ -f ${FILEDIR}iptables.allow ]; thensh ${FILEDIR}iptables.allowfi#防止大量ping#AICMP="0 3 3/4 4 11 12 14 16 18"#for tyicmp in $AICMP#do#iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT#done#對某些服務開放連接埠#SSHiptables -A INPUT -p TCP -i $EXTIF --dport 22 --sport 1024:65534 -j ACCEPT#WWWiptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65534 -j ACCEPT#儲存以上修改service iptables save
參考文章:《鳥哥的私房菜,伺服器篇》
轉載請標明原文出處:http://blog.csdn.net/u012367513/article/details/40628197

聯繫我們

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