centos 限制用户ip的速率
linux netstat命令:网络状态查看命令
我们需要先简单了解一下端口的作用。在互联网中,如果 IP 地址是 IP 服务器在互联网中唯一的地址标识,那么大家可以想象一下:我有一台服务器,它有固定的公网 IP 地址,通过 IP 地址可以找到我的服务器。但是我的服务器中既启动了网页服务(Web 服务),又启动了文件传输服务(FTP 服务),那么你的客户端访问我的服务器,到底应该如何确定你访问的是哪一个服务呢?
端口就是用于网络通信的接口,是数据从传输层向上传递到应用层的数据通道。我们可以理解为每个常规服务都有默认的端口号,通过不同的端口号,我们就可以确定不同的服务。也就是说,客户端通过 IP 地址访问到我的服务器,如果数据包访问的是 80 端口,则访问的是 Web 服务;而如果数据包访问的是 21 端口,则访问的是 FTP 服务。
我们可以简单地理解为每个常规服务都有一个默认端口(默认端口可以修改),这个端口是所有人都知道的,客户端可以通过固定的端口访问指定的服务。而我们通过在服务器中查看已经开启的端口号,就可以判断服务器中开启了那些服务。
netstat 是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。netstat 命令的基本信息如下。
- 命令名称:netstat。
- 英文原意:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships。
- 所在路径:/bin/netstat.
- 执行权限:所有用户。
- 功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员。
命令格式如下:
[root@localhost ~]# netstat [选项]
选项:
- -a:列出所有网络状态,包括 Socket 程序;
- -c秒数:指定每隔几秒刷新一次网络状态;
- -n:使用 IP 地址和端口号显示,不使用域名与服务名;
- -p:显示 PID 和程序名;
- -t:显示使用 TCP 协议端口的连接状况;
- -u:显示使用 UDP 协议端口的连接状况;
- -I:仅显示监听状态的连接;
- -r:显示路由表;
【例 1】查看本机开启的端口。
这是本机最常用的方式,使用选项"-tuln"。因为使用了"-I"选项,所以只能看到监听状态的连接,而不能看到已经连接状态的连接。例如:
[root@localhost ~]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0:::11211 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:11211 0.0.0.0:*
udp 0 0:::11211 :::*
#协议接收队列发送队列本机的 IP 地址及端口号 远程主机的 IP 地址及端口号 状态
这个命令的输出较多。
1) Proto:网络连接的协议,一般就是 TCP 协议或者 UDP 协议。
2) Recv-Q:表示接收到的数据,已经在本地的缓冲中,但是还没有被进程取走。
3) Send-Q:表示从本机发送,对方还没有收到的数据,依然在本地的缓冲中,不具备 ACK 标志的数据包。
4) Local Address:本机的 IP 地址和端口号。
5) ForeignAddress:远程主机的 IP 地址和端口号。
6) State:状态。常见的状态主要有以下几种。
- -LISTEN:监听状态,只有 TCP 协议需要监听,而 UDP 协议不需要监听。
- -ESTABLISHED:已经建立连接的状态。如果使用"-I"选项,则看不到已经建立连接的状态。
- -SYN_SENT:SYN 发起包,就是主动发起连接的数据包。
- -SYN_RECV:接收到主动连接的数据包。
- -FIN_WAIT1:正在中断的连接。
- -FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
- -TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
- -CLOSED:套接字没有被使用。
在这些状态中,我们最常用的就是 LISTEN 和 ESTABLISHED 状态,一种代表正在监听,另一种代表已经连接。
【例 2】查看本机有哪些程序开启的端口。
如果使用"-p"选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的 PID。例如:
[root@localhost ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2359/mysqld
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 1563/memcached
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1490/sshd
tcp 0 0 :::11211 :::* LISTEN 1563/memcached
tcp 0 0 :::80 :::* LISTEN 21025/httpd
tcp 0 0 :::22 :::*
LISTEN 1490/sshd
udp 0 0 0.0.0.0:11211 0.0.0.0:* 1563/memcached
udp 0 0:::11211 :::* 1563/memcached
#比之前的命令多了一个"-p"选项,结果多了可以知道是哪个程序占用了端口
【例 3】 查看所有连接。
使用选项"-an"可以查看所有连接,包括监听状态的连接(LISTEN)、已经建立连接状态的连接(ESTABLISHED)、Socke 程序连接等。因为连接较多,所以输出的内容有很多。例如:
[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 117.79.130.170:80 78.46.174.55:58815 SYN_RECV
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 117.79.130.170:22 124.205.129.99:10379 ESTABLISHED
tcp 0 0 117.79.130.170:22 124.205.129.99:11811 ESTABLISHED
...省略部分内容...
udp 0 0 0.0.0.0:11211 0.0.0.0:*
udp 0 0:::11211 :::*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ACC] STREAM LISTENING 9761 @/var/run/hald/dbus-fr41WkQn1C
…省略部分内容...
从"Active UNIX domain sockets"开始,之后的内容就是 Socke 程序产生的连接,之前的内容都是网络服务产生的连接。我们可以在"-an"选项的输出中看到各种网络连接状态,而之前的"-tuln"选项则只能看到监听状态。
=======================================================================
centos 的单ip流量控制-CentOS下利用iptables限速及限制每IP连接数
第一步:建立adsl连接,在系统设置——网络设置处有。在图形界面下很容易搞定。
第二步:打开IP转发和伪装(也就是路由与NAT)
1、作为根用户打开/etc/sysconfig/network文件,在文件增加以下一行: GATEWAYDEV=PPP0 这句话的作用是设定默认路由,有时没有也可
2、打开IP转发功能:打开/etc/sysctl.conf文件,修改net.ipv4.ip_forward=0一行,改0改为1
3、重启系统 第三步,设置iptables防火墙,决定那些IP能通过linux主机上网。 下面以允许 192.168.0.0网段为例:
(1)、打开终端在#字提示符下输入以下命令:
iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE #这句意思是伪装从pppo出去的
IP iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT #这句意思是转发来自192.168.0.0网段的通讯
iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT #这句意思是转发到达192.168.0.0网段的通讯
iptables -A FORWARD -s ! 192.168.0.0/24 -j DROP #这句意思是拒绝转发非192.168.0.0网段的通讯。
(2)、保存以上防火墙规则,以保证重启后还有效 输入下面命令 iptables-save > /etc/sysconfig/iptables 这样,你的linux路由器应该就能跑起来了。
PS: 所有命令都要区分大小写。 限速的实现:在linux中有专门限速的软件--tc,但TC的语法新手难以掌握,我们可以在防火墙上通过限定某个IP或某段IP在一秒内通过的数据包的 数量来限速。 下面以限制192.168.0.2这个IP的网速为例说说。 在桌面环境下打开/etc/syscofngi/iptables 有没有发现,刚才的设定全记录在这个文件里,现在做的就在这个文件里添加规则就得了。
1、先要找到filter
2、在filter下面一行增加以下两行
-A FORWARD -m limit -d 192.168.0.2 --limit 30/sec -j ACCEPT # 这句意思是限定每秒只转发30个到达192.168.0.2的数据包(约每秒45KB 一个数据包是1.5KB)
-A FORWARD -d 192.168.0.2 -j DROP #这句作用是超过限制的到达192.168.0.2的数据包不通过)
(3)、重启系统,限速就实现了。
(4)、限制上传速度也一样,把上面两条中的d 改为s就得了。 限制每ip连接数 ,内核 2.3以上,否则要打conlimit补丁,重编译内核。
iptables -I FORWARD -p tcp -s 192.168.0.0/24 -m connlimit --connlimit-above 20 -j REJECT
iptables -I INPUT -p tcp -s 192.168.0.0/24 -m connlimit --connlimit-above 20 -j REJECT
========================================================================
使用iptables给特定IP或端口限流
上篇文章《linux/VPS使用WonderShaper限制网卡上传/下载带宽速率》介绍了使用WonderShaper对服务器自身的上传带宽下载带宽进行限流,比较适合长期大量占用带宽而可能被IDC定义为服务滥用最终导致被停机的一种使用场景,可以有效的进行规避。今天主要记录下如何使用 iptables 对访问和请求的IP/端口进行限流或限制并发量,基于公平原则改善网络访问体验,并缓解CC攻击对服务器造成的影响。
限制指定端口并发数
首先输入命令service iptables stop
关闭iptables(注意:iptables可能会有问题,貌似在旧版本中不被认为是一个服务,而是防火墙)
限制端口并发数很简单,IPTABLES就能搞定了,假设你要限制端口8388
的IP
最大连接数为5
,两句话命令:
iptables -I INPUT -p tcp --dport 8388 -m connlimit --connlimit-above 5 -j DROP
iptables -I OUTPUT -p tcp --dport 8388 -m connlimit --connlimit-above 5 -j DROP
我再举个例子,比如你想限制从1024-10240
的端口
iptables -I INPUT -p tcp --dport 1024:10240 -m connlimit --connlimit-above 5 -j DROP
iptables -I OUTPUT -p tcp --dport 1024:10240 -m connlimit --connlimit-above 5 -j DROP
保存IPTABLES规则即可(service iptables save
),其他端口以此类推。
输入命令service iptables start
启动
最后用命令查看是否生效
iptables -L -n -v
限制指定端口传输速度
首先输入命令 service iptables stop
关闭 iptables
限制端口并发数很简单,IPTABLES就能搞定了,假设你要限制端口5037
的最大连接速度为60
个包每秒,两句话命令:
iptables -A INPUT -p tcp --sport 5037 -m limit --limit 60/s -j ACCEPT
iptables -A INPUT -p tcp --sport 5037 -j DROP
也就是限制每秒接受60个包,一般来说每个包大小为64—1518
字节(Byte)。
限制IP的访问速度
原理:每秒对特定端口进行速度控制,比如每秒超过700
个的数据包直接DROP
,从而限制特定端口的速度
iptables -A FORWARD -m limit -d 208.8.14.53 --limit 700/s --limit-burst 100 -j ACCEPT
iptables -A FORWARD -d 208.8.14.53 -j DROP
Linux/VPS下通过iptables限制流量,可通过以下脚本即可实现(首先需要将这台机器配置成网关)。下面给出一个脚本的简单示例:
#限制网段
for ((i = 1; i < 253; i++))
do
/sbin/iptables -A FORWARD -s 192.168.2.$i -m limit \ --limit 60/s -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.2.$i -j DROPdone
#限制单个ip
/sbin/iptables -A FORWARD -s 192.168.1.135/32 -m limit \ --limit 60/s -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.135/32 -j DROP #当流量小于60/s的时候,iptables 接受并转发。当流量大于60/s 的时候,iptables丢弃数据包
最后说一下如何解决防火墙重启后失败的问题
iptables-save >/etc/sysconfig/iptables
echo 'iptables-restore /etc/sysconfig/iptables' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
centos 限制用户ip的速率相关推荐
- Linux实战案例(4)CentOS清除用户登录记录和命令历史方法
CentOS清除用户登录记录和命令历史方法 清除登陆系统成功的记录 [root@localhost root]# echo > /var/log/wtmp //此文件默认打开时乱码,可查到ip等 ...
- centos普通用户修改文件权限_Linux实战014:Centos创建用户并添加root授权
刚收到在腾讯云申请的云服务器8台,现在准备分配给不同项目组来使用.为了确保系统及账号的安全,root账号不能直接给到他们.因为root的权限太大,任何的误操作就可能导致系统异常或者数据丢失找不回来.而 ...
- CentOS 7修改ip地址(详细)
CentOS 7修改ip地址 第一步,普通用户登录虚拟机 我们还可以查看一下网卡信息 ip addr 第二步,切换到root用户下(普通用户没有权限修改ip) su root 第三步,切换到/etc/ ...
- CentOS配置静态IP及连接Xshell
CentOS配置静态IP及连接Xshell 前言:本人在学习虚拟机连接Xshell过程中踩了很多坑,使得xshell连接虚拟机失败,经过一番努力最终完成连接,记录一下整个流程,包括静态ip地址配置,与 ...
- linux(Ubuntu/Centos) iproute 路由IP地址等命令集合,查看端口链接
原 linux(Ubuntu/Centos) iproute 路由IP地址等命令集合,查看端口链接 2017年03月20日 16:55:57 风来了- 阅读数:2291 标签: centoslinux ...
- go 通过nginx代理后获取用户ip
go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) {fmt.Println(r.Rem ...
- CentOS单用户模式登录方法:
CentOS单用户模式登录方法: 1.重启服务器,一直按 按↑键与↓键进入GRUB引导界面. 2.在出现GRUB引导画面时(CentOS(2.6.18-164**)),按字母e键,进入GRUB编辑状态 ...
- 获取用户Ip地址通用方法常见安全隐患 x-forwarded-for
分析过程 这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的. 一般朋友,都会看到如下通用获取IP地址方法. function getIP() { if (isset($_ ...
- 使用nginx后如何在web应用中获取用户ip及原理解释
http://www.iteye.com/topic/1124492 问题背景: 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用requ ...
最新文章
- 计算机网络学习笔记(16. 计算机网络与Internet发展历史)
- VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credenti--------------------------解决办法
- 双三次插值算法的C++实现与SSE指令优化
- X509证书信任管理器类的实现及应用
- 三大框架搭建项目常见问题QA整理
- echarts树图设置高亮
- prince和学生们侃侃而谈系列03
- 报错UnicodeDecodeError ‘gbk‘ codec can‘t decode byte 0x93 in position 7104 illegal multibyte sequence
- 常州刘国钧计算机专业,2020常州刘国钧高等职业技术学校的录取分数线
- 【Alpha】阶段第六次Scrum Meeting
- 引用“win10错误事件10016导致蓝屏重启的问题”这个文章
- 仅需1秒!搞定100万行数据:超强Python数据分析利器!掌握了吗!
- vim 复制一整行 复制多行
- Android NFC
- 一种基于OpenCV的三维重建实现方案
- 地理信息系统入门基础篇(二)---地图投影
- 积分中轮换对称性的本质
- 【产品经理】 产品经理进阶之路(五):用互联网思维来设计一把椅子
- alertdialog怎么水平排列_网图骗人?别墅挂画怎么挂都不好看?答案在这里
- 小米3G刷openwrt详解
热门文章
- java实践7索引之Hash索引、位图索引、倒排索引原理
- Ardunio开发实例-BME680传感器使用
- 微信H5拉起(跳转)微信小程序
- width:100%和width:inherit (实用,赞)
- Java学的好,工作不愁找
- 下载NVIDIA老版本驱动教程
- 支付宝统一下单支付接口(适用于H5、PC、APP)
- 超赞!的装机软件(我的推荐)
- 如何拍摄优质的餐饮宣传片之文案篇
- 题目:编写函数fin,其功能是计算:(ln(1)+ln(2)+1n(3).....+ln(m))平方根值,s作为函数值返回。