討人厭的 ssh 連線如何擋?

Linux Server 整天都有人在 ssh  遠端嘗試登入,最近看了實在有點厭煩,所以寫了條規則來擋,只要錯誤連線超過 20 次,就用 netfilter 擋住:

# deny for 20-times bad connections
for i in $(/usr/bin/lastb -i | /bin/awk ‘{ print $3}’ | /bin/sort | /usr/bin/uniq –c | /bin/sort -n -k 1 | /bin/awk ‘$1 > 20 { print $0 }’ | /bin/sort -n -r | /bin/awk ‘{ print  $2 }’)
do
/sbin/iptables -t filter -A INPUT -p tcp -s ${i} –dport 22 -j DROP
done

但是,萬一自己的錯誤連線次數也超過 20 次呢?在新增阻擋規則之前,得先加入『安全清單』,將自己常用的 IP 寫入『安全清單』:

/sbin/iptables -t filter -A INPUT -s W.X.Y.Z -j ACCEPT

最後的合體:

#!/bin/bash
/sbin/modprobe ip_conntrack_ftp

/sbin/iptables -t filter -F

/sbin/iptables -t filter -P INPUT ACCEPT

/sbin/iptables -t filter -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -t filter -A INPUT -s W.X.Y.Z -j ACCEPT

for i in $(/usr/bin/lastb -i | /bin/awk ‘{ print $3}’ | /bin/sort | /usr/bin/uniq -c | /bin/sort -n -k 1 | /bin/awk ‘$1 > 20 { print $0 }’ | /bin/sort -n -r | /bin/awk ‘{ print $2 }’)
do
/sbin/iptables -t filter -A INPUT -p tcp -s ${i} –dport 22 -j DROP
done

如果還有『兼任』NAT,那麼可以加入NAT的規則:

#!/bin/bash
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

echo “1″ > /proc/sys/net/ipv4/ip_forward

/sbin/iptables -t filter -F
/sbin/iptables -t nat -F

/sbin/iptables -t filter -P INPUT ACCEPT

/sbin/iptables -t filter -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -t filter -A INPUT -s W.X.Y.Z -j ACCEPT

for i in $(/usr/bin/lastb -i | /bin/awk ‘{ print $3}’ | /bin/sort | /usr/bin/uniq -c | /bin/sort -n -k 1 | /bin/awk ‘$1 > 20 { print $0 }’ | /bin/sort -n -r | /bin/awk ‘{ print $2 }’)
do
/sbin/iptables -t filter -A INPUT -p tcp -s ${i} –dport 22 -j DROP
done

/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE

廣告
本篇發表於 Linux。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s