iptables 防火墻概述
概念介紹:防火墻將不安全的網(wǎng)絡(luò)流量信息進(jìn)行隔離
實(shí)現(xiàn)方式: 硬件(思科 華為) 軟件(iptables firewalld)
準(zhǔn)備: 1) 網(wǎng)絡(luò)知識(shí) OSI 二層(mac) 三層(IP) 四層(port)
2) 名詞概念: iptables防火墻服務(wù)的組成
防火墻服務(wù)(容器) --- 表概念
防火墻服務(wù)表(容器) --- 鏈概念
防火墻鏈(容器) --- 規(guī)則
配置防火墻: 開(kāi)啟防護(hù)墻服務(wù) --- 指定表 --- 指定鏈 --- 指定規(guī)則
表的概念 4張表 filter(過(guò)濾) NAT(映射/轉(zhuǎn)發(fā)) mangle(流量數(shù)據(jù)包進(jìn)行標(biāo)記)
raw(取消標(biāo)記)
鏈的概念 5個(gè)鏈 INPUT FORWARD OUTPUT PREROUTING POSTROUTING OUTPUT INPUT FORWARD OUTPUT PREROUTING POSTROUTING
PREROUTING OUTPUT
vlan 虛擬局域網(wǎng)
sw 01 - 10 vlan10 hostA data數(shù)據(jù)包 --> 01 sw vlan10 --> data數(shù)據(jù)包+tag:10
sw 11 - 21 vlan20
iptables 防火墻工作原理
1、基礎(chǔ)工作原理:
1. 防火墻是層層過(guò)濾的绣溜,實(shí)際是按照配置規(guī)則的順序從上到下榆俺,從前到后進(jìn)行過(guò)濾的德崭。
2. 如果匹配上規(guī)則猿规,即明確表示是阻止還是通過(guò),數(shù)據(jù)包就不再向下匹配新的規(guī)則。
3. 如果規(guī)則中沒(méi)有明確表明是阻止還是通過(guò)的,也就是沒(méi)有匹配規(guī)則搀菩,向下進(jìn)行匹配呕臂,直到匹配默認(rèn)規(guī)則得到明確的阻止還是通過(guò)破托。
4. 防火墻的默認(rèn)規(guī)則是所有規(guī)則執(zhí)行完才執(zhí)行的。
2歧蒋、擴(kuò)展工作原理:
iptables表和鏈關(guān)系詳細(xì)說(shuō)明
filter表: 真正起到防火墻功能
INPUT鏈: 流量在進(jìn)入時(shí)進(jìn)行訪問(wèn)控制
OUTPUT鏈: 流量在出去是進(jìn)行訪問(wèn)控制
forward鏈: 流量是否可以經(jīng)過(guò)防火墻
nat表: 實(shí)現(xiàn)訪問(wèn)映射/流量轉(zhuǎn)發(fā) 實(shí)現(xiàn)內(nèi)網(wǎng)訪問(wèn)外網(wǎng)/外網(wǎng)訪問(wèn)映射到指定內(nèi)網(wǎng)主機(jī)
iptables防火墻filter表 3個(gè)鏈中規(guī)則配置方法
1. 準(zhǔn)備工作: 部署安裝iptables 服務(wù)
yum install -y iptables-services
2. 查看iptables 默認(rèn)配置策略
iptables -nL -v
3. iptable初始化操作:清除操作
iptables -F Delete all rules in chain or all chains 清除鏈上所有規(guī)則信息
iptables -X Delete a user-defined chain 刪除用戶自定義鏈
iptables -Z Zero counters in chain or all chains 清除計(jì)數(shù)器信息
課堂練習(xí)
練習(xí)01:
阻止任意用戶訪問(wèn)22端口 -- INPUT
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
阻止任意用戶訪問(wèn)22端口 -- OUTPUT
iptables -t filter -A OUTPUT -p tcp --sport 22 -j DROP
練習(xí)02:
允許10.0.0.1主機(jī)訪問(wèn)22端口,其他網(wǎng)段,其他主機(jī)不能訪問(wèn) -- INPUT
iptables -A INPUT -s 10.0.0.1 -d 10.0.0.81 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
允許10.0.0.1主機(jī)訪問(wèn)22端口,其他網(wǎng)段,其他主機(jī)不能訪問(wèn) -- OUTPUT
iptables -A OUTPUT -d 10.0.0.1 -s 10.0.0.81 -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -d 10.0.0.0/24 -p tcp --sport 22 -j DROP
練習(xí)03:
允許所有通過(guò)eth0流量訪問(wèn)22端口, 拒絕通過(guò)eth1接口訪問(wèn)22端口 --INPUT鏈
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 22 -j DROP
允許所有通過(guò)eth0流量訪問(wèn)22端口, 拒絕通過(guò)eth1接口訪問(wèn)22端口 --OUTPUT鏈
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -j DROP
練習(xí)04:
除了10.0.0.1這個(gè)地址可以訪問(wèn)22端口,其余所有地址都不能通過(guò)eth0端口訪問(wèn)22端口 ---INPUT
方法一: 做取反操作 --- 默認(rèn)策略是允許
iptables -A INPUT ! -s 10.0.0.1 -i eth0 -p tcp --dport 22 -j DROP
方法二: 修改默認(rèn)策略
iptables -A INPUT -s 10.0.0.1 -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -t 表 -P 鏈 動(dòng)作
插入指定規(guī)則信息
iptables -I INPUT 3 -s 10.0.0.0/24 -i eth0 -p tcp --dport 24 -j ACCEPT
顯示規(guī)則序號(hào)信息
iptables -nL --line-number
刪除指定規(guī)則信息:
iptables -D INPUT 2
修改指定規(guī)則信息
iptables -R INPUT 2 -s 10.0.0.0/24 -i eth0 -p tcp --dport 24
練習(xí)題: 05
如何阻止用戶訪問(wèn)防火墻服務(wù)器的多個(gè)端口
連續(xù)的多個(gè)端口 22-80
iptables -A INPUT -s 10.0.0.100 -p tcp --dport 22:80 -j DROP
不連續(xù)的多個(gè)端口 22,80,3306
iptables -A INPUT -s 10.0.0.100 -m multiport -p tcp --dport 23,25,27,80 -j DROP -
練習(xí)題: 06
實(shí)現(xiàn)主機(jī)訪問(wèn)禁ping
icmp協(xié)議: icmp數(shù)據(jù)包分類
type 8: 表示ping包請(qǐng)求流量
type 0: 表示ping包響應(yīng)流量
別人訪問(wèn)防火墻服務(wù)器
主機(jī)X -icmp type 8-> 阻止 防火墻服務(wù)器
iptables -I INPUT -s 10.0.0.31 -p icmp --icmp-type 8 -j DROP icmp請(qǐng)求流量做阻止
主機(jī)x -icmp type 0-> 阻止 防火墻服務(wù)器
iptables -I OUTPUT -d 10.0.0.31 -p icmp --icmp-type 0 -j DROP icmp響應(yīng)流量做阻止
防火墻服務(wù)器不能ping其他主機(jī)
防火墻 -icmp type 8-> 其他主機(jī)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
防火墻 <-icmp type 0- 其他主機(jī)
iptables -A INPUT -p icmp --icmp-type 0 -j DROP
在一個(gè)INPUT 阻止進(jìn)入 0 和 8 流量
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
練習(xí)題:07
利用防火墻限制數(shù)據(jù)包數(shù)量 == 網(wǎng)絡(luò)流量限速
-m limit --limit n/{second/minute/hour} 一定時(shí)間內(nèi)可以產(chǎn)生傳輸多少個(gè)數(shù)據(jù)包
--limit-burst [n] 到達(dá)閾值之后進(jìn)行限速
iptables -A INPUT -s 10.0.0.31 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT
iptables -P INPUT DROP
企業(yè)實(shí)際配置過(guò)程:
第一個(gè)里程: 確認(rèn)filter表中所有鏈默認(rèn)策略
鏈上默認(rèn)規(guī)則為允許: 配置了黑名單功能 逛公園(誰(shuí)不能進(jìn)公園)
連上默認(rèn)規(guī)則為阻止: 配置了白名單功能 看電影(買票) *
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
第二個(gè)里程: 按照流程配置防火墻規(guī)則信息(INPUT鏈配置)
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
設(shè)置換回接口可以進(jìn)行通訊
邏輯接口: loopback
01. 系統(tǒng)中作用: 可以自己ping自己網(wǎng)卡地址
02. 在網(wǎng)絡(luò)環(huán)境: 可以作為管理接口進(jìn)行遠(yuǎn)程連接使用
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT 不用配置
允許訪問(wèn)的白名單主機(jī)地址信息
iptables -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
第三個(gè)里程: 保存配置信息
防火墻配置說(shuō)明:
iptable命令配置防火墻策略信息時(shí), 是臨時(shí)配置, 防火墻服務(wù)重啟或者系統(tǒng)重啟, 所有配置失效
如何永久保留配置信息:
方法一: centos6
/etc/init.d/iptables save
方法二:
iptables-save > /etc/sysconfig/iptables
方法三:
直接編寫(xiě)配置文件
/etc/sysconfig/iptables
防火墻NAT表配置方法
prerouting: 可以實(shí)現(xiàn)外網(wǎng)用戶訪問(wèn)內(nèi)網(wǎng)主機(jī) 跳板機(jī)+vpn
postrouting: 可以實(shí)現(xiàn)內(nèi)網(wǎng)主機(jī)訪問(wèn)外網(wǎng)
實(shí)踐: 實(shí)現(xiàn)內(nèi)網(wǎng)主機(jī)訪問(wèn)外網(wǎng)
第一個(gè)里程: 修改內(nèi)網(wǎng)網(wǎng)卡網(wǎng)關(guān)信息
cat /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.81
DNS1=223.5.5.5
確保防火墻可以允許內(nèi)網(wǎng)主機(jī)ping網(wǎng)關(guān)測(cè)試
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
第二個(gè)里程: 開(kāi)啟服務(wù)器路由轉(zhuǎn)發(fā)功能 ???
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p /etc/sysctl.conf
第三個(gè)里程: 配置防火墻postrouting鏈 == 完成了地址轉(zhuǎn)換功能 將私網(wǎng)地址轉(zhuǎn)換為公網(wǎng)地址 NAT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.81
命令 表 鏈 要映射源地址 在哪做映射 做什么映射 映射什么地址
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE --- 外網(wǎng)接口地址不固定時(shí)
第四個(gè)里程: 配置FORWARD鏈信息
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
實(shí)踐: 實(shí)現(xiàn)外網(wǎng)主機(jī)訪問(wèn)內(nèi)網(wǎng)服務(wù)器
配置防火墻nat中prerouting鏈規(guī)則
iptables -t nat -A PREROUTING -d 10.0.0.81 -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.31:22
A 服務(wù)器 <-01- 主機(jī)01(肉雞)
<-02- 主機(jī)02(肉雞) 攻擊者A DDOS
<-03- 主機(jī)03(肉雞)
iptables防火墻自定義鏈配置 == 變量功能
iptables -N syn-flood --- 創(chuàng)建自定義鏈 == 創(chuàng)建一個(gè)變量 syn-flood
iptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURN --- 創(chuàng)建自定義鏈規(guī)則 === 設(shè)置變量的值
iptables -A syn-flood -j DROP
iptables -A INPUT -i eth0 -syn -j syn-flood --- 調(diào)用自定義鏈 == 調(diào)用變量
iptables -A INPUT -i eth0 -syn -m limit -limit 5000/s -limit-burst 200 -j RETURN
iptables -A INPUT -i eth0 -syn -j DROP
網(wǎng)絡(luò): 控制syn泛洪攻擊
A 攻擊者 --01 syn01 --> B(服務(wù)器)
<-02 syn ack--
03 不發(fā)出 syn_rcvd
--01 syn02 -->
<-02 syn ack--
03 不發(fā)出 syn_rcvd
iptables -N syn-flood
# 創(chuàng)建一個(gè)syn-flood自定義鏈
iptables -A INPUT -i eth0 -syn -j syn-flood
# 將INPUT鏈中抓取的syn數(shù)據(jù)流量都放入到syn-flood自定義鏈中
iptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURN
# 一旦獲取到流量大于每秒5000土砂,并發(fā)大于200時(shí),就執(zhí)行下一條規(guī)則
iptables -A syn-flood -j DROP
# 丟棄syn-flood鏈上的數(shù)據(jù)
自定義鏈實(shí)際作用:
防火墻服務(wù)器: 8080:8090
允許 172.16.1.0/24 網(wǎng)段訪問(wèn) iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 8080 -j ACCEPT
允許 172.17.1.0/24 網(wǎng)段訪問(wèn) iptables -A INPUT -s 172.17.1.0/24 -p tcp --dport 8080 -j ACCEPT
允許 172.18.1.0/24 網(wǎng)段訪問(wèn) iptables -A INPUT -s 172.18.1.0/24 -p tcp --dport 8080 -j ACCEPT
...
允許 172.100.1.0/24 網(wǎng)段訪問(wèn)
創(chuàng)建自定義鏈:
iptables -N oldboy
設(shè)置自定義鏈規(guī)則:
iptables -A oldboy -p tcp --dport 8080 -j ACCEPT
調(diào)整自定義鏈規(guī)則
iptables -R oldboy 1 -p tcp --dport 8080:8090 -j ACCEPT
調(diào)用自定義鏈:
iptables -A INPUT -s 172.16.1.0/24 -j oldboy
iptables -A INPUT -s 172.17.1.0/24 -j oldboy
iptables -A INPUT -s 172.18.1.0/24 -j oldboy
iptables命令常用參數(shù)說(shuō)明
查詢參數(shù)
--list -L [chain [rulenum]] List the rules in a chain or all chains
列出鏈上規(guī)則配置信息(默認(rèn)查看filter表上信息)
--table -t table table to manipulate (default: `filter')
指定操作處理哪張表 默認(rèn)處理 filter表
--verbose -v verbose mode
顯示詳細(xì)規(guī)則配置信息
--numeric -n numeric output of addresses and ports
查詢信息中 地址和端口以數(shù)字形式顯示
--line-numbers print line numbers when listing
輸出規(guī)則行號(hào)信息
清除參數(shù)
--flush -F [chain] Delete all rules in chain or all chains
清除鏈上所有規(guī)則信息
--zero -Z [chain [rulenum]] Zero counters in chain or all chains
清除計(jì)數(shù)器信息(排查)
pkts: 匹配了幾個(gè)包 5個(gè)包 每個(gè)包1500字節(jié)
bytes: 匹配數(shù)據(jù)包總共尺寸/訪問(wèn)流量 5*1500字節(jié)
-X [chain] Delete a user-defined chain
刪除用戶自定義鏈 ???
添加規(guī)則參數(shù)
--append -A chain Append to chain
指定規(guī)則添加到哪個(gè)鏈上
--insert -I chain [rulenum] Insert in chain as rulenum (default 1=first)
在指定鏈上插入規(guī)則(默認(rèn)插入到第一條規(guī)則之上)
--protocol -p proto protocol: by number or name, eg. `tcp'
指定規(guī)則匹配的協(xié)議: tcp udp icmp ???
--dport 端口 規(guī)則匹配的目標(biāo)端口信息
--sport 端口 規(guī)則匹配的源端口信息
--source -s address[/mask][...] source specification
指定規(guī)則匹配的源地址信息
--destination -d address[/mask][...] destination specification
指定規(guī)則匹配的目標(biāo)地址信息
--in-interface -i input name[+] network interface name ([+] for wildcard)
根據(jù)進(jìn)入流量,在網(wǎng)卡進(jìn)行規(guī)則配置
--out-interface -o output name[+] network interface name ([+] for wildcard)
根據(jù)流出流量,在網(wǎng)卡進(jìn)行規(guī)則配置
--jump -j target target for rule (may load target extension)
指定處理策略動(dòng)作: ACCEPT * DROP * REJECT
刪除指定規(guī)則:
--delete -D chain Delete matching rule from chain
刪除指定規(guī)則信息
修改默認(rèn)策略
--policy -P chain target Change policy on chain to target
修改指定鏈上默認(rèn)策略
修改指定策略:
--replace -R chain rulenum Replace rule rulenum (1 = first) in chain
修改指定規(guī)則策略
擴(kuò)展參數(shù)信息
--match -m match extended match (may load extension)
可以加上擴(kuò)展匹配信息
策略處理方法
ACCEPT 允許接收
DROP 丟棄 * 更安全
REJECT 拒絕