網(wǎng)站首頁 編程語言 正文
Iptables防火墻tcp-flags模塊擴展匹配規(guī)則
tcp-flags模塊的作用是判斷TCP協(xié)議數(shù)據(jù)報文標志位的返回值的,在TCP的三次握手中,第一次握手客戶端向服務(wù)器發(fā)送syn=1的數(shù)據(jù)報文,第二次握手服務(wù)端向客戶端發(fā)送sync和ack=1的報文,第三次握手客戶端向服務(wù)端發(fā)送ack=1的報文。
tcp-flags模塊就是來判斷發(fā)送報文中指定的標志位是否等于1,并且該條報文中只包含指定的標志位,否則就拒絕通行,例如我們指定的標志位是SYN,那么該條報文中就只能包含SYNC,如果再包含ACK,那么就不放行,并且標志位的值要為1。
**案例:**
只允許其他客戶端發(fā)送TCP請求報文到本機,本機響應(yīng)可以,但是本機不可向其他主機發(fā)送TCP請求報文。
- 首先來分析,"只允許其他客戶端發(fā)送TCP請求到本機",根據(jù)這句話可以明確是在INPUT鏈添加相應(yīng)的規(guī)則,客戶端發(fā)起請求一共需要發(fā)送2次TCP握手,分別是第一次握手和第三次握手,通過tcp-flags模塊確保客戶端發(fā)送的報文中標志位都是正確的,需要在INPUT鏈添加3條規(guī)則,第一條規(guī)則是匹配客戶端發(fā)送的報文中是否只包含syn標志位,并且值是否等于1,第二條規(guī)則是匹配客戶端發(fā)送的報文中是否只包含ack,并且值是否等于1,如果這兩條規(guī)則都滿足,那么就說明是客戶端向服務(wù)端發(fā)送的請求,最終的動作是允許,第三條規(guī)則是拒絕其他標志位的TCP連接請求。
- 然后來分析"本機只可以響應(yīng)客戶端發(fā)起的TCP請求,但是本機不可以向其他客戶端發(fā)送請求",根據(jù)這句話可以明確出規(guī)則是要添加在OUTPUT鏈的,我們只需要在OUTPUT鏈添加上第二次握手所包含的TCP標志位的規(guī)則,完成響應(yīng)客戶端的TCP連接請求,最后在添加一條規(guī)則,禁止其他的TCP標志位從OUTPUT鏈發(fā)出,也就可以拒絕本機向其他的客戶端發(fā)起TCP請求。
tcp-flags模塊使用的命令格式:--tcp-flags {標志位集合} {要判斷哪個標志位等于1}
1)編寫具體的防火墻規(guī)則
1.添加允許客戶端向本機發(fā)起TCP請求的規(guī)則
#syn=1的標志位規(guī)則
[root@jxl-1 ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT
#ack=1的標志位規(guī)則
[root@jxl-1 ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST ACK -j ACCEPT
#其余的報文都拒絕
[root@jxl-1 ~]# iptables -t filter -A INPUT -j DROP
2.添加本機響應(yīng)客戶端TCP連接請求以及拒絕發(fā)起TCP請求的規(guī)則
#syn和ack都等于1
[root@jxl-1 ~]# iptables -t filter -I OUTPUT -p tcp --sport 22 -m tcp --tcp-flags SYN,ACK,FIN,RST SYN,ACK -j ACCEPT
#ack-1
[root@jxl-1 ~]# iptables -t filter -I OUTPUT -p tcp --sport 22 -m tcp --tcp-flags SYN,ACK,FIN,RST ACK -j ACCEPT
#其余的報文全部拒絕
[root@jxl-1 ~]# iptables -t filter -A OUTPUT -j DROP
2)查看設(shè)置的防火墻規(guī)則
[root@jxl-1 ~]# iptables -L -n -v --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 82 6416 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x10
2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02
3 5169 1958K DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 41 4348 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:22 tcp flags:0x17/0x10
2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:22 tcp flags:0x17/0x12
3 293 65316 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
3)查看效果
本機無法發(fā)起TCP連接請求。
其他主機可以向本機發(fā)起TCP連接。
原文鏈接:https://juejin.cn/post/7130083966907842596
相關(guān)推薦
- 2022-12-29 React引入css的三種方式小結(jié)_React
- 2023-03-21 Flutter?web?bridge?通信總結(jié)分析詳解_Android
- 2022-04-09 Eclipse 中Deployment Assembly 無法正常顯示
- 2022-06-16 利用Jetpack?Compose實現(xiàn)繪制五角星效果_Android
- 2022-05-12 Android uniapp項目接入實例、uniapp混合開發(fā)踩坑手冊、uniapp Android
- 2022-05-27 C++?超詳細分析多態(tài)的原理與實現(xiàn)_C 語言
- 2022-08-29 .NET?Core獲取配置文件內(nèi)容_實用技巧
- 2022-05-03 C#設(shè)計模式之簡單工廠模式_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支