因應個資法學務系統調整規畫建議
臺中市教網中心 黃國順 2012/10/5
一、分割校內網路達到實體網路區隔 二、學務系統的調整
三、建置學務系統備份機制 四、建置 LOG 系統
一、分割校內網路達到實體網路區隔
為有效控管存取機敏(學務) 系統,在實體網路上一定要進行區隔,也就是說 當學校同仁存取學務系統時都必須經過防火牆過濾與記錄。建議校內如下圖區分 成 5 個網段,校內各網段若區分愈細當然控管就可以更加精細,但管理及設定就 愈複雜。
說明及規畫如下:
1. 各區(ZONE) 說明:
區名 說明 IP RANG 安全
等級 WAN/Internet 位於外部,為各類攻擊入侵的主要
來源。
0.0.0.0/0 0
DMZ 提供對外(Internet) 服務的伺 服器置於本網段,例如 WWW DNS。
DMZ 網段為外部使用者可直接存取 的區域,屬於隨時可能被入侵的區 域,因此不可把存放機敏資料的伺 服器置於此區。
163.17.x.0/27 30
Campus 校內一般使用者所在區。 163.17.x.128/25 50 Intranet 提供校內服務伺服器置於此區,例
如學務系統。
163.17.x.32/27 或 192.168.a.0/24
80
DB/Backup 備份伺服器置於此區,原則上不允 許其他區電腦直接存取本區伺服 器。
163.17.x.64/27 或 192.168.b.0/24
100
※若防火牆只能設定 4 個區域(例如 FG-400 不啟用 root 功能時),則請將 DB/Backup 與 Intranet 合併。
2. 各區安全等級為 DB/Backup> Intranet > Campus >DMZ>Internet 。安全等 級高的區域預設可以存取等級較低的區域。安全等級較低的區域預設無法存 取等級高的區域,因此要存取安全等級較高的區域時,則需建立額外開放之 防火牆規則。
3. 防火牆上的規則建議以白名單方式表列,並建立下表記錄且與防火牆同步:
來源介面 目的介面 來源 IP 目的 IP 服務 來源
PORT
目的 PORT 備註
WAN DMZ any 163.17.x.1 TCP/UDP any 53 DNS
WAN DMZ any 163.17.x.2 TCP any 80 WWW
Campus Intranet 163.17.x.128/25 163.17.x.33 TCP any 80,443 SFS
DMZ WAN 163.17.x.0/27 any any any any
Campus WAN 163.17.x.128/25 any any any any
Campus DMZ 163.17.x.128/25 163.17.x.0/27 any any any
Intranet WAN 163.17.x.32/27 Any any any any 選用
Intranet DMZ 163.17.x.32/27 163.17.x.0/27 any any any Intranet Campus 163.17.x.32/27 163.17.x.128/25 any any any Backup DMZ 192.168.b.0/24 163.17.x.0/27 any any any Backup Intranet 192.168.b.0/24 163.17.x.32/27 any any any
※上面的表格的 IP 資料請按照校內規畫自行修改 4.
4.
4.
4. 建議學務系統僅限校內存取建議學務系統僅限校內存取建議學務系統僅限校內存取建議學務系統僅限校內存取,,,以避免因系統漏洞或設定問題產生遭入侵,以避免因系統漏洞或設定問題產生遭入侵以避免因系統漏洞或設定問題產生遭入侵以避免因系統漏洞或設定問題產生遭入侵而致而致而致而致 資料外洩的問題
資料外洩的問題 資料外洩的問題 資料外洩的問題。。。 。
二、學務系統的調整
因目前使用的學務系統(SFS3) 是在個資法提出前已開發出來,因此要使目前 的學務系統完全符合個資法的要求是有困難的。我們只能追求一定程度的保護學 務系統,以避免有心人士透過學務系統取得學生的個人資料。建議要進行下列事 項:
1. 定時進行網路校時
crontab -e
#加入下面這一行
10 0 * * * /usr/sbin/ntpdate time.stdtime.gov.tw; /usr/sbin/hwclock -w
2. 定時更新作業系統(OS)
crontab -e
加入下面這一行
15 0 * * * /usr/bin/yum -y update; /usr/bin/yum clean packages
3. 限制學務系統主機不能以 root 身分 ssh 登入 修改/etc/ssh/sshd_config 檔
vi /etc/ssh/sshd_config
#修改 PermitRootLogin PermitRootLogin no
重新啟動 sshd
service sshd restart
4. 定時更新學務系統
建立/root/upsfs.php 內容如下
#!/usr/bin/php
<?php //1.1 版
echo "#開始更新 sfs3...\n";
//sfs3 安裝目錄(請依需要修改)
$SFS_INSTALL_PATH="/var/www/html/sfs3";
//sfs3 解壓暫存目錄(請依需要修改)
$SFS_TEMP_DIR="/tmp/sfs3_stable";
//sfs3 下載網址(勿修改)
$SFS_TAR_URL="http://sfscvs.tcc.edu.tw/";
//記錄自動排程執行時間
$fp=fopen($SFS_INSTALL_PATH."/data/system/cron","w");
fputs($fp,date("Y-m-d H:i:s"));
fclose($fp);
//取得由網頁設定的變數值
$v_arr=array();
$v_arr['SCHEDULE']="";
$v_arr['TEMPORARY']="";
if (file_exists($SFS_INSTALL_PATH."/data/system/update")) {
$fp=fopen($SFS_INSTALL_PATH."/data/system/update","r");
while(!feof($fp)) {
$temp_arr=array();
$temp_arr=explode("=",fgets($fp,1024));
if (count($temp_arr)==2)
$v_arr[$temp_arr[0]]=sprintf("%02d",intval($temp_arr[1]));
}
fclose($fp);
}
//如果沒有設定定期更新時間, 則定期更新時間設定為早上六點 if ($v_arr['SCHEDULE']=="") $v_arr['SCHEDULE']="06";
//取得現在時間的小時別
$hour=date("H");
//若符合更新時間則進行更新
if ($v_arr['SCHEDULE']==$hour || $v_arr['TEMPORARY']==$hour || $argv[1]=="now") {
//判斷 PHP 版本別
if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) )
$SFS_TAR_FILE="sfs_stable.tar.gz";
else
$SFS_TAR_FILE="sfs_stable5.tar.gz";
//判斷暫存目錄是否已存在 if (is_dir($SFS_TEMP_DIR)) {
exec("rm -rf ".$SFS_TEMP_DIR);
}
//判斷舊有程式碼是否已存在
if (file_exists("/tmp/".$SFS_TAR_FILE)) { exec("rm -f /tmp/".$SFS_TAR_FILE);
}
//判斷 sfs3 是否安裝
if (!is_dir($SFS_INSTALL_PATH)) {
echo "Oh! Error! .... Directory *** sfs3 *** not exists!\n";
echo "Please install sfs3 first!\n";
exit;
}
//下載、解壓與複製主程式 echo "#下載主程式...\n";
exec("wget -q ".$SFS_TAR_URL.$SFS_TAR_FILE." --directory-prefix=/tmp");
echo "#主程式解壓縮...\n";
exec("tar zxf /tmp/".$SFS_TAR_FILE." -C /tmp");
echo "#複製主程式...\n";
exec("cp -a ".$SFS_TEMP_DIR."/* ".$SFS_INSTALL_PATH);
//顯示更新版本號
include $SFS_INSTALL_PATH."/sfs-release.php";
echo "#更新至 ".$SFS_BUILD_DATE."\n";
//回寫設定檔
$fp=fopen($SFS_INSTALL_PATH."/data/system/update","w");
fputs($fp,"SCHEDULE=".$v_arr['SCHEDULE']);
fclose($fp);
}
?>
加入執行權限
chmod +x /root/upsfs.php 設定定時更新
crontab -e
#加入下面這一行
30 0 * * * /root/upsfs.php
按照 crontab 中的更新時間在學務系統中設定「常態更新」
5. 確實按照每個人的職務在「模組權限管理」 中設定 確實設定教師的職稱及處室
以「職稱」來授權,不以「教師姓名」來授權。
6. 利用防火牆來限制連線來源為本校網段
若學務系統已置於 INTRANET 網段可在實體防火牆中建立規則,只允許 Campus 網段存取。
利用本機 iptalbes 防火牆限制連線來源
修改 /etc/sysconfig/iptables 內開放 80 port 規則
-A RH-Firewall-1-INPUT -
-- -s 163.17.x.x/x s 163.17.x.x/x s 163.17.x.x/x s 163.17.x.x/x -m state --state NEW -m tcp
-p tcp --dport 80 -j ACCEPT7. 登入學務系統限制:
防護連續登入錯誤的使用
使用「登入圖片檢查」
※ 若看不到圖片時,不要啟用本項功能,以免造成困擾。
※ 無法看到圖片時
刪除「/sfs3/data/system/chk_login_img」
rm /sfs3/data/system/chk_login_img
利用 yum 安裝 php-gd 套件,並重新啟動 apache yum install php-gd
service httpd restart
8. 若有安裝 phpMyAdmin 之類的管理程式,建議使用時最好不要使用預設的路 徑名稱,並且使用完了以後就移除,以避免不必要的額外漏洞。
三、建置學務系統自動備份機制 我的規畫如下:
1. 第一備份:學務系統的自動備份 建立備份的儲放目錄
mkdir -p /home/backup
建立備份程序檔
vi /home/backup/backup.sh
#!/bin/sh
tdate=`date '+%Y%m%d%H%M'`;
echo "mysqldump -uroot --password=xxx sfs3 > /home/backup/sfs3_db_"$tdate".sql" | sh;
echo "tar czvf /home/backup/sfs3_msql_"$tdate".tgz /var/lib/mysql/" | sh;
echo "tar czvf /home/backup/sfs3_prog_"$tdate".tgz /var/www/html/sfs3/" | sh;
echo "tar czvf /home/backup/sfs3_data_"$tdate".tgz /var/www/html/sfs3/data/" | sh;
設成定時執行
[root@sfs backup]# crontab -e 0 2 * * * /home/backup/backup.sh
2. 第二備份:這裡使用 rsync 技術 Rsync server 端
安裝 rsync xinetd
yum install rsync xinetd 設定 rsync 開機啟用
vi /etc/xinetd.d/rsync
將 disable = yes 改成 disable = no
設定 /etc/rsyncd.conf vi /etc/rsyncd.conf
[sfs]
path = /home/sfsbackup auth users = sfs3 uid = root
gid = root
secrets file = /etc/rsyncd.secrets read only = no
#auth users 不需要是系統有的使用者帳號
建立備份目錄
mkdir -p /home/sfsbackup
建立/etc/rsyncd.secrets 密碼檔 vi /etc/rsyncd.secrets
#內容為 帳號:密碼 sfs3:xxxxx
設定 600 權限屬性
chmod 600 /etc/rsyncd.secrets
重新啟動 xinetd
service xinetd restart
若有防火牆請開啟 tcp 873 port
Rsync client (SFS3) 安裝 rsync
yum install rsync
建立/root/rsyncd.secrets 密碼檔 vi /root/rsyncd.secrets
#檔案內容 密碼即可 XXXXXX
設定 600 權限
chmod 600 /root/rsyncd.secrets 測試
/usr/bin/rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets /home/backup/
sfs3@163.17.x.x::sfs
最後將上面指令加在/home/backup/backup.sh 最後一行即可
3. 使用教網中心的學務系統備份
本項功能需以具備網管權限之本市教育局公務帳號才能設定。登入後至 8-1-8 項中設定。
遠端備份設定
備份說明
資料庫設定
查詢備份結果
四、建置 syslog 系統
為了有效記錄使用者使用學務系統的過程,我們要從使用者端開始一直到學務系 統為止,儘可能的留下具有參考價值的各式 log,以備未來查詢使用。
syslog 是一個普遍使用於網路設備記錄 log 的服務,這裡採用本市教網中心張 本和老師自行撰寫的 syslog 程式(若採用現成的 syslog 或 syslog-ng 套件軟 體亦可)。安裝可參考網站上的說明 http://note.tc.edu.tw
1. 安裝 mysql-server
yum install mysql-server service mysqld start
mysqladmin -u root password '密碼'
2. 在 mysql-server 中建立下列項目
create database logdb;
CREATE TABLE IF NOT EXISTS `manager` (
`mID` mediumint(9) NOT NULL AUTO_INCREMENT, `host` varchar(32) COLLATE utf8_bin NOT NULL, `mname` varchar(12) COLLATE utf8_bin NOT NULL, `email` varchar(48) COLLATE utf8_bin NOT NULL, `createdDT` datetime NOT NULL,
PRIMARY KEY (`mID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=4 ; CREATE TABLE IF NOT EXISTS `perllogs` (
`seq` int(10) unsigned NOT NULL AUTO_INCREMENT, `host` varchar(32) COLLATE utf8_bin DEFAULT NULL, `facility` varchar(10) COLLATE utf8_bin DEFAULT NULL, `priority` varchar(10) COLLATE utf8_bin DEFAULT NULL, `level` varchar(10) COLLATE utf8_bin DEFAULT NULL, `tag` varchar(4) COLLATE utf8_bin DEFAULT NULL, `date` date DEFAULT NULL,
`time` time DEFAULT NULL,
`program` varchar(24) COLLATE utf8_bin DEFAULT NULL, `msg` text COLLATE utf8_bin,
`createdDT` datetime NOT NULL, PRIMARY KEY (`seq`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
3. 在 mysql-server 中建立 offline 帳號並把資料庫 logdb 權限指定給這個帳 號。
4. 建立及編修 logsrvmain.pl
請自行至
http://note.tc.edu.tw/302.html
下載程式及修改相關項目。5. logsrvmain.pl 啟動及停止 ./logsrvmain.pl
※若無法啟動,請檢查是否已安裝所需的 perl 相關套件
若確認運作沒問題,則可將程式執行於背景 ./logsrvmain.pl &
要結束程式則需要先下達 ps -aux,再將該 process kill 掉
另外可加入於 rc.local 檔案中以便開機時啟動 logserver
6. 設定具參考價值的記錄傳送至我們的 syslog server
網路交換器 log 這裡以 Dlink 為例
設定好後馬上就可以在 syslog server 上看到網路交換器傳進來的 log,可惜的是這台網路交換器並不會把使用者端網卡 MAC 及 IP 相關 訊息送出來。
查看 syslog 收到的訊息
防火牆 log
這裡以 FG-400 為例,若學校防火牆為其他廠牌,請自行修改應用。
設定 syslog IP
在防火牆規則中設定「紀錄合法流量」
另外 FG400 系統時間也請確認是否為正確時間
查看 syslog 收到的訊息
DHCP Server
若學校採用 dhcpd 來發送 IP 給使用者端,我們便需加以記錄使用者 MAC 及 IP 對應的的資訊。
vi /etc/dhcpd.conf
#加入下面的設定
log-facility local5;
vi /etc/syslog.conf
#將 local.* log 轉送到前面建立的 syslog server IP local5.* @163.17.x.x
學務系統 Apache log
Apache 可藉由本機 syslog 送至我們的 syslog server,設定方法如下 修改/etc/httpd/conf/httpd.conf
vi /etc/httpd/conf/httpd.conf
#ErrorLog logs/error_log ErrorLog syslog:local1
CustomLog "|/usr/bin/logger -t apache -i -p local2.notice" combined
修改 /etc/syslog.conf 指定遠端 syslog server IP vi /etc/syslog.conf
#將 local.* log 轉送到前面建立的 syslog server IP local1.* @163.17.x.x
local2.* @163.17.x.x
修改好後要重新啟動 syslog 及 apache service syslog stop
service syslog start service httpd restart
查看 syslog 接收情形
7. 本市教網中心張本和老師自行撰寫的 syslog 程式可依需求加入 syslog 過濾 條件及警訊 e-mail,有興趣的老師可參考網站上的說明
(http://note.tc.edu.tw)自行擴充功能。