Linux系统如何限制IP访问?详细操作方法与步骤解析

在Linux系统中,限制IP访问是保障服务器安全的重要手段,常见的应用场景包括防止恶意攻击、限制非法访问、控制特定用户访问权限等,Linux提供了多种IP限制工具和方法,涵盖防火墙规则、TCP Wrappers、主机访问控制列表等,可根据实际需求选择合适的方案,以下将详细介绍几种主流的IP限制方法及其具体操作步骤。

linux如何限制ip

使用iptables限制IP访问

iptables是Linux内核集成的防火墙工具,功能强大且灵活,通过配置规则链实现对数据包的过滤、转发和地址转换等操作,限制IP访问主要通过filter表的INPUT链(控制进入服务器的数据包)实现。

基本语法

iptables命令的基本格式为:

iptables [-t 表名] [选项] [链名] [匹配条件] [-j 动作]

-t指定表名(默认为filter),-j指定动作(如DROP丢弃、REJECT拒绝并返回错误信息、ACCEPT允许)。

封禁单个IP

封禁恶意IP168.1.100的所有访问:

iptables -I INPUT -s 192.168.1.100 -j DROP

-I表示插入规则到链的顶部,-s指定源IP地址。

封禁IP段

若需封禁整个网段(如168.1.0/24),可使用子网掩码:

iptables -I INPUT -s 192.168.1.0/24 -j DROP

允许特定IP访问,拒绝其他IP

先设置默认策略为DROP,再添加允许的IP规则:

iptables -P INPUT DROP  # 设置INPUT链默认丢弃所有数据包
iptables -A INPUT -s 192.168.1.200 -j ACCEPT  # 允许特定IP

-A表示追加规则到链的末尾,-P设置默认策略。

限制特定端口的IP访问

仅允许IP168.1.50访问SSH端口(22),其他IP拒绝:

iptables -A INPUT -p tcp --dport 22 -s 192.168.1.50 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

-p指定协议(tcp/udp),--dport指定目标端口。

保存规则

不同Linux发行版的保存命令不同:

linux如何限制ip

  • CentOS/RHEL: service iptables save
  • Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4

删除规则

若需删除已添加的规则,可通过-D选项指定规则内容,或通过规则序号删除(iptables -L --line-numbers查看序号):

iptables -D INPUT -s 192.168.1.100 -j DROP

优点:功能全面,支持复杂规则(如端口、协议、MAC地址等过滤),适合企业级环境。
缺点:规则语法复杂,需谨慎操作,误操作可能导致网络中断。

使用firewalld限制IP访问

firewalld是CentOS 7+、RHEL 7+、Fedora等系统默认的动态防火墙管理工具,支持区域(Zone)和服务的动态配置,比iptables更易用。

启动并启用firewalld

systemctl start firewalld
systemctl enable firewalld

查看当前区域

firewall-cmd --get-active-zones

默认区域为public,可根据需求修改(如dmzinternal)。

封禁单个IP

public区域封禁IP168.1.100

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
firewall-cmd --reload  # 重新加载规则使生效

--permanent表示持久化规则(重启后生效),不加则临时生效。

封禁IP段

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" drop'
firewall-cmd --reload

允许特定IP访问服务

仅允许IP168.1.200访问HTTP服务(80端口):

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.200" service name="http" accept'
firewall-cmd --reload

查看已添加的规则

firewall-cmd --list-rich-rules

优点:动态管理规则,支持区域和服务分类,界面化工具(firewall-config)更易操作。
缺点:仅适用于支持firewalld的系统,复杂规则配置效率低于iptables。

使用TCP Wrappers与hosts.allow/hosts.deny限制IP

TCP Wrappers是基于主机名的访问控制工具,通过/etc/hosts.allow/etc/hosts.deny文件管理服务访问权限,适用于xinetdlibwrap支持的服务(如SSH、FTP、Telnet等)。

配置文件语法

  • /etc/hosts.allow:允许访问的规则列表。
  • /etc/hosts.deny:拒绝访问的规则列表。
    规则格式为:服务列表: 客户端地址 [选项],服务列表用逗号分隔,客户端地址支持IP、域名、通配符(所有,单个字符,网段168.1.表示整个网段)。

允许特定IP访问SSH,拒绝其他IP

编辑/etc/hosts.allow,添加允许的IP:

sshd: 192.168.1.50, 192.168.1.60  # 允许192.168.1.50和60访问SSH

编辑/etc/hosts.deny,拒绝所有其他IP访问SSH:

linux如何限制ip

sshd: ALL  # 拒绝所有IP访问SSH

允许网段访问FTP,拒绝其他

# hosts.allow
vsftpd: 192.168.1.  # 允许192.168.1.0/24网段访问FTP
# hosts.deny
vsftpd: ALL

规则生效顺序

TCP Wrappers先读取hosts.allow,允许的记录直接通过;再读取hosts.deny,拒绝的记录直接拒绝;未匹配的规则默认允许访问,需确保hosts.deny中的ALL规则覆盖所有未允许的服务。

优点:配置简单,无需重启服务即可生效,适合轻量级服务访问控制。
缺点:仅支持依赖libwrap的服务,无法过滤非TCP Wrappers服务(如部分HTTP服务器)。

使用fail2ban动态封禁恶意IP

fail2ban是一款基于日志分析的动态封禁工具,通过监控服务日志(如SSH登录失败、HTTP暴力破解),自动匹配恶意IP并添加防火墙规则封禁,适合防御自动化攻击。

安装fail2ban

# CentOS/RHEL
yum install -y fail2ban
# Debian/Ubuntu
apt update && apt install -y fail2ban

配置文件

主配置文件为/etc/fail2ban/jail.conf,建议复制为jail.local修改(优先级更高):

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

配置SSH防暴力破解

编辑jail.local,找到[sshd]部分,修改如下:

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/secure
maxretry = 3  # 最大失败次数
bantime = 3600  # 封禁时间(秒,3600为1小时)
findtime = 600  # 时间窗口(秒,600为10分钟)

参数说明:maxretry为允许的最大失败登录次数,bantime为封禁时长,findtime为统计失败次数的时间窗口。

启动并设置开机自启

systemctl start fail2ban
systemctl enable fail2ban

查看封禁状态

fail2ban-client status sshd  # 查看SSH封禁状态
fail2ban-client banned  # 查看所有被封禁的IP

手动解封IP

fail2ban-client set sshd unbanip 192.168.1.100

优点:动态防御,基于日志自动封禁,减少人工干预,适合防御暴力破解和DDoS攻击。
缺点:依赖日志格式,需确保日志路径正确,可能误封正常用户(如频繁操作触发阈值)。

不同IP限制方法对比

方法 适用场景 配置工具 优点 缺点
iptables 企业级复杂规则过滤 iptables命令 功能全面,支持高级过滤 语法复杂,易误操作
firewalld CentOS 7+等系统动态防火墙管理 firewall-cmd、图形界面 规则动态更新,支持区域分类 仅限支持系统,复杂规则效率低
TCP Wrappers 轻量级服务访问控制(SSH/FTP等) hosts.allow/hosts.deny 配置简单,无需重启服务 仅限支持服务,无法过滤非TCP服务
fail2ban 动态防御暴力破解和自动化攻击 fail2ban配置文件 自动化封禁,减少人工干预 依赖日志,可能误封正常用户

实际应用案例

案例1:仅允许公司内网IP访问服务器,拒绝外网

  1. 使用iptables设置默认丢弃所有入站数据包:
    iptables -P INPUT DROP
  2. 允许内网网段168.1.0/24和回环地址访问:
    iptables -A INPUT -s 127.0.0.1 -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
  3. 允许已建立的连接和ICMP报文(用于网络诊断):
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -p icmp -j ACCEPT
  4. 保存规则并重启iptables。

案例2:使用fail2ban封禁频繁SSH失败IP

  1. 确认SSH日志路径(/var/log/secure),修改jail.local[sshd]配置:
    [sshd]
    enabled = true
    filter = sshd
    logpath = /var/log/secure
    maxretry = 2
    bantime = 1800
    findtime = 300
  2. 重启fail2ban服务:
    systemctl restart fail2ban
  3. 查看封禁IP:
    fail2ban-client status sshd

相关问答FAQs

Q1:如何查看当前系统中已生效的IP限制规则?
A1:根据使用的工具不同,查看方式如下:

  • iptablesiptables -L -n -v-n以数字形式显示IP和端口,-v显示详细信息)。
  • firewalldfirewall-cmd --list-all(查看当前区域的所有规则)。
  • TCP Wrapperscat /etc/hosts.allowcat /etc/hosts.deny(直接查看配置文件)。
  • fail2banfail2ban-client status(查看所有监狱状态)或fail2ban-client banned(查看被封禁IP)。

Q2:如何解除已添加的IP限制规则?
A2:根据工具不同,解除方法如下:

  • iptables:通过-D选项删除规则(需与添加时规则内容完全一致),iptables -D INPUT -s 192.168.1.100 -j DROP;或通过iptables -F清空所有规则(谨慎使用)。
  • firewalld:使用--remove-rich-rule删除规则,firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" drop',然后执行firewall-cmd --reload
  • TCP Wrappers:直接编辑/etc/hosts.allow/etc/hosts.deny文件,删除对应规则即可,无需重启服务。
  • fail2ban:使用set unbanip解封,fail2ban-client set sshd unbanip 192.168.1.100;或修改jail.localbantime=0禁用封禁,重启服务。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/28230.html

(0)
酷番叔酷番叔
上一篇 2025年9月22日 10:11
下一篇 2025年9月22日 10:32

相关推荐

  • 如何彻底删除Linux系统中的gcc?

    在Linux系统中,GCC(GNU Compiler Collection)是编译C、C++、Objective-C等语言的核心工具链,广泛应用于系统开发和软件编译,由于版本冲突、空间清理或重新安装等需求,用户可能需要删除系统中的GCC,删除GCC需谨慎操作,避免因误删导致系统工具或依赖软件无法正常运行,本文将……

    2025年9月17日
    2900
  • Windows下误删Linux分区怎么办?

    方法1:使用Windows磁盘管理工具(推荐基础用户)原理:删除Linux分区后重建为Windows兼容格式(NTFS/FAT32),步骤:打开磁盘管理按 Win + R 输入 diskmgmt.msc 回车,定位Linux分区 识别Linux分区(通常显示为”未分配”或”RAW”,无盘符),删除分区 右键点击……

    2025年7月9日
    5200
  • linux系统程序如何复制

    Linux系统中,可使用cp命令复制程序,如`cp 源文件路径

    2025年8月14日
    4000
  • Linux 如何查询进程的线程数?

    在Linux系统中,线程是进程内的执行单元,多个线程共享进程的资源(如内存空间、文件描述符等),查询线程数对于系统性能监控、问题排查(如线程泄漏)等场景至关重要,Linux下查询线程数的方法多样,可通过命令行工具、系统接口等实现,本文将详细介绍常用方法及其实际应用,使用ps命令查询线程数ps(Process S……

    2025年9月18日
    3200
  • Linux环境下3TB大硬盘分区方案制定与详细操作步骤指南如何?

    在Linux系统中对3TB硬盘进行分区时,需重点考虑分区表类型、分区方案设计及实际使用场景,因3TB硬盘已超过MBR(主引导记录)分区表支持的2.2TB容量上限,必须使用GPT(GUID分区表)格式,以下是详细分区流程及注意事项,分区前准备工作确认硬盘信息连接硬盘后,通过lsblk或fdisk -l命令查看硬盘……

    2025年10月3日
    1500

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信