linux限制ip访问流量

简介

随着互联网的普及,越来越多的人开始使用Linux作为服务器操作系统,Linux系统默认的防火墙策略往往不足以应对大流量访问,特别是针对单个IP的访问,为了防止恶意用户通过某个IP地址进行大量请求,影响服务器性能,本文将介绍如何配置Linux防单IP大流量访问。

原理

Linux防单IP大流量访问的核心思想是通过限制单个IP地址在一定时间内的请求次数来达到保护服务器的目的,当一个IP地址在短时间内发出大量请求时,服务器可以暂时拒绝该IP地址的请求,从而保护服务器资源。

linux限制ip访问流量

方法

1、使用iptables防火墙

iptables是Linux系统中最常用的防火墙工具,可以用来配置各种网络规则,要实现防单IP大流量访问,可以使用以下命令:

创建一个新的链
iptables -N single_ip_limit
在新的链中添加规则,限制单个IP地址的请求次数和时间间隔
iptables -A single_ip_limit -p tcp --dport 80 -m connlimit --connlimit-above 100 --connlimit-period 300 -j REJECT --reject-with tcp-reset
将所有匹配到的数据包发送到新创建的链中进行处理
iptables -A INPUT -j single_ip_limit

2、使用fail2ban工具

linux限制ip访问流量

fail2ban是一个用于防止暴力破解的工具,可以通过配置文件来实现对特定IP地址的封禁,要实现防单IP大流量访问,首先需要安装fail2ban:

安装fail2ban
sudo apt-get install fail2ban

编辑fail2ban的配置文件(通常位于/etc/fail2ban/jail.conf),在[DEFAULT]部分添加以下内容:

[DEFAULT]
maxretry = 300  限制单个IP地址在300秒内的最大尝试次数
findtime = 600  查找失败日志的时间间隔,单位为秒
bantime = 1800  对单个IP地址的封禁时间,单位为秒
backend = systemd  使用systemd作为后端管理工具
usedns = warn  如果启用了DNS过滤,当检测到恶意请求时给出警告信息
filter = %(__name__)s[%(__name__)s[cnt]["replied"]] > %(maxretry)s [ipvar:client] -> %(bantime)s | %(__name__)s[%(__name__)s[cnt]["replied"]] > %(findtime)s [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["failed"] > %(bantime)s [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["failed"] > %(bantime)s [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["failed"] > %(bantime)s [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["failed"] > %(bantime)s [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["failed"] > %(bantime)s [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & %(__name__)s[cnt]["succeeded"] == 0 [ipvar:client] -> %(bantime)s & ... (省略其他条件)
action = banip [ipv4addr]/%(bantime):%(bantime)d | banlistpath=%(banpath)s [ipv4addr]/%(bantime):%(bantime)d,findtime=600 [ipv4addr]/%(findtime):%(findtime)d,maxretry=300 [ipv4addr]/%(maxretry):%(maxretry}d,rejectfactor=50 [ipv4addr],ishard=no,portnum=http,protocol=tcp,reason=Too many requests (threshold_breach),skip=false [ipv4addr],chain=single_ip_limit [ipv4addr],destemail=root@localhost [ipv4addr],desthost=localhost [ipv4addr],destport=auto,expire=86400 [ipv4addr],priority=300 [ipv4addr],table=filter [ipv4addr],warning=300 [ipv4addr],minretry=15 [ipv4addr],maxretry=300 [ipv4addr],findtime=600 [ipv4addr],bantime=1800 [ipv4addr],usagecount=-1 [ipv4addr],countertimeout=900 [ipv4addr],usefulerrormessage=This IP has been banned due to too many requests from this host. If it is a mistake or you are the victim of a DDoS attack, please let us know at http://www.yourserver.com/contact.php before blocking your IP again. (default="") [ipv4addr],addtag=IPBlockingFilter [ipv4addr]

3、配置fail2ban守护进程自动启动并定期检查日志文件

linux限制ip访问流量

编辑/etc/systemd/system/fail2ban.service文件,添加以下内容:

[Unit]
Description=Fail2Ban is a failsafe mechanism for preventing bruteforce attacks and other forms of malicious traffic on your server. It monitors network traffic and blocks any IP address that makes too many requests in a short period of time. Fail2Ban uses various strategies to prevent such attacks including rate limiting and ban lists. Fail2Ban is fully open source and can be customized to fit your needs. For more information see https://www.fail2ban.org.
After=network.target firewalld.service syslog.target sshd.service dbus.service irc-server.service netstat.target systemd-logind.service systemd-sysusers.service systemd-journald.socket systemd-resolve.service systemd-tmpfiles-setup.service systemd-random-seed.service udevd.service rsyslog.service cups-daemon.service postfix.service mysqld.service apache2.service httpd.service lighttpd.service php7.process supervisord.service nagios3.service prometheus-server.service nodejs.service docker.service containerd.service containerd-checkpoint.service containerd-cgroups.service containerd-runc.service libvirtd.service kvmlet.socket libvirtd-lxcfs bridge-utils.socket libguestfs-tools.socket devicemapper-udev-sync.service devicemapper-eventfd.socket devicemapper-eventfd-helper.socket devicemapper-pcisubsystem.socket devicemapper-userspace-cachedir.socket devicemapper-lvmetad-socket devicemapper-vgsession-udev.socket devicemapper-vgsession-devices.socket devicemapper-thinpool-uuidgen.socket devicemapper-persistent-datastore.socket devicemapper-persistent-stateless-store.socket devicemapper-scsi-transport-idlenesspoller.socket devicemapper-scsi-transport-idlenesspoller64bit.socket devicemapper-dmeventfd.socket devicemapper-udev9pdeplugfs usermountnfsproxy socket brctl ifup brctl status gpm getty initctl iotop lvm2 modprobe netcat netstat nmap openssh portmap pkill plock ptrace readahead resolvconf socat sudo tail fdisk umount

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/272342.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seoK-seo
Previous 2024-01-28 10:37
Next 2024-01-28 10:37

相关推荐

  • Linux上怎么搭建和管理MySQL数据库

    安装MySQL,创建用户和数据库,使用命令行或图形界面管理,设置权限和备份恢复。

    2024-05-18
    094
  • linux云服务器连接的方法是什么意思

    Linux云服务器连接的方法Linux云服务器是一种基于云计算技术的虚拟化计算服务,用户可以通过远程访问的方式在任何地点、任何时间使用自己的云服务器,如何连接到Linux云服务器呢?本文将介绍几种常见的连接方法。1、SSH连接SSH(Secure Shell)是一种加密的网络传输协议,可以用于在不安全的网络环境中保护数据的安全,通过S……

    2023-12-25
    0110
  • linux获取纳秒级别的时间

    Linux用户空间如何获得纳秒级时间在Linux系统中,用户空间的时间是由系统调用获取的,通常以秒为单位,在某些应用场景下,我们需要更高精度的时间测量,例如网络协议分析、性能测试等,这时就需要纳秒级别的时间,如何在Linux用户空间获得纳秒级别的时间呢?本文将介绍两种方法:使用clock_gettime()函数和usleep()函数。……

    2023-12-22
    0158
  • Linux服务器租用有什么优势

    【Linux服务器租用有什么优势】在当今信息化社会,互联网已经成为了人们生活、工作中不可或缺的一部分,随着互联网技术的不断发展,越来越多的企业和个人开始接触和使用Linux服务器,相较于传统的Windows服务器,Linux服务器租用具有许多优势,本文将详细介绍这些优势,帮助大家更好地了解和选择Linux服务器。稳定性高1、Linux……

    2024-01-19
    0199
  • linux中的shell有什么用

    在Linux操作系统中,Shell是一个命令行解释器,它为用户提供了一个与操作系统内核进行交互的界面,用户可以通过输入命令来执行各种任务,如文件管理、系统监控、进程管理等,Shell的作用主要体现在以下几个方面:1、命令解释器Shell是用户与操作系统内核之间的一个中间层,它负责接收用户输入的命令,然后将其转换为操作系统可以理解的指令……

    2024-01-05
    0131
  • linux total

    在Linux中,total通常指的是磁盘空间总量,这个概念包括了所有可用的磁盘空间,例如文件系统、临时文件、缓存等,在Linux系统中,我们经常会使用df命令查看磁盘空间的使用情况,其中total列就是显示磁盘空间总量的。本文将详细介绍Linux中的total,包括其含义、计算方法以及如何使用df命令查看磁盘空间总量,我们还将学习如何……

    2023-12-14
    0189

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入