1、防火牆介紹
防火牆概念
防火牆通過制定一系列規則可以實現過濾數據報與限制特定服務的功能,但是防火牆並不能確保主機一定安全,防火牆並不能有效抵擋病毒或木馬,而且對來自網絡內部的攻擊無法防護
防火牆的具體功能(包括但不限於)
●限制FTP服務只開放給子網,而不對外網提供服務
●限制服務器只接受客戶端的WWW請求,不提供其他服務
●限制連接只能防火牆所在的由主機發起
●限制數據報進入主機的某些端口
●限制來自特定IP地址的主機的數據報
●限制特定狀態的數據報,比如SYN報文
●限制來自特定MAC地址的報文
設定防火牆之前需要考慮
●信任的IP地址或網段以及不信任的IP地址或網段
●主機可以提供的服務以及受保護的服務
●主機可以接收與不可以接收的數據報狀態(比如SYN報文、FIN報文)
防火牆類別
防火牆分為硬件防火牆和軟件防火牆。硬件防火牆是將防火牆程序寫入到硬件中,由硬件實現防火牆的功能;軟件防火牆是通過操作系統中的軟件實現的,包括Netfilter 與 TCP Wrappers。(後面講的都是軟件防火牆)。防火牆根據管理范圍可以劃分為網段型與單一主機型,根據功能劃分為依據數據報過濾的Netfilter以及依據程序進行過濾的TCP Wrappers。Netfiler根據數據報中數據,比如MAC地址、IP地址、以及TCP、UDP、ICMP等數據報種類或狀態進行過濾;TCP Wrappers依據程序名稱對數據進行過濾,比如需要限制FTP服務,只要限制vsftpd這個程序即可
防火牆的網絡布線
防火牆不僅可以保護防火牆所在的主機,也可以保護防火牆後邊的主機,比如將防火牆架設在路由器上。
防火牆的布線方式主要有:
●將防火牆架設在本地網絡(LAN)與外部網絡之間的路由器上,從而保護本地網絡中的主機,或者在本地網絡與外部網絡之間的防火牆上再架設代理服務器,使得客戶端只能連接開放的WWW服務器
●在本地網路中架設防火牆,從而避免內部人員由於誤操作破壞重要服務
●將防火牆架設在服務器與外部網絡之間,比如多台服務器共享一個防火牆,使用同一個IP對外提供服務,安全性大大提高,而且由於服務器位於兩個防火牆之間,內部網絡出現問題,不會影響服務器
2、TCP Wrappers
TCP Wrappers首先查看客戶端需要連接的服務名稱**是否支持**TCP Wrappers,如果支持再查看/etc/hosts.allow是否含有客戶端的IP地址,如果有,則允許數據進入主機,如果沒有,則再查看/etc/hosts.deny文件中是否有客戶端的IP地址,如果有,則拒絕數據進入主機,如果沒有,則允許數據進入主機。
xinetd管理的服務即/etc/xinetd.d目錄下的服務支持TCP Wrappers;含有libwrap.so模塊的服務同樣支持TCP Wrappers,可以使用lld以及grep命令查看服務是否含有libwrap.so模塊,比如ldd $(which sshd)|grep libwrap
/etc/hosts.allow的配置方式
[root@loaclhost ~]# vim /etc/hosts.allow ALL: 127.0.0.1 允許本機全部的服務 rsync:192.168.1.0/255.255.255.0 指明rsync服務允許的特定IP網段 rsync:10.0.0.100 指明rsync服務允許的特定IP地址 也可以將多個地址放在一行,最好分行來寫,更清晰
/etc/hosts.deny配置方式
[root@loaclhost ~]# vim /etc/hosts.allow rsync:192.168.1.0/255.255.255.0 指明rsync服務拒絕的特定IP網段,注意:只能使用子網掩碼指定IP網段,不能使用CIDR的方式 rsync:10.0.0.100 指明rsync服務拒絕的特定IP地址
3、Netfilter
Netfilter是最常用的防火牆機制,可以通過iptables進行配置
3.1、數據報進入主機的流程
iptables會首先分析數據報的數據,然後根據預先設定好的規則逐一進行比對,如果數據報符合當前規則,則進入(ACCEPT)主機或被丟棄(DROP),具體是ACCEPT還是DROP取決於具體的規則,如果數據報不符合當前規則,則使用下一條規則,如果不符合所有規則,則執行預設策略(Policy):接受或丟棄。注意:規則的順序十分重要
整個流程如下
3.2、iptables的表格和鏈
iptables含有多個表格,表格中含有多條鏈,鏈中含有多條規則
具體組成關系如下
iptables中至少含有filter、nat、mangle三個表格。
filter:用於管理數據報進出本機,常常使用!包含的鏈有以下幾種
●INPUT:控制進入主機的數據報
●OUTPUT:控制送出主機的數據報
●FORWARD:傳遞數據報到後端主機
nat:用於源IP地址以及端口與目的IP地址以及端口的轉換,與後端主機有關,包含的鏈有以下幾種
●PREROUTING:在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)
●POSTROUTING:在進行路由判斷之後所要進行的規則(SNAT/MASQUERADE)
●OUTPUT:控制送出主機的數據報
mangle:與特定狀態的數據報有關
3.3、表格間的鏈之間的關系
圖中顯示了iptables控制數據報的三種流向
●數據報的目的地為主機(路徑A):經路由判斷後,數據報的目的地為主機,那麼filter的INPUT鏈會對數據報的流向進行控制
●數據報的目的地是主機後的主機(路徑B):在路由對數據分析之前,發現數據報的目的地是主機後的主機,那麼filter的FORWARD鏈和nat 的 POSTROUTING, PREROUTING鏈會對數據報的流向進行控制
●數據包經主機向外發送(路徑C):經路由判斷後,數據報是向外發送,比如服務器響應客戶端請求或服務器主動向外發送數據報,filter 的 OUTPUT 鏈以及 nat 的 POSTROUTING鏈會對數據報的流向進行控制
總結:如果防火牆只是保護主機本身,只需要設置filter的INPUT鏈以及OUTPUT鏈即可;如果防火牆需要保護局域網中的主機,那麼還需要再設置filter 的 FORWARD 鏈以及 nat 的 PREROUTING, POSTROUTING 以及 OUTPUT 鏈
3.4、iptables語法
3.4.1、查看防火牆
iptables 選項
選項
-t :指定表格,比如nat、filter ,默認為filter
-L :顯示表格的規則
-n :加快信息顯示速度
-v :顯示詳細信息,包括數據報的總位數
eg
[root@localhost /]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:3306 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8000 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8001 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8002 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8003 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:6666 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8888 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:9001 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination