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