java怎么实现redis分布式锁

2023-10-13 07:10

其他回答

入侵指什么?针对IPS,常见的UDP/ICMP/FCN 泛洪,死亡之PING,端口扫描等,防御方法有:

三层的iptables+底层的netfilter

二层的ebtables+netfilter

还有arptables,这个偶还没用过

利用上面的可以构建足够强大的防火墙,也可以自己编写防火墙模块提高过滤速度,较容易实现的是包过滤防火墙

被用来抵抗来自Internet对主机的入侵。这些安全措施主要是:
防火墙,确定了系统的来自Internet的用户对哪些TCP或者UDP端口有访问的权限。例如
:我们通过一些很简单的Web 
Server防火墙的规则设置,就可以确定这台机器只有用来
提供http服务的80端口向用户开放。
系统是不需要没有用处的守护进程的。例如:一个Web服务器一般只需要一个正在运行的
进程来服务Web页面。进程并不是就是和服务与Web页面相关联的,譬如RPC/Portmap服务
,NFS服务,X 
Font服务,DNS域名服务,其他外来的或者是没有什么用处的应用软件应
该被关掉或者是禁用。在Red Hat 
Linux的系统中,通常我们用一种运行等级的编辑器来
进行有关的设置,譬如我们可以用ntsysv 
或者tksysv来禁用其中的那些没有要求的守护
进程。
通过编辑和修改/etc/inetd.conf可以屏蔽一些不用的端口。作为一个典型的默认值,我
们安装一个新的Linux系统的时候,/etc/inetd.conf默认的打开了很多端口。所有的系
统都应该通过编辑/etc/inetd.conf,删除或者是注释掉其中的一些行,用来禁用那些没
有用处的端口,这是最基本的系统安全行为。
警戒线(Lines 
of 
Defense):
图解一、多层系统安全
这一部分,我们将讨论一个多层通道的系统安全问题。当其中一些安全层被破坏的时候
,很多安全层能够独立的应用来提供一些额外的防卫。图1就是一种多层结构的系统安全
模型。
图表中的每一层都会为自己的上一层提供额外的数据保护。例如:第一层是防火墙,如
果防火墙没有阻挡住外界的入侵尝试,那么第二层-端口守护程序就会提供额外的保护。
进一步,里面的安全系统是LIDS和LogCheck程序,在入侵尝试没有被第二层截获的时候
也会进行保护。
监控当前连接
防火墙后的第一防护层是用来监控当前与主机的连接尝试的软件包。端口守护程序包(
http://www.psionic.com/abacus/portsentry/ )提供了一些简洁和有用方式来完成这些
事情。
端口守护(PortSentry)程序的作用
端口守护程序的主要作用监控一些特殊的TCP/IP端口的活动情况。PortSentry监视并报
告一些端口的活动,其中的一种情况可能被选中,包括拒绝进一步的连接尝试。这是一
种很重要的防护措施,因为一般的黑客在入侵一个系统之前都会将会使用一些工具来探
测系统的漏洞和弱点。察觉到探测器或者是端口扫描,就可以彻底的切断一些潜在地黑
客进一步的连接尝试,中止一些带有入侵意图的进一步的端口扫描。
安装PortSentry
对于Red 
Hat的用户来说,Red 
Hat的ftp服务器上的RPM包里面包含了这个程序。这个站
点在全球都有它的镜像,你可以在www.redhat.com上面查找距离你最近的站点。我还不
能确定.deb格式的软件包中间是PortSentry这样的程序,但是我可以确认那里肯定是有
这个软件的。对于其他Linux用户来说,通过原码来安装这个软件也是相当地简单的。
推荐配置
PortSentry有很多运行模式,包括不同的UDP和TCP秘密运行的模式。我选择的运行机制
是把PortSentry绑定在那些没有被使用的或者是认为有潜在的入侵可能的TCP端口上。例
如:我将24小时连续的扫描我的web服务器上面的这些端口,port 
143 (imap2), port 
以通过这条命令:
portsentry 
-tcp
在你的系统启动的时候就使PortSentry进入基本的TCP运行模式。同时要保证PortSentr
y的配置文件portsentry.conf中包含了TCP_PORTS这行配置来扫描你需要进行扫描的端口
。
反应选项
你能通过portsentry.conf中的"quot;Response 
Options"quot;部分来详细的说明什么样的反应是P
ortSentry察觉了一些不期望的连接。通常我会使用ipchains来中断那些来自于连接的源
方的进一步连接。这个也可以通过portsentry.conf中下面这样一行来进行配置:
KILL_ROUTE="quot;/sbin/ipchains 
-I input -s $TARGET$ -j DENY 
-l"quot;
在接受来自高端口的扫描行为的时候,可以通过删除上面一行中的-l这个选项来屏蔽这
些进一步的连接,可以有效的维持系统日志空间。
监视系统日志
诸如防火墙系统、PortSentry这样的软件可以有效的监视或者是屏蔽一些端口的不期望
的连接。这样可以防止最典型的那种"quot;扫描-入侵"quot;的攻击方式。
当系统需要运行特殊的服务(例如:Apache 
Web 
Server,或者是绑定了一个DNS服务)
的时候,同时有黑客破解了这种服务中的一些攻击点,这些程序就会很不幸运的不能保
持把所有的入侵者拒之门外。绑定运行着一个容易受攻击的程序的DNS服务器,这些端口
最终总是要被一些黑客通过扫描很广范围的机器的特定的一个端口,并且会试图通过这
个端口来入侵系统。很不幸,防火墙或者是PortSentry程序会将这些入侵尝试当作正常
的合理的连接。
系统日志检测(LogCheck)
LogCheck是用来扫描系统日志文件的软件( http://www.psionic.com/abacus/logcheck
/ 
)。LogCheck会扫描系统日志文件(在Linux系统中,系统日志文件在/var/log/目录下
面),同时当系统出现一些异常的时候,LogCheck就会通过Email来通报给管理员。系统
日志文件中的异常的消息通常是表示有一些黑客正在尝试入侵或者是正在侵入系统。
安装LogCheck
LogCheck有四个主要的配置文件。在RPM版本中,这几个配置文件在/etc/logcheck目录
下面。通常我们只需要配置logcheck.ignore和logcheck.violations.ignore这两个文件
。我在安装完LogCheck后的程序一般是这样的:
允许LogCheck在正常的运行模式下面运行一次,这样将会一个巨大的输出文件,不过我
们可以把这个文件删除算了。
些新的东西,同时也是一个很大的但是仍然可以计算大小的文件。仔细的阅读这个文件
。
在文件的入口处有一些不需要我们关心的特定的字符串,如果这些字符串时一些"quot;违反安
全"quot;的片断,我们可以将这些字符串片断加入到logcheck.violations.ignore文件中;或
者当他们是"quot;异常系统事件"quot;的时候,我们就将这些字符串加到logcheck.ignore中。
在折椅歌星期中,每隔12~24小时就重复一下这些步骤。在这个阶段中,我们反复的设置
.ignore文件的过滤规则,最后剩下的就是我们的系统真正关心的了。
注意到RPM文件指定LogCheck每小时运行一次,但是我只需要每天运行一次,除非是在特
定的需要监视的系统。这样可以每天把/etc/cron.hourly/logcheck这个文件拷贝到/et
c/cron中一次。
基于内核的入侵检测
基于内核的入侵检测是一种相当巧妙的新型的Linux入侵检测系统。现在最主要的基于内
核的入侵检测系统叫做LIDS,并可以从 http://www.lids.org/ 下载。
什么是LIDS?
LIDS是一种基于Linux内核的入侵检测和预防系统。
LIDS的保护目的是防止超级用户root的篡改系统重要部分的。LIDS主要的特点是提高系
统的安全性,防止直接的端口连接或者是存储器连接,防止原始磁碟的使用,同时还要
保护系统日志文件。LIDS当然也会适当制止一些特定的系统操作,譬如:安装sniffer、
修改防火墙的配置文件。
LIDS文档工程
LIDS比安装PortSentry和LogCheck要复杂一点,但是很幸运的是,在LIDS的主页上面有
详细的安装和配置手册。
安装LIDS
首先,在安装之前,我们需要大部分最新的LIDS软件包(我使用的是0.9)和适当的内核
版本。我现在使用的是从Red 
Hat主页上下载的2.2.14-12版本的内核,因为其中包含一
些安全补丁。同时你也需要你使用的内核的一些源代码。
现在的LIDS主要是适用于2.2.14版本的内核。我安装的在2.2.14的内核的Red 
Hat 
Linu
x6.2上面安装了LIDS。在安装LIDS之前,我在ftp.redhat.com下载了最新的内核版本,
并且依照 http://www.redhat.com/support/docs/howto/kernel-upgrade/kernel-upgra
de.html 
安装了这个内核。
接着的事情就是升级内核源代码。这里我们是这样做的:
rpm -Uhv 
kernel-source-2.2.14-12.i386.rpm
然后就是编译和安装lidsadm这个程序:
cd 
/usr/local/src/security/lids-0.9/lidsadm-0.9
make
make 
install
生成一个RipeMD-160口令,这个以后将会在安装进内核的:
lidsadm 
-P
输入口令是"quot;anypass"quot;,得到秘钥"quot;d502d92bfead11d1ef17887c9db07a78108859e8"quot;。
接着,我把Redhat的配置文件拷贝到我的结构体系中,在/usr/src/linux目录下面:
cd 
/usr/src/linux/configs/
cp kernel-2.2.12-i686.config 
..
下面我们就使用下面的命令来安装LIDS:
cd /usr/src
patch -p0 同时我们应该注意到Red 
Hat所提供的内核和Linus发布的标准的2.2.14版本的内核有一
些细微的差别,因为其中包含一些修改过的驱动程序。同样lids-0.9-2.2.14-redhat.p
atch文件也是和LIDS发布的标准的lids-0.9-2.2.14.patch有一些细微的差别,不过可能
后者并不是特别适合于Red 
Hat系统。

相关文章

更多

Redis实现分布式锁详解

分布式锁一般有数据库乐观锁、基于Redis的分布式锁以及基于ZooKeeper的分布式锁三种实现方式, ...

JAVA 分布式运用技术有哪些

请问各位大侠,JAVA 分布式运用技术有哪些。类似于.NET的Remoting,WCF,WebServ ...

我看分布式--hadoop的了解

1.首先来谈谈分布式,分布式就必然有整合搜索。搜索分两部分。一是分布,二是搜索,分布-分为,本机磁盘文 ...

《Java网络编程与分布式计算》扫描版[PDF]

Java网络编程与分布式计算的内容摘要:英文版:Java Network Programming an ...

互联网分布式缓存视频教程(redis、memcached、ssdb)-尚学堂视频教程

互联网分布式缓存技术 课程主讲:互联网应用高级架构师白贺翔 涉及技 ...

Hadoop伪分布式和完全分布式配置

Hadoop的三种模式: 本地模式:本地模拟实现,不使用分布式文件系统 伪分布式模式:5个进程在一台主 ...

分布式助手Zookeeper(七) - 三劫散仙

上篇文章,散仙介绍了,分布式环境下,基于zookeeper实现的公平的锁,这篇,我们来看下,如何使用z ...

Hadoop的分布式架构改进与应用

1. 背景介绍 谈到分布式系统,就不得不提到Google的三驾马车:GFS[1],MapReduce[ ...

分布式助手Zookeeper(六) - 三劫散仙

散仙,在关于zookeeper的前几篇文章中,除了记录了zookeeper的一些基础知识,也介绍了怎么 ...

分布式助手Zookeeper(八) - 三劫散仙

散仙,在前几篇关于zookeeper的文章中,介绍了基于zookeeper实现的分布式公平锁,以及非公 ...

最新问答

更多

获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)

我用Google搜索了一个解决方案。 “EnumDisplayModeProvider”是我自己设置网站的各种模式的枚举。 public EnumDisplayModeProvider GetDisplayModeId() { foreach (var mode in DisplayModeProvider.Instance.Modes) if (mode.CanHandleContext(HttpContext)) {

如何通过引用返回对象?(How is returning an object by reference possible?)

这相对简单:在类的构造函数中,您可以分配内存,例如使用new 。 如果你制作一个对象的副本,你不是每次都分配新的内存,而是只复制指向原始内存块的指针,同时递增一个也存储在内存中的引用计数器,使得每个副本都是对象可以访问它。 如果引用计数降至零,则销毁对象将减少引用计数并仅释放分配的内存。 您只需要一个自定义复制构造函数和赋值运算符。 这基本上是共享指针的工作方式。 This is relatively easy: In the class' constructor, you allocate m

矩阵如何存储在内存中?(How are matrices stored in memory?)

正如它在“熵编码”中所说的那样,使用Z字形图案,与RLE一起使用,在许多情况下,RLE已经减小了尺寸。 但是,据我所知,DCT本身并没有给出稀疏矩阵。 但它通常会增强矩阵的熵。 这是compressen变得有损的点:输入矩阵用DCT传输,然后量化量化然后使用霍夫曼编码。 As it says in "Entropy coding" a zig-zag pattern is used, together with RLE which will already reduce size for man

每个请求的Java新会话?(Java New Session For Each Request?)

你是如何进行重定向的? 您是否事先调用了HttpServletResponse.encodeRedirectURL()? 在这里阅读javadoc 您可以使用它像response.sendRedirect(response.encodeRedirectURL(path)); The issue was with the path in the JSESSIONID cookie. I still can't figure out why it was being set to the tomca

css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)

我认为word-break ,如果你想在一个单词中打破行,你可以指定它,这样做可以解决问题: .column { word-break:break-all; } jsFiddle演示。 您可以在此处阅读有关word-break属性的更多信息。 I think word-break, with which you can specify if you want to break line within a word, will do the trick: .column { word-break

无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)

我认为您忘记在分类时间内缩放输入图像,如train_test.prototxt文件的第11行所示。 您可能应该在C ++代码中的某个位置乘以该因子,或者使用Caffe图层来缩放输入(请查看ELTWISE或POWER图层)。 编辑: 在评论中进行了一次对话之后,结果发现在classification.cpp文件中错误地删除了图像均值,而在原始训练/测试管道中没有减去图像均值。 I think you have forgotten to scale the input image during cl

xcode语法颜色编码解释?(xcode syntax color coding explained?)

转到: Xcode => Preferences => Fonts & Colors 您将看到每个语法高亮颜色旁边都有一个简短的解释。 Go to: Xcode => Preferences => Fonts & Colors You'll see that each syntax highlighting colour has a brief explanation next to it.

在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)

你考虑过第三方拼写检查吗? 您可以将在C#中开发的自定义WinForms控件插入访问数据库吗? VB6控件怎么样? 如果你能找到一个使用第三方库进行拼写检查的控件,那可能会有效。 Have you considered a third party spell checker? Can you insert a custom WinForms controls developed in C# into an access database? What about a VB6 control? If

从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)

我有同样的问题,因为我在远程服务器上有两个图像,我需要在每天的预定义时间复制到我的本地服务器,这是我能够提出的代码... try { if(@copy('url/to/source/image.ext', 'local/absolute/path/on/server/' . date("d-m-Y") . ".gif")) { } else { $errors = error_get_last(); throw new Exception($err

从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))

我不确定我完全明白你在说什么。 你能编辑你的帖子并包含你正在做的Subversion命令/操作的特定顺序吗? 最好使用命令行svn客户端,以便容易为其他人重现问题。 如果您只是想获取文件的旧副本(即使该文件不再存在),您可以使用如下命令: svn copy ${repo}/trunk/moduleA/file1@${rev} ${repo}/trunk/moduleB/file1 其中${repo}是您的存储库的URL, ${rev}是您想要的文件的版本。 这将恢复该文件的旧版本,包括最高版本