日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用iptables进行流量控制

發(fā)布時間:2023/12/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用iptables进行流量控制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:19年搞的一個小玩意,懶得整理了,有時間的可以快速看看,趕時間的直接跳到第二部分

0X00?亂七八糟的資料收集

systemctl管理iptables服務(wù),yum remove iptables? ? yum install iptables-services? ?

保存規(guī)則的兩種方式:

service iptables save? /usr/libexec/iptables/iptables.init save

iptables -A INPUT -m limit -s 192.168.3.106 --limit 5/sec -j ACCEPT? 如果不加-s,限定是總速率

iptables -A INPUT -s 192.168.3.106 -j DROP

?

對于每個Client進行限速:

hashlimit的匹配是基于令牌桶 (Token bucket)模型的。令牌桶是一種網(wǎng)絡(luò)通訊中常見的緩沖區(qū)工作原理,它有兩個重要的參數(shù),令牌桶容量n和令牌產(chǎn)生速率s。我們可以把令牌當成是門票,而令牌桶則是負責制作和發(fā)放門票的管理員,它手里最多有n張令牌。一開始,管理員開始手里有n張令牌。每當一個數(shù)據(jù)包到達后,管理員就看看手里是否還有可用的令牌。如果有,就把令牌發(fā)給這個數(shù)據(jù)包,hashlimit就告訴iptables,這個數(shù)據(jù)包被匹配了。而當管理員把手上所有的令牌都發(fā)完了,再來的數(shù)據(jù)包就拿不到令牌了。這時,hashlimit模塊就告訴iptables,這個數(shù)據(jù)包不能被匹配。除了發(fā)放令牌之外,只要令牌桶中的令牌數(shù)量少于n,它就會以速率s來產(chǎn)生新的令牌,直到令牌數(shù)量到達n為止。通過令牌桶機制,即可以有效的控制單位時間內(nèi)通過(匹配)的數(shù)據(jù)包數(shù)量,又可以容許短時間內(nèi)突發(fā)的大量數(shù)據(jù)包的通過(只要數(shù)據(jù)包數(shù)量不超過令牌桶n)。

  hashlimit模塊提供了兩個參數(shù)--hashlimit和--hashlimit-burst,分別對應(yīng)于令牌產(chǎn)生速率和令牌桶容量。除了令牌桶模型外,hashlimit匹配的另外一個重要概念是匹配項。在hashlimit中,每個匹配項擁有一個單獨的令牌桶,執(zhí)行獨立的匹配計算。通過hashlimit的--hashlimit-mode參數(shù),你可以指定四種匹配項及其組合,即:srcip(每個源地址IP為一個匹配項),dstip(每個目的地址IP為一個匹配項),srcport(每個源端口為一個匹配項),dstport(每個目的端口為一個匹配項)

  除了前面介紹的三個參數(shù)外,hashlimit還有一個必須要用的參數(shù),即--hashlimit-name。 hashlimit會在/proc/net/ipt_hashlimit目錄中,為每個調(diào)用了hashlimit模塊的iptables 命令建立一個文件,其中保存著各匹配項的信息。--hashlimit-name參數(shù)即用來指定該文件的文件名。

iptables -A INPUT -p tcp --dport 22 -m hashlimit --hashlimit-name ssh --hashlimit 5/sec --hashlimit-burst 10 --hashlimit-mode srcip -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP

?

2.擴展匹配
2.1隱含擴展:對協(xié)議的擴展
-p tcp :TCP協(xié)議的擴展。一般有三種擴展
--dport XX-XX:指定目標端口,不能指定多個非連續(xù)端口,只能指定單個端口,比如
--dport 21? 或者 --dport 21-23 (此時表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的標志位(SYN,ACK,FIN,PSH,RST,URG)
??? 對于它,一般要跟兩個參數(shù):
?? ?1.檢查的標志位
?? ?2.必須為1的標志位
?? ?--tcpflags syn,ack,fin,rst syn?? =??? --syn
?? ?表示檢查這4個位,這4個位中syn必須為1,其他的必須為0。所以這個意思就是用于檢測三次握手的第一次包的。對于這種專門匹配第一包的SYN為1的包,還有一種簡寫方式,叫做--syn
-p udp:UDP協(xié)議的擴展
??? --dport
??? --sport
-p icmp:icmp數(shù)據(jù)報文的擴展
??? --icmp-type:
?? ?echo-request(請求回顯),一般用8 來表示
?? ?所以 --icmp-type 8 匹配請求回顯數(shù)據(jù)包
?? ?echo-reply (響應(yīng)的數(shù)據(jù)包)一般用0來表示

RETURN的用法,在子鏈中使用RETURN 會返回到上一層鏈,直到target為ACCPT或DEROP或REJECT,不然一直返回到父鏈中,匹配下一條規(guī)則。

匹配tcp第一次握手的報文

[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT[root@localhost ~]# iptables -t filter -nvxL INPUT Chain INPUT (policy ACCEPT 10 packets, 712 bytes)pkts bytes target prot opt in out source destination0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x3F/0x02 reject-with icmp-port-unreachable0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 10/min burst 5

–tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN 這個的意思是要匹配SYN,ACK,FIN,RST,URG,PSH這五個標志為,且SYN為1的報文

匹配tcp第二次握手的報文

[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT

上述可以簡寫成?
用ALL來表示SYN,ACK,FIN,RST,URG,PSH

[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN-j REJECT [root@localhost ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN,ACK -j REJECT

修改某條規(guī)則:

iptables -R INPUT 1 -s 192.168.0.1 -j DROP

清空所有規(guī)則:

iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t raw -F iptables -t raw -X

0X01?實現(xiàn)對總流量限制、TCP流量限制、SYN包限制、ACK包限制:

****本機程序訪問本機程序的數(shù)據(jù)包同樣會經(jīng)過INPUT鏈****

#!/bin/bash iptables -N all-chain # 用來限制總流量/IP iptables -N tcp-chain # 限制tcp流量/IP iptables -N SYN-chain # 限制SYN包流量/IP iptables -N ACK-chain # 限制ACK包流量/IPiptables -N all-limit # 限制總觸發(fā)閥值 iptables -N tcp-limit # 限制tcp總觸發(fā)閥值 iptables -N SYN-limit # 限制SYN總觸發(fā)閥值 iptables -N ACK-limit # 限制ACK總觸發(fā)閥值# INPUT-chain iptables -A INPUT -s 127.0.0.1 -j ACCEPT # 本機訪問本機的所有數(shù)據(jù)包放行iptables -A INPUT -j all-chain # 所有流量轉(zhuǎn)到all-chain處理iptables -A INPUT -j tcp-chain # tcp流量轉(zhuǎn)到tcp-chainiptables -A INPUT -p tcp --syn -j SYN-chain # 第一次發(fā)送的SYN包轉(zhuǎn)到SYN-chainiptables -A INPUT -p tcp --tcp-flags ALL ACK -j ACK-chain # 所有ACK包轉(zhuǎn)到ACK-chain# FORWARD-chain iptables -A FORWARD -s 127.0.0.1 -j ACCEPT # 本機訪問本機的所有數(shù)據(jù)包放行iptables -A FORWARD -j all-chain # 所有流量轉(zhuǎn)到all-chain處理iptables -A FORWARD -j tcp-chain # tcp流量轉(zhuǎn)到tcp-chainiptables -A FORWARD -p tcp --syn -j SYN-chain # 第一次發(fā)送的SYN包轉(zhuǎn)到SYN-chainiptables -A FORWARD -p tcp --tcp-flags ALL ACK -j ACK-chain # 所有ACK包轉(zhuǎn)到ACK-chain# all-chain總流量限制 iptables -A all-chain -j all-limit iptables -A all-chain -m hashlimit --hashlimit-name all-chain --hashlimit 300/sec --hashlimit-burst 300 --hashlimit-mode srcip -j RETURN # 日志記錄,限制每分鐘最多記錄三次,防止日志爆炸 iptables -A all-chain -m limit --limit 3/min -j LOG --log-prefix="Probable ddos:all-chain" iptables -A all-chain -j DROP# all-limit iptables -A all-limit -m limit --limit 10000/sec --limit-burst 5000 -j RETURN iptables -A all-limit -j DROP# tcp-chain總流量限制 iptables -A tcp-chain -j tcp-limit iptables -A tcp-chain -m hashlimit --hashlimit-name tcp-chain --hashlimit 80/sec --hashlimit-burst 80 --hashlimit-mode srcip -j RETURN iptables -A tcp-chain -m limit --limit 3/min -j LOG --log-prefix="Probable ddos:tcp-chain" iptables -A tcp-chain -j DROP# tcp-limit iptables -A tcp-limit -m limit --limit 100/sec --limit-burst 100 -j RETURN iptables -A tcp-limit -j DROP# SYN-chain總流量限制 iptables -A SYN-chain -j SYN-limit iptables -A SYN-chain -m hashlimit --hashlimit-name SYN-chain --hashlimit 30/sec --hashlimit-burst 30 --hashlimit-mode srcip -j ACCEPT iptables -A SYN-chain -m limit --limit 3/min -j LOG --log-prefix="Probable ddos:SYN-chain" iptables -A SYN-chain -j DROP# SYN-limit iptables -A SYN-limit -m limit --limit 25/sec --limit-burst 25 -j RETURN iptables -A SYN-limit -j DROP# ACK-chain總流量限制 iptables -A ACK-chain -j ACK-limit iptables -A ACK-chain -m hashlimit --hashlimit-name ACK-chain --hashlimit 30/sec --hashlimit-burst 30 --hashlimit-mode srcip -j ACCEPT iptables -A ACK-chain -m limit --limit 3/min -j LOG --log-prefix="Probable ddos:ACK-chain" iptables -A ACK-chain -j DROP# ACK-limit iptables -A ACK-limit -m limit --limit 25/sec --limit-burst 25 -j RETURN iptables -A ACK-limit -j DROP

設(shè)計思路:

?

****如何永久保存iptables規(guī)則****

1. systemctl stop firewalldsystemctl disable firewalld2. yum install iptables-services3. systemctl enable iptables4. systemctl restart iptables5. service iptables save默認保存路徑為 /etc/sysconfig/iptables iptables實現(xiàn)目的IP轉(zhuǎn)發(fā),利用nat表output鏈修改數(shù)據(jù)包目的ip地址iptables -t nat -A OUTPUT -d 192.168.2.9 -j DNAT --to-destination 192.168.2.10

?

總結(jié)

以上是生活随笔為你收集整理的使用iptables进行流量控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。