0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux軟件防火墻iptables詳解

馬哥Linux運(yùn)維 ? 來源:博客園空白的旋律 ? 2025-03-01 14:50 ? 次閱讀

軟件防火墻

Linux提供的軟件防火墻,名為iptables,它可以理解為是一個(gè)客戶端代理,通過iptables的代理,將用戶配置的安全策略執(zhí)行到對(duì)應(yīng)的安全框架中,這個(gè)安全框架稱之為netfilter。

iptables是一個(gè)命令行的工具,位于用戶空間,我們用這個(gè)工具操作真正的框架,也就是netfilter

真正實(shí)現(xiàn)流量過濾的防火墻框架是netfilter,位于內(nèi)核空間,它倆共同組成了Linux的軟件防火墻,一般用來代替昂貴的硬件防火墻,實(shí)現(xiàn)數(shù)據(jù)包過濾,網(wǎng)絡(luò)地址轉(zhuǎn)換等。

在Centos7發(fā)行版本下,firewalld防火墻又取代了iptables防火墻

iptables是將配置好的規(guī)則交給內(nèi)核層的netfilter網(wǎng)絡(luò)過濾器來處理
filrewalld服務(wù)是將配置好的防火墻規(guī)則交給內(nèi)核層的nftables網(wǎng)絡(luò)過濾器處理
這倆工具二選一即可,都只是命令行工具,

iptables是什么

iptables是開源的基于數(shù)據(jù)包過濾的防火墻工具。

Iptables使用場(chǎng)景

1、主機(jī)防火墻(filter表的INPUT鏈)。
2、局域網(wǎng)共享上網(wǎng)(nat表的POSTROUTING鏈)。半個(gè)路由器,NAT功能。
3、端口及IP映射(nat表的PREROUTING鏈),硬防的NAT功能。
4、IP一對(duì)一映射。

netfilter 中五個(gè)勾子函數(shù)和報(bào)文流向

Netfilter在內(nèi)核中選取五個(gè)位置放了五個(gè)hook(勾子) function(INPUT、OUTPUT、FORWARD、
PREROUTING、POSTROUTING),而這五個(gè)hook function向用戶開放,用戶可以通過一個(gè)命令工具
(iptables)向其寫入規(guī)則
由信息過濾表(table)組成,包含控制IP包處理的規(guī)則集(rules),規(guī)則被分組放在鏈(chain)上

三種報(bào)文流向

1)流入本機(jī):PREROUTING--> INPUT --> 用戶空間進(jìn)程
2)流出本機(jī):用戶空間進(jìn)程--> OUTPUT --> POSTROUTING
3)轉(zhuǎn)發(fā):PREROUTING -->FORWARD -->POSTROUTING

iptables組成

五表五鏈以及一些規(guī)則組成

鏈chain:
1)內(nèi)置鏈:每個(gè)內(nèi)置鏈對(duì)應(yīng)于一個(gè)鉤子函數(shù)
2)自定義鏈:用于對(duì)內(nèi)置鏈進(jìn)行擴(kuò)展或補(bǔ)充,可實(shí)現(xiàn)更靈活的規(guī)則組織管理機(jī)制;只有HOOK鉤子調(diào)用自定義鏈時(shí),才生效

五個(gè)內(nèi)置鏈chain
INPUT,OUTPUT,F(xiàn)ORWARD,PREROUTING,POSTROUTING

五個(gè)表 table:filter,nat,mangle,raw,security
1)filter:過濾規(guī)則表,根據(jù)預(yù)定義的規(guī)則過濾符號(hào)條件的數(shù)據(jù)包,默認(rèn)表
2)nat:network address translation地址轉(zhuǎn)換規(guī)則表
3)mangle:修改數(shù)據(jù)標(biāo)記位規(guī)則表
4)raw:關(guān)閉啟用的連接跟蹤機(jī)制,加快封包穿越防火墻速度
5)security:用于強(qiáng)制訪問控制(MAC)網(wǎng)絡(luò)規(guī)則,由Linux安全模塊(如SELINUX)實(shí)現(xiàn)

40062e82-f031-11ef-9310-92fbcf53809c.png

它們的優(yōu)先級(jí)由高到低的順序?yàn)椋?/p>

security---> raw---> mangle---> nat---> filter

內(nèi)核中數(shù)據(jù)包的傳輸過程

1)當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),數(shù)據(jù)包首先進(jìn)入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去
2)如果數(shù)據(jù)包是進(jìn)入本機(jī)的,數(shù)據(jù)包就會(huì)沿著圖向下移動(dòng),到達(dá)INPUT鏈。數(shù)據(jù)包到達(dá)INPUT鏈后,任何進(jìn)程都會(huì)收到它。本機(jī)上運(yùn)行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包經(jīng)過OUTPUT鏈,然后到達(dá)POSTROUTING鏈輸出
3)如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會(huì)向右移動(dòng),經(jīng)過FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出

范例,查看默認(rèn)的表

[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@localhost ~]# iptables -vnL -t filter
Chain INPUT (policy ACCEPT 24 packets, 1600 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 14 packets, 1784 bytes)
 pkts bytes target     prot opt in     out     source               destination

iptables規(guī)則添加時(shí)考量點(diǎn)

1)要實(shí)現(xiàn)哪種功能:判斷添加在哪張表上
2)報(bào)文流經(jīng)的路徑:判斷添加在哪個(gè)鏈上
3)報(bào)文的流向:判斷源和目的
4)匹配規(guī)則:業(yè)務(wù)需要

iptables常見的處理動(dòng)作:

1)內(nèi)建處理動(dòng)作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG...;其中最常用的只有,允許:ACCEPT,拋棄:DROP,拒絕:REJECT
2)自定義處理動(dòng)作:自定義chain,利用分類管理復(fù)雜情形;規(guī)則要添加在鏈上,才生效;添加在自定義鏈上不會(huì)自動(dòng)生效。
3)白名單:只有指定的特定主機(jī)可以訪問,其它全拒絕
4)黑名單:只有指定的特定主機(jī)拒絕訪問,其它全允許,默認(rèn)方式

因?yàn)镃entOS7,8都是Firewalls防火墻,所以需要關(guān)閉才能更好的使用iptables我們定義的防火墻規(guī)則

[root@localhost ~]# systemctl disable --now firewalld

iptables 用法說明

幫助:man 8 iptables

格式:

iptables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]

iptables命令格式詳解:

iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]]
-j targetname [per-target-options]

1、-t table:指定表

raw, mangle, nat, [filter]默認(rèn)

2、SUBCOMMAND:子命令

鏈管理類:

-N:new, 自定義一條新的規(guī)則鏈
-E:重命名自定義鏈;引用計(jì)數(shù)不為0的自定義鏈不能夠被重命名,也不能被刪除
-X:delete,刪除自定義的空的規(guī)則鏈
-P:Policy,設(shè)置默認(rèn)策略;對(duì)filter表中的鏈而言,其默認(rèn)策略有:ACCEPT:接受, DROP:丟棄

查看類:

-L:list,列出指定鏈上的所有規(guī)則,本選項(xiàng)需置后
-n:numberic,以數(shù)字格式顯示地址和端口號(hào)
-v:verbose,詳細(xì)信息
-vv:更詳細(xì)
-x:exactly,顯示計(jì)數(shù)器結(jié)果的精確值,而非單位轉(zhuǎn)換后的易讀值
--line-numbers:顯示規(guī)則的序號(hào)
-S selected,以iptables-save命令格式顯示鏈上規(guī)則

規(guī)則管理類:

-A:append,追加
-I:insert,插入,要指明插入至的規(guī)則編號(hào),默認(rèn)為第一條
-D:delete,刪除
   1)指明規(guī)則序號(hào)
   2)指明規(guī)則本身
-R:replace,替換指定鏈上的指定規(guī)則編號(hào)
-F:flush,清空指定的規(guī)則鏈
-Z:zero,置零
   iptables的每條規(guī)則都有兩個(gè)計(jì)數(shù)器
     1)匹配到的報(bào)文的個(gè)數(shù)
     2)匹配到的所有報(bào)文的大小之和

范例:

[root@localhost ~]# iptables -F OUTPUT

常用組合

-vnL
-vvnxL --line-numbers

范例

[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 177 packets, 12622 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 106 packets, 9596 bytes)
 pkts bytes target     prot opt in     out     source               destination 
 
[root@localhost ~]# iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 1606 packets, 3268K bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       22  1824 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
2        2   120 REJECT     all  --  *      *       172.31.0.18          0.0.0.0/0            reject-with icmp-port-unreachable
3        1    60 REJECT     all  --  *      *       172.31.0.7           0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 1338 packets, 98490 bytes)
num   pkts bytes target     prot opt in     out     source               destination 

匹配條件

1)基本:通用的,PARAMETERS
2)擴(kuò)展:需加載模塊,MATCH EXTENTIONS

擴(kuò)展動(dòng)作:

REJECT:--reject-with:icmp-port-unreachable默認(rèn)
RETURN:返回調(diào)用鏈
REDIRECT:端口重定向
LOG:記錄日志,dmesg
MARK:做防火墻標(biāo)記
DNAT:目標(biāo)地址轉(zhuǎn)換
SNAT:源地址轉(zhuǎn)換
MASQUERADE:地址偽裝
自定義鏈

iptables基本匹配條件

基本匹配條件:無需加載模塊,由iptables/netfilter自行提供

[!] -s, --source address[/mask][,...]:源IP地址或者不連續(xù)的IP地址
[!] -d, --destination address[/mask][,...]:目標(biāo)IP地址或者不連續(xù)的IP地址
[!] -p, --protocol protocol:指定協(xié)議,可使用數(shù)字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“
參看:/etc/protocols
[!] -i, --in-interface name:報(bào)文流入的接口;只能應(yīng)用于數(shù)據(jù)報(bào)文流入環(huán)節(jié),只應(yīng)用于INPUT、
FORWARD、PREROUTING鏈
[!] -o, --out-interface name:報(bào)文流出的接口;只能應(yīng)用于數(shù)據(jù)報(bào)文流出的環(huán)節(jié),只應(yīng)用于
FORWARD、OUTPUT、POSTROUTING鏈

范例:

準(zhǔn)備好一個(gè)可以訪問的網(wǎng)站頁(yè)面
[root@localhost ~]# yum install -y httpd;echo 172.31.0.17 > /var/www/html/index.html;systemctl start httpd

沒有添加iptables規(guī)則時(shí)其他機(jī)器可以訪問
[root@localhost ~]# curl 172.31.0.17
172.31.0.17

iptables設(shè)置
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 365 packets, 25579 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 215 packets, 23508 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@localhost ~]# iptables -A INPUT -s 172.31.0.18,172.31.0.7 -j REJECT
[root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT

添加完iptables規(guī)則后,只有本機(jī)可以訪問,被規(guī)則限制的ip不能訪問
[root@localhost ~]# curl 127.0.0.1
172.31.0.17

[root@localhost ~]# curl 172.31.0.17
curl: (7) Failed connect to 172.31.0.17:80; Connection refused

[root@sz-kx-centos8 ~]# curl 172.31.0.17
curl: (7) Failed to connect to 172.31.0.17 port 80: Connection refused

范例:添加某個(gè)固定ip并允許

[root@localhost ~]# iptables -A INPUT -s 172.31.0.1 -j ACCEPT

范例:添加某個(gè)固定ip并丟棄

[root@localhost ~]# iptables -A INPUT 1 -s 172.31.0.18 -j DROP

范例:添加整個(gè)網(wǎng)段并拒絕連接(謹(jǐn)慎使用)

[root@localhost ~]# iptables -A INPUT -s 172.31.0.0/16 -j REJECT

范例:在序號(hào)3插入

[root@localhost ~]# iptables -I INPUT 3 -s 172.31.0.100 -j ACCEPT
[root@localhost ~]# iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       22  1824 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
2      405 32145 ACCEPT     all  --  *      *       172.31.0.1           0.0.0.0/0           
3        0     0 ACCEPT     all  --  *      *       172.31.0.100         0.0.0.0/0           
4        2   120 REJECT     all  --  *      *       172.31.0.18          0.0.0.0/0            reject-with icmp-port-unreachable
5        1    60 REJECT     all  --  *      *       172.31.0.7           0.0.0.0/0            reject-with icmp-port-unreachable
6       40  2473 REJECT     all  --  *      *       172.31.0.0/16        0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 51 packets, 5936 bytes)
num   pkts bytes target     prot opt in     out     source               destination

范例:刪除序號(hào)3這條規(guī)則

[root@localhost ~]# iptables -D INPUT 3

范例:替換序號(hào)4的規(guī)則把拒絕替換成允許

[root@localhost ~]# iptables -R INPUT 4 -s 172.31.0.7 -j ACCEPT

范例:清空所有規(guī)則

[root@localhost ~]# iptables -F

范例:iptables默認(rèn)是黑名單,改成白名單

[root@localhost ~]# iptables -P INPUT DROP
# 實(shí)現(xiàn)效果如下:
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 48 packets, 4965 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 40 packets, 5824 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost ~]# iptables -A INPUT -s 172.31.0.17  -j ACCEPT
[root@localhost ~]# iptables -A INPUT -s 172.31.0.1  -j ACCEPT
[root@localhost ~]# iptables -A INPUT -s 172.31.0.1  -j REJECT
[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -vnL
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       172.31.0.17          0.0.0.0/0           
  103  6840 ACCEPT     all  --  *      *       172.31.0.1           0.0.0.0/0           
    0     0 REJECT     all  --  *      *       172.31.0.1           0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 21 packets, 2152 bytes)
 pkts bytes target     prot opt in     out     source               destination

規(guī)則優(yōu)化最佳實(shí)踐

1. 安全放行所有入站和出站的狀態(tài)為ESTABLISHED狀態(tài)連接,建議放在第一條,效率更高
2. 謹(jǐn)慎放行入站的新請(qǐng)求
3. 有特殊目的限制訪問功能,要在放行規(guī)則之前加以拒絕
4. 同類規(guī)則(訪問同一應(yīng)用,比如:http ),匹配范圍小的放在前面,用于特殊處理
5. 不同類的規(guī)則(訪問不同應(yīng)用,一個(gè)是http,另一個(gè)是mysql ),匹配范圍大的放在前面,效率更
高
6. 應(yīng)該將那些可由一條規(guī)則能夠描述的多個(gè)規(guī)則合并為一條,減少規(guī)則數(shù)量,提高檢查效率
7. 設(shè)置默認(rèn)策略,建議白名單(只放行特定連接)
     iptables -P,不建議,容易出現(xiàn)“自殺現(xiàn)象”
     規(guī)則的最后定義規(guī)則做為默認(rèn)策略,推薦使用,放在最后一條

iptables保存規(guī)則

以上命令都是臨時(shí)生效,持久保存規(guī)則需要如下操作:

方法一:

# 保存規(guī)則
[root@localhost ~]# iptables-save > /home/iptables.ruls

# 執(zhí)行導(dǎo)入保存的規(guī)則
[root@localhost ~]# iptables-restore < /home/iptables.ruls

寫入開機(jī)啟動(dòng)配置
[root@localhost ~]# vim /etc/rc.d/rc.local

iptables-restore < /home/iptables.ruls

# 加執(zhí)行權(quán)限
[root@localhost ~]# chmod +x /etc/rc.d/rc.local

方法二:(CentOS7,8)

# 安裝
[root@localhost ~]# yum install iptables-services

添加到配置文件里面
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables

啟動(dòng)
[root@localhost ~]# systemctl start iptables
設(shè)置開機(jī)啟動(dòng)
[root@localhost ~]# systemctl enable --now iptables

擴(kuò)展模塊的使用幫助:

CentOS 7,8: man iptables-extensions
CentOS 6: man iptables

iptables 在使用-p選項(xiàng)指明了特定的協(xié)議時(shí),無需再用-m選項(xiàng)指明擴(kuò)展模塊的擴(kuò)展機(jī)制,不需要手動(dòng)加
載擴(kuò)展模塊

tcp 協(xié)議的擴(kuò)展選項(xiàng)

[!] --source-port, --sport port[:port]:匹配報(bào)文源端口,可為端口連續(xù)范圍
[!] --destination-port,--dport port[:port]:匹配報(bào)文目標(biāo)端口,可為連續(xù)范圍
[!] --tcp-flags mask comp
   mask 需檢查的標(biāo)志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
   comp 在mask列表中必須為1的標(biāo)志位列表,無指定則必須為0,用,分隔tcp協(xié)議的擴(kuò)展選項(xiàng)

范例:

--tcp-flags SYN,ACK,FIN,RST SYN 表示要檢查的標(biāo)志位為SYN,ACK,FIN,RST四個(gè),其中SYN必
須為1,余下的必須為0,第一次握手
--tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手
#錯(cuò)誤包
--tcp-flags ALL ALL
--tcp_flags ALL NONE

[!] --syn:用于匹配第一次握手, 相當(dāng)于:--tcp-flags SYN,ACK,FIN,RST SYN

udp 協(xié)議的擴(kuò)展選項(xiàng)

[!] --source-port, --sport port[:port]:匹配報(bào)文的源端口或端口范圍
[!] --destination-port,--dport port[:port]:匹配報(bào)文的目標(biāo)端口或端口范圍

icmp 協(xié)議的擴(kuò)展選項(xiàng)

[!] --icmp-type {type[/code]|typename}
    type/code
      0/0 echo-reply icmp應(yīng)答
      8/0 echo-request icmp請(qǐng)求

范例:限制某個(gè)固定IP不能ssh端口遠(yuǎn)程連接,21:23是區(qū)間

[root@localhost ~]# iptables -A INPUT -s 172.31.0.7 -p tcp --dport 21:23 -j REJECT

范例:限制某個(gè)固定IP,icmp請(qǐng)求就拒絕

[root@localhost ~]# iptables -A INPUT -s 172.31.0.7 -p icmp --icmp-type 8 -j REJECT

隱式擴(kuò)展

# 在序號(hào)3插入一條允許固定ip訪問80端口
[root@localhost ~]# iptables -I INPUT 3 -s 172.31.0.7 -p tcp --dport 80 -j ACCEPT

范例:實(shí)現(xiàn)了本機(jī)能ping通某個(gè)ip,但是對(duì)方不能ping通本機(jī)

[root@localhost ~]# iptables -A INPUT -s 172.31.0.18 -p icmp --icmp-type 8 -j REJECT

multiport擴(kuò)展

以離散方式定義多端口匹配,最多指定15個(gè)端口

#指定多個(gè)源端口
[!] --source-ports,--sports port[,port|,port:port]...
# 指定多個(gè)目標(biāo)端口
[!] --destination-ports,--dports port[,port|,port:port]...
#多個(gè)源或目標(biāo)端
[!] --ports port[,port|,port:port]...

范例:使用multiport模塊拒絕訪問多個(gè)不連續(xù)的端口號(hào)

[root@localhost ~]# iptables -A INPUT -s 172.31.0.18 -p tcp -m multiport --dports 80,22,21 -j REJECT

iprange擴(kuò)展

指明連續(xù)的(但一般不是整個(gè)網(wǎng)絡(luò))ip地址范圍

[!] --src-range from[-to] 源IP地址范圍
[!] --dst-range from[-to] 目標(biāo)IP地址范圍

范例:拒絕某個(gè)網(wǎng)段的IP地址范圍

[root@localhost ~]# iptables -A INPUT -m iprange --src-range 172.31.0.1-172.31.0.7 -j REJECT

mac擴(kuò)展

mac 模塊可以指明源MAC地址,,適用于:PREROUTING, FORWARD,INPUT chains

[!] --mac-source XXXXXX:XX

范例:通過某臺(tái)機(jī)器的mac拒絕

[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:43:04:9b -j REJECT

string擴(kuò)展

對(duì)報(bào)文中的應(yīng)用層數(shù)據(jù)做字符串模式匹配檢測(cè)

--algo {bm|kmp} 字符串匹配檢測(cè)算法
   bm:Boyer-Moore
   kmp:Knuth-Pratt-Morris
--from offset 開始偏移
--to offset 結(jié)束偏移
[!] --string pattern 要檢測(cè)的字符串模式
[!] --hex-string pattern要檢測(cè)字符串模式,16進(jìn)制格式

范例:規(guī)則遇到相對(duì)應(yīng)的字符串就拒絕

[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "google" -j REJECT

time擴(kuò)展

注意:CentOS 8 此模塊有問題
根據(jù)將報(bào)文到達(dá)的時(shí)間與指定的時(shí)間范圍進(jìn)行匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] 時(shí)間
--timestop hh:mm[:ss]
[!] --monthdays day[,day...] 每個(gè)月的幾號(hào)
[!] --weekdays day[,day...] 星期幾,1 – 7 分別表示星期一到星期日
--kerneltz:內(nèi)核時(shí)區(qū)(當(dāng)?shù)貢r(shí)間),不建議使用,CentOS 7版本以上系統(tǒng)默認(rèn)為 UTC
注意: centos6 不支持kerneltz ,--localtz指定本地時(shí)區(qū)(默認(rèn))

范例:某個(gè)網(wǎng)段IP不能在某個(gè)時(shí)間拒絕訪問主機(jī)80端口

[root@localhost ~]# iptables -A INPUT -s 172.31.0.0/16 -d 172.31.0.17 -p tcp --dport 80 -m time --timestart 16:00 --timestop 16:10  -j REJECT

connlimit擴(kuò)展

根據(jù)每客戶端IP做并發(fā)連接數(shù)數(shù)量匹配

可防止Dos(Denial of Service,拒絕服務(wù))攻擊

--connlimit-upto N #連接的數(shù)量小于等于N時(shí)匹配
--connlimit-above N #連接的數(shù)量大于N時(shí)匹配

范例:連接數(shù)超過2個(gè)就拒絕

[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT

limit擴(kuò)展

基于收發(fā)報(bào)文的速率做匹配 , 令牌桶過濾器

--limit-burst number #前多少個(gè)包不限制
--limit #[/second|/minute|/hour|/day]

范例:前5個(gè)請(qǐng)求包不限制,后續(xù)每1分鐘10個(gè),其他不符合規(guī)則執(zhí)行下面的

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p icmp -j REJECT

state擴(kuò)展

state 擴(kuò)展模塊,可以根據(jù)”連接追蹤機(jī)制“去檢查連接的狀態(tài),較耗資源

conntrack機(jī)制:追蹤本機(jī)上的請(qǐng)求和響應(yīng)之間的關(guān)系

狀態(tài)類型:

NEW:新發(fā)出請(qǐng)求;連接追蹤信息庫(kù)中不存在此連接的相關(guān)信息條目,因此,將其識(shí)別為第一次發(fā)
出的請(qǐng)求
ESTABLISHED:NEW狀態(tài)之后,連接追蹤信息庫(kù)中為其建立的條目失效之前期間內(nèi)所進(jìn)行的通信
狀態(tài)
RELATED:新發(fā)起的但與已有連接相關(guān)聯(lián)的連接,如:ftp協(xié)議中的數(shù)據(jù)連接與命令連接之間的關(guān)
系
INVALID:無效的連接,如flag標(biāo)記不正確
UNTRACKED:未進(jìn)行追蹤的連接,如:raw表中關(guān)閉追蹤

記錄舊信息路徑

[root@localhost ~]# cat /proc/net/nf_conntrack

范例:老用戶允許連接,新用戶拒絕連接

[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
[root@localhost ~]# iptables -A INPUT -m state --state NEW -j REJECT

范例:本機(jī)可以訪問172.31.0.18,但是172.31.0.18不能訪問本機(jī)

[root@localhost ~]# iptables -A INPUT -s 172.31.0.18 -m state --state NEW -j REJECT

連接數(shù)測(cè)試案例:

# 連接數(shù)給一個(gè)最少的數(shù)值
[root@localhost ~]# echo 1 > /proc/sys/net/netfilter/nf_conntrack_max

# 查看日志
[root@localhost ~]# tail -f /var/log/messages
May  8 16:34:27 localhost kernel: nf_conntrack: table full, dropping packet
May  8 16:34:28 localhost kernel: nf_conntrack: table full, dropping packet
...

# 建議修改適當(dāng)加大連接數(shù)
[root@localhost ~]# echo 655350 > /proc/sys/net/netfilter/nf_conntrack_max

Target

target 包括以下類型

自定義鏈, ACCEPT, DROP, REJECT,RETURN,LOG,SNAT,DNAT,REDIRECT,MASQUERADE
LOG:非中斷target,本身不拒絕和允許,放在拒絕和允許規(guī)則前,并將日志記錄在/var/log/messages系
統(tǒng)日志中
--log-level level 級(jí)別: debug,info,notice, warning, error, crit, alert,emerg
--log-prefix prefix 日志前綴,用于區(qū)別不同的日志,最多29個(gè)字符

范例:某個(gè)網(wǎng)段訪問80,21:23端口的在日志重新生成日志并打印出來到系統(tǒng)日志,提示語句開頭new connections:

[root@localhost ~]# iptables -A INPUT -s 172.31.0.0/16 -p tcp -m multiport --dports 80,21:23 -m state --state NEW -j LOG --log-prefix "new connections: "

查看日志
[root@localhost ~]# tail -f /var/log/messages 
May  8 15:34:30 localhost systemd: Started Vsftpd ftp daemon.
May  8 16:01:01 localhost systemd: Started Session 470 of user root.
 full, dropping packet

May  8 16:55:20 localhost kernel: new connections: IN=eth0 OUT= MAC=00:0c:29:51:7200:0c:29:43:04:9b:08:00 SRC=172.31.0.18 DST=172.31.0.17 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=60599 DF PROTO=TCP SPT=35722 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0

規(guī)則優(yōu)化最佳實(shí)踐

1. 安全放行所有入站和出站的狀態(tài)為ESTABLISHED狀態(tài)連接,建議放在第一條,效率更高
2. 謹(jǐn)慎放行入站的新請(qǐng)求
3. 有特殊目的限制訪問功能,要在放行規(guī)則之前加以拒絕
4. 同類規(guī)則(訪問同一應(yīng)用,比如:http ),匹配范圍小的放在前面,用于特殊處理
5. 不同類的規(guī)則(訪問不同應(yīng)用,一個(gè)是http,另一個(gè)是mysql ),匹配范圍大的放在前面,效率更
高
6. 應(yīng)該將那些可由一條規(guī)則能夠描述的多個(gè)規(guī)則合并為一條,減少規(guī)則數(shù)量,提高檢查效率
7. 設(shè)置默認(rèn)策略,建議白名單(只放行特定連接)
     iptables -P,不建議,容易出現(xiàn)“自殺現(xiàn)象”
     規(guī)則的最后定義規(guī)則做為默認(rèn)策略,推薦使用,放在最后一條

iptables保存規(guī)則

以上命令都是臨時(shí)生效,持久保存規(guī)則需要如下操作:

方法一:

# 保存規(guī)則
[root@localhost ~]# iptables-save > /home/iptables.ruls

# 執(zhí)行導(dǎo)入保存的規(guī)則
[root@localhost ~]# iptables-restore < /home/iptables.ruls

寫入開機(jī)啟動(dòng)配置
[root@localhost ~]# vim /etc/rc.d/rc.local

iptables-restore < /home/iptables.ruls

# 加執(zhí)行權(quán)限
[root@localhost ~]# chmod +x /etc/rc.d/rc.local

方法二:(CentOS7,8)

# 安裝
[root@localhost ~]# yum install iptables-services

添加到配置文件里面
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables

啟動(dòng)
[root@localhost ~]# systemctl start iptables
設(shè)置開機(jī)啟動(dòng)
[root@localhost ~]# systemctl enable --now iptables

鏈接:https://www.cnblogs.com/xuanlv-0413/p/14748275.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11378

    瀏覽量

    211339
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5065

    瀏覽量

    88458
  • 防火墻
    +關(guān)注

    關(guān)注

    0

    文章

    422

    瀏覽量

    35829

原文標(biāo)題:網(wǎng)絡(luò)工程師必備:拆解iptables四表五鏈底層架構(gòu)與防御實(shí)戰(zhàn)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    Linux系統(tǒng)iptables和firewall防火墻的配置方法

    防火墻就是根據(jù)系統(tǒng)管理員設(shè)定的規(guī)則來控制數(shù)據(jù)包的進(jìn)出,主要是保護(hù)內(nèi)網(wǎng)的安全,目前 Linux 系統(tǒng)的防火墻類型主要有兩種:分別是 [iptables] 和 firewalld
    發(fā)表于 07-17 10:34 ?1496次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)<b class='flag-5'>iptables</b>和firewall<b class='flag-5'>防火墻</b>的配置方法

    Linux中使用Iptables實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)站防火墻

    Linux中使用Iptables實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)站防火墻可以幫助我們保護(hù)服務(wù)器不受到惡意請(qǐng)求的攻擊。一個(gè)現(xiàn)實(shí)的場(chǎng)景是我們想要阻止某個(gè)IP地址訪問我們的網(wǎng)站。
    發(fā)表于 09-22 10:11 ?893次閱讀
    <b class='flag-5'>Linux</b>中使用<b class='flag-5'>Iptables</b>實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)站<b class='flag-5'>防火墻</b>

    Linux內(nèi)核防火墻netfilter的原理和應(yīng)用

    Linux內(nèi)核防火墻netfilter的原理和應(yīng)用在分析ipchains缺陷的基礎(chǔ)上,著重介紹了Linux2.4版內(nèi)核防火墻netfilter的結(jié)構(gòu)框架、數(shù)據(jù)包的處理過程及配置工具
    發(fā)表于 09-19 09:22

    linux防火墻

    本帖最后由 spotaku 于 2017-10-2 10:39 編輯 我們知道,linux防火墻本質(zhì)上就是一個(gè)包過濾程序,而我們常用的tcpdump工具可以過濾出來你想要抓取的數(shù)據(jù)包
    發(fā)表于 09-05 00:47

    linux防火墻

    本帖最后由 spotaku 于 2017-10-2 10:38 編輯 我們知道,linux防火墻本質(zhì)上就是一個(gè)包過濾程序,而我們常用的tcpdump工具可以過濾出來你想要抓取的數(shù)據(jù)包
    發(fā)表于 09-06 01:04

    Linux下關(guān)閉防火墻的關(guān)閉及開放端口

    :service iptables stop3.查看防火墻狀態(tài)serviceiptablesstatus重啟服務(wù)service iptables restart實(shí)現(xiàn)配置文件及時(shí)生效source文件路徑
    發(fā)表于 07-09 06:23

    Linux如何關(guān)閉防火墻

    1、查看防火墻規(guī)則vim /etc/sysconfig/iptables放開某個(gè)端口號(hào)不被防火墻攔截,適用于部署tomcat,nginx等之類的軟件
    發(fā)表于 07-12 06:31

    Linux防火墻入門教程分享

    合理的防火墻是你的計(jì)算機(jī)防止網(wǎng)絡(luò)入侵的第一道屏障。你在家里上網(wǎng),通?;ヂ?lián)網(wǎng)服務(wù)提供會(huì)在路由中搭建一層防火墻。當(dāng)你離開家時(shí),那么你計(jì)算機(jī)上的那層防火墻就是僅有的一層,所以配置和控制好你 Linu
    發(fā)表于 12-28 06:54

    請(qǐng)問如何自動(dòng)加載iptables防火墻規(guī)則?

    系統(tǒng)啟動(dòng)后,如何自動(dòng)加載iptables防火墻規(guī)則?
    發(fā)表于 01-07 08:46

    基于Linux防火墻技術(shù)研究

    介紹了防火墻的基本概念及其主要功能,分析了Linux 內(nèi)核防火墻Netfilter 的架構(gòu)、構(gòu)建防火墻的工作原理及其與內(nèi)核的交互.最后給出了Netfilter 構(gòu)建
    發(fā)表于 06-10 14:40 ?15次下載

    基于Linux防火墻的可視化管理系統(tǒng)的研究與實(shí)現(xiàn)

    針對(duì)Iptables 命令配置防火墻規(guī)則的復(fù)雜性,本系統(tǒng)研究和實(shí)現(xiàn)了基于linux 防火墻的可視化管理系統(tǒng)。關(guān)鍵詞:Iptables;
    發(fā)表于 07-16 08:47 ?16次下載

    Linux新型內(nèi)核防火墻研究和應(yīng)用

    Linux新型防火墻netfilter框架原理及工作機(jī)制基礎(chǔ)上,研究了該防火墻的應(yīng)用設(shè)計(jì), 提出了用netfilter/iptables構(gòu)建門戶服務(wù)器
    發(fā)表于 08-25 11:35 ?14次下載

    如何列出和刪除防火墻規(guī)則UFW

    UFW意為簡(jiǎn)單的防火墻,是用于管理iptables/netfilter防火墻規(guī)則的用戶友好的前端。
    的頭像 發(fā)表于 12-06 17:52 ?7463次閱讀

    Linux防火墻配置(iptables和firewalld)

    防火墻就是根據(jù)系統(tǒng)管理員設(shè)定的規(guī)則來控制數(shù)據(jù)包的進(jìn)出,主要是保護(hù)內(nèi)網(wǎng)的安全,目前 Linux 系統(tǒng)的防火墻類型主要有兩種:分別是 [iptables] 和 firewalld
    的頭像 發(fā)表于 03-31 10:09 ?1181次閱讀

    硬件防火墻軟件防火墻區(qū)別

    電子發(fā)燒友網(wǎng)站提供《硬件防火墻軟件防火墻區(qū)別.doc》資料免費(fèi)下載
    發(fā)表于 10-21 11:03 ?1次下載

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品