在開通了 Linux 系統的 VPS 或伺服器後,我們有必要做一些基本的安全設定。
一、關閉 SSH 密碼登陸
首先,你需要有自己的 SSH Key,如果你使用 Windows 系統,可以用 Putty 下的 PUTTYGEN.EXE 產生私匙和公匙。
第一步,運行 PUTTYGEN.EXE
一般,我們選擇預設的 RSA 加密即可,預設的 1024 位加密足夠用,如果要保險點,可以選擇 2048 或 4096 位加密,如圖紅圈處:
第二步,點擊 Generate ,然後滑鼠隨意在空白處移動
等進度條滿了,就產生好你的 SSH Key 了:
如果要更安全一點,可以設定 Key Passphrase ,也就是密碼,這個密碼和 root 密碼不同,一旦別人擷取了你的 Key ,沒有這個密碼他也載入不了你的 Key。
第三步,點擊 Save Public Key 儲存你的公匙,整個檔案如下
| 代碼如下 |
複製代碼 |
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "showfom-rsa-key-20130701"
AAAAB3NzaC1yc2EAAAABJQAAAQEAna/D52fTZ1YNjxnwAJAUhxRdPCwar8ZfWLdw
HEmT64Zqtxrz65KRxesHFRVND8Xn1GKtuQIQMu/d5fFhEajFbjoSw/n+Mz58irzU
XDbE34Y/nxy1/iWc6aJz6lX6wT7nnDcVoqX8Be8j/8sjS7cMFarn3Iy+0bSQNON3
681+hEFM7mpoYyqrCVBpARfiiEZb8tNkfzrKJFrciZ87yaKkncPeDCIbYKjuJY2h
ciK+Y+IptLdoMj5kQkSXStJFQUfFg+s3FQJ9Istu4C7BF3ZafD4mEupA7P90RRUj
Lj95mUW/P/ebWGsMVbnxz/Xmq3OL/TOuo85umbSN44DmSB3NEQ==
---- END SSH2 PUBLIC KEY ----
|
其中中間那麼長長的一串,就是你的公匙了,可以放在伺服器的 ~/.ssh/authorized_keys ,我們應採取以下的格式:
1
| 代碼如下 |
複製代碼 |
| ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAna/D52fTZ1YNjxnwAJAUhxRdPCwar8ZfWLdwHEmT64Zqtxrz65KRxesHFRVND8Xn1GKtuQIQMu/d5fFhEajFbjoSw/n+Mz58irzUXDbE34Y/nxy1/iWc6aJz6lX6wT7nnDcVoqX8Be8j/8sjS7cMFarn3Iy+0bSQNON3681+hEFM7mpoYyqrCVBpARfiiEZb8tNkfzrKJFrciZ87yaKkncPeDCIbYKjuJY2hciK+Y+IptLdoMj5kQkSXStJFQUfFg+s3FQJ9Istu4C7BF3ZafD4mEupA7P90RRUjLj95mUW/P/ebWGsMVbnxz/Xmq3OL/TOuo85umbSN44DmSB3NEQ== showfom-rsa-key-20130701 |
其中 ssh-rsa 為加密類型, showfom-rsa-key-20130701 為說明,可以是任意文本,如 showfom-notebook
第四步,點擊 Save Private Key 產生用於 Putty 的私匙,這裡我們儲存為 showfom.ppk ,整個檔案如下
| 代碼如下 |
複製代碼 |
PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: Showfom
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIBTILl54rOaEEkv95VKR6IEZ9Y0d1IpNNQeyk+e
yHPtc7jVTmfL0oiho9s2UqquaNGmLmzLjhXRj3cPZ1VZInPFqVtgWYKWPEpGckGI
7/iTpNUuz6tKguEi5RYaEtfgKWF13qC5S8dWlk2FGv7dY5GbSoZMHZtc+zTL9Jpn
NCa5nw==
Private-Lines: 8
AAAAgEWly9TSsiciZtUpYWe/eegD+Kh/pbPSUNuG6MNOAEN8ocd5Ctsz2kI9LUkw
gSpX0j8f+kmuZU62eIKHAlGZZ+nVyklcHE7qFO2AyMCuniUYm0mgdN5gjXUBFduV
VTjIaYwd282Yo0xtjPWN0DJF3jmmsrw6pwMwaa6r6pAlKANtAAAAQQClYrYCu3eu
0GcGw9G2MVLIZoHoKYPL2e6HjfPQhvsze6AKUzpTF/DGMkBFY6dH//0zSoHue2jn
gNsaLQygBvT/AAAAQQCArGNL76eXHtR28TRY2PONg8ij3YN9mCzYG3sDsV8feGAk
RyZ8T5b6xZuf9UyvZ1lIA10i7ULZ63s2hvCZUxthAAAAQD+auXN8fUAylROh8zTM
14FyY7GRwdN7y7+EtZ8NuVDLvZP9Svpd4V5Ti9LpqjtiUcp0eELCd5i7zxyV2oHe
U78=
Private-MAC: ce0968aff198e2c2550704625b23ba7575e6b260
|
這個 showfom.ppk 你需要通過 Putty 目錄下的 PAGEANT.EXE 匯入,這樣你就可以不需要輸入 root 密碼即可登入你的 VPS。
PS: WinSCP 和 Putty 的 SSH Key 是通用的,只需要匯入一次即可。
但是 Putty 的 Private Key 是不標準的,只能用於 Putty 或 WinSCP ,如果你使用 Xshell 4 ,則需要轉換成 rsa 檔案,可以在 PUTTYGEN.EXE 上方菜單裡的 Conversions > Export OpenSSH Key 方式轉換。
第五步,匯入你的 Linux VPS 或伺服器
如果你本地是 Linux 案頭環境,可以很簡單的一條命令搞定:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@198.51.100.100但是大多數使用者還是 Windows 使用者,所以我建議兩種比較簡單的方法
1、把自己的公匙放在 https://launchpad.net/ 網站,並得到類似 https://launchpad.net/~showfom/+sshkeys 這樣的地址,然後通過以下命令匯入你的 Key
curl https://launchpad.net/~showfom/+sshkeys > ~/.ssh/authorized_keys如果沒有 .ssh 目錄,可以建立立一個
mkdir .ssh2、也可以直接寫入 authorized_keys 檔案
cat >>/root/.ssh/authorized_keys<<EOF ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAna/D52fTZ1YNjxnwAJAUhxRdPCwar8ZfWLdwHEmT64Zqtxrz65KRxesHFRVND8Xn1GKtuQIQMu/d5fFhEajFbjoSw/n+Mz58irzUXDbE34Y/nxy1/iWc6aJz6lX6wT7nnDcVoqX8Be8j/8sjS7cMFarn3Iy+0bSQNON3681+hEFM7mpoYyqrCVBpARfiiEZb8tNkfzrKJFrciZ87yaKkncPeDCIbYKjuJY2hciK+Y+IptLdoMj5kQkSXStJFQUfFg+s3FQJ9Istu4C7BF3ZafD4mEupA7P90RRUjLj95mUW/P/ebWGsMVbnxz/Xmq3OL/TOuo85umbSN44DmSB3NEQ== showfom-rsa-key-20130701 EOF
在某些服務商的 CentOS 系統裡,由於開啟了 SELinux ,預設是禁止了 .ssh 目錄的許可權的,可以用下面的命令釋放保留:
restorecon -R -v /root/.ssh如果遇到 authorized_keys 許可權問題,可用如下命令解決:
chattr -i authorized_keys然後你可以重啟開啟一個 SSH 視窗,測試是否不需要輸入密碼即可用 root 登陸。
第六步,關閉 SSH 密碼登陸
編輯 SSH 設定檔:
vim /etc/ssh/sshd_config找到
#PasswordAuthentication yes並改為
PasswordAuthentication no儲存,退出,重啟 SSH 服務
Ubuntu 下:
/etc/init.d/ssh restartCentOS 下:
/etc/init.d/sshd restart好了,這樣禁止 SSH 密碼登陸就大功告成,這一步就拒絕了 90% 的入侵危險,當然,你自己的私匙一定要儲存好,否則被別人偷走可是不要求輸入密碼就能進你的伺服器哦。
二、安裝 CSF 防火牆屏蔽嘗試入侵伺服器的 IP
CSF 防火牆安裝略簡單,幾個命令即可搞定:
rm -fv csf.tgz
wget http://www.configserver.com/free/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
然後運行 perl /usr/local/csf/bin/csftest.pl 檢測是否安裝成功
為了防止系統誤屏蔽本地 IP,可以修改 /etc/csf/csf.allow 和 /etc/csf/csf.ignore 檔案加入你需要的白名單 IP ,然後用 csf -r 命令重啟讀取設定檔即可。
三、用 iptables 只開啟常規連接埠
一般我們只需要開啟 22, 53, 80, 443 這三個常見的對外開放連接埠,可以使用如下命令
清空 iptables 預設規則
iptables -F允許 22 連接埠進入和返回
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
允許 53 連接埠,一般作為 DNS 服務使用
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
允許本機訪問本機
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
允許所有 IP 訪問 80 和 443 連接埠,一般作為 http 和 https 用途
iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
儲存配置
iptables-save > /etc/sysconfig/iptables重新載入 iptables
iptables -L四、安裝 fail2ban 屏蔽並舉報掃描 SSH 連接埠的 IP
有很多精力旺盛的傢伙會整天掃描 SSH 密碼,當然直接關閉 SSH 密碼登陸即可防止,但是為了給他們一點教訓,可以安裝 fail2ban ,屏蔽之餘,還能自動寫舉報信給 IP 所在的 ISP。
CentOS 下安裝:
匯入 epel 源:
CentOS 6.x 32 位:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmCentOS 6.x 64 位元:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm安裝 fail2ban
yum -y install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
service fail2ban start
Ubuntu / Debian 下安裝:
apt-get install fail2ban -y通過查看 /var/log/fail2ban.log 檔案即可知道有哪些精力過剩的傢伙在整天掃描你的 SSH 了。
四、使用DDos deflate簡單防落CC和DDOS攻擊
使用netstat命令,查看VPS當前連結確認是否受到攻擊:
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
IP前面的數字,即為串連數,如果說正常網站,幾十到一百都屬於正常串連,但出現幾百,或上千的就可以墾定這個IP與你的VPS之間可能存在可疑串連現象。
可以使用iptables直接BAN了這個IP的永久訪問:
iptables -A INPUT -s 12.34.56.78 -j DROP
使用軟體DDos deflate來自動檢測並直接BAN掉的方法,首先要確認一下iptables服務狀態,預設CENTOS就安裝的,不看也行。
service iptables status
安裝DDos deflat:
wget http://www.inetbase.com/scripts/ddos/install.sh
chmod +x install.sh
./install.sh
安裝後需要修改/usr/local/ddos/ddos.conf,主要是APF_BAN=1要設定成0,因為要使用iptables來封某些可疑串連,注意EMAIL_TO=”root”,這樣BAN哪個IP會有郵件提示:
##### Paths of the script and other files
PROGDIR=”/usr/local/ddos”
PROG=”/usr/local/ddos/ddos.sh”
IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名單
CRON=”/etc/cron.d/ddos.cron” //定時執行程式
APF=”/etc/apf/apf”
IPT=”/sbin/iptables”
##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with –cron
##### option so that the new frequency takes effect
FREQ=1 //檢查時間間隔,預設1分鐘
##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150 //最大串連數,超過這個數IP就會被屏蔽,一般預設即可
##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=1 //使用APF還是iptables。推薦使用iptables,將APF_BAN的值改為0即可。
##### KILL=0 (Bad IPs are’nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1 //是否屏蔽IP,預設即可
##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO=”root” //當IP被屏蔽時給指定郵箱發送郵件,推薦使用,換成自己的郵箱即可
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600 //禁用IP時間,預設600秒,可根據情況調整
五、使用iftop查看詳細網路狀況
安裝IFTOP軟體:
yum -y install flex byacc libpcap ncurses ncurses-devel libpcap-devel
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
tar zxvf iftop-0.17.tar.gz
cd iftop-0.17
./configure
make && make install
安裝後,使用iftop運行,查看網路情況。TX,發送流量;RX,接收流量;TOTAL,總流量;Cumm,運行iftop期間流量;peak,流量峰值;rates,分別代表2秒、10秒、40秒的平均流量。
快速鍵:h協助,n切換顯示IP主機名稱,s是否顯示本機資訊,d是否顯示遠端資訊,N切換連接埠服務名稱,b切換是否時數流量圖形條。
因為近期不少客戶的 VPS 或伺服器被駭客入侵,原因都是用了很簡單的 root 密碼,所以考慮以後賣無管理型的 VPS 時,直接做個屏蔽密碼的系統,使用者購買的時候提交自己的 SSH Key ,或者系統分配你一個 SSH Key ,這樣就會安全多。國外的 Amazon EC2、 DigitalOcean 和 HPCloud 均有匯入自己 SSH Key 並預設屏蔽密碼的方式,大大增加了安全性。
當然也可以禁止ROOT登陸
先添加一個新帳號 111cn.net ,可以自訂:
useradd 111cn.net
給 111cn.net 帳號設定密碼:
passwd 111cn.net
仍舊是修改/etc/ssh/sshd_config檔案,第39行:#PermitRootLogin yes,去掉前面的#,並把yes改成no,然後,重啟SSH服務。以後,先使用 111cn.net 登陸,再su root即可得到ROOT系統管理權限。
login as: 111cn.net
111cn.net@ip password:*****
Last login: Tue Nov 22 15:18:18 2011 from 1.2.3.4
su root
Password:*********** #注這裡輸入ROOT的密碼