标签归档:linux

linux下批量屏蔽ip

昨晚,当我再次打开自己博客时,居然我的博客再次出现了502错误,就像wordpress xmlrpc攻击解决 中的一样,我想,这次难道又和上次一样遭到了xmlrpc攻击?

1.从访问日志确认是否遭受攻击
想到这里,赶快ssh登录到我的博客服务器,执行命令,

tail -f /var/log/nginx/access.log

好啊,果然又是刷屏日志,

185.106.92.160 - - [10/Apr/2016:06:42:31 +0000] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (co
mpatible: MSIE 7.0; Windows NT 6.0)"
185.130.5.195 - - [10/Apr/2016:06:42:41 +0000] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (com
patible: MSIE 7.0; Windows NT 6.0)"
185.130.5.195 - - [10/Apr/2016:06:43:05 +0000] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (com
patible: MSIE 7.0; Windows NT 6.0)"
54.169.13.73 - - [10/Apr/2016:06:43:06 +0000] "POST /wp-cron.php?doing_wp_cron=1460270585.476536035537
7197265625 HTTP/1.0" 499 0 "-" "WordPress/4.4.2; http://idocbox.com"
185.106.92.160 - - [10/Apr/2016:06:43:12 +0000] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (co
mpatible: MSIE 7.0; Windows NT 6.0)"
185.130.5.195 - - [10/Apr/2016:06:43:36 +0000] "POST /xmlrpc.php HTTP/1.0" 499 0 "-" "Mozilla/4.0 (com
patible: MSIE 7.0; Windows NT 6.0)"

2.确认iptables规则
如此频繁的访问造成了服务器响应超时,从而无法正常对外服务。记得上次,我明明添加了类似这样的规则,

sudo iptables -A INPUT -s 185.130.5.0/16 -j DROP

应该可以堵住来自185.130.5.*的ip的请求的,为何这次还是出现了185.130.5.195 这个呢? 难道我上次添加的规则丢失了,此时执行,

sudo iptables --list

里面应该没有那条添加的规则了。可能这条规则在服务器重启时没有加载或者不小心执行过,

sudo iptables --flush

而导致规则被清空。

好了,这样发现一个ip添加一个的方式有些让人疲惫和被动,我得找找更好的方案!

3. 批量屏蔽ip访问
google 了下,找到一篇很好的文章 如何在 Linux 下大量屏蔽恶意 IP 地址,打开照着进行操作,发现里面部分命令有些错误,部分内容描述不清,另外也没用解决重启后iptables规则丢失问题。那我就不断参考他们来实践,并整理出正确的操作步骤。

3.1 安装ipset
为了使用iptables批量屏蔽ip,我们需要借助一个叫做ipset的工具。为此,首先请安装ipset,

 sudo apt-get install ipset

3.2获取一个已有的ip黑名单列表
在网络的世界里,总有一些不为人知的黑色产业链进行着各种可恶攻击,它们试图破坏别人的服务器、攻破并窃取他人信息,而也有些人总不断的发现这些攻击者的ip,并将它们公布出来,供大家参考,屏蔽这些ip访问。比如 iblocklist.com就是一个ip黑名单分享网站。我将一步步教大家如何从这个网站获取ip黑名单。
1) 安装python-pip
python-pip时python的包管理工具,通过下面命令安装,

sudo apt-get install python-pip

2) 安装iblocklist2ipset包

 sudo pip install iblocklist2ipset

3) 通过iblocklist2ipset将ip黑名单转换为ipset

iblocklist2ipset generate --ipset banthis "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=" > banthis.txt

注意:参考的文章里面使用的链接是,

http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz

需要去掉后面的gz。如果带上gz会导致parse时出现编码错误。
这时,我们可以通过more命令查看得到的文件banthis.txt,

more banthis.txt

可以看到类似这样的内容,

create banthis hash:net family inet hashsize 131072 maxelem 237302
add banthis 1.2.4.0/24
add banthis 1.2.8.0/24
add banthis 1.9.75.8/32
add banthis 1.9.96.105/32
add banthis 1.9.102.251/32
add banthis 1.9.189.65/32
add banthis 1.16.0.0/14

4)修改banthis,添加要增加屏蔽的ip
因为我希望在刚才得到的这个文件里面添加一些新的ip地址,那么这个ipset的长度就需要扩展下,我的做法比较简单,直接将它的size扩大了10倍,

sudo vi banthis.txt

修改第一行内容为如下,并添加攻击我的ip

create banthis hash:net family inet hashsize 1310720 maxelem 2363090
add banthis 46.0.0.0/8
add banthis 54.0.0.0/8
add banthis 185.0.0.0/8
add banthis 1.2.4.0/24
add banthis 1.2.8.0/24
add banthis 1.9.96.105/32

保存该文件。

3.3 配置启动时自动配置iptabls脚本
1) 保存iptables规则
为了服务器重启时仍然可以加载先前配置,我们将iptables规则保存到一个单独文件中,

sudo iptables-save > /home/ubuntu/iptables-rules.conf

2) 配置网络激活后的执行脚本
在linux下(debian, ubuntu),当网络激活后,linux会自动执行,

/etc/network/if-up.d

目录下面的脚本。
我们就是要借助这个机制,在这个目录下面添加一个脚本来执行这样iptables相关规则,

cd /etc/network/if-up.d
sudo vi idocboxiptables

输入如下内容,

#!/bin/sh
iptables-restore < /home/ubuntu/iptables-rules.conf
ipset restore -f /home/ubuntu/banthis.txt
iptables -I INPUT -m set --match-set banthis src -p tcp --destination-port 80 -j DROP

注意:我的iptables-rules 和 banthis.txt文件在/home/ubuntu/目录下,你配置的时候应该使用这两个文件在你自己服务器上的位置。

然后保存上面的文件。
将文件标记为可执行文件,执行,

sudo chmod +x idocboxiptables

这样就配置完成了,接下来我们重启服务器,看看我们的配置是否生效。

4. 重启服务器,验证
1) 重启服务器,

sudo reboot

等待若干秒,
2) 登录到服务器后台, 查看iptables

sudo iptables --list

应该显示的内容里面包含如下一条信息,

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere             match-set banthis src tcp dpt:http

这说明我们的规则在服务器启动后已经正确加载。

3) 查看是否还有攻击ip

tail -f /var/log/nginx/access.log

如果没有刷屏日志,也没用刚才屏蔽的那几个ip的访问日志了,则说明已经屏蔽成功。

恩,是的啊!这时我的博客确实速度很快了,已经不出现502错误了!

操作环境信息:
ubuntu 14.04 server

参考文章:
1)如何在 Linux 下大量屏蔽恶意 IP 地址 http://blog.jobbole.com/84478/
2)How to run iptables automatically after reboot on Debian https://ip-news.net/2016/03/22/how-to-run-iptables-automatically-after-reboot-on-debian/
3)iptables and ipsets http://blather.michaelwlucas.com/archives/1679
4)ipset http://ipset.netfilter.org/ipset.man.html

gitlab 8.5之持续集成配置

git lab 8.0版本集成了持续集成功能,这个功能非常方便,可以让你每次提交都执行各种动作,比如单元测试、打包、部署包等, 保证产品质量。这么好的功能怎么用呢?
本文将以linux上安装的gitlab 8.5 社区版为例进行说明。我们假设你已经成功安装或者升级到了这个版本,并且支持http方式clone或者fetch代码(gitlab持续集成时需要通过http方式获取代码)。如果没有,请参考gitlab 官方文档:http://doc.gitlab.com/ce/

我以java项目为例(持续集成与项目语言无关),假设这个gitlab中的项目叫做 hello.

1. 添加.gitlab-ci.yml文件
我们首先需要在项目的根目录中增加一个名为:.gitlab-ci.yml 的文件,这个文件就是用来进行持续集成的配置文件,里面会包含你要执行的脚本等内容,比如我的内容为,

install:
  script:
    - mvn clean install
  tags:
    - hello

这段内容是什么意思呢? 执行一个名字为install的阶段,执行脚本为,

mvn clean install

执行用的标签是hello. 这个hello将用来匹配要使用的gitlab-runner实例。

将这个文件添加到项目中,push到gitlab里面。然后gitlab将触发持续集成,这时,当你打开你这个项目的gitlab主页,点击Builds菜单,你将会看到status 为”pending”的一条集成记录,这说明这个build还没有开始执行。这是因为我们还有gitlab-runner实例没有配置。

2. 配置gitlab runner
下面需要配置点击“pending”,会看到一段文字描述,

This build is stuck, because the project doesn't have any runners online assigned to it. 
Go to Runners page

这个是告知我们因为没有gitlab runner实例所以不能执行。点击它的“Runners page” 链接,会进入一个引导页面,找到如下类似内容,

How to setup a new project specific runner
Install GitLab Runner software. Checkout the GitLab Runner section to install it
Specify following URL during runner setup: http://yourgit-domain/ci
Use the following registration token during setup: CAqZLxBssB6KBFJxxDH-Ff
Start runner!

这段内容告知我们需要先安装gitlab runner, 然后进行配置。好的,先 https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md 到了“Register the runner”环节后,可以参照下面执行,录入的几个参数就是上面红色字体部分。在下面输入tags部分时,tags值和.gitlab-ci.yml里面的tags保持一致,这样gitlab-ci才能和我们下面创建的这个gitlab runner实例关联上。

sudo gitlab-ci-multi-runner register

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci )
http://yourgit-domain/ci
Please enter the gitlab-ci token for this runner
CAqZLxBssB6KBFJxxDH-Ff
Please enter the gitlab-ci description for this runner
hello
Please enter the gitlab-ci tags for this runner (comma separated):
hello
Registering runner... succeeded                     runner=CAqZLxBs
Please enter the executor: docker-ssh, virtualbox, ssh, shell, parallels, docker:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

注意,这里我们选择executor为shell就可以,shell是通过我们的shell执行脚本,如果选择docker或者其它还需要进行更多配置。

这样我们就配置完成了。然后,再次进入你的hello项目的主页,看看Builds菜单下面,是不是状态变成了success ? 点开它,你将看到一段执行脚本的执行过程,类似这样(我省略了很多输出)

gitlab-ci-multi-runner 1.0.4 (014aa8c)
Using Shell executor...
Running on hserver...

....

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
...
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.046 sec

Results :

Tests run: 6, Failures: 0, Errors: 0, Skipped: 0

...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18 seconds
[INFO] Finished at: Thu Mar 10 22:42:04 CST 2016
[INFO] Final Memory: 39M/519M
[INFO] ------------------------------------------------------------------------

Build succeeded.

是的,就是这么简单!

3. 深入学习
更多配置.gitlab-ci.yml的内容可参考:http://doc.gitlab.com/ce/ci/quick_start/README.html, 更多配置gitlab runner的细节参考:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md

好好享受gitlab带给我们的效率和快乐吧!

linux mint xfce 在登录界面隐藏用户

如果你不希望某些用户出现在您的linux mint xfce的登录界面,可以执行以下操作:

sudo vi /etc/mdm/mdm.conf

会看到如下类似内容,

[daemon]

[security]

[xdmcp]

[gui]

[greeter]

[chooser]

[debug]

在[greeter] 节点下添加如下内容,

Exclude=nobody,user1,user2

其中,user1和user2是你不希望显示在登录界面的用户名。修改后内容类似,

[daemon]

[security]

[xdmcp]

[gui]

[greeter]
Exclude=nobody,user1,user2
[chooser]

[debug]

然后保存,重启即可。