linux之防火墙
linux自身的安全訪問(wèn)控制可以從以下幾個(gè)層次實(shí)現(xiàn)。
以太網(wǎng)層和網(wǎng)絡(luò)層:arptables?---工作在以太網(wǎng)層防止arp欺騙,
網(wǎng)絡(luò)層和傳輸層:iptables????---根據(jù)通信雙方的協(xié)議數(shù)據(jù)包的某些特征來(lái)實(shí)現(xiàn)過(guò)濾。
工作在應(yīng)用層:tcpwrappers
應(yīng)用層針對(duì)于網(wǎng)絡(luò)的可以使用squid實(shí)現(xiàn)訪問(wèn)控制。
特別說(shuō)明一下殺毒軟件和網(wǎng)絡(luò)訪問(wèn)沒(méi)有關(guān)系。
什么是防火墻
???防火墻是一組工作在網(wǎng)路或者主機(jī)的邊緣,對(duì)于進(jìn)出本網(wǎng)絡(luò)或主機(jī)的數(shù)據(jù)包根據(jù)實(shí)現(xiàn)預(yù)制好的規(guī)則進(jìn)行檢查,并且能夠在實(shí)現(xiàn)數(shù)據(jù)包匹配之由規(guī)則指定的動(dòng)作進(jìn)行處理的組件的組合
防火墻的分類(lèi)
? ?包過(guò)濾型防火墻,工作在TCP/IP層
? ? ? tcp,ip
? ? ? ? 根據(jù)tcp首部或ip首部數(shù)據(jù)進(jìn)行判斷
? ?應(yīng)用層網(wǎng)關(guān)防火墻,工作在應(yīng)用層
? ? ? ?根據(jù)數(shù)據(jù)包傳輸?shù)膶?shí)際數(shù)據(jù)進(jìn)行判斷
?包過(guò)濾型防火墻的分類(lèi)
?
? ?簡(jiǎn)單包過(guò)濾
? ? ? tcp,ip
? 帶狀態(tài)檢測(cè)的包過(guò)濾
? ? ? ?NEW ?該包想要開(kāi)始一個(gè)新的連接
? ? ? ?ESTABLISHED ?該包屬于某個(gè)已經(jīng)建立的連接
? ? ? ?INVALID 無(wú)法識(shí)別的狀態(tài)
? ? ? ?RELATED ? 相關(guān)聯(lián)的
防火墻功能
?
? filter:INPUT,OUTPUT,FORWORD ? ? 過(guò)濾 ? ? 表示不允許訪問(wèn)
? nat:PRERONTING,POSTROUTING,OUTPUT 地址轉(zhuǎn)換
? mangle:PRERONTING,POSTROUTING,OUTPUT,FORWORD,INPUT ?把數(shù)據(jù)包首部拆開(kāi)修改后再結(jié)合
防火墻如何工作的
?
? ?防火墻要放在內(nèi)核進(jìn)行實(shí)施,規(guī)則在用戶空間定義,但規(guī)則要在內(nèi)核實(shí)現(xiàn),所以在內(nèi)核空間內(nèi)要具有接受用戶定義規(guī)則的接口,這個(gè)接口叫Netfilter:網(wǎng)絡(luò)過(guò)濾器,本身不過(guò)濾數(shù)據(jù)包只要有放上規(guī)則之后才進(jìn)行過(guò)濾,多條規(guī)則組成ipchains ,多個(gè)ipchaices 組成tables。
iptables
? iptables 是一個(gè)工具,具體命令格式如下
iptables:[-t TABLE](指定表) COMMAND CHAINS(鏈) [createria] -j ACTTON
特別注意:鏈要大寫(xiě),表要小寫(xiě)
?-t?:指定表名,有filter,nat,managle。
COMMAND:子命令,是由選項(xiàng)的格式構(gòu)成的,這個(gè)表示對(duì)特定的表中的特定的鏈,進(jìn)行特定的操作的規(guī)則
關(guān)于規(guī)則選項(xiàng)有:
-A,?append??????表示在鏈的尾部,追加一條規(guī)則。
-I?n,?insert????表示插入一條規(guī)則,n表示插入到第幾條
-D?n,?delete????表示刪除第幾條。
-R?n,?replace???表示修改第幾條規(guī)則。
關(guān)于鏈操作的鏈(表)
-F,?flush???表示清空整條規(guī)則鏈。(但不會(huì)清除默認(rèn)規(guī)則)
-N,?new?????表示新建一條用戶自定義的規(guī)則鏈。
-X,?????????用于刪除一條用戶自定義的空鏈,鏈中有規(guī)則是不能刪的。
-Z,?zero,???把一條鏈中的計(jì)數(shù)器重新置零,(每一條規(guī)則都有兩個(gè)計(jì)數(shù)器,pkts表示被本規(guī)則匹配到得數(shù)據(jù)包的個(gè)數(shù),另外一個(gè)bytes用于計(jì)數(shù)被匹配到得數(shù)據(jù)包的總的大小。
-P,?policy{ACCEPT|DROP}?表示策略,表示把某一個(gè)鏈的默認(rèn)規(guī)則設(shè)定為ACCEPT(通)或DROP(拒絕)
-L,?list?????表示列出
-n,?numeric???表示以數(shù)字的方式顯示,不加-n則會(huì)把ip地址反向解析為主機(jī)名,速度會(huì)比較慢
-v,?verbose???表示顯示信息,v越多越詳細(xì)。
-vv,
-vvv
-x,?exactly???表示顯示計(jì)數(shù)器時(shí)使用精確的計(jì)數(shù),而不做單位轉(zhuǎn)換。
--line-numbers??表示顯示行號(hào)的。
CHAIN:鏈,
有五個(gè)鏈分別為:OUTPUT,INTPUT,FORWORD,PREROUTING,POSTROUTING
createria:數(shù)據(jù)包的匹配標(biāo)準(zhǔn):
通用匹配???可以使用“!”表示取反
-s??指定匹配數(shù)據(jù)包的源地址標(biāo)準(zhǔn)
-d??指定匹配數(shù)據(jù)包的目的地址標(biāo)準(zhǔn)
-p?{icmp|tcp|udp}?指定匹配數(shù)據(jù)包的協(xié)議。
-i??指定數(shù)據(jù)包的流入接口(通常跟網(wǎng)卡的設(shè)備名稱)
-o??指定數(shù)據(jù)包的流出接口
擴(kuò)展匹配
隱含擴(kuò)展,隱含擴(kuò)展是指對(duì)前面指定的協(xié)議的擴(kuò)展
-p?tcp
--sport?:用于做源端口匹配?
--dport?:?目的端口匹配
--tcp-flags??用于做tcp的標(biāo)志位的匹配。check_list?必須為1的位
tcp的首部有六個(gè)標(biāo)志位分別為:SYN,ACK,FIN,PSH,URG,RST
?--tcp-flags?ACK,SYN,FIN,RST?SYN??簡(jiǎn)寫(xiě)為?--syn
? SYN:表示同步。
? ACK:表示確定
? FIN:發(fā)起連接斷開(kāi)請(qǐng)求
? PSH:表示推送位
? URG:表示緊急為,配合緊急指針使用
? RST:重置為
-p?udp
--sport
--dport
-p?icmp
--icmp-type?{8|0}?icmp的數(shù)據(jù)包類(lèi)型。當(dāng)ping別人時(shí)數(shù)據(jù)包類(lèi)型是8,當(dāng)被人回應(yīng)你是數(shù)據(jù)包類(lèi)型是0:0表示回響應(yīng)答。
?
? ? -p icmp
? ? ? ? ? --icmp-type
? ? ? ? ? ? 8:echo-request 請(qǐng)求
? ? ? ? ? ? 0:echo-reply ? 響應(yīng)
? 顯式擴(kuò)展
?
?-m state --state NEW /INVALID.. 狀態(tài)檢測(cè)
? ? ? ?NEW ?該包想要開(kāi)始一個(gè)新的連接,syn=1,ack=0的包
? ? ? ?ESTABLISHED ?該包屬于某個(gè)已經(jīng)建立的連接
? ? ? ?INVALID 無(wú)法識(shí)別的狀態(tài)
? ? ? ?RELATED ? 相關(guān)聯(lián)的
?
? ? ? ? -m multiport ?指定間斷端口
? ? ? ? ? ?-source-ports
? ? ? ? ? ?-destination-ports
? ? ? ? ? ?--ports
? ? ? ? -m iprange ?指定地址范圍的
? ? ? ? ? --src-range ip-ip
? ? ? ? ? --dst-range ip-ip
? ? ? ?并發(fā)連接限制
? ? ? ? ? -m connlimit ! --connlimit-above 2 -j DROP
? ? ? ??? -m limit ? ??速率限定
? ? ? ? ? --limit rate 2/miniute 表示每分鐘2個(gè) (速率)
? ? ? ? ? --limit-burst number 峰值速率
? ? ? ? -m string
? ? ? ? ? ?--algo bm|kmp
? ? ? ? ? ?--string "STRING"
? ? ? ? -m time ? 設(shè)置時(shí)間
? ? ? ? ? ?--timestart 8:00 --timestop 18:00 -j DROP
? ? ? ? ? ?--days
? ? ? ? ? ?--datestart
? ? ? ? ? ?--datestop
-j?TARGET???-j:表示跳轉(zhuǎn),表示匹配到數(shù)據(jù)包后怎么處理
ACCEPT?????表示接受,
DROP???????表示丟棄,不作出回應(yīng)(網(wǎng)絡(luò)防火墻常用這個(gè)選項(xiàng)
REJECT?????表示拒絕,做出回應(yīng)
DNAT???????表示做地主轉(zhuǎn)換
SNAT
REDIRECT????表示做端口重定向
LOG????????表示做日志。
保存iptables規(guī)則
#service?iptables?save?
表示保存iptables的規(guī)則到/etc/sysconfig/iptables
??每次開(kāi)機(jī)會(huì)重讀這個(gè)文件
#iptables-save?>?/etc/sysconfig/iptables.my
?表示把規(guī)則保定到特定的位置。
啟用iptables
#service?iptables?start??啟動(dòng)iptables?
即執(zhí)行了:iptables-restore?<?/etc/sysconfig/iptables
這條命令,把iptables中的規(guī)則重新生效一下
iptables不是一種服務(wù),它的啟動(dòng)腳本只是執(zhí)行了,保存規(guī)則和重讀規(guī)則。
例子說(shuō)明
清空數(shù)據(jù)鏈上的某個(gè)表中的規(guī)則:
#iptables?-t?filter?-F?OUTPUT
刪除某條鏈上的規(guī)則
#iptables?-t?table?-D?CHAIN?N
或者
#iptables?-t?table?-D?CHAIN?規(guī)則的詳細(xì)寫(xiě)入
開(kāi)放本機(jī)到本機(jī)的訪問(wèn):
#iptables?-I?INPUT?1?-s?127.0.0.1?-d?127.0.0.1?-j?ACCEPT
#iptables?-I?OUTPUT?1?-s?127.0.01?-d?127.0.0.1?-j?ACCEPT
開(kāi)通ICMP?ping?規(guī)則:
#iptables?-t?filter?-A?OUTPUT?-s?192.168.0.34?-p?icmp?--icmp-type?8?-j?ACCEPT
#iptables?-A?INPUT?-d?192.168.0.34?-p?icmp?--imcp-type?0?-j?ACCEPT
開(kāi)通被ping
#iptables?-t?filter?-A?INPUT?-d?192.168.0.34?-p?icmp?--icmp-type?8?-j?ACCEPT
#iptables?-A?OUTPUT?-s?192.168.0.34?-p?icmp?--imcp-type?0?-j?ACCEPT
配置一個(gè)網(wǎng)絡(luò)防火墻,是用戶只能訪問(wèn)80服務(wù)
1,打開(kāi)farewell?的ssh服務(wù)和server的ssh服務(wù)。
#iptables?-filter?
2.client和server的網(wǎng)關(guān)指向,
??#route?add?default?gw?host_ip
3.打開(kāi)firewall的路由功能。
??#sysctl?-w??net.ipv4.ip_forward=1?臨時(shí)生效
??#echo?1?>?/proc/sys/net/ipv4/ip_forward?永久生效
3.在FORWARD鏈上開(kāi)放左右雙向httpd服務(wù)的規(guī)則。
??#iptables?-A?FORWARD?-s?192.168.0.73?-d?192.168.10.20?-p?tcp?--dport?80?-j?ACCERT
??#iptables?-A?FORWARD?-s?192.168.10.20?-s?192.168.0.73?-p?tcp?--sport?80?-j?ACCEPT
4.修改forward的默認(rèn)規(guī)則
??#iptables?-P?FORWARD?DROP
5.保存規(guī)則。
防火墻基于tcp的狀態(tài)檢測(cè)功能。對(duì)于一個(gè)完整的tcp鏈接來(lái)說(shuō),只有請(qǐng)求了才能相應(yīng)。
tcp的標(biāo)志位里要求syn為一,ack?,rst,fin為零,表示第一次握手。
?
?
本文轉(zhuǎn)自 ?沐木小布丁 ?51CTO博客,原文鏈接:http://blog.51cto.com/sxhxt/924342
總結(jié)
- 上一篇: tomcat的部署及session绑定反
- 下一篇: 开发工具之pycharm 快捷键说明