您好,登錄后才能下訂單哦!
一、iptables包過濾防火墻基本概念
防火墻是工作在主機或者網絡邊緣的,可以對其所匹配到的報文根據我們事先定義好的規則做匹配檢查對于能夠被匹配到的報文出相應的處理動作
iptables/netfilter:
實際上iptables防火墻是包括netfilter和iptables兩個部分,netfilter是內核中的防火墻框架,iptables是用戶空間中的命令程序,所有這兩者加起來才是一個完整的iptables。
四表:
raw:關閉NAT的連接追蹤機制,防止在高并發的訪問下服務器的內存溢出,它由PREROUTTING OUTPUT實現
mangle:可以對匹配到的報文的數據進行拆解,重新封裝,它由五個鏈來實現
nat:網絡地址轉換,nat表可以由PREROUTING FORWARD POSTROUTING實現
filter:實現包過濾,可以由INPUT FORWARD OUTPUT實現
五鏈:
PREROUTING:在對數據包作路由選擇前,應用此鏈中的規則
INPUT:當收到訪問防火墻本機地址的數據包(入站)時,應用此鏈中的規則
FORWARD:當收到需要通過防火墻轉發給其他地址的數據包(轉發)是應用此鏈中的規則
OUTPUT:當防火墻本周向外發送數據包(出站)時,應用此鏈中的規則
POSTROUTING:當對數據包做出路由現在后,應用此鏈中的規則
規則:根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動作做出處理
匹配條件:
基本匹配條件:netfilter自帶的匹配機制
擴展匹配條件:由擴展模塊引入的匹配機制
二、iptables基本使用命令介紹
命令格式:iptables [-t table] SUBCOMMAND chain [matches...] [target]
1、管理類的命令操作:
鏈管理:
-N:新增加一個自定義的鏈(自定義被內建鏈上的規則調用才生效,-j 自定義鏈名稱)
-X:刪除自定義的空鏈(引用計數為0的空鏈)
-P:設置鏈的默認策略
-E:重命名自定義的未被引用(引用計數為0)的鏈;
-F:清除
規則管理
-A:追加,默認為最后一個
-I:插入,默認為第一個
-D:刪除指定的規則
-R:替換修改,將指定的鏈規則替換為新的規則
-Z:將packets和bytes計算器給重置為0
查看:
-L:列出規則列表
-n:以數字形式顯示地址和端口
-v:顯示詳細的信息
-x:顯示計數器的精確值而非單位換算后的結果
--line-numbers:顯示鏈上的規則編號
實例:
iptables -I 2 INPUT -s 192.168.1.1 -d 192.168.1.2 -j DROP ###將此規則插入在input鏈的第2條
iptables -vnL ##顯示詳細信息 iptables -vnL --line-number##顯示鏈上的規則編號
iptables -F ##清空所有鏈上的規則 iptables -F INPUT ##清空指定INPUT鏈上的所有規則 iptables -D INPUT 1 ###刪除INPUT鏈上的第一條規則
iptables -R INPUT 2 -s 192.168.22.2 -d 192.168.1.1 -j ACCEPT ###將INPUT鏈的第2條規則替換
iptables -P INPUT DROP ##設置INPUT鏈的默認規則為拒絕 iptables -P OUTPUT DROP ##設置OUTPUT鏈的默認規則為拒絕 iptables -P FORWARD DROP ###設置FORWARD鏈的默認規則為拒絕
2、匹配條件規則命令:
基本匹配:netfilter自帶的匹配機制
[!] -s, --source address[/mask][,...]:原地址匹配
[!] -d, --destination address[/mask][,...]:目標地址匹配
[!] -i, --in-interface name:限制報文流入的接口,只能用于PREROUTING,INPUT及FORWARD;
[!] -o, --out-interface name:限制報文流出的接口,只能用于OUTPUT,FORWARD及POSTROUTING;
[!] -p {tcp|udp|icmp}:限制協議;
實例:拒絕192.168.1.0網段訪問本機192.168.1.1
iptables -A INPUT -s 192.168.0.0/24 -d 192.168.1.1 -j REJECT iptables -A OUTPUT -s 192.168.1.1 -d 192.168.0.0/24 -j REJECT iptables -A INPUT -s 172.16.100.67 -d 172.16.0.0/16 -i eth0 -j DORP
擴展匹配:需要加載擴展模塊
隱式擴展:可以不用使用-m選項專門加載相應模塊;前提是要使用-p選項可匹配何種協議
顯示擴展:必須由-m選項專門加載相應模塊
【隱式擴展】
[!] -p 協議:tcp, udp, icmp, icmpv6, esp, ah, sctp, mh or "all"
-p tcp:
[!] --source-port,--sport port[:port]:匹配報文中的tcp首部的源端口;可以是端口范圍
[!] --destination-port,--dport port[:port]:匹配報文中的tcp首部的目標端口;可以是端口范圍
[!] --tcp-flags mask comp: (其中flags包括:syn,fin,ack,rst syn )
mask:需要檢查的標志位列表,以逗號分隔
comp:必須為1的標志位,余下的出現在mask列表中的
-p udp:
[!] --source-port,--sport port[:port]:匹配報文中的udp首部的源端口;可以是端口范圍
[!] --destination-port,--dport port[:port]:匹配報文中的udp首部的目標端口;可以是端口范圍
-p icmp:
[!] --icmp-type {type[/code]|typename}
0/0:echo reply 回應
8/0:echo request 請求
實例:
允許192.168.1.0網段的訪問本機192.168.1.1的ssh服務,其余全部拒絕
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.1 -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -d 192.168.1.0/24 -s 192.168.1.1 -p tcp --sport 22 -j ACCEPT iptables -P INPUT DORP iptables -P OUTPUT DORP iptables -P FORWARD DORP
###僅允許172.16.100.67主機ping任何人 iptables -A INPUT -s 0/0 -d 172.16.100.67 -p icmp --icmp-type 0 -j ACCEPT iptables -A OUPUT -d 0/0 -s 172.16.100.67 -p icmp --icmp-type 8 -j ACCEPT
#####允許本機172.16.100.1 ping所有人,同時允許所有人ping本機 iptables -A INPUT -s 0/0 -d 172.16.100.1 -p icmp --icmp-type 0 -j ACCEPT iptables -A OUTPUT -d 0/0 -s 172.16.100.1 -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -s 0/0 -d 172.16.100.1 -p icmp --icmp-type 8 -j ACCEPT iptables -A OUTPUT -d 0/0 -s 172.16.100.1 -p imcp --icmp-type 0 -j ACCEPT
【顯式擴展】:需要使用-m選項
multiport:多端口匹配
[!] --source-ports,--sports port[,port|,port:port]...指定多個原端口
[!] --destination-ports,--dports port[,port|,port:port]...指定多個目標端口
[!] --ports port[,port|,port:port]...指定多個端口,不限定源端口及目標端口
實例:開發本機的ssh Telnet和web服務
iptables -I INPUT -s 0/0 -d 172.18.100.6 -p tcp -m multiport --dports 22,23,80 -j ACCEPT(離散類型指定) iptables -I OUTPUT -d 0/0 -s 172.18.100.6 -p tcp -m multiport --sports 22:23,80 -j ACCEPT(連續及離散指定)
iprange:指明一段連續的ip地址范圍做為源地址或目標地址匹配
[!] --src-range from[-to]:源地址范圍
[!] --dst-range from[-to]:目標地址范圍
實例:允許172.16.100.1到172.16.100.20范圍內的主機訪問mysql服務
iptables -A INPUT -s 0/0 -d 172.16.1.1 -p tcp --dport 3306 -m iprange --src-range 172.16.100.1-172.16.100.20 -j ACCEPT iptables -A OUTPUT -d 0/0 -s 172.16.1.1 -P tcp --sport 3306 -m iprange --dst-range 172.16.100.1-172.16.100.20 -j ACCEPT
string:對報文中的應用層數據做字符串匹配檢測
--algo {bm|kmp}
[!] --string pattern:給定要檢查的字符串模式
[!] --hex-string pattern:給定要檢查的字符串模式;16進制編碼
實例:任何人訪問172.18.100.6web服務時候內容字符包含admin的拒絕
iptables -I OUTPUT -s 172.18.100.6 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "admin" -j REJECT
time:根據收到報文的時間/日期與指定的時間/日期范圍進行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期時間;
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:結束日期時間
--timestart hh:mm[:ss]:起始時間;
--timestop hh:mm[:ss]:結束時間
[!] --monthdays day[,day...]:匹配一個月中的哪些天;
[!] --weekdays day[,day...]:匹配一個周中的哪些天
實例:允許周一到周五早上9點到下午16點時間內172.16.100.1-172.16.100.100內的主機可以Telnet172.16.100.6
iptables -R INPUT 4 -d 172.16.100.6 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -m time --timestart 09:00:00 --timestop 16:00:00 --weekdays 1,2,3,4,5 -j ACCEPT
connlimit:根據每客戶端主機做并發連接數限制,即每客戶端最多可同時發起的連接數量
--connlimit-upto n:連接數量小于等于n則匹配;
--connlimit-above n:連接數量大于n則匹配
iptables -A INPUT -s 0/0 -d 172.18.100.6 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT ##最多可以連接2個
limit:基于令牌桶算法對收發報文的速率做匹配
--limit rate[/second|/minute|/hour|/day]
--limit-burst number 最大速率
iptables -R INPUT 3 -d 172.18.100.6 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT
state:是連接追蹤機制的子集,用于對報文的狀態做連接追蹤,使用前需要裝載此模塊:modprobe nf_conntrack
[!] --state state
INVALID:無法識別的連接
ESTABLISHED:連接追蹤模板當中存在記錄的連接
NEW:連接追蹤模板當中不存的連接請求
RELATED:相關聯的連接
UNTRACKED:未追蹤的連接
已經追蹤到的并記錄下來的連接:/proc/net/nf_conntrack
連接追蹤功能所能夠記錄的最大連接數量(可調整):/proc/sys/net/nf_conntrack_max
實例:
iptables -A INPUT -d 172.16.100.67 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 172.16.100.67 -m state --state ESTABLISHED -j ACCEP
REDORECT:端口重定向即端口映射
--to-ports port[-port]
實例:將172.16.100.67的80端口映射為8080
iptables -t nat -A PREROUTING -d 172.16.100.67 -p tcp --dport 80 -j REDIRECT --to-ports 8080
SNAT:使用在nat表中,僅可用使用POSTROUTING INPUT鏈
--to-source [ipaddr[-ipaddr]]
實例: 將內網的地址192.168.1.0/24使用轉換為統一的地址與外部地址通信
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 172.16.100.6
DNAT:使用在nat表中,僅可用使用PREROUTING OUTPUT鏈
--to-destination [ipaddr[-ipaddr]][:port[-port]]
實例:將本地網絡總的地址使用統一的地址向外發布服務
iptables -t nat -A PREROUTING -s 192.168.1.1/24 -j DNAT --to-destination 172.16.100.1
保存規則:
iptables-save >/PATH/TO/SOME_RULE_FILE
iptables -S >/PATH/TO/SOME_RULE_FILE
重載預存的規則:
iptables-restore < /PATH/FROM/SOME_RULE_FILE
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。