注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

FY

Johnson 's Blog

 
 
 

日志

 
 

ssh security 作业小结  

2012-04-24 22:37:50|  分类: LINUX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
#########################
yum install  xinetd

/etc/services :
www_open_ssh  56686/tcp
**********************************
/etc/xinetd.conf
defaults {          
log_type        = SYSLOG daemon info           
log_on_failure  = HOST            
log_on_success  = PID HOST DURATION EXIT           
cps         = 50 10         
instances   = 50             
per_source  = 10              
v6only          = no           
groups          = yes         
umask           = 002 
}  
includedir /etc/xinetd.d

**************************************

/etc/xinetd.d/www_open_ssh:

service www_open_ssh
{
        
        log_on_success  = HOST
        log_on_failure  += USERID
        disable = no
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        server          = /var/www/iptables/sshopen.sh
}

##########################



/etc/iptables/sshopen.sh:
#!/bin/bash

PATH=/sbin:/bin:/usr/bin:/usr/sbin

list_dir=/var/www/ssh_open_txt
list_file=$list_dir/allow_ssh.txt
bad_list=$list_dir/bad_ip.txt
auth_log=$list_dir/xinetd.log
trusted_ip="127.0.0.1"
chain_name=ssh_rules
mail_to=root

#clear chain if exits ,or create chain

/sbin/iptables -L -n | /bin/grep  "^Chain $chain_name" && { 
/sbin/iptables -F $chain_name 
true
} ||{
        iptables -N $chain_name
        iptables -I INPUT -p tcp --dport 22 -j $chain_name
}

#clear chain on demand
[ "$1" = clear ] && {
iptables -F $chain_name
        cat /dev/null > $list_file
        exit 0
}

# do nothing while list is empty
[ -s $list_file ] || exit 1

# deny connection if host dosn't math to list
host_ip=$(grep 'from=' $auth_log | tail -1 | awk -F'=' '{print $NF}')
list_ip=$(cat $list_file)

if [ -n "$host_ip" -a "$host_ip" != "$list_ip" ]; then
    echo -e "${trusted_ip/ /\n}" | grep -q "$host_ip" || {
        /sbin/iptables-save | grep -q "INPUT -s $host_ip -j DROP$" || {
                /sbin/iptables -I INPUT -s $host_ip -j DROP
                echo $host_ip >> $bad_list
                echo "$host_ip is blocked by $0 on $(date)" | mail -s "block ip" $mail_to
        }
    }
    exit 2
fi

# add rule
iptables -A $chain_name -p tcp --dport 22 -s $(< $list_file) -j ACCEPT && \
        echo "ssh opened to $(< $list_file)  on $(date)" | \
        mail -s "sshopen" $mail_to


exit 0




##########################################
iptables
--new     -N chain            Create a new user-defined chain


5,使用用户自定义链:
iptables -N brus
iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP
iptables -A INPUT -s 0/0 -d 0/0 -j brus
此例子的意思是:
第一句建立了一个叫做brus的用户自定义链;
第二句用-A参数添加了一条用户自定义的封堵规则;
第三句向默认的INPUT链添加一条新规则,使所有的包都由brus自定义链处理。


#################################
iptables -N chain-name

man iptables 
...... 
-j, --jump target 
This specifies the target of the rule; i.e., what to do if the 
packet matches it. The target can be a user-defined chain 
(other than the one this rule is in), one of the special builtin 
targets which decide the fate of the packet immediately, or an 
extension (see EXTENSIONS below). If this option is omitted in 
a rule, then matching the rule will have no effect on the 
packet's fate, but the counters on the rule will be incremented

iptables -A INPUT -j chain-name 





**********************************

list_dir=/var/www/ssh_open_txt
list_file=$list_dir/allow_ssh.txt
bad_list=$list_dir/bad_ip.txt
auth_log=$list_dir/xinetd.log
trusted_ip="127.0.0.1 192.168.0.0/24"
chain_name=ssh_rules
**********************************
# cat > /etc/cron.d/sshopen <<END
*/5 * * * *     root    /var/www/iptables/sshopen.sh clear
END

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/5 * * * *     root    /sbin/iptables -F ssh_rules
*/5 * * * *     root    /bin/cat /dev/null > /var/www/ssh_open_txt/allow_ssh.txt

**********************************
iptables -I INPUT -p tcp --dport 56686 -j ACCEPT
************************************
$ telnet server.machine 56686
#########################################
自定义的chain ssh_rules加入到INPUT后,还可以再加入到INPUT里去,但是怎样从INPUT里删除这个自定义的chain呢?
加两次,并且这个自定义的chain的policy是多少?
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ssh_rules  all  --  anywhere             anywhere            
DROP       tcp  --  anywhere             anywhere            tcp dpt:http 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain ssh_rules (1 references)
target     prot opt source               destination         
这种情况下会导致无法访问HTTP,所以个人猜测如果ssh_rules这个链是空的话,那么,在INPUT里也可以把ssd_rules这一行看成空的.
#######################################Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ssh_rules  all  --  anywhere             anywhere            
DROP       tcp  --  anywhere             anywhere            tcp dpt:http 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain ssh_rules (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
这种情况下就可以访问了,它应该相当于在DROP 上面存在一行ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 一样.

########################################

  评论这张
 
阅读(112)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018