網站首頁 編程語言 正文
Iptables防火墻tcp-flags模塊擴展匹配規則
tcp-flags模塊的作用是判斷TCP協議數據報文標志位的返回值的,在TCP的三次握手中,第一次握手客戶端向服務器發送syn=1的數據報文,第二次握手服務端向客戶端發送sync和ack=1的報文,第三次握手客戶端向服務端發送ack=1的報文。
tcp-flags模塊就是來判斷發送報文中指定的標志位是否等于1,并且該條報文中只包含指定的標志位,否則就拒絕通行,例如我們指定的標志位是SYN,那么該條報文中就只能包含SYNC,如果再包含ACK,那么就不放行,并且標志位的值要為1。
**案例:**
只允許其他客戶端發送TCP請求報文到本機,本機響應可以,但是本機不可向其他主機發送TCP請求報文。
- 首先來分析,"只允許其他客戶端發送TCP請求到本機",根據這句話可以明確是在INPUT鏈添加相應的規則,客戶端發起請求一共需要發送2次TCP握手,分別是第一次握手和第三次握手,通過tcp-flags模塊確保客戶端發送的報文中標志位都是正確的,需要在INPUT鏈添加3條規則,第一條規則是匹配客戶端發送的報文中是否只包含syn標志位,并且值是否等于1,第二條規則是匹配客戶端發送的報文中是否只包含ack,并且值是否等于1,如果這兩條規則都滿足,那么就說明是客戶端向服務端發送的請求,最終的動作是允許,第三條規則是拒絕其他標志位的TCP連接請求。
- 然后來分析"本機只可以響應客戶端發起的TCP請求,但是本機不可以向其他客戶端發送請求",根據這句話可以明確出規則是要添加在OUTPUT鏈的,我們只需要在OUTPUT鏈添加上第二次握手所包含的TCP標志位的規則,完成響應客戶端的TCP連接請求,最后在添加一條規則,禁止其他的TCP標志位從OUTPUT鏈發出,也就可以拒絕本機向其他的客戶端發起TCP請求。
tcp-flags模塊使用的命令格式:--tcp-flags {標志位集合} {要判斷哪個標志位等于1}
1)編寫具體的防火墻規則
1.添加允許客戶端向本機發起TCP請求的規則
#syn=1的標志位規則
[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的標志位規則
[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.添加本機響應客戶端TCP連接請求以及拒絕發起TCP請求的規則
#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)查看設置的防火墻規則
[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)查看效果
本機無法發起TCP連接請求。
其他主機可以向本機發起TCP連接。
原文鏈接:https://juejin.cn/post/7130083966907842596
相關推薦
- 2022-07-27 使用Docker將容器打成鏡像的方法步驟_docker
- 2022-05-06 C++提取文件名與提取XML文件的方法詳解_C 語言
- 2022-04-02 Kotlin中的contract到底有什么用詳解_Android
- 2022-07-16 TritonObjDet新增要素的方法
- 2022-08-06 C語言詳解關鍵字sizeof與unsigned及signed的用法_C 語言
- 2022-12-15 Python爬蟲庫urllib的使用教程詳解_python
- 2022-05-09 PyTorch實現線性回歸詳細過程_python
- 2023-03-20 C#?BeginInvoke實現異步編程方式_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支