Firewall:工作域、於主機或網絡邊緣,對於進出的報文根據規則定義的規則作檢查,進而對被規則匹配的報文作爲相應的處理。主要分爲網絡防火牆和主機防火牆
IDS(***檢測系統):Instrusion Detect System
分別爲以下兩種: HIDS;Host IDS; NIDS: Network IDS
IPS:(***防禦系統Intrusion Protect System)
HoneyPot: 蜜罐,誘引不法信息進入,使用反向追蹤
bt(backtrack):安全工具發行版
安全評估工具:Nessus、nmap、
用戶編寫規則:先確定功能(表),確定報文的流向,確定要實現的目標,確定匹配條件
規則的功能:
raw、mangle、nat、fitler
fitler:過濾,定義是否允許通過防火牆
nat: 地址轉換,啓用connection_track
mangle: 修改tcp/ip的首部
raw:讓用戶的請求在經過Network時,爲nat表上啓用連接追中功能
表和鏈的對應關係
fitler:INPUT,FORWARD,OUTPUT
nat:PREROUTING(SNAT),POSRTOUTING,OUTPUT
mangle:修改報文中某些值的特性 ,-->所有位置都可以修改
raw:那裏能做nat就在那裏做
======================================================================
數據報文的流程
跟本機內部的進程通信
進入:-->PREROUTING-->INPUT
出去:-->OUTPUT-->POSTROUTING
由本機轉發
請求:-->PREROUTING-->FORWARD-->POSTROUTING-->
響應:-->PREROUTING-->FORWARD-->POETROUTING
如果規則中限定原地址、目標地址、源端口、目標端口等與流向相關的設定
數據報文的流向:
源IP和目標IP有流向決定
PREROUTING:路由前
INPUT:到達本機內部的報文必經之路
FORWARD:有本機轉發報文的必經之路
OUTPUT:本機發出的報文的必經之路
POSTROUTING:路由後
規則文件/etc/sysconfig/iptables
保存啓用中的規則到規則文件中
1、#iptables-save > /etc/sysconfig/iptables
2、#service iptables save
生效規則文件中的規則
1、#iptables-restore < /etc/sysconfig/iptables
2、#service iptables restart
執行的操作,清空現有規則,讀取並生效規則文件中的規則
寫規則時:
作爲服務器端:先進後出
作爲客戶端:先出後進
icmp:控制消息協議
iptables:用戶空間的工具,寫規則,併發送給netfilter,立即生效
netfilter;接受並生效規則(真正意義上的防火牆)
======================================================================
基本語法:
格式: iptables [-t TABLE] COMMAND CHAIN CRETIRIA -j TARGET
-t TABLE: 默認是filter,其他選項:nat 、mangle、 raw
COMMAND :
鏈
-F :flush ,清空規則鏈
-N:new,自建一條鏈
-X:delete,刪除一條自定義空鏈
-Z:zero,計數器歸零
-p:policy,設定默人策略,對filter表來講。默認規則爲ACCEPT或DROP
-E : rEname,重命名自定義的鏈
鏈中的規則
-A:Append,在鏈末添加一條規則,
-D:Insert, 刪除一條或多條規則,可以指定鏈中的序號
-I :Delete,插入條新規則
-R:Replce,修改一條規則,
查詢:
-L :list
-n:以數字格式顯示主機地址和端口
-v:顯示詳細信息 ;vv,vvv,vvvv
--line-number:顯示規則行號
-x:exactly,詳細信息,不作單位換算 ,而顯示其精確值
pkts bytes target prot opt in out source destination
包數 字節數 目標 協議 流入接口 流出接口 源地址 目標地址
==========================================================================
格式:iptables [-t TABLE] -A 鏈名 匹配條件 -j 處理目標
匹配條件:
通用匹配
-s 地址:指定報文源的IP地址匹配的範圍,可以是IP地址或者網絡地址,使用!取反
--src,--source
-d 地址:自定目標的IP地址的匹配的範圍,可以是IP地址或者網絡地址,使用!取反
--dst,--destiantion
-p 協議: 指定匹配報文的協議類型,一般有三種:tcp,udp,icmp
-i INTERFACE: 數據報文流入的接口:prerouting,input,forward
-o INTERFACE:數據包流出的接口:output,forward,postrouting
擴展匹配:調用nstfilter額外模塊實現特殊檢查機制,必須使用-m選項來指定調用那個模塊
隱式擴展:當使用-p{tcp | udp | icmp}指定中的一種時,可以直接使用擴展中的一種選項
-p tcp == [-m tcp]
--sports PORT[-PORT]:指定源端口
--dport PORT[-PORT]:指定目標端口
--tcp-flag 要檢查標誌位列表(逗號分割),必須爲1的標誌位列表(逗號分割)
eg:--tcp-flags syn,ack,rst,fin syn
--syn
-p udp == [-m udp]
--sports [PORT]...:指定源端口
--dport PORT:指定目標端口
-p icmp == [-m icmp]
--icmp-type
0:echo-relplay,ping響應
8:echo-request,ping請求
顯式擴展:必須明確說明使用那個模塊擴展,才能使用擴展選項
iptables、netfitler分別擁有模塊的一部分代碼
-m 擴展模塊的名稱
mutiport:多端口匹配-->可用於匹配非連續或連續端口(max<=15)
專用選項
--source-ports、--sports port[,port,port:port]
--estination-ports、--dports
#iptables -I INPUT -d 目標地址 -p tcp -m mutiport --dports 20,80 -j ACCEPT
#iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT
===#watch -n 1 ‘iptables -L -n -v’===查看iptables信息
iprange:匹配指定範圍內的地址(匹配一段連續的地址而不是整個網絡)
專用選項
[!] --src-range IP[-IP]
[!] --dst-range IP[-IP]
# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
string:字符匹配,能夠檢測報文應用層中的字符串(字符串匹配檢查高效算法)
kmp、bm (基於編碼後的二進制進行匹配比較)
專用選項
--slgo {kmp|bm}
--string "STRING"
--hex-string "HEX_STRING":HEX_STRING編程成16進制格式的字串
#iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP
表示凡事含有“sex”字符串的響應都不讓出去
time:基於時間做訪問控制
專用選項
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestop hh:mm[:ss]
--timestart hh:mm[:ss]
--weekdays day[,day]
#iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT
connlimit:連接數限制,對每個Ip所鞥夠發起併發連接數作限制
專用選項 (可以取反)
--connlimit-above [N]
#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
limit:作速率限制
專用選項
--limit n[/second|/minutel|/hour|/day]
--limit-burst n
#iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
state:狀態檢查,連接追蹤中的狀態
NEW:新建立一個會話
ESTABLISHED:以建立的連接
RELATED:有關聯關係的連接
INVALID:無法識別的連接
調整連接追蹤功能所能容納的連接的最大連接數
/proc/sys/net/nf_conntrack_max
當前追蹤的所有連接
/proc/net/nf_conntrack
不同協議或連接類型追蹤時的屬性
/proc/sys/netfilter目錄
放行被動模式下的FTP服務
1)、裝載模塊/lib/modules/KERNEL_VERSION/kernel/net/netfilter/
模塊:nf_conntrack_ftp
2)、放行請求報文
1、放行NEW狀態對21端口請求的報文
2、放行ESTABLISHED以及RELATED狀態報文
3)、履行響應報文
1、放行ESTABLISHED以及RELATED狀態報文
防火牆的分類:
簡單包過濾防火牆
帶狀態檢測的包過濾防火牆(不適用於訪問量龐大的站點)
處理目標:
內置目標:
DROP 拒絕,(悄悄丟棄)
REJECT 拒絕,強行丟棄
ACCEPT 接受
#iptables -t [filter] -A INPUT -s 172.16.0.0/16 -d 172.16.1.1 -p icmp -j {DROP | REJECT}
****表示本地主機(172.16.1.1)拒絕來自172.16.網段的主機訪問(即拒絕在網段主機上使用#ping 172.16.1.1)
自定義的鏈
刪除規則:
格式:iptables [-t table] -D chain rulenum
#iptables [-t filter] -D INPUT 1 **表示刪除鏈INPUT上的第一條
設置策略
iptables [-t TABLE] -P chain target
修改規則
iptables [-t table] -R chain rulenum rule-specification
插入規則
iptables [-t table] -I chain [rulenum] rule-specification
==============================================================================
動態編譯的可執行文件需要附帶一個的動態鏈接庫。在執行時,需要調用其對應動態鏈接庫中的命令。所以其優點一方面是縮小了執行文件本身的體積,另一方面是加快了編譯速度,節省了系統資源。缺點一是哪怕是很簡單的程序,只用到了鏈接庫中的一兩條命令,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應的運行庫,則用動態編譯的可執行文件就不能運行。
靜態編譯就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so或.lib)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。所以其優缺點與動態編譯的可執行文件正好互補。
==============================================================================
TCP Wrappers
TCP Wrappers是有/etc/hosts.allow 、/etc/hosta.deny連個文件來管理的一個類似防火牆的機制,但是並非所有的軟件都可以通過這兩個文件管理,被管理的軟件必須具備下面兩個條件:
1)有xinetd這個超級進程管理的服務
2)支持libwrap.so模塊的服務
所有我們在實現TCP Wrappers前需要保證安裝了xinetd軟件
查看某軟件是否可以被tcp wrappers管理:
1)#ldd $(which SERVER_NAME)
2)查看是否被xinetd管理,沒有則不能使用tcp wrappers
tcp_wrapper通過讀取配置文件中的規則來判定某服務是否可被訪問:
/etc/hosts.allow 該文件允許,但是可以使用deny對某行規則取反
/etc/hosts.deny 該文件拒絕,同樣可以使用allow對某一行規則取反
編輯上面兩個文件中的規則是即時生效的;
配置文件的語法:
daemon_list: client_list [:options]
例如:in.telnetd: ALL : spawn /bin/echo `date` login attempt from %c to %s, %d >> /var/log/telnet.log
服務檢查邏輯:client --> /etc/hosts.allow -->(Y) --> ALLOW
client --> /etc/hosts.allow -->(N) --> /etc/hosts.deny -->(Y) --> DENY
-->(N) --> ALLOW
優先級:
先以/etc/hosts.allow進行優先比對,規則符合予以放行
再以/etc.hosta.deny進行比對,規則符合則予以抵消
若不再這兩個文件中(或者規則都不符合),予以放行
各項的意義
daemon_list:
應用程序程序名稱
應用程序程序名稱列表:使用逗號分隔
例如sshd, in.telnetd
ALL:所有受控進程
client_list:
IP地址
主機名
網絡地址:必須使用完整格式掩碼,不能使用長度掩碼,172.16.0.0/16不合用;
簡短的網絡地址:172.16. 表示爲 172.16.0.0/255.255.0.0
ALL: 所有客戶端地址;
KNOWN:
UNKNOWN:
PARANOID:主機名和IP地址的各自的正反解析結果不匹配;
特殊的變量:
EXCEPT:除了
[:options]
deny: 通常用於在hosts.allow文件實現拒絕的規則;
allow: 通常用於在hosts.deny文件實現允許的規則;
spawn: 啓動一個額外命令
***************待修改。iptables的layer7功能還未添加**************************