技術討論區 > 系統安全討論版

[整理]sshd 安全設定 ( 設定"禁止使用ssh名單" )

<< < (3/7) > >>

netman:
還有, 你想知道有哪些人對你做 full range port scan 的話:

打開 firewall 的 tcp/79
還有 xinetd 的 finger, 修改 /etc/xinetd.d/finger

--- 代碼: ---service finger
{
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/sbin/in.fingerd
        disable         = no
}

--- 程式碼結尾 ---


然後在 /etc/hosts.allow 加入一行:

--- 代碼: ---in.fingerd: ALL : spawn ( echo -e "\nWARNING %a was trying finger.\n$(date)" | mail -s "finger from %a" root ) & : DENY
--- 程式碼結尾 ---

這裡, 我只是設為發信給 root.
事實上, 你可修改為起動 firewall 將 %a 這個傳回值給 ban 掉也行.
不過, 對方要是有選擇性的做 port scan , 沒掃到 finger 的話, 那當然就沒用了...

security 有蠻多挺好玩的小技巧, 有空再跟大家做分享...  ^_^

phantom:

--- 引述: "netman" ---再補一招:

先寫一個 shell script:

--- 代碼: ---#!/bin/bash

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

LOG_FILE=/var/log/secure
KEY_WORD="Illegal user"
KEY_WORD1="Failed password for root"
PERM_LIST=/etc/firewall/bad.list.perm
LIMIT=5
MAIL_TO=root
IPT_SAV="$(iptables-save)"
bad_list=$(egrep "$KEY_WORD" $LOG_FILE | awk '{print $NF}' | xargs)
bad_list1=$(egrep "$KEY_WORD1" $LOG_FILE | awk '{print $11}' | xargs)
bad_list="$bad_list $bad_list1"

for i in $(echo -e "${bad_list// /\n}" | sort -u)
do
        hit=$(echo $bad_list | egrep -o "$i" | wc -l)
        [ "$hit" -ge "$LIMIT" ] && {
                echo "$IPT_SAV" | grep -q "$i .*-j DROP" || {
                        echo -e "\n$i was dropped on $(date)\n" | mail -s "DROP by ${0##*/}: $i" $MAIL_TO
                        iptables -I INPUT -s $i -j DROP
                }
                egrep -q "^$i$" $PERM_LIST || echo $i >> $PERM_LIST
        }
done
--- 程式碼結尾 ---


測試 script 並存好, 並記下路逕, 如 /etc/firewall/block_ssh.sh

然後在 /etc/hosts.allow 寫入該路逕:
sshd: ALL: spawn ( /etc/firewall/block_ssh.sh )& : ALLOW

這樣, 那些亂 try SSH 的家夥, 頂多能試 5 次(LIMIT 可調整), 然後就給 BLOCK 掉了.

此外, 在 PERM_LIST 的 ip, 也可提供給 iptables 的初始 script , 來個永久性封閉:

--- 代碼: ---for i in $(< $PERM_LIST)
do
        /sbin/iptables -I INPUT -s $i -j DROP
done

--- 程式碼結尾 ---

--- 引用結尾 ---


這招不錯.

另外, for Debian system, LOG_FILE 要改.

--- 代碼: ---LOG_FILE=/var/log/auth.log
--- 程式碼結尾 ---


用您的 firewall script 的話, 這是否要改 (-I 改為 -A)?

--- 代碼: --- /sbin/iptables -A INPUT -s $i -j DROP
--- 程式碼結尾 ---

phantom:

--- 引述: "netman" ---還有, 你想知道有哪些人對你做 full range port scan 的話:

打開 firewall 的 tcp/79
還有 xinetd 的 finger, 修改 /etc/xinetd.d/finger

--- 代碼: ---service finger
{
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/sbin/in.fingerd
        disable         = no
}

--- 程式碼結尾 ---


然後在 /etc/hosts.allow 加入一行:

--- 代碼: ---in.fingerd: ALL : spawn ( echo -e "\nWARNING %a was trying finger.\n$(date)" | mail -s "finger from %a" root ) & : DENY
--- 程式碼結尾 ---

這裡, 我只是設為發信給 root.
事實上, 你可修改為起動 firewall 將 %a 這個傳回值給 ban 掉也行.
不過, 對方要是有選擇性的做 port scan , 沒掃到 finger 的話, 那當然就沒用了...

security 有蠻多挺好玩的小技巧, 有空再跟大家做分享...  ^_^
--- 引用結尾 ---


用 snort 也不錯. ^_^

netman:

--- 引述: "phantom" ---用您的 firewall script 的話, 這是否要改 (-I 改為 -A)?

--- 代碼: --- /sbin/iptables -A INPUT -s $i -j DROP
--- 程式碼結尾 ---

--- 引用結尾 ---

若前面沒有衝突的規則, 用 -A 是可以的.
但, 若有諸如 -p tcp --dport 80 -j ACCEPT 之類的,
那 -A 在後面就沒啥用了...

用 -I 是肯定可行的. -A 則未必.

netman:
好了, 我將具體做法整理如下:

http://www.study-area.org/tips/ssh_tips.htm

導覽

[0] 文章列表

[#] 下頁

[*] 上頁

前往完整版本