iptables限制带宽

一、参考

The Beginner’s Guide to iptables, the Linux Firewall

Iptables Tutorial – Securing Ubuntu VPS with Linux Firewall

Per-IP rate limiting with iptables

Limit outgoing bandwidth on an specific interface

二、iptables介绍

简单说来,iptables就是一个Linux系统的防火墙应用,它使用table监控服务器发出或者接收的流量,这些表包含规则链chain,规则链中包含有多条规则rule set, 利用这些规则过滤发出或者接收的数据包

当检测到某个数据包满足规则时候,这个数据包被指定给一个目标target,目标可以有下列选项:
(1) accept -- 允许数据包通过
(2) drop -- 不让数据包通过
(3) return -- 阻止数据包穿过这个规则链,告知其返回到前一个规则链
(4) 规则链名称,即该数据包转到另外一个规则链

常用的三条规则链:
(1) input -- 过滤服务器接收的数据包
(2) forward -- 过滤通过服务器转发的数据包
(3) output -- 过滤服务器发出的数据包

2.1 安装

sudo apt-get install iptables

sudo yum install iptables

可以通过命令 sudo iptables -L -v 查看当前iptables配置状态, 其中 -L表示列出(list)所有的规则, -v表示详细展示信息

iptables限制带宽_第1张图片

由上可得,现在所有的规则链都是accept,并且现在还没有规则,这样是不安全的,因为任何数据包都可以通过服务器。

2.2 定义规则

如果需要添加规则,需要在iptables命令后面紧跟参数-A
添加一条规则,还可以指定下面的参数

(1) -i, 表示interface网卡,要过滤经过哪个网卡的数据包,例如: eno1, eth0等等;

(2) -p, 表示protocol协议,过滤哪些协议产生的ip数据包(主要是传输层协议, 例如: tcp, udp, icmp等等,可以使用all表示所有的协议)

(3) -s, 表示source,数据包中的源地址,可以使用主机名或者IP地址

(4) -sport, 表示source port, 数据包中的源端口号
(5) -d, 表示destination, 数据包中的目标地址
(6) -dport, 表示destination port, 数据包中的目标端口,例如: 22(ssh), 443(https) 等等
(7) -j,表示jump转发到其他target, target选项上面已经列出,主要是accept, drop, return, 其他chain, 需要注意,每一条规则必须要有-j参数

下面是一条规则的格式
sudo iptables -A -i -p -s --dport   -j

2.3 规则示例

2.3.1 允许所有本机上的数据包

sudo iptables -A INPUT -i lo -j ACCEPT

当本地通信时候,例如:访问本机的数据库或者web应用,需要通过网卡 lo, lookback,设置所有经过lo网卡的数据包accept,即可以使得本地访问数据库或者web应用正常

2.3.2 开放特定端口

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

由上,开放了80, http, 443, https, 22, ssh3个端口,即表示对应的三种服务可以正常运行

2.3.3 指定IP范围

sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

iptables -A INPUT -d 192.168.1.5,192.168.1.6 -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

IP范围有3种方式:
(1) 192.168.1.100-192.168.1.200,通过连字符指定IP范围
(2) 通过逗号指定多个IP地址
(3) 通过子网段(子网掩码)实现

2.3.4 拒绝其他数据包

sudo iptables -A INPUT -j DROP

通过上面规则和2.3.2中规则,可以实现只允许指定应用可以访问服务器

2.4 删除规则

2.4.2 删除所有规则

sudo iptables -F

由上,F表示flush删除所有规则

2.4.3 删除特定规则

iptables限制带宽_第2张图片

首先,需要使用
sudo iptables -L --line-numbers -v -n

查看各个规则链具体情况,例如上图,可以看到input规则链有1条规则,output规则链有2条规则

然后,使用
sudo iptables -D INPUT 1
删除具体规则链(INPUT)的具体规则(1)

2.5 规则持久化

上面定义删除规则,都是在内存中实现,即如果重启机器,规则将不存在,可以使用
/usr/sbin/iptables-save
将内存中现有规则保存到iptalbes的配置文件中(/etc/sysconfig/iptables)

通过规则持久化命令,可以禁用iptables,只需要执行

sudo iptables -F
sudo /sbin/iptables-save

你可能感兴趣的:(iptables,带宽,网速)