网络管理、调试与系统安全指南
网络管理与调试
在网络管理与调试方面,有一系列关键的配置和操作值得关注。
首先是 NetFlow 配置,以下是一些重要的命令:
ios# mls flow ip interface-full
ios# mls flow ipv6 interface-full
ios# mls nde sender version 5
对于繁忙的路由器,可以考虑积极地对小流量进行超时处理:
ios# mls aging fast time 4 threshold 2
ios# mls aging normal 32
ios# mls aging long 900
同时,还需要传统的 NetFlow 配置,例如在每个接口上配置
ip flow ingress
或
ip route-cache flow
,这样才能看到如流向路由器本身的“软件交换”流量。对于 NetFlow v9,配置可能会更长,并且根据 IOS 版本,还可以定义自己的模板。随着 Flexible NetFlow (FNF) 的引入,NetFlow 环境变得更加复杂。
在参考资料方面,Wikipedia 提供了关于 SNMP 的不错概述,并且指向了相关的 RFC。以下是一些有用的 RFC 及其内容描述:
| RFC编号 | 内容描述 |
| ---- | ---- |
| RFC1155 | SNMP 数据空间的特性(数据类型等) |
| RFC1156 | MIB - I 定义(实际 OID 的描述) |
| RFC1157 | 简单网络管理协议 |
| RFC1213 | MIB - II 定义(OIDs) |
| RFC3414 | SNMPv3 的基于用户的安全模型 |
| RFC3415 | SNMPv3 的基于视图的访问控制模型 |
| RFC3512 | 使用 SNMP 配置设备(最佳通用概述) |
| RFC3584 | 不同 SNMP 版本的实际共存 |
| RFC3954 | 思科系统 NetFlow 服务导出版本 9 |
下面是一些网络管理与调试的练习:
1.
网络问题排查
:使用
netstat -rn
命令输出结果来排查网络问题,找出问题并确定修复命令。
2.
脚本编写
:编写一个脚本,监控一组给定的机器,如果某台机器在设定的时间内对 ping 请求无响应,则通过电子邮件通知管理员。注意不要硬编码机器列表、通知电子邮件地址或确定无响应行为的时间。
3.
子网掩码实验
:在本地网络的一台机器上更改子网掩码,测试其是否仍能正常工作,能否访问站点内的所有资源,其他机器能否访问该机器,以及广播是否正常工作(如 ARP 请求或 DHCP 发现数据包),并解释实验结果(需要 root 权限)。
4.
路由路径探索
:使用
traceroute
命令发现网络中的路由路径,包括离开所在机构需要的跳数、有账户的机器之间是否有路由器、能否找到瓶颈以及站点是否多宿主。
5.
MIB 设计
:设计一个 MIB,包含 Linux 系统管理员可能想要查询或设置的所有变量,并预留扩展方式以包含可能遗漏的重要新变量。
6.
流量捕获
:使用
wireshark
或
tshark
捕获说明以下协议的流量。对于 TCP 会话,包括并指明初始和最终数据包,提交清晰、格式良好的输出(需要 root 权限):
- ARP
- ICMP 回显请求和回复
- SMTP
- HTTP
- DNS
- Samba
- SSH
7.
Cacti 图形设置
:设置 Cacti 图形,显示本地路由器的收发数据包情况。此项目需要一个 SNMP 包来查询路由器,并且必须知道路由器的只读社区字符串。
8.
脚本编写与网页创建
:编写一个使用 RRDtool 跟踪
netstat -i
报告的网络流量的脚本,并使用 rrdcgi 创建一个显示结果的网页。如果之前从未使用过 RRDtool,这个练习可能需要花费几个小时。
以下是网络管理与调试的流程 mermaid 图:
graph LR
A[NetFlow配置] --> B[传统NetFlow配置]
B --> C[NetFlow v9配置]
C --> D[参考资料查询]
D --> E[练习实践]
E --> F[网络问题排查]
E --> G[脚本编写]
E --> H[子网掩码实验]
E --> I[路由路径探索]
E --> J[MIB设计]
E --> K[流量捕获]
E --> L[Cacti图形设置]
E --> M[脚本与网页创建]
系统安全
系统安全是一个至关重要的领域,尽管好莱坞电影中常常有相关情节,但维护一个安全的计算环境往往不那么引人注目且容易被忽视。然而,如果 UNIX 和 Linux 系统要存储敏感数据并控制关键流程,就必须对其进行保护。
UNIX 系统的安全性
UNIX 和 Linux 系统并非天生安全,任何在网络上通信的操作系统都存在安全风险。要实现绝对的、不可攻破的安全,需要计算机与其他设备之间有可测量的空气间隙,甚至有人认为还需要将计算机置于屏蔽电磁辐射的特殊房间(法拉第笼)中。
UNIX 系统存在一些基本的安全缺陷:
-
便利性优先
:UNIX 系统优化了便利性,使得安全并非易事或自然的特性。其整体哲学强调在网络多用户环境中轻松操作数据。
-
软件开发社区复杂
:运行在 UNIX 系统上的软件由大量程序员开发,他们的经验水平、对细节的关注以及对系统及其相互依赖关系的了解各不相同。因此,即使是最善意的新功能也可能引入重大安全漏洞。
-
管理功能易受攻击
:大多数管理功能在核外实现,黑客可以对其进行检查和篡改,从而广泛访问系统。
不过,由于一些系统(如 Linux、OpenSolaris)的源代码对所有人开放,数千人可以审查每一行代码以查找潜在的安全威胁。这种方式被广泛认为比闭源操作系统更安全,因为闭源系统只有有限的人有机会检查代码中的漏洞。
安全漏洞的成因
-
社会工程学
:计算机系统的用户(包括管理员)是安全链中最薄弱的环节。即使在安全意识提高的今天,善意但毫无戒心的用户也很容易被说服泄露敏感信息。攻击者可能通过冷电话伪装成困惑的用户寻求系统访问帮助,管理员在公共论坛上故障排除时可能无意泄露敏感信息,看似合法的维护人员可能会对电话柜进行物理篡改。“网络钓鱼”是通过欺骗性的电子邮件、即时消息或短信收集用户信息的手段,由于通信中常包含特定于受害者的信息,使其看起来更真实,因此更难防范。
为了应对社会工程学攻击,网站安全政策应包括对新员工的培训,定期进行全组织的沟通,提供关于电话使用规范、物理安全、电子邮件钓鱼和密码选择的信息。许多组织会告知用户管理员绝不会通过电子邮件、即时消息或电话请求密码,并要求用户立即向 IT 部门报告此类请求。 -
软件漏洞
:多年来,计算机软件(包括商业和免费的第三方软件)中发现了无数削弱安全的漏洞。黑客通过利用微妙的编程错误或上下文依赖关系,能够操纵系统执行他们想要的操作。
- 缓冲区溢出 :这是一种常见的编程错误,具有复杂的影响。开发人员通常分配一个预定的临时内存空间(缓冲区)来存储特定信息。如果代码不仔细检查数据大小与容器大小是否匹配,相邻内存可能会被覆盖。狡猾的黑客可以输入精心构造的数据,导致程序崩溃或执行任意代码。不过,近年来大量的缓冲区溢出攻击提高了编程社区对这个问题的认识,开源应用中的此类问题通常能迅速被发现和修复。一些新的编程系统(如 Java 和 .NET)包含自动检查数据大小和防止缓冲区溢出的机制,但并非总是有效。
- 输入验证漏洞 :缓冲区溢出是输入验证漏洞这一更大类软件安全漏洞的一个子类别。几乎所有程序都接受用户的某种输入(如命令行参数或 HTML 表单),如果代码在处理这些数据时不严格检查其格式和内容,就可能引发问题。例如以下 Perl 代码:
#!/usr/bin/perl
# Example user input validation error
open(HTMLFILE, "/var/www/html/$ARGV[0]") or die "trying\n";
while(<HTMLFILE>) { print; }
close HTMLFILE;
该代码的意图可能是打印
/var/www/html
下某个 HTML 文件的内容,但如果恶意用户输入
../../../etc/passwd
作为参数,
/etc/passwd
的内容将被输出。作为管理员,在漏洞被识别并修复之前,能做的事情有限。保持对补丁和安全公告的关注是管理员工作的重要部分,大多数 Linux 发行版都包含自动打补丁的实用程序,如 Red Hat 的
yum
和 Ubuntu 的
apt - get
,OpenSolaris 也通过
pkg image - update
实现了自动(且安全)的更新。
3.
配置错误
:许多软件可以进行安全或不安全的配置。由于软件的开发更注重实用性而非安全性,不安全的配置往往是默认设置。黑客经常利用在不太危险的情况下被认为有用和方便的软件功能来获取访问权限,例如无密码账户、向全世界共享的磁盘和未受保护的数据库。
一个典型的主机配置漏洞示例是允许 Linux 系统在不要求引导加载程序密码的情况下启动。GRUB 可以在安装时配置为需要密码,但管理员通常会拒绝该选项,这使得系统容易受到物理攻击。不过,这也是平衡安全性和可用性的一个典型例子,因为要求密码意味着在系统意外重启(如停电后)时,管理员必须亲自到场才能使机器重新运行。
安全提示与哲学
-
补丁管理
:保持系统更新是管理员最有价值的安全任务。大多数系统配置为指向供应商的存储库,打补丁只需运行几个命令。大型环境可以使用本地存储库镜像供应商的存储库。合理的打补丁方法应包括:
- 定期打补丁 :制定并严格遵循定期安装常规补丁的计划,在设计此计划时考虑对用户的影响。每月更新通常就足够了,规律性比及时性更重要,不能只修复高关注度的零日漏洞而忽视其他更新。
- 变更计划 :记录每组补丁的影响,概述适当的安装后测试步骤,并说明在出现问题时如何回滚更改。将此变更计划传达给所有相关方。
- 了解相关补丁 :管理员应订阅供应商特定的安全邮件列表和博客,以及通用的安全讨论论坛(如 Bugtraq)。准确记录环境中使用的应用程序和操作系统有助于确保全面覆盖。
-
禁用不必要的服务
:大多数系统默认配置了多个服务。务必禁用(可能的话删除)任何不必要的服务,特别是网络守护进程。可以使用
netstat命令查看哪些服务正在运行,例如 Solaris 系统的部分输出:
solaris$ netstat -an | grep LISTEN
*.111 *.* 0 0 49152 0 LISTEN
*.32771 *.* 0 0 49152 0 LISTEN
*.32772 *.* 0 0 49152 0 LISTEN
*.22 *.* 0 0 49152 0 LISTEN
*.4045 *.* 0 0 49152 0 LISTEN
在大多数系统上,可以使用
lsof
或
fuser
命令识别使用未知端口的服务。在 Linux 系统中,这些命令可以识别使用给定端口的进程的 PID:
ubuntu$ sudo fuser 22/tcp
22/tcp: 2454 8387
ubuntu$ sudo lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 2454 root 3u IPv4 5730 TCP *:ssh(LISTEN)
sshd 2454 root 4u IPv6 5732 TCP *:ssh(LISTEN)
一些网络协议(如 FTP、Telnet 和 BSD “r” 程序)使用不安全的身份验证和数据传输方法,应在所有系统上禁用,转而使用更安全的替代方案(如 SSH)。
3.
远程事件日志
:syslog 工具可以将日志信息转发到文件、用户列表或网络上的其他主机。可以设置一个安全的主机作为中央日志记录机器,解析转发的事件并采取适当的行动。单个集中的日志聚合器可以捕获各种设备的日志,并在有意义的事件发生时提醒管理员。远程日志记录还可以防止黑客通过重写或擦除已受攻击系统上的日志文件来掩盖踪迹。大多数系统默认配置为使用 syslog,但需要自定义配置来设置远程日志记录。
4.
备份
:定期进行系统备份是任何网站安全计划的重要组成部分。确保所有分区定期备份,并将一些备份存储在异地。如果发生重大安全事件,就有一个未受污染的检查点可以恢复。但备份也可能成为安全隐患,被盗的磁带可能绕过系统的其他安全措施。在异地存储磁带时,使用防火保险箱防止盗窃,并考虑使用加密。
5.
病毒和蠕虫
:UNIX 和 Linux 系统大多对病毒免疫,只有少数病毒(大多是学术性质的),且没有造成像 Windows 世界那样的重大损失。不过,运行 UNIX 服务器上的防病毒软件可以保护网站的 Windows 系统免受特定于 Windows 的病毒侵害。邮件服务器可以扫描传入的电子邮件附件,文件服务器可以扫描共享文件。ClamAV 是一个流行的免费 UNIX 和 Linux 防病毒产品,可以从 clamav.net 下载最新版本。
6.
特洛伊木马
:特洛伊木马是看似正常但实际并非如此的程序。例如,一个名为
turkey
的程序声称会在终端屏幕上绘制火鸡图片,但实际上会删除用户主目录中的文件。主要软件包中偶尔会出现特洛伊木马片段,供应商通常会在一两周内修复软件并发布公告。在安装软件包之前,应在互联网上搜索其名称,确保搜索结果的第一页没有不良信息。
7.
Rootkit
:狡猾的黑客会使用 “Rootkit” 来掩盖踪迹并避免被检测。Rootkit 是隐藏重要系统信息(如进程、磁盘或网络活动)的程序和补丁,从简单的应用程序替换(如被篡改的
ls
和
ps
)到几乎无法检测的内核模块,种类繁多且复杂程度各异。基于主机的入侵检测软件(如 OSSEC)和 Rootkit 查找脚本(如 chkrootkit)可以帮助检测 Rootkit。但对于受感染的系统,彻底清除 Rootkit 可能不如保存数据、重新格式化磁盘并重新开始。
8.
数据包过滤
:如果系统连接到有互联网访问的网络,必须在系统与外部世界之间安装数据包过滤路由器或防火墙。一些系统也允许在系统本身使用软件实现数据包过滤。数据包过滤器应只允许通过特定服务的流量。
9.
密码管理
:每个账户都必须有一个不易被猜到的密码,并且永远不要通过互联网发送明文可重复使用的密码。如果允许远程登录系统,必须使用 SSH 或其他安全的远程访问系统。
10.
保持警惕
:为确保系统安全,必须定期(通常是每天)监控系统的健康状况、网络连接、进程表和整体状态。使用后续章节中讨论的强大工具进行定期自我评估,因为安全问题往往从小问题开始并迅速扩大,所以尽早发现异常情况至关重要。
11.
一般哲学
:有效的系统安全基于常识,以下是一些经验法则:
-
谨慎存储敏感文件
:不要在系统上存储可能引起黑客或好奇员工兴趣的文件,如商业机密、人事档案、工资数据、选举结果等。对这些信息进行加密可以提供比简单防止未经授权访问更高的安全性。
-
制定安全政策
:网站的安全政策应明确规定如何处理敏感信息。
-
避免为黑客提供据点
:不要在环境中为黑客提供建立据点的地方。黑客常利用一个系统作为基地攻击其他系统,公共暴露的有漏洞的服务、可全局写入的匿名 FTP 目录、共享账户和被忽视的系统都可能鼓励这种行为。
-
设置陷阱
:使用 OSSEC、Bro、Snort 和 John the Ripper 等工具设置陷阱,帮助检测入侵和尝试入侵的行为。
-
监控安全报告
:认真监控这些安全工具生成的报告,忽视一份报告中的小问题可能会在下次报告时演变成灾难。
以下是系统安全的流程 mermaid 图:
graph LR
A[系统安全概述] --> B[安全漏洞成因]
B --> C[社会工程学]
B --> D[软件漏洞]
B --> E[配置错误]
A --> F[安全提示与哲学]
F --> G[补丁管理]
F --> H[禁用不必要服务]
F --> I[远程事件日志]
F --> J[备份]
F --> K[病毒和蠕虫防护]
F --> L[特洛伊木马防范]
F --> M[Rootkit检测]
F --> N[数据包过滤]
F --> O[密码管理]
F --> P[保持警惕]
F --> Q[一般哲学]
总之,网络管理与调试以及系统安全是一个复杂而重要的领域,需要管理员具备丰富的知识和技能,采取综合的措施来保障系统的正常运行和数据安全。
网络管理、调试与系统安全指南
网络管理与调试工具及实践的深入探讨
在前面提到的网络管理与调试相关内容基础上,我们进一步探讨这些工具和实践的应用细节。
NetFlow 配置的深入理解
NetFlow 配置对于网络流量的监控和分析至关重要。前面提到的命令,如
ios# mls flow ip interface - full
和
ios# mls flow ipv6 interface - full
,分别用于启用 IPv4 和 IPv6 接口的完整流记录。
ios# mls nde sender version 5
则指定了 NetFlow 数据导出的版本。
对于繁忙路由器上的流量超时处理,
ios# mls aging fast time 4 threshold 2
表示将小流量的快速老化时间设置为 4 秒,阈值为 2。
ios# mls aging normal 32
和
ios# mls aging long 900
分别设置了正常和长时间的老化时间。这些设置可以根据网络的实际流量情况进行调整,以优化流量管理。
传统的 NetFlow 配置,如在每个接口上配置
ip flow ingress
或
ip route - cache flow
,能够捕获流向路由器本身的“软件交换”流量。这对于分析网络内部的流量模式和排查问题非常有帮助。
参考资料的应用
在参考资料方面,RFC 文档是网络管理和调试的重要依据。例如,RFC1155 描述了 SNMP 数据空间的特性,这对于理解 SNMP 协议的数据结构和类型非常关键。管理员在进行 SNMP 相关配置和开发时,可以依据该文档来确保数据的正确处理。
RFC1156 和 RFC1213 分别定义了 MIB - I 和 MIB - II 的 OIDs,这些 OIDs 是 SNMP 管理信息库的核心,用于标识和访问网络设备的各种参数。通过对这些 OIDs 的查询和设置,管理员可以实现对网络设备的远程管理。
网络管理与调试练习的实践要点
-
网络问题排查
:使用
netstat - rn命令输出的结果中,Destination(目标地址)、Gateway(网关地址)、Genmask(子网掩码)、Flags(标志位)等信息是关键。例如,如果Flags位显示异常,可能表示路由配置存在问题。修复命令可能包括修改路由表、重启网络服务等。 -
脚本编写
:编写监控机器响应的脚本时,可以使用编程语言(如 Python)结合系统命令(如
ping)来实现。以下是一个简单的 Python 脚本示例:
import subprocess
import time
import smtplib
from email.mime.text import MIMEText
def ping_host(host):
try:
result = subprocess.run(['ping', '-c', '1', host], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
return result.returncode == 0
except Exception:
return False
def send_email(recipient, subject, message):
msg = MIMEText(message)
msg['Subject'] = subject
msg['From'] = 'your_email@example.com'
msg['To'] = recipient
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login('your_email@example.com', 'your_password')
server.sendmail('your_email@example.com', recipient, msg.as_string())
server.quit()
def monitor_hosts(hosts, recipient, timeout):
while True:
for host in hosts:
if not ping_host(host):
time.sleep(timeout)
if not ping_host(host):
send_email(recipient, f'{host} is unresponsive', f'{host} has been unresponsive for {timeout} seconds.')
time.sleep(60)
if __name__ == "__main__":
hosts = ['host1.example.com', 'host2.example.com']
recipient = 'admin@example.com'
timeout = 300
monitor_hosts(hosts, recipient, timeout)
-
子网掩码实验
:在进行子网掩码实验时,需要注意备份网络配置,以免出现网络中断。修改子网掩码后,可能需要重启网络接口使配置生效。可以使用
ifconfig或ip命令来查看和修改网络接口的配置。 -
路由路径探索
:使用
traceroute命令时,其输出结果中的每一行表示一个路由节点,包括节点的 IP 地址和响应时间。通过分析这些信息,可以找出路由中的瓶颈和延迟较高的节点。例如,如果某个节点的响应时间过长,可能表示该节点所在的链路存在拥塞或故障。 - MIB 设计 :设计 MIB 时,要考虑到扩展性和通用性。可以参考现有的 MIB 标准,定义自己的 OIDs 树结构。同时,为每个 OID 提供清晰的描述和访问权限,以便其他管理员和应用程序能够正确使用。
-
流量捕获
:使用
wireshark或tshark捕获流量时,需要注意选择正确的网络接口和过滤条件。例如,要捕获 HTTP 流量,可以使用过滤条件tcp.port == 80 or tcp.port == 443。对于 TCP 会话,要注意观察初始的 SYN 包和最终的 FIN 包,以确定会话的开始和结束。 - Cacti 图形设置 :设置 Cacti 图形时,首先要确保 SNMP 服务在路由器上正常运行,并且知道路由器的只读社区字符串。在 Cacti 中添加设备时,输入路由器的 IP 地址和社区字符串,然后选择要监控的 OIDs,即可生成相应的图形。
-
脚本编写与网页创建
:使用 RRDtool 跟踪网络流量时,需要先创建 RRD 数据库,定义数据来源和存储方式。然后编写脚本定期从
netstat - i命令获取网络流量数据,并更新 RRD 数据库。最后,使用 rrdcgi 创建网页,将 RRD 数据库中的数据以图形形式展示出来。
以下是网络管理与调试实践的步骤列表:
1. 进行 NetFlow 配置,根据网络情况调整参数。
2. 参考 RFC 文档,了解网络协议的详细规范。
3. 按照练习要求,依次进行网络问题排查、脚本编写、子网掩码实验等操作。
4. 在操作过程中,注意备份重要数据,避免出现网络故障。
5. 对实验结果进行分析和总结,不断优化网络管理和调试策略。
系统安全的综合防护策略
在系统安全方面,除了前面提到的各种安全漏洞成因和安全提示,我们还需要建立综合的防护策略。
安全漏洞的检测与修复流程
对于社会工程学攻击,要建立定期的安全培训机制,提高员工的安全意识。可以通过模拟攻击的方式,让员工了解常见的攻击手段和防范方法。同时,建立举报机制,鼓励员工及时报告可疑的行为。
对于软件漏洞,要建立漏洞管理系统。首先,订阅供应商的安全公告和相关的安全论坛,及时获取漏洞信息。然后,对漏洞进行评估,确定其严重程度和影响范围。对于严重的漏洞,要立即进行补丁修复;对于一些影响较小的漏洞,可以根据实际情况安排修复时间。
对于配置错误,要建立配置审核机制。定期对系统的配置文件进行审查,确保所有的配置都符合安全要求。可以使用自动化工具来检查配置文件中的常见错误,如弱密码、开放的不必要端口等。
以下是安全漏洞检测与修复的 mermaid 图:
graph LR
A[安全漏洞监测] --> B[社会工程学攻击检测]
A --> C[软件漏洞检测]
A --> D[配置错误检测]
B --> E[员工培训与举报]
C --> F[漏洞评估]
F --> G[严重漏洞修复]
F --> H[一般漏洞修复]
D --> I[配置审核]
I --> J[自动化工具检查]
J --> K[配置修正]
安全工具的综合应用
在系统安全中,各种安全工具起着重要的作用。
1.
入侵检测系统(IDS)
:如 OSSEC、Bro、Snort 等,这些工具可以实时监测系统的活动,发现异常行为并及时报警。例如,OSSEC 可以监控文件系统的变化、进程的活动等,当发现异常时,会发送警报给管理员。
2.
密码破解工具
:John the Ripper 可以用于测试系统密码的强度。管理员可以使用该工具对系统中的密码进行破解测试,发现弱密码并及时要求用户更改。
3.
防火墙
:无论是硬件防火墙还是软件防火墙,都可以阻止未经授权的网络访问。配置防火墙时,要根据系统的实际需求,只允许必要的网络流量通过。
应急响应计划
为了应对可能发生的安全事件,需要制定应急响应计划。应急响应计划应包括以下几个方面:
1.
事件检测与报告
:建立实时的安全监测系统,当发现安全事件时,及时通知相关的管理员。
2.
事件评估
:对安全事件的严重程度和影响范围进行评估,确定应对策略。
3.
事件处理
:根据事件的类型和严重程度,采取相应的处理措施,如隔离受感染的系统、恢复备份数据等。
4.
事件总结与改进
:在事件处理完毕后,对事件进行总结,分析事件发生的原因和处理过程中的不足之处,提出改进措施,防止类似事件再次发生。
以下是应急响应计划的步骤列表:
1. 建立安全监测系统,实时监测安全事件。
2. 当发现安全事件时,立即通知管理员。
3. 管理员对事件进行评估,确定严重程度和影响范围。
4. 根据评估结果,采取相应的处理措施。
5. 事件处理完毕后,进行总结和改进。
综上所述,网络管理与调试以及系统安全是一个持续的过程,需要管理员不断学习和实践,综合运用各种工具和技术,建立完善的防护体系,以保障网络的稳定运行和系统的安全。
超级会员免费看
1120

被折叠的 条评论
为什么被折叠?



