在完成 最小安裝網路設定 之後,此時你的 CentOS 已經處於 On Live 狀態,在預設的安裝中,CentOS 會內建並啟動 SSH 遠端連線的服務,且啟動防火牆,只允許 ICMP 與 SSH 連線,這表示你已經可以透過網路連線,而不再需要直接操作實體主機。

但,這樣就夠安全了嗎?其實 SSH 一點都不安全,當你的主機開啟此類服務時,表示任何人都可能透過網路的方式來嘗試連線到你的主機,透過 Port 掃瞄、字典檔或暴力破解,無論如何,root 密碼最終還是會被破解,而你的主機就淪為駭客的溫床。

因此,本文將引導大家透過設定 SSH ,降低被攻擊的可能,在配合防火牆的配置,只允許許可的網段連線,讓駭客無從而入。最後再針對環境配置,讓系統運作更加乾淨利落。

一、使用 SSH 連線 (PuTTY , PieTTY)

在剛安裝完後的主機,預設就會開啟 SSH 服務,而 Port 也為預設的 22,要遠端連線這個服務,就必須去下載 SSH 的 Client 軟體,一般在 Windows 環境下,幾乎所有使用 Linux 系統的玩家,都會推薦使用 PuTTY (支援中文的版本為 PieTTY) 這一套來連線。

使用 Pietty 來連線 SSH 服務

只要輸入您的主機 IP 與 Port ,就會透過網路遠端連線到該主機

image

使用 SSH 第一次連線時,會進行 RSA2 的金鑰交換,來達成整個連線,傳輸資料的安全(加密傳輸),這就是 SSH 比一般連線還安全的原因(能防止中途攔截時,封包內容被解讀)

image

再來就會看到登入畫面,輸 root 帳戶與密碼就會登入成功了,這也意味著任何能夠知道 IP 的人,都能嘗試登入你的 root 帳號

二、設定 SSH 服務

如上面所說,目前的 SSH 是可能會被任何人連線的,因此,我們可以透過 SSH 服務的設定檔來增加安全性,目標作以下幾項變更:

  1. 更改 Port 為 3322 (防止掃瞄Port)
  2. 不允許 root 登入(自己建立另一個新使用者來登入)
  3. DNS反查關閉(加快登入速度)
  4. 只允許指定的帳號登入(如範例為 yenpai 和 jess)

SSH 服務的設定檔 /etc/ssh/sshd_config

[root@localhost ~]# vi /etc/ssh/sshd_config

Port 3322
PermitRootLogin no
UseDNS no
AllowUsers yenpai jess

[root@localhost ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
[root@localhost ~]#

設定完後要重啟服務(service sshd restart)才會真正生效,可以透過 netstat 指令來確認重啟後的 SSH 服務是否以 Port 3322 來接受連線

[root@localhost ~]# netstat -ant | grep :3322
tcp  0  0 0.0.0.0:3322   0.0.0.0:*   LISTEN
tcp  0  0 :::3322        :::*        LISTEN

目前 SSH 的 Port 已經被更改到 3322,並且 root 帳戶無法登入,所以要建立另一個使用者帳戶來登入(adduser 新增帳戶,passwd  設定帳戶密碼)

[root@localhost ~]# adduser yenpai
[root@localhost ~]# passwd yenpai
Changing password for user yenpai.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#

三、設定防火牆

目前 SSH 的 Port 已經被更改到 3322,並且 root 帳戶無法登入,但實際上,預設的防火牆(iptables)是僅接受 Port 22 的連線,所以目前是沒有任何人可以透過網路來連線到 Port 3322 的。當我們未來新增一個服務時,也會希望開啟相對應的防火牆設定,因此,我的習慣是將 iptables 設定撰寫成一個 Shell Script 檔,日後只要更改這個檔案並執行,新的 iptables 設定就會生效。

在 root 的家目錄產生一個命名為 set_iptables.sh 的新檔案(你可以自由命名)

[root@localhost ~]# vi ~/set_iptables.sh

#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH

iptables -F
iptables -X
iptables -Z

iptables -P   INPUT DROP
iptables -P  OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

### 允許本機和已經建立連線的封包通過 ###
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

### icmp 全部開放 ###
iptables -A INPUT -p icmp -j ACCEPT

### sshd 內網 開放 ###
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24   --dport 3322  -j ACCEPT

### 儲存設定檔給下次開機使用 ###
iptables-save > /etc/sysconfig/iptables

執行這個 Shell Script 並查看目前的 iptables 設定

[root@localhost ~]# sh ~/set_iptables.sh
[root@localhost ~]#
[root@localhost ~]# iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  192.168.1.0/24       0.0.0.0/0           tcp dpt:3322

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@localhost ~]#

從上面可以發現,目前 iptables 設定只允許本機、ICMP 封包和在 192.168.1.0/24 網段的 SSH 連線,這樣是不是安全許多了呀。

image

下次要新連線主機時,就要記得你的 Port 已經被更改為 3322 喔。

四、一些基本的調效(非必要)

其實在 CentOS 安裝時若選用最小安裝,那系統已經是十分乾淨,直接運作都十分穩定,以下設定僅是提供參考,可視情況再微調。

關閉 SELinux

sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
setenforce 0

安裝常用的工具

#網路工具
yum -y install sudo wget openssh-clients

#排程,發信
yum -y install vixie-cron crontabs postfix

設定開機時自動啟用的服務(僅列出習慣會開的服務)

chkconfig crond           on
chkconfig iptables        on
chkconfig lvm2-monitor    on
chkconfig messagebus      on
chkconfig network         on
chkconfig rsyslog         on
chkconfig sshd            on
chkconfig udev-post       on

更新所有套件

yum -y update

修改語系(通常預設為 UTF8 就可,但也可能需要建構 BIG5 環境)

vi /etc/sysconfig/i18n

#LANG="en_US.UTF-8"
LANG="en_US"
SYSFONT="latarcyrheb-sun16"

修改本機 tty console (使用網路 SSH 來連,不需開太多的 Console 端)

vi /etc/sysconfig/init
ACTIVE_CONSOLES=/dev/tty[1-2]
Related Posts Plugin for WordPress, Blogger...

您可以延伸閱讀這些文章:

  1. [教學] 在 CentOS 中使用 Nginx 來架設 Web 伺服器
  2. [教學] CentOS 6.3 安裝 – (2) 網路設定篇
  3. [教學] CentOS 6.3 安裝 – (1) 最小安裝篇
Tagged with:
 
About The Author

阿百

大家好,我是陳彥百(YenPai Chen)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

*

你可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>