Iptables显式扩展

state:状态模块(结合nf_conntrack模块来实现的),可以匹配如下状态类型:

NEW:链的连接请求
ESTABLISHED:连接成功之后状态的数据包
INVALID:非法状态连接
RELATED:相关联的连接状态的数据包
-m state --state ESTABLISHED

例子:允许任意主机访问本地主机的80端口,要求能抵御反弹式木马攻击
# iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

iprange:对ip地址的范围进行匹配

--src-range
--dst-range

例子:允许让192.168.6.100-200范围的主机可以访问80端口,要求能抵御反弹式木马攻击
# iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -m iprange --src-range 192.168.6.100-192.168.6.200 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -m iprange --dst-range 192.168.6.100-192.168.6.200 -j ACCEPT

例子:只允许让192.168.6.100-200范围以外主机才能访问80端口
# iptables -A INPUT -p tcp --dport 80 -m iprange ! --src-range 192.168.6.100-192.168.6.200 -j ACCEPT

multiport:匹配离散或者连续的端口

--source-ports:匹配源端口
--destination-ports:匹配目的端口
--ports:匹配任意端口

例子:允许让192.168.6.100-200范围的主机可以访问804433389端口,要求能抵御反弹式木马攻击
# iptables -A INPUT -p tcp -m multiport --destination-ports 80,443,3389 -m state --state NEW,ESTABLISHED -m iprange --src-range 192.168.6.100-192.168.6.200 -j ACCEPT

connlimit:控制每个客户端IP的最大并发连接数

--connlimit-above n:匹配连接数量在n以上的连接所发送的数据包

例子:显示每个IP最多可以同时打开三个xshell
方式一:
# iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
# iptables -I INPUT -p tcp --dport 22 -j ACCEPT

方式二:
# iptables -I INPUT -p tcp --dport 22 -m connlimit ! --connlimit-above 3 -j ACCEPT

抵御DOS攻击:限制每个ip可以最多发起20个连接请求
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m connlimit ! --connlimit-above 20 -j ACCEPT
# iptables -A INPUT -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

limit:限制数据包的通过速度

--limit rate:指定速率
--limit-burst:峰值

例子:每分钟可以通过5个ping包,峰值为3个
# iptables -I INPUT -p icmp -m limit --limit 5/minute --limit-burst 3 -j ACCEPT

例子:对下载进行限时(200kb/s)

mac:对数据包中的源mac进行匹配

-m mac [!] --mac-source address

length:指定数据包的长度(字节)

-m length --length n

comment:用于添加注释

-m comment --comment 注释内容
# iptables -t filter -I INPUT -m iprange --src-range 10.4.7.10-10.4.7.30 -m comment --comment "iprange example" -j REJECT

string:对数据包中的字符串进行匹配

--algo {bm|kmp}:指定所使用的算法
--string:指定要匹配的字符

例子:禁止除了192.168.6.168以外其他的IP不能访问网站后台路径(/admin/login.php)
# iptables -A INPUT ! -s 192.168.6.168 -m string --algo bm --string 'login.php' -j DROP

例子:将数据包中包含"mingliang"字符串的数据包阻止
# iptables -A INPUT -m string --algo bm --string 'mingliang' -j DROP

recent:通过匹配规则来将满足规则的IP增加到一个动态ip列表中,这个ip列表相当于一个黑名单。也就是说列表中的IP禁止访问服务器

--name:指定黑名单文件名
--set:将满足条件的IP增加到黑名单文件中
--update:和--set组合使用,用来检测黑名单文件中是否存在此IP,如果存在,则重新计时
--rcheck:和--set组合使用,用来检测黑名单文件中是否存在此IP,如果存在,不会重新增加,也不会重新计时
--remove:从黑名单中移除ip
--seconds:指定时间(秒)
--hitcount:指定命中次数

例子:防暴力破解:限制客户端在1个小时内,只能尝试登录ssh 5次
# iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --rcheck --seconds 3600 --hitcount 5 -j DROP
# iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --set -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT

例子:为登录ssh设置一个口令(首先执行ping,才能登录ssh)
# iptables -A INPUT -p icmp --icmp-type 8 -m length --length 128 -m recent --name sshlogin --set -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name sshlogin --update --second 30 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT

# ping xxx -l 100(icmp包头28字节)
posted @   wanghongwei-dev  阅读(116)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示