iptables使用详解(centos7)
小百菜
已于 2024-03-21 14:40:02 修改
阅读量7.2k
收藏 22
点赞数 2
文章标签: iptables 限速
版权
GitCode 开源社区
文章已被社区收录
加入社区
我们需要安装iptables-services,用来启动和停止iptables服务
防火墙配置文件 /etc/sysconfig/iptables
查询开启了那些内核模块
需要加载的模块
然后再检查下,现在有这些内核模块了
关闭firewalld,开启iptables
关闭firewalld
开启iptables
查询配置
用户请求来的时候,默认先从input链这里一行一行规则往下匹配,如果都没有匹配上了,就走input链后面的小括号里面的规则
清除所有规则,但不会清除默认规则
禁止访问 80 端口(指定端口)
未指定默认是filter表了;添加;在input链上;tcp协议,目标端口80;来访问了就drop丢掉
--dport 目标端口, -d 目标ip --sport源端口
-A添加规则;INPUT,我要在INPUT链中添加规则。
是需要指定端口还是ip呢,这里是 80 端口,指定端口的话一般要先指定协议(协议一般这里有tcp,udp,icmp,all就是所有),
端口在网络中一般有两种情况,ip也是有两种情况,就是目标端口,源端口,目标ip,源ip,
我这里是禁止访问 80 端口,也就是端口是目标端口,所以--dport 80;
需要禁止访问,那就是 -j DROP ,这个DROP要大写
如果我们只是想清除一条规则,可以先执行
查看到是第几条链,防止眼睛数错行。
这里是在INPUT链上的第一条规则,然后执行删除这条规则,这里的1就表示第1条规则。
禁止指定ip,访问本服务器指定端口
禁止指定ip,访问本服务器指定端口
禁止10.0.0.12访问服务器的80端口
防火墙四表五链,我们常用的是filter,nat表。我们常用的是filter表的INPUT,FORWARD,OUTPUT链;nat表的PREROUTING,POSTROUTING链,OUTPUT链
指定只能某个网段访问本服务器。(不是指定网段的拒绝掉)
指定只能某个网段访问本服务器。(不是指定网段的拒绝掉)
使用iptables实现禁止ping功能
ping使用的是 icmp协议
保存和恢复规则
iptables-save 保存当前防火墙到配置文件中,加上重定向,可以将防火墙规则导入到指定文件中备份起来
iptables-save 会把所有的打印出来,*后面显示表的名字;冒号后是默认的规则,再往下就是我们自己配置的规则
防火墙配置,实际保存的是如下文件中。可以看到和命令查询出来的差不多
如下保存防火墙规则到 iptRule.txt 文件中。
不小心把防火墙都误清除了,因为之前保存到配置里了,重启一下防火墙重新就出来了
iptables-restore无需重启防火墙,可以将备份导出来的防火墙规则,再导入回去
修改默认规则为drop,默认都不接受的做法
在修改默认策略为拒绝时,首先要提前做些准备。比如接受22端口访问
设置本地 lo网卡 通讯规则
这3条规则加好以后,如下图所示:
开放常用的端口:
-m参数指定扩展模块,通过multiport参数就可以同时指定多个不连续的端口号
修改默认规则
添加 ip 白名单
用who命令查看当前访问者的ip
添加 端口 白名单
添加ip和端口白名单
允许 192.168.111.201 访问服务器的8080端口
限速limit
iptables -I INPUT -p tcp --dport 8080 -m limit --limit=500/s --limit-burst=1000 -j ACCEPT
这条规则是:8080端口会对包的速率做匹配,也就是每秒只处理500个包,假如某一时刻进来700个包,只处理500个包,后面ACCEPT表示放行,也就是这500个包放行。
剩下的200个包不做处理,交给下一个规则处理。
初始的burst值是1000,表示刚开始1000个包不受500/s速率限制,当减为0时,就受500/s速率限制。
上面描述可能有问题,应该这样理解,这一条规则看作一个池子,里有1000个令牌,有数据流量进来先从池里取令牌,
取到令牌:根据后面的规则处理,由于是ACCEPT,所以放行允许数据包通过。
未取到令牌(数量为0):不做处理,下一条规则去处理。
假如池子里令牌数量减为0,就会触发--limit 500/s,以每秒500个令牌的速度像池里放令牌。
iptables -A INPUT -p tcp --dport 8080 -j DROP
这条规则是:这是对数据包进行丢弃
--limit 500/s 表示每秒500次; 1/m 则为每分钟一次
--limit-burst 表示允许触发 limit 限制的最大次数 (预设5)
这里的--limit-burst=1000相当于说最开始我有1000的可以匹配的包去处理,然后我匹配的包的个数是根据--limit=500/s进行处理的,
也就是每秒限制500个数据包,多余的会被下面符合要求的DROP规则去处理,去进行丢弃,这样就实现了对数据包的限速问题。
通过对上面的数据分析,可以知道,利用iptables进行限速主要是利用率iptables的limit模块对数据包进行匹配处理,从而实现限速的;
--limit=match,这个是限定了匹配包的速率,
换句话说就是每秒可以转发多少个数据包,这是对iptables做限速的最主要的参数,通过制定它就基本可以确定要控制的限制速率是多少;
--limit-burst是允许触发 limit 限制的最大次数,默认预设是5;
也就是说最开始的5个包会被直接转发,这时burst就会减为0,再来的包就会丢给下一条规则去处理(这里设定是DROP),直到limit参数产生新的令牌,才会继续去匹配转发。
简单来说限速最主要的就是limit和burst,
burst是最初有多少令牌可以去转发包,后面limit会进行按速率匹配,相当于按时间补充令牌数,
第一条规则达到速率上限就会把剩下的包丢给下一条规则去处理,我们下一条和它对应的就是DROP,所以会把剩下的包丢弃,从而实现了限速。
根据端口限速
根据ip限速
tcp头的标志位
握手阶段:SYN,ACK
传输数据阶段:PSH
挥手阶段:FIN,RST
使用wireshark在ssh客户端抓包,跟踪对应的tcp流
上图表示在第1次握手阶段,SYN标识为1,其他标识位如ACK,FIN,RST,URG,PSH都为0。
上图的下方可以看到 [TCP Flags: ··········S·],其中的"S"就表示SYN位,整体表示只有SYN位为1。用点.表示
上图表示在第2次握手阶段,SYN和ACK标识为1,其他标识位如FIN,RST,URG,PSH都为0。
上图的下方可以看到 [TCP Flags: ·······A··S·],表示只有ACK标志位与SYN标志位为1用点.表示0
上图为第3次握手阶段,ACK标识为1,其他标识位如SYN,FIN,RST,URG,PSH都为0。
完整的一个请求过程如下
客户端强制终止,异常标识
按照上面的标识,就可以拦截了,各个阶段的流量了。
命令参数
参考:
https://www.cnblogs.com/machangwei-8/p/15978257.html
https://www.cnblogs.com/ip99/p/15313691.html
标签:iptables,--,端口,centos7,详解,limit,规则,500 From: https://www.cnblogs.com/dcpower/p/18171244