Firewall:工做在主機或網絡邊緣,對進出的報文按事先定義的規則進行檢查,算法
而且由匹配到的規則進行處理的一組硬件或軟件,甚至多是二者的組合安全
隔離用戶訪問,只容許訪問指定的服務 經過ADSL撥號連入互聯網服務器
放一個硬件防火牆在網絡前 這樣的主機 CPU一般都是特製的 這就是硬件防火牆網絡
主機防火牆:工做於主機邊緣, 只能對一臺主機起到保護做用 併發
網絡防火牆:工做於網絡邊緣, 對多臺主機起到保護做用 這是一個硬件 有CPU內存 不須要硬盤 app
對數據報文進行分析 可是必須打開全部功能,也能夠嚴格定向框架
工做在內核空間中, 至關於在TCP/IP協議棧前面加一道牆 tcp
網卡--->防火牆----->TCP/IP協議棧 這種是針對主機函數
網絡層防火牆:工做在網絡層 網絡防火牆 須要拆掉物理層和鏈路層 僅能檢查源和目標的端口、源和目標IP 內容不能檢查。工具
沒問題就能夠進行轉發。
應用層防火牆:工做在網關 拆掉TCP和IP首部對內容進行分析 ,
沒問題就進行轉發 至關於路由器 這個網管被稱爲代理服務器
分別是:網絡層防火牆 應用層防火牆 內部主機
可是仍然有可能精心設計報文 怎麼辦?
IDS:入侵檢測系統 至關於監控器也須要規則 結合防火牆一塊兒使用
HIDS:主機入侵檢測系統,做用於主機 例如:OSSEC
NIDS:網絡入侵檢測系統 例如:snort
Filesystem:文件系統級別入侵檢測 例如修改配置文件等行爲 tireware
IPS(IDS+防火牆):入侵防護系統 IDS結合防火牆一塊兒工做 及時減低損失
honeypot:蜜罐 誘捕黑客 有漏洞吸引你
系統評估安全工具:全方面掃描檢測 例如: Nessus nmap
rootkit攻擊 烏雲平臺
iptables/netfilter:基於網絡層的防火牆, 支持鏈接追蹤(狀態檢測)
netfilter提供鉤子函數
ipfw ----> ipchains-----> iptables Linux防火牆是參考 openBSD的防火牆
iptables:自己只是防火牆規則編寫工具
netfiter:讓規則生效的網絡過濾器,是一個框架 規則放在這個上面工做
hook_function 鉤子函數 轉發不會通過用戶空間,只是在內核空間
INPUT 到本機內部
OUTPUT 到本機出去
FORWARD 轉發
POSTROUTING 路由以後 作原地址轉換成公網的IP才能出去 私有地址是不能進行路由的
PRERROUTING 路由以前 報文回來的時候就須要轉發,不然就交給本身本機處理了 目標地址轉換
每一個網卡都有本身的發送隊列
防火牆功能:
過濾:作報文篩選
NAT:Network Address Transltion 網絡地址轉換
DNAT 轉換目標地址
SNAT 轉換源地址
mangle: 修修補補 改變IP信息等 在這五個位置上都行
raw: 先無論 用的很少
FORWARD:
filter
mangle
INPUT
filter
mangle
OUT
filter
mangle
nat
PREROUTING
mangle
nat
POSTOUTING
mangle
nat
規則優化:將控制強的放在前面, 應用訪問頻繁的也要放在前面
四表:
fileter net mangle raw
五鏈
PREROUTING INPUT FOREARD OUTPUT POSTROUTING
目標主機不是本機纔會轉發 本機進出都不會通過FORWARD
表和鏈的對應關係
filer:INPUT FORWARD.OUTPUT
nat:PREROUTING OUTPUT POSTROUTING
magle:PREROUTING FORWARD POSTROUTING INPUT OUTPUT
規則:檢查條件, 處理機制
默認策略: 只針對filter
通:白名單,默認爲堵,只對能識別的進行放行
堵:黑名單,默認爲通,只對能識別的進行阻截
檢查條件:網絡層
IP:SIP,DIP
TCP:SPORT,DPORT,FLags(標誌位) 例如:syn ack等
UDP:SPORT,DPORT
ICMP:ICMP-TYPE(報文類型) ping出去和回來是不一樣的 ping用的協議
擴展機制:
Time、string、state(connection-tracking)鏈接追蹤
處理機制:
DROP(丟棄) REJECT(拒絕,並返回)
ACCEPT(容許) SNAT DNAT 目標轉換
RETURN(返回) REDIRECT(端口轉發)
LOG(只記錄日誌)
mangle:作防火牆標記
如何寫規則
-t 表 -L 列出 -n 以數值方式顯示
iptables [-t table] -N chain
建立一條自定義的空規則鏈
iptables [-t table] -X chain
刪除一條自定義的空規則鏈
iptables [-t table] -E old-chin-name new-chain-name
爲鏈修更名
iptables [-t table] -P chain—name target
爲鏈指定默認策略,修改默認的屬性
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
-F 清空鏈中的規則
規則由編號,在鏈中自上而下,從1開始
-L list 列出表中的全部規則
-n:數字格式顯示ip和port 不然會反解成名字 速度很慢
-v:顯示信息,
pkts:packets,被本規則全部匹配到的報文的個數
baytes:被本規則所匹配到的全部報文的大小子和,單位是字節,會執行單位換算
target:目標,即處理機制
port:協議通常爲(TCP|UDP|ICMP)
opt:可選項
in:數據包的流入接口
out:數據包的流出接口
scource:源地址
destination:目標地址
-vv:
-vvv:
-x:exactly:精確值,不執行單位換
--line-nambers:顯示各規則的行號
-Z:zero,清零:
把規則的計數器清零
iptables [-t table] {-A|-D} chain rule-specification
-A:append,附加一條規則
rule-specification 匹配條件 -j 處理機制
匹配條件:
通用匹配
-s 匹配源地址,能夠IP,也能夠網絡地址:可使用!操做符取反,!172.168.0.0/16 -s至關於 --src,或 --source
-d 匹配目標地址,能夠IP,也能夠網絡地址:可使用!操做符取反,!172.168.0.0/16
-p 匹配協議,一般只能使用{TCP|UDP|ICMP}三者之一
-i 數據報文流入的接口,一般只用於INPUT FORWARD和PREROUTING
-o 數據報文流出的接口,一般只用OUTPUT FORWARD和POSTROUTING
保存規則: iptables不是服務 不會監聽端口 定義成服務 只是爲了開機自動運行
service iptables save
規則會被保存至/etc/sysconfig/iptables文件中:
默認,start時也會讀取該文件中的內容以設置規則
# iptables-save > /path/to/some_rulefile 保存iptables至別的位置
# iptables-restore < /path/to/some_rulefile 從自定義的位置讀取並使之生效
規則命令:
-A:添加
-D:刪除
iptables [-t table] -D chain rulenum
當一條被刪除,另外的一條會被補上
插入規則
iptables [-t table] -I chain [rulenum] rule-specification
替換規則(覆蓋指定規則)
iptables [-t table] -R chain rulenum rule-specification
顯示指定鏈上的規則添加命令
iptables [-t table] -S [chain [rulenum]]
擴展匹配
隱含擴展:使用-p {tcp|udp|icmp}指定某特定協議後,自動可以對協議進行的擴展
-p tcp
--dport m[-n],匹配的目標端口,能夠是連續的多個端口
--sport:m[-n],匹配的源端口,能夠是連續的多個端口
--tcp-flags
URG PSH PST SYN ACK FIN
-p udp
--dport m[-n],匹配的目標端口,能夠是連續的多個端口
--sport:m[-n],匹配的源端口,能夠是連續的多個端口
-p icmp
icmp-type
顯式擴展:必需要明確指定的擴展模塊
-m 擴展模塊名稱 --專用選項1 --專用選項2
multiport:多端口匹配,一次指定多個離散端口
--source-ports --sport ports{port1 port2}
--destination-ports, --dports
--ports
iprange:ip地址服務
[!] --src-range from [-to]
[!] --dst-range from [-to]
time 指定時間範圍
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]
--timestart hh:mm[:ss]
[!] --weekdays day[,day....]
string 字符串匹配
--alog {bm|kmp} :字符匹配查找時使用的算法
--string 「STRING」 :要查找的字符串
--hex-string "HEX-STRING" 要查找的字符,先編碼成16進制格式
connlimit:每IP對指定服務的最大併發鏈接數
[!] --connlimit-above
limit:報文速率控制
--limit #[/second|/minute|/hour|/day]
--limit-burst #
hping3:安裝此包,作測試
state:狀態追蹤
ip_conntrack,nf_conntrack
netfilter:會話
--state
NEW
ESTABLISHED
RELATED
INVALID
調整鏈接追蹤功能所能容納的最大鏈接數
cat /proc/sys/net/nf_conntrack_max
定義了鏈接追蹤的最大值,所以,建議按需調大此值
cat /proc/net/nf_conntrack
記錄了當前追蹤的全部鏈接
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
超時時間
法則:
1.對於進入狀態爲ESTABLISHED都應該放行
2.對於返回狀態爲ESTABLISHED都應該放行
3.嚴格檢查進入的狀態爲NEW的連接
4.全部狀態爲INVALID都應該拒絕
-j target
RETURN:返回調用鏈
如何放行工做與被動模式的ftp服務
1、確保iptables加載ftp協議支持的模塊,ip_nat_ftp,ip_conntrack_ftp
編輯/etc/syconfig/iftables-config文件,定義以下參數:
IPTABLES_MIDULES="ip_nat_ftp ip_conntrack_ftp"
2。放行請求報文的RELATED和ESTABLISHED狀態,放行響應報文的ESTABLISHED狀態
回顧:開機流程
POST--> BootSequence(MBR:bootloader) -->GRUB -->kernel(initramfs) --> /sbin/init (/etc/inittab,/etc/init/*.conf)
啓動服務時的最後一個服務一般是/etc/rc.d/rc.local(/etc/rc.local),這事實上是一個腳本,但凡寫在腳本的命令到或腳本調用都在系統運行至此服務被執行