Iptables防火牆設置 防火牆規則的匹配順序流程圖 Iptables表和鏈的結構 Iptables有四張表,RAW,MANGLE,NAT,FILTER。表的處理優先級:raw>mangle>nat>filter 各表功能: Filter:一般的過濾功能 Nat:用於nat功能-端口或地址映射 Mangle:用於對特定數據包的修改 Raw:有限級最高,設置raw是一般是爲了不再讓iptables做數據包的跟蹤鏈接處理,提高 性能 五個鏈:INPUT,FORWARD,PREROUTING,POSTROUTING,OUTPUT 一般無特殊需要,配置iptables是隻需配置filter和nat兩張表。如不開啓路由轉發,則只配置filter表。 Filter表中的鏈有:INPUT,FORWARD,OUTPUT Nat表中的鏈有:PREROUTING,POSTROUTING,OUTPUT Mangle表中的鏈有:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING Raw表中的鏈有:PREROUTING,OUTPUT 鏈相對數據包的位置: PREROUTING:數據包進入路由表之前 INPUT:通過路由表後目的地位本機 FORWARD:通過路由表後,目的地不爲本機 OUTPUT:由本機產生,向外轉發 POSTROUTING:發送到網卡界面之前 Iptables部分參數簡介: 規則的增刪改: -A(追加),-I(插入),-D(刪除一條規則),-R(修改),-L(查看),-P(默認規則) 常用參數: -p (指定協議),-s(源地址),-d(目的地址),--sport(源端口),--dport(目的端口),-i(入口網卡),-o(出口網卡),-m(加載模塊),-t(指定表,默認爲filter表) 例:-m state --state NEW,ESTABLISHED,RELATED,INVALID (聯機狀態) -m multiport --source-port|--destination-port 80,443,22 這裏-m state 是告訴系統需加載state模塊,因爲這裏使用了--state 注:在使用多端口設置包過濾規則時,必須指定協議(-p tcp|udp……) 常用的處理動作: -j:用來指定要進行的處理動作 ACCEPT:將包放行,進行完此動作後,將不再對比其他規則,直接跳往下一個規則鏈 REJECT:攔阻改封包,並傳送封包通知,完成此動作,直接中斷過濾程序 DROP:丟棄包不予處理,進行完此動作後,將不再對比其他規則,直接中斷該程序 REDIRECT:將包重新導向到另一個端口(PNAT),之後繼續對比其他規則 MASQUERADE:改寫封包來源IP爲防火牆NIC IP,可指定port範圍,之後跳往下一 SNAT:改寫封包來源IP爲某特定IP或IP範圍,可指定port範圍,之後跳往下一規則 DNAT:改寫封包目的IP爲某特定IP或IP範圍,可指定port範圍,之後跳往下一規鏈 設定iptables從這裏開始 默認規則的設置 iptables設置默認規則 Iptables -P INPUT DROP|ACCEPT Iptables -P FORWARD DROP|ACCEPT Iptables -P OUTPUT DROP|ACCEPT 注:一般設置默認規則,INPUT鏈和FORWARD鏈爲DROP,OUTPUT鏈爲ACCEPT 以下規則的設置,即是依據一般性默認規則下設置的 1-允許迴環訪問 Iptables -I INPUT -i lo -j ACCEPT Iptables -I OUTPUT -o lo -j ACCEPT(在OUTPUT鏈的默認策略爲DROP時設) 2-允許外部主機的ping測試 Iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT Iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT(OUTPUT鏈) 3-允許本機ping測外部主機 Iptables -A INPUT -p icmp --icmp-reply -j ACCEPT Iptables -A OUTPUT -p icmp --icmp-requst -j ACCEPT 注:在INPUT鏈添加了聯機狀態規則(如下)下,不設置上述規則也是可以ping外部主機的。 Iptables -I INPUT -m state --state ESTABLISEHED,RELATED -j ACCEPT 在不影響外部ping本主機測試的情況下,可設置下面這條命令進行限制本機ping外部主機 iptables -I INPUT -p icmp --icmp-type echo-reply -j REJECT 注意此規則的位置,必須放在下圖INPUT第二行規則之前,否則無效。(此涉及iptables規則匹配的順序---自上而下) 4-限制指定ip地址訪問本機 Iptables -A INPUT -i eth0 -s ip -j DROP 加上“-p tcp”可以指定只屏蔽ip的tcp數據包 5-指定範圍內ip地址遠程連接本機 Iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT 注:當其他ip段連接登錄本機時,因源地址的網段與規則不匹配,往下也無匹配的規則,最後採用默認策略拒絕掉連接請求。 6-允許所有的ssh連接本機請求 Iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT Iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT(在OUTPUT的默認策略爲DROP的情況下添加這條語句) 注:若要限制或允許某一ip連接可用參數“-s ip”來指定拒絕“-j ACCEPT”。對於http/https的連接請求,與上述設置一樣,只需改變目的端口即可 7-禁止本機發起ssh連接請求 Iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j REJECT(因爲是發起的ssh請求,所有是出口,端口爲目的端口)
Iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j REJECT 注:兩條規則任選一條。 8-多端口規則設置(ssh,http連接訪問) 基於ssh、http、https協議都是基於tcp協議,設置規則是隻是端口的不同,可利用多端口簡化設置。 Iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -j ACCEPT 9-允許解析DNS(出站DNS連接) Iptables -A INPUT -i eth0 -p udp(tcp) --sport 53 -j ACCEPT Iptables -A OUTPUT -o eth0 -p udp(tcp) --dport 53 -j ACCEPT 注:注意數據包的流向。 10-數據庫連接限制內網連接 Iptables -A INPUT -i eth0 -p tcp -s 10.65.110.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT Iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state ESTABLISHED -j ACCEPT (依據OUTPUT鏈的默認策略選擇添加與否) 其他類似的服務依據端口和協議和是否限定ip來模仿上述格式設置iptables的規則。 11-防止DOS***(此規則未測試) Iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT -m limit :啓用limit擴展 --limit 25/minute:允許最多每分鐘25個連接 --limit-burst 100:當達到100個連接後,才啓動上述25/minute限制 注:依據實際情況選擇規則添加與否和連接限制參數 12-負載均衡(未測試) 可以利用iptables的-m nth擴展,及其參數(–counter 0 –every 3 –packet x),進行DNAT路由設置(-A PREROUTING -j DNAT –to-destination),從而將負載平均分配給3臺服務器: iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443 13-nat轉發 在做轉發前,明確轉發的方向,ip地址,以及瞭解iptables轉發過程中數據包的流向。 下面是iptables在做轉發時,數據包的流向。如下: 主機104開啓路由轉發 如本地主機有兩片網卡,eth0(連接內網)和eth1(連接外網)。則可以做如下轉發,只需將ip地址做轉換即可,而本文由於設備限制,做的是單網卡的ip映射。但原理是一樣的。 轉發是依靠nat表中PREROUTING和POSTROUTING鏈來完成的。可以實現端口映射,ip映射,內部ip僞裝 內網數據到外網的轉發 Iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT 端口映射 例如將來自端口88的請求轉發到80端口 Iptables -A INPUT -p tcp --dport 88 -d 192.168.1.104 -j DNAT --to 192.168.1.104:80 http測試 注:在這裏爲什麼不設置轉發鏈還可以訪問成功,是因爲這裏的ip沒有被轉發鏈修改,變得只是目的端口(由88改爲80)。 Ip映射 對於Iptables的ip映射,本文實現ip轉發的要求和環境如下: 環境:主機192.168.1.104 主機 192.168.1.107 Windows:192.168.1.53 要求:將所有訪問192.168.1.104的主機服務的請求轉發給主機192.168.1.107,並且,請求的迴應經由192.168.1.104返回給客戶端(例如:192.168.1.53) 對於做ip映射,規則鏈的默認規則如下: INPUT DROP FORWARD DROP OUTPUT ACCEPT PREROUTING和POSTROUTING鏈不做要求 配置如下: 命令: 1- iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.168.1.104 -j DNAT --to 192.168.1.107:80 2- iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -d 192.168.1.107 -j SNAT --to-source 192.168.1.104 3- iptables -I FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT (注:這一條在FORWARD默認策略爲DROP時必須加上,否則ip映射失敗) 4- iptables -A FORWARD -p tcp --dport 80 -d 192.168.1.107 -j ACCEPT 注:若FORWARD鏈的默認規則爲ACCEPT,第3,4條規則可省略。 解釋: 第一條:即iptables的ip映射,這是主要規則 第二條:這條規則是在數據包流出之前將數據包的源地址映射爲中介ip,使響應數據包可以 找到返回路徑。這是對於靜態(內網)ip而言。而雙網卡或動態獲取ip時,可使 用“-j MASQUERADE”機制,系統自動讀取網卡信息,將源地址映射爲與網卡 同網段的ip地址。主要作用是(內外網通信)在數據包出去後,響應數據包可以返回 第三條:這條規則表示與系統已經建立的連接,或與某程序相關的數據包允許轉發。 第四條:在默認規則爲DROP的情況下,可以轉發的條件規則。 測試: 以Apache服務進行ip轉發測試,一下是主機104和主機107的http網頁測試內容: 以下截圖,客戶端在訪問104主機時,網頁顯示的內容爲107主機的網頁內容。 下面是抓包結果,顯示了數據包請求與響應的流向。 以上,表面ip映射成功。 若還需要對訪問的ip進行限制,可使用“-s 192.168.1.0/24”網段來實現。具體配置,依據實際情況增加和刪減規則。 注:最後在測試的時候,如果開始測試時是可以的,後來又不行了,那有可能是網卡出錯了。可以查看一下這個文件中的信息。這個文件是專門存放網卡信息的文件。通信網卡要與ifconfig顯示一致 /etc/udev/rules.d/70-persistent-net.rules
參考文檔: http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457077.html |
iptables防火牆設置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.