顯示具有 RED HAT 標籤的文章。 顯示所有文章
顯示具有 RED HAT 標籤的文章。 顯示所有文章

2012年4月11日

在 RHEL 6 設定 NIC Bonding 的注意事項 (&如何正確關閉 NetworkManager)

在 RHEL/CentOS 4/5 上設定 NIC Bonding 我已經很熟悉了(作法: Network Card Bonding On CentOS),但今天要在 RHEL 6 上設定的時候卻發現已經沒有 /etc/modprobe.conf 檔案了,找到參考作法後歷經一番曲折終於設定好,以下是今天設定的筆記:

  1. /etc/modprobe.conf 已經被 deprecated 了,新的 config 檔要自己去 /etc/modprobe.d/ 目錄下新增 bonding.conf 檔案,內容只要寫「alias bond0 bonding」即可,原本的「options bond0 miimon=100 mode=1 primary=eth0」設定改為寫到 ifcfg-bond0 檔案中。
  2. 承上,在 ifcfg-bond0 中要寫「BONDING_OPTS="miimon=100 mode=active-backup primary=eth0"」,比起 mode=1 來說可是一目了然。
  3. 若在安裝過程中僅針對 eth0 設定固定 IP,則 RHEL 6 自動產生的 ifcfg-eth0 和 ifcfg-eth1 檔案內容差會很多,eth0 多了很多設定,例如「NAME」、「UUID」等 eth1 沒有的內容,因此最好分別編輯兩個檔案,不要先改好 eth0 以後直接用新的 eth0 檔案把原本的 eth1 檔案覆蓋掉,否則可能會造成 MAC Address / UUID / NAME 重複,進而衍生其他問題(詳見下一段)。
基本上有異動的地方只有這兩點,但今天修改第一台設備的設定時遇到一個問題,重開機後只看到 eth1 這張網卡,eth0 不見了!檢查 dmesg 以後發現一個訊息:「udev: renamed network interface eth1 to eth0-eth1」,再用 ifconfig 確認網卡狀態,果然 eth0 已經被 rename 為 eth0-eth1 了,最囧的就是就算把原有的 ifcfg-eth0 檔案 rename 為 ifcfg-eth0-eth1 並修改相關設定也沒用,反而造成 bond0 下只看得到 eth0-eth1 這張網卡,eth1 反而消失了。

好心的同事(怪獸先生)幫忙查了資料以後發現,這是因為在設定過程中我改好了 eth0 檔案,然後直接用 eth0 檔案覆蓋原有的 eth1 檔案,造成 eth1 的 MAC Address 改變,因此 /etc/udev/rules.d/70-persistent-net.rules 檔案的內容錯誤(多了好幾個把 eth0 rename 為 eth0-eth1 的 rule),導致網卡異常。最後很幸運的直接編輯這個自動產生的檔案,把多餘的 rule 刪掉以後重開機就恢復正常了。

另一個問題就是如何停止 Red Hat 內建的 NetworkManager,我發現在安裝 OS 的過程中若設定了固定 IP,就會啟用 NetworkManager 來管理網路,若使用 default 的 DHCP 則不會啟用 NetworkManager。停用的方式很簡單,打開一個 Terminal 視窗 (或者在 runlevel 3 下登入系統),執行 setup,到 System Services 裡面把 NetworkManager 關掉即可。若不進行 reboot,需手動執行 service NetworkManager stop 指令來停止運行中的服務,另外也不要忘記執行 chkconfig 來關閉 NetworkManager,以確保下次 reboot 後 NetworkManager 不會再被啟動。

2012年2月20日

[Solaris10/RHEL4/5] 設定允許使用ssh登入主機的網域白名單

最近發現了廠商會透過類似 SSH Over HTTP 的方式從外部網路直接穿透 80 port 連到機房的內部網路(透過一台在公網有開放 80 port 的設備),而後再以該台設備為跳板連到其他機器。雖然說只是要進行維護的動作,但違反了資安規定,也因此讓我們驚覺還有這種無法透過 firewall 控管的漏洞。(查了一些資料以後發現,據說連 L7 Switch 都擋不住)

為了防堵這樣的連線方式,想到可以透過設定白名單的方式,正面表列允許使用 ssh 跟主機通訊的網域白名單,以下分別說明在 Solaris 10 & RHEL/CentOS 4/5 要如何設定。

Solaris10
參考:
  1. Solaris 10 - IPFilter 防火牆
  2. IP Filter FAQ
其實 IPFilter 的功能很強,透過規則的組合可以達到非常細膩的控制,在參考資料中就可以看到一些範例。要限制可透過 ssh 連線的網域白名單就簡單多了,步驟如下:

Step 1: 確認 pfil & ipfilter service 均已啟用

  • 執行 svcs pfil ipfilter,兩個服務的 STATE 應顯示為「online」。
  • 預設 pfil 服務是啟用的,而 ipfilter 則是 disabled,只要執行 svcadm enable ipfilter 就可以啟用 ipfilter 服務。

Step 2: 修改 ipfilter 設定檔 /etc/ipf/ipf.conf

  • 依序加入以下設定 (順序非常重要,block 的設定要放在最後面):
    pass in quick log proto tcp from 10.10.10.0/24 to any port = 22
    pass in quick log proto tcp from 10.10.11.0/24 to any port = 22
    block in log proto tcp from any to any port = 22
  • 上述設定可允許來自 10.10.10.0 ~ 10.10.10.255 & 10.10.11.0 ~ 10.10.11.255 的 ssh 連線 (inbound),其他 source ip 一律會被阻擋。這是比較簡單的設定法,只要把來自非法網域的 inbound traffic 擋住了,就不用考慮 outbound traffic 了。
Step 3: 執行 ipf -Fa -f /etc/ipf/ipf.conf,以 flush all 並重讀 firewall 規則表。可再執行 ipfstat -io 來確認目前inbound & outbound的規則為何。

Step 4: 在背景執行ipmon,紀錄被阻擋的連線
  • ipmon /path/to/ipf/log &
  • 被阻擋的紀錄範例如下:
    20/02/2012 14:14:07.082422 e1000g0 @0:4 b 10.1.xx.xx,40258 -> 10.1.xx.xx,22 PR tcp len 20 60 -S IN
RHEL/CentOS 4/5
參考:
  1. TCP Wrapper for added Security on SSH
  2. /etc/hosts.{allow|deny} 的設定方式
由於 /etc/hosts.{allow|deny} 設定比較簡單,且 RHEL/CentOS 4/5內建的sshd就有支援 TCP Wrapper,所以就用這種方式囉。

Step 1: 確認目前使用的 sshd 是否支援 TCP Wrapper
  • 執行 ldd /usr/sbin/sshd | grep libwrap,應出現以下 output:
    libwrap.so.0 => /usr/lib/libwrap.so.0 (0x00b22000)
Step 2: 編輯 /etc/hosts.allow (不可使用 10.10.0.0/16 表示法):
  • sshd:10.10.10.0/255.255.255.0
    sshd:10.10.11.0/255.255.255.0
Step 3: 編輯 /etc/hosts.deny (不可使用 10.10.0.0/16 表示法):
  • sshd:ALL

Step 4: 設定完畢後不需重起 sshd,會立刻生效。

Step 5: 查看被阻擋的紀錄

  • log 檔位置在 /var/log/secure,可執行 grep refused /var/log/secure 來查看
  • 範例如下:
    Feb 17 17:26:53 [hostname] sshd[3034]: refused connect from ::ffff:xxx.xx.xxx.xx (::ffff:xxx.xx.xxx.xx)

2012-03-03 Update:
有網友留言詢問此設定能否阻擋reverse ssh tunnel over http,找了一下資料,利用這篇文章中的作法實作之後,發現在連線時 source IP 會是 127.0.0.1,因此只要在 /etc/hosts.allow 裡面不要允許來自 127.0.0.1 的連線,reverse ssh tunnel 就不會通了。

雖然這篇的作法看來是沒有「over http」,但應該只要觀察 ssh 連線的 source IP,就可以利用 /etc/hosts.{allow|deny} 來阻擋了。


2010年3月2日

在 IBM x3650 上安裝 RHEL5 & 設定 RAID5

昨天灌好一台 IBM x3650 Server,組長有提到要先 survey 要做 RAID5 or RAID6 比較好,所以我找了以下資料:
  1. RAID (zh.wikipedia.org) : 針對各種 level 的 RAID 技術的簡介
  2. Chapter 3. Redundant Array of Inexpensive Disks (RAID) (redhat documentation) : RHEL 的 RAID 說明文件
  3. RAID5 到 RAID6,數據安全提高多少?: 這篇討論的蠻深入,還有提到 RAID 機制背後的數學基礎
  4. RAID-6 的必要性 : 這篇蠻白話的,看完上面的基礎文章後可以很快瞄一下
看完 wiki 以及上述第三篇資料以後,由於這台 Server 是要給內部使用,不是對外提供服務給用戶使用,因此為了較高的讀寫效能,我決定採用 RAID5。
接下來又找了怎樣在 RHEL 上設定 RAID5 的資料:
  1. Chapter 10. Software RAID Configuration (redhat documentation) : 又是 RHEL 的說明文件,蠻詳細的,可惜只有舉 RAID1 為例。
  2. 3.3 Hardware RAID versus Software RAID (redhat documentation) : 看到這篇我才注意到 RAID 還有分 Hardware/Software,基本上用 Hardware 來做效能會比較好,但是硬體當然比較貴。但這篇對於 Hardware RAID 的說明很少。
跟組長確認過之後,確定要以 Hardware 來做 RAID,於是又找到另一篇參考資料:
這篇就講的很清楚了,除了 Hardware/Software RAID 之外,另外提出一種以主機板晶片來協助做到 RAID 機制的作法,稱為 ATA(SATA) RAID / BIOS RAID / Fake RAID (假的XD)。雖然這篇文章是以華碩主機板+Fedora Core 5的環境為範例,但其實在 IBM x3650 + RHEL5 的環境下步驟也是一樣的,簡單來說就是以下幾個步驟:
  1. 開機後,按「Ctrl+A」進入 IBM ServeRAID Controller 設定畫面 (這張就是內建在 IBM Server 中的硬體 RAID 控制卡,設定畫面看起來/操作上跟 BIOS 差不多)。(為什麼我會知道要按 Ctrl+A 呢? 因為開機的時候螢幕上面有印出這個訊息嘛~)
  2. 如果目前 Server 上已經有設定 Disk Array,就先把它砍掉。
  3. Create 一個新的 Disk Array,把所有的硬碟都選進去這個 Array,幫這個 Array 取個名字,並且把 RAID level 設定為 RAID5,之後系統會自動處理好剩下的設定。
  4. 退出 ServeRAID Controller 的設定畫面,此時應該會看到成功建立起 Disk Array 的訊息。
  5. 以 RHEL5 安裝光碟重新開機,開始安裝 RHEL5。此時對 RHEL 來說,所有的實體硬碟在邏輯上會被 group 成一個稱為「sda」的硬碟 (也就是對 OS 來講只看到單一一顆硬碟啦),所以接下來就按照一般切割 partition 的方式,把「/」、「/boot」、「/home」、「/usr」、「/var」、「/tmp」、「/swap」切一切就好啦!比 Software RAID 簡單很多!(不用自己設定 RAID Device/RAID Group)
這台 Server 上共安裝四顆實體硬碟,每一顆的容量都是 136.6G,總和為 546.4 G,做成 RAID5 之後,可用空間剩下 400.85G,耗損率約為 27%。
以上就是第一次在 IBM Server 上安裝 RHEL & 設定 RAID5 的心得,用硬體來做實在是太簡單啦 XD

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D