*********Linux 防火牆 ************Linix IPTables 的使用:
***
******iptables 概述:(類似windows 的 TCP/ IP 篩選。) Linux 內核2.4 中,實現了一個具有包過濾、數據包處理、網絡地址轉換等防火牆功能框架的 netfilter , 而iptables 則是基於netfilter 基礎上的防火牆安全管理工具。
****
******netfilter 的主要安全功能有:1.包過濾(Packet Tracking )。2.網絡地址轉換。(network Address Translation )3.連接追蹤(Connection Tracking )。4.包變換(Packet Tracking )。
***1.包過濾:通過檢查每一個包的頭部,如何決定如何處理包:丟棄、通過、轉發。
***2.網絡地址轉換:netfilter 提供了兩種不同的網絡地址轉換方式:NAT(SNAT ) 和 目標 NAT (DNAT ) 。SNAT 是指修改包的源地址(改變連接的源IP) 。DNAT 是指修改包的目的地址(改變連接的目的IP)。端口轉發、負載均衡和透明代理 都屬於DNAT 。地址僞裝是SNAT 的一個特殊形式。
***3.連接追蹤:通過對數據包的前後狀態信息比較來控制數據包處理。
***4.包交換:netfilter 可以改變數據包的內容,如 TTL , 標誌符。
******iptables 結構圖:
******
Netfilter規則表—filter nat mangle
***
filter,用於路由網絡數據包。是默認的,也就是說如果沒有指定-t參數,當創建一條新規則時,它會默認存放到該表內。
INPUT 網絡數據包流向服務器
OUTPUT 網絡數據包從服務器流出
FORWARD 網絡數據包經服務器路由
***
nat,用於NAT表.NAT(Net Address Translation )是一種IP地址轉換方法。
PREROUTING 網絡數據包到達服務器時可以被修改
OUTPUT 網絡數據包由服務器流出
POSTROUTING 網絡數據包在即將從服務器發出時可以被修改
***
mangle,用於修改網絡數據包的表,如TOS(Type Of Service),TTL(Time To Live),等.
INPUT 網絡數據包流向服務器
OUTPUT 網絡數據包流出服務器
FORWARD 網絡數據包經由服務器轉發
PREROUTING 網絡數據包到達服務器時可以被修改
POSTROUTING 網絡數據包在即將從服務器發出時可以被修改
***
******iptables 配置命令:
建立規則
#iptables -A INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP
移除規則
#iptables -D INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP
常用操作命令:
-A 或 -append 在所選鏈尾加入一條或多條規則
-D 或 -delete 在所選鏈尾部刪除一條或者多條規則
-R 或 -replace 在所選鏈中替換一條匹配規則
-I 或 -insert 以給出的規則號在所選鏈中插入一條或者多條規則. 如果規則號爲1,即在鏈頭部.
-L 或 -list 列出指定鏈中的所有規則,如果沒有指定鏈,將列出鏈中的所有規則.
-F 或 -flush 清除指定鏈和表中的所由規則, 假如不指定鏈,那麼所有鏈都將被清空.
-N 或 -new-chain 以指定名創建一條新的用戶自定義鏈,不能與已有鏈名相同.
-X 或 -delete-chain 刪除指定的用戶定義簾,必需保證鏈中的規則都不在使用時才能刪除,若沒有指定鏈,則刪除所有用戶鏈.
-P 或 -policy 爲永久簾指定默認規則(內置鏈策略),用戶定義簾沒有缺省規則,缺省規則也使規則鏈中的最後一條規則,用-L顯示時它在第一行顯示.
-C 或 -check 檢查給定的包是否與指定鏈的規則相匹配.
-Z 或 -zero 將指定簾中所由的規則包字節(BYTE)計數器清零.
-h 顯示幫助信息.
設置鏈的默認策略。一般有兩種方法。
1)首先允許所有的包,然後再禁止有危險的包通過放火牆。
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
2)首先禁止所有的包,然後根據需要的服務允許特定的包通過防火牆。
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
添加規則
# iptables -A INPUT -p tcp –dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT
開啓22端口, 允許SSH登錄
如開啓80端口:
# iptables -A INPUT -p tcp –dport 80 -j ACCEPT
# iptables -A OUTPUT -p tcp –sport 80 -j ACCEPT
禁止某個IP訪問
# iptables -I INPUT -s x.x.x.x -j DROP
也可進行更細緻的設置, 如只允許192.168.1.14的機器進行SSH連接:
# iptables -A INPUT -p tcp –dport 22 -s 192.168.1.14 -j ACCEPT
如果要允許或限制一段IP地址可用192.168.1.0/24 表示192.168.1.1-255端的所有IP.
防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT
防止各種端口掃描
# iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
Ping 洪水***(Ping of Death)
# iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT
重啓防火牆:
service iptables restart
******************************************************iptables 詳細********************************************************************
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
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:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安裝linux時,選擇了有防火牆,並且開放了22,80,25端口.
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
[root@tp ~]# iptables -X 清除預設表filter中使用者自定鏈中的規則
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
上面的意思是,當超出了IPTABLES裏filter表裏的兩個鏈規則(INPUT,FORWARD)時,不在這兩個規則裏的數據包怎麼處理呢,那就是DROP(放棄).應該說這樣配置是很安全的.我們要控制流入數據包
如果做了郵件服務器,開啓25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服務器,開啓21端口
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
target prot opt source destination
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我們想,比如阻止MSN,QQ,BT等的話,需要找到它們所用的端口或者IP,(個人認爲沒有太大必要)
[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP
允許所有已經建立的和相關的連接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# /etc/rc.d/init.d/iptables save
這樣就可以寫到/etc/sysconfig/iptables文件裏了.寫入後記得把防火牆重起一下,才能起作用.
[root@tp ~]# service iptables restart