1.iptables的概念
netfilter/iptables:IP信息包過濾系統(tǒng)饺著,它實際上由兩個組件netfilter 和 iptables 組成仁烹。
2.iptables的三表五鏈
三表
- filter負責過濾數(shù)據(jù)包捆憎,包括的規(guī)則鏈有印衔,input尼变,output和forward;
- nat則涉及到網(wǎng)絡(luò)的地址轉(zhuǎn)換卸勺,包括的規(guī)則鏈有砂沛,prerouting,postrouting和output;
- mangle表則主要應(yīng)用在修改數(shù)據(jù)包內(nèi)容上曙求,用來做流量整形的碍庵,給數(shù)據(jù)包打個標識映企,默認的規(guī)則鏈
有:INPUT,OUTPUT静浴,forward卑吭,POSTROUTING,PREROUTING;
五鏈
- input匹配目標IP本機的數(shù)據(jù)包
- output出口數(shù)據(jù)包,一般不在此鏈上做配置
- forward匹配流經(jīng)本機的數(shù)據(jù)包
- prerouting用來修改目的地址马绝,用來做DNAT。(端口映射)
-
postrouting用來修改源地址用來做snat挣菲。(路由器功能富稻,內(nèi)網(wǎng)機通過路由器nat轉(zhuǎn)換實現(xiàn)內(nèi)網(wǎng)機通過公網(wǎng)ip上網(wǎng))
3.iptables過濾封包流程,表->鏈->規(guī)則
4.iptables服務(wù)安裝及相關(guān)配置
關(guān)閉firewall防火墻
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動
安裝iptables
yum -y install iptables-services
iptables服務(wù)配置文件存放的位置
ls /etc/sysconfig/iptables
設(shè)置開機自啟動
systemctl start iptables && systemctl enable iptables
5.使用方法
iptables命令的語法格式
Iptables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j 目標動作或或跳轉(zhuǎn)]
操作命令
- -A 添加規(guī)則白胀,追加到最后一行
- -I num 插入椭赋,把當前規(guī)則插入為第幾條
- -D num 刪除,明確指定刪除第幾條規(guī)則
- -P 設(shè)置默認策略的
- -F 清空規(guī)則鏈的
- -R 替換修改第幾條規(guī)則
- -nvL 查看
--line-number 查看規(guī)則號
- -A <鏈名> APPEND或杠,追加一條規(guī)則(放到最后)
例如:
iptables -t filter -A INPUT -j DROP #拒絕所有人訪問服務(wù)器
在 filter 表的 INPUT 鏈里追加一條規(guī)則(作為最后一條規(guī)則)
匹配所有訪問本機 IP 的數(shù)據(jù)包哪怔,匹配到的丟棄
- -I <鏈名> [規(guī)則號碼] INSERT,插入一條規(guī)則
例如:
iptables -I INPUT -j DROP
在 filter 表的 INPUT 鏈里插入一條規(guī)則(插入成第 1 條)
iptables -I INPUT 3 -j DROP
在 filter 表的 INPUT 鏈里插入一條規(guī)則(插入成第 3 條)
注意:
-t filter 可不寫向抢,不寫則自動默認是 filter 表
-I 鏈名 [規(guī)則號碼]认境,如果不寫規(guī)則號碼,則默認是 1
確保規(guī)則號碼 ≤ (已有規(guī)則數(shù) + 1)挟鸠,否則報錯
- -R num:Replays替換/修改第幾條規(guī)則
格式:iptables –t filter -R INPUT 3 ……… 修改filter的INPUT鏈第三條規(guī)則
- -D <鏈名> <規(guī)則號碼 | 具體規(guī)則內(nèi)容> DELETE叉信,刪除一條規(guī)則
例如:
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere
iptables -D INPUT -s 192.168.0.1 -j DROP #按內(nèi)容匹配。
刪除 filter 表 INPUT 鏈中內(nèi)容為“-s 192.168.0.1 -j DROP”的規(guī)則
(不管其位置在哪里)
注意:
若規(guī)則列表中有多條相同的規(guī)則時艘希,按內(nèi)容匹配只刪除序號最小的一條
按號碼匹配刪除時硼身,確保規(guī)則號碼 ≤ 已有規(guī)則數(shù),否則報錯
按內(nèi)容匹配刪除時覆享,確保規(guī)則存在佳遂,否則報錯
- -P <鏈名> <動作> POLICY,設(shè)置某個鏈的默認規(guī)則
ex:
例如:
iptables -L #查看默認規(guī)則是ACCEPT
Chain INPUT (policy ACCEPT)
target prot opt source des ation tin
iptables -P INPUT DROP
設(shè)置 filter 表 INPUT 鏈的默認規(guī)則是 DROP
iptables -L #查看已經(jīng)變?yōu)镈ROP
Chain INPUT (policy DROP)
target prot opt source destination
注意:
當數(shù)據(jù)包沒有被規(guī)則列表里的任何規(guī)則匹配到時撒顿,按此默認規(guī)則處理丑罪。動作前面不能加 –j,這也是唯一 一種匹配動作前面不加 –j 的情況核蘸。
- -F [鏈名] FLUSH巍糯,清空規(guī)則
例如:
添加規(guī)則:
iptables -t filter -A INPUT -j DROP
iptables -F INPUT #清除INPUT鏈上的規(guī)則
iptables -F #清除filter表中所有鏈上的規(guī)則
iptables -t nat -F #清空NAT表中所有鏈上的規(guī)則
iptables -t nat -F PREROUTING #清空NAT表中PREROUTING鏈上的規(guī)則
注意:
-F 僅僅是清空鏈中規(guī)則,并不影響 -P 設(shè)置的默認規(guī)則客扎。 需要手動改:
iptables -P INPUT ACCEPT
-P 設(shè)置了 DROP 后祟峦,使用 -F 一定要小心!徙鱼!
在生產(chǎn)環(huán)境中宅楞,使用-P DROP 這條規(guī)則针姿,一定要小心,設(shè)置之前最好配置下面兩個任務(wù)計劃厌衙,否則容易把自己drop掉距淫,鏈接不上遠程主機。
配置crontab :(線上服務(wù)器需提前設(shè)置好15分鐘后進行執(zhí)行定時任務(wù):接受訪問和清除所有規(guī)則)
*/15 * * * * iptables -P INPUT ACCEPT
*/15 * * * * iptables -F
常用規(guī)則:(配置防火墻時直接在/etc/sysconfig/iptables添加)
- *filter
- :INPUT ACCEPT [0:0]
- :FORWARD ACCEPT [0:0]
- :OUTPUT ACCEPT [0:0]
- -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- -A INPUT -p icmp -j ACCEPT
- -A INPUT -i lo -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
配置22婶希,80端口
iptables -P INPUT ACCEPT
iptables -F
iptables -A INPUT -i lo -j ACCEPT #放行環(huán)回口所有數(shù)據(jù)
iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
snat路由模式(B通過連接A路由器上網(wǎng))
虛擬路由器A
echo "1">/proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1">>/etc/sysctl.conf
sysctl -p #( 改完執(zhí)行sysctl -p命令使配置生效)
iptables -t nat -A POSTROUTING -s A路由器ip所在網(wǎng)段(192.168.2.0/24) -j SNAT --to A路由器的wan口地址(192.168.1.63)
ex1: iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63
ex2: iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens33 -j MASQUERADE
客戶端pc機B
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
NM_CONTROLLED=yes
IPADDR=192.168.2.2
NETMASK=255.255.255.0
GATEWAY=192.168.2.1 #網(wǎng)關(guān)指向虛擬路由器A的wan口地址
DNS1=223.5.5.5
ONBOOT=yes
TYPE=Ethernet
榕暇。。喻杈。
NAME=" ens33"
HWADDR=00:0C:29:12:EC:1E
systemctl restart network
test: ping g.cn
使用DNAT功能彤枢,把內(nèi)網(wǎng)webPC機B的端口映射到虛擬路由器A的外網(wǎng)
虛擬路由器A
iptables -t nat -A PREROUTING -d 虛擬路由器wan口ip -p tcp --dport 80 -j DNAT --to PC機B的ip:80
EX:
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
或:
iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
iptables命令使用總則總結(jié):
所有鏈名必須大寫
INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
所有表名必須小寫
filter/nat/mangle
所有動作必須大寫
ACCEPT/DROP/SNAT/DNAT/MASQUERADE
所有匹配必須小寫
-s/-d/-m <module_name>/-p
注意事項:
表、鏈筒饰、規(guī)則處理的順序
- 表間的優(yōu)先順序
raw > mangle > nat > filter - 鏈間的匹配順序
入站數(shù)據(jù):PREROUTING缴啡、INPUT
出站數(shù)據(jù):OUTPUT、POSTROUTING
轉(zhuǎn)發(fā)數(shù)據(jù):PREROUTING瓷们、FORWARD业栅、POSTROUTING - 鏈內(nèi)的匹配順序
自上向下按順序依次進行檢查,找到相匹配的規(guī)則即停止
若在該鏈內(nèi)找不到的相匹配的規(guī)則谬晕,則按該鏈的默認策略處理(未修改的情況下碘裕,默認策略為允許)