CentOS6下iptables与FTP共存方法(解决非标准端口问题)

Tips:如果想看解决方案而不是我的分析,请直接跳到文末~

为了服务器安全着想,iptables防火墙是肯定启用了的。我的iptables只允许了Web、SSH、FTP三个协议,并且为了避免大范围端口扫描,都是非标准端口。

许久不用FTP,今天登录FTP的时候发现没办法和服务器通信,具体表现在无法连接数据端口上。由于我使用的是PASV被动模式,服务器端口是随机的,思索一下即发现连接被iptables中断。使用service iptables stop停止iptables后,一切正常,遂断定为iptables阻止了FTP的连入。

但我又不想把1024~65535范围内所有的端口打开,那样当然不安全。Google之后了解到ip_nat_ftp这个模块可以达到我的需求。于是modprobe ip_nat_ftp然后service iptables restart重启防火墙测试,问题依旧。使用lsmod查询后发现,ip_nat_ftp模块竟然没有加载,而是nf_nat_ftp模块被加载了。

于是又Google,在Shorewall防火墙的一篇说明文章中发现如下说明:

Note: If you are running kernel 3.6.20 or later, then the module names are nf_nat_ftp and nf_conntrack_ftp…

可是这个对于我的问题没有帮助,因为很显然ip_nat_ftp也是nf_nat_ftp的别名,毕竟模块已经加载上了。于是我又去查询nf_nat_ftp的原理,了解到它是通过监听21端口的PASV指令来打开对应端口的防火墙的。这么一来问题就找到了:我使用的FTP端口根本就不是21,模块也就没法监听了。

找到问题后就好解决了。需要注意的是,CentOS6中/etc/modprobe.conf文件已经不存在了(但仍然可以使用,只是系统不再生成了,via)。我们需要再另外在/etc/modprobe.d/下建立一个文件。

解决方案如下:

rmmod nf_nat_ftp
rmmod nf_conntract_ftp #这一行和上一行是卸载已经载入的模块,执行时可能会报错,无视即可。
vim /etc/sysconfig/iptables-config
# 找到IPTABLES_MODULES="",修改为IPTABLES_MODULES="nf_nat_ftp nf_conntrack_ftp"
vim /etc/modprobe.d/ftp.conf #如果为CentOS6以下版本,可以尝试vim /etc/modprobe.conf
# 在这个文件中写上下面两行
options nf_conntrack_ftp ports=你的FTP端口号
options nf_nat_ftp ports=你的FTP端口号
# 保存退出
services iptables restart #重启防火墙,请注意先备份防火墙规则
iptables -nL
# 检查你的防火墙中是否有如下规则
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:你的FTP端口号
# 如果没有则将下面的两条规则添加到防火墙规则文件
-A INPUT -p tcp -m state --state NEW -m tcp --dport 你的FTP端口号 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

经过上面的操作后,再启动FTP客户端测试连接,此时应该可以顺利的连接上你的服务器了。

Falcon服务器文件监控平台安装笔记

Falcon的介绍:http://www.secrule.com/falcon/index.html

这里只记录一下安装过程。

1.检查inotify

uname -r #检查输出Linux系统内核是否达到了2.6.13以上
ls /proc/sys/fs/inotify #检查是否有max_queued_events、max_user_instances、max_user_watches三个文件

2.编译安装inotify-tools

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr
make && make install

3.下载falcon

wget http://github.com/secrule/falcon/archive/master.zip
unzip master.zip #如果提示没有unzip请自行安装 yum -y install unzip 或者 apt-get install unzip ,或者直接git clone
cd falcon-master/Release

4.修改安装前缀
因为wiki里面写的inotfy-tools的安装位置是/usr,而check.sh里写的是/usr/local,需要修改check.sh第15行修改成:

if [ -d /usr/include/inotifytools ]
原文是 if [ -d /usr/local/include/inotifytools ]

5.安装环境检查

chmod a+x check.sh
./check.sh

输出需要是:

Found inotify success!
Found inotifytools success!
Found mysql-dev environment success!

才可继续安装。如果第一行、第二行没有出现请检查上面的步骤是否安装成功,如果第三行没有出现,请安装mysql-dev

yum install mysql
yum install mysql-devel

6.安装falcon控制中心
这个是网页端,PHP写的,安装之前保证自己有Web环境,lnmp/lamp等均可。

cd ../ #请确定你切换到了falcon-master目录
cp -r falconconsole/ /home/wwwroot/falcon/ #路径请自己修改
vim /home/wwwroot/falcon/public/config.inc.php #路径同上

这里写上数据库信息,有中文注释,如果PUTTY不是utf-8编码的话记得修改,或者用ftp编辑好再上传

7.配置falcon主程序

vim src/conf/global.conf #请确定你现在处于falcon-master目录

这里设置和上面一样的MySQL地址和数据库,然后请修改需要监控的web目录,注意要以/结尾

8.编译falcon

cd Release #请确定你切换到了falcon-master/Relase目录
make

9.安装falcon数据库和控制台
访问http://<你的域名>/falcon/install.php,导入数据库并设置管理员

10.运行falcon

ls -al #检查是否有falcon文件
chmod a+x falcon #保证执行权限
nohup ./falcon start >falcon.log 2>&1 & #在后台无间断运行falcon
ls -al #检查是否生成了falcon.log日志信息

11.登录falcon
访问http://<你的域名>/falcon/,登录

12.测试falcon

touch /home/wwwroot/test.php #创建一个测试php文件
rm /home/wwwroot/test.php #把测试的php文件删除
wget https://gist.github.com/oott123/6173352/raw/2011.php -O /home/wwwroot/test.php #下载一个PHP木马
cat /home/wwwroot/test.php #观察木马是否被自动删除
ls -al /home/virus/ #观察隔离区

然后访问falcon前台观察是否有相应日志

13.设置自动启动

wget https://gist.github.com/oott123/6173433/raw/startfalcon.sh
pwd #查看当前目录
vim startfalcon.sh #编辑其中的/root/falcon/falcon-master/Release/为你的falcon目录
chmod a+x startfalcon.sh
vim /etc/rc.d/rc.local

在rc.local中加入以下

/root/falcon/falcon-master/Release/startfalcon.sh &

重启测试

使用测评:
在测试了寥寥几个文件之后,falcon多次崩溃(Segmentation fault),稳定性存疑。不过思路是好的,也许可以用一用~

附图一张Falcon

吐槽知乎日报的坑爹产品以及知乎日报网页版

知乎日报推出的一周内我就装上了这个看起来很不错的应用。第一个版本用了几周,感觉就是真的很好。内容广度堪比百科,深度也刚好适合我,导致我装了以后每天打开频次最多的APP就是知乎日报了。有的内容很有意思,会随手复制或者分享给QQ上的某些好友。

我是一个懒得更新应用的人,所以我不知道什么时候它推出了所谓的1.4版,而我还在用1.0(ps.我对版本号的记忆力不行,只是大概说一说)。看到的那一天随手更新了,然后满怀期待的打开它。首先就看到设置里多了夜间模式、大字体。果断打开了。离线下载这功能对于我没用,我一般是更新的时候就看掉了。于是就打算继续用。

接着我就遇到了大家都遇到了的奇葩问题——看到一个精彩的,打算分享给好友。戳右下角分享按钮……咦。这个要读进度是怎么回事。于是等啊等……然后我奇葩的看到一副图片出现在我的QQ聊天框里。

O…T…L……

这个分享是在反人类吗?

我特别想抓着产品的肩膀猛摇。之前的分享链接又臭又长就算了(会在后面附加&_utm*的统计信息,明文的哟,其实我觉得完全可以隐蔽一点实现),起码还是个网页,还在可以看的范畴,这下可好,变成图片了要怎么看……且不说保存到笔记里面无法搜索,对方是手机用户的情况你们没考虑吗?就算你做的图片宽度不大,对方是手机用户的情况你们考虑了,可是你们考虑了QQ这玩意会压缩图片的嘛……

然后我就选择用复制的方法来分享……好吧这个问题不知道是我自己问题还是怎么,反正我永远只能选中一行文字,没法向上或者向下。于是我“整个人都傻逼了!”

然后……然后有一天我闲得蛋疼……然后我就在我手机上把代理设成电脑上的BurpSuite然后开始监听……结果就整理了一下知乎日报1.4版所使用的API,写了一堆神奇的代码来实现了一个网页版。

顺便吐槽一句,知乎日报连API都很奇葩。比如今天是2013年8月6日,在API请求的时候URL里面是20130807才能抓到今天的消息(而不是20130806)。

好了,放解决方案,也就是知乎日报网页版:

戳这里访问(Powered By MoPass,我实在找不到合适的国内空间了,因为数据都是现抓的,放国外太慢)