技術討論區 > 系統安全討論版
[整理]sshd 安全設定 ( 設定"禁止使用ssh名單" )
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] 文章列表
[#] 下頁
[*] 上頁
前往完整版本