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)
酷番叔酷番叔
上一篇 2小时前
下一篇 1小时前

相关推荐

  • Linux硬件无法识别?解决妙招在此!

    准备工作确认硬件信息lspci | grep -i "关键词" # 查看PCI设备(如网卡、显卡)lsusb # 查看USB设备dmesg | grep -i error # 检查内核错误日志示例:lspci | grep -i network 定位网卡型号,获取驱动官方渠道优先:从硬件制造……

    2025年7月23日
    3100
  • 如何查linux版本信息

    在Linux系统中,查询版本信息是日常运维、软件开发和故障排查的基础操作,无论是确认系统兼容性、安装依赖软件,还是解决内核相关问题,准确获取版本信息都至关重要,本文将详细介绍多种查询Linux版本信息的方法,涵盖命令行工具、系统文件及图形界面,并针对不同发行版提供针对性方案,帮助用户快速定位所需信息,基础命令行……

    2025年9月11日
    1100
  • 如何进入Linux根目录?

    通过命令行进入根目录(推荐)适用场景:服务器管理、脚本编写、高级用户操作步骤:打开终端桌面用户:按 Ctrl+Alt+T(Ubuntu/CentOS等主流发行版通用)无图形界面:直接登录后进入命令行切换至根目录输入以下命令:cd /验证路径:执行 pwd,若显示 即表示成功,:运行 ls 可列出根目录下的子目录……

    2025年7月6日
    4700
  • Linux系统中如何正确安装和配置GRUB引导程序?

    GRUB(Grand Unified Bootloader)是Linux系统中广泛使用的引导加载程序,负责在计算机启动时加载操作系统内核和初始化内存盘(initramfs),是系统启动流程的核心组件,在Linux系统中安装GRUB通常出现在以下场景:新安装系统后手动配置引导、修复因误操作或系统更新导致的引导丢失……

    2025年8月29日
    1800
  • 如何设置硬盘挂载点?

    挂载点是Linux系统中用于连接文件系统的空目录,作为存储设备或分区在目录树中的访问入口。

    2025年7月31日
    2800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信