Archive

‘Linux 進階操作技巧’ 分類過的Archive

建立 Ntopng 來作為收集與分析 SFlow 訊息

2015年7月1日 尚無評論

為了在內部網路統計監控封包流竄與流量狀態,我們可以透過 Cacti、MRTG、PRTG之類的軟體來收集這些訊息封包,如果你的交換機有支援 SFlow 或是 NetFlow 協定運作,我們也可以透過相關方式將這類的訊息拋給服務來進行統計與分析。在這篇文章我要介紹如何透過簡單的 Ntopng 來作為 SFlow 訊息的收集與分析作業:

  1. 筆者環境是使用 Extreme Switch,基本上大部分網管型 Switch 都有支援 SFlow 或是 Netflow 模式,讀者可以自行參考交換機的說明書,底下是針對Extreme Switch開啟 SFlow功能的步驟
    • enable sflow
    • configure sflow agent 192.168.1.254 (指定你交換機的 IP 位址 )
    • configure sflow collector 192.168.1.20 port 6343 vr “VR-Default” ( 指定接收 SFlow 訊息的主機 IP 與 Port,並且指定 Virtual Route 名稱是 VR-Default,這邊記得不要用 VR-Mgmt,不然你會收不到任何訊息)
    • configure sflow sample-rate 512
    • configure sflow poll-interval 30
    • enable sflow ports all
  2. 上面參數執行完畢後,你可以透過 show sflow statistics 來看一下有沒有在運作:
    • * Slot-1 Stack.9 # show sflow statistics

      SFLOW Statistics

      Received frames : 1294263515652
      Sampled Frames : 39020
      Transmitted Frames : 32236
      Broadcast Frames : 7092901550
      Multicast Frames : 1462448108
      Packet Drops : 0

  3. 接著,我們必須在 Linux 主機中安裝 Ntopng,在這邊筆者是用 Oracle Linux Server 7.1 來作為預設的安裝環境,請讀者安裝完畢後先透過 yum -y update 將套件更新到最新版本狀態
  4. 由於這台主機我只用來作為 Collector 使用,所以我將 SELinux 與 Firewalld 關閉
  5. 因為待會會需要一些相依性套件,因此我們得先將 EPEL 的套件庫裝上,安裝方式如下:
    • yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
  6. 接著,我們在將 ntop 的套件庫添加到 /etc/yum.repos.d 目錄內
    • cat << EOT > /etc/yum.repos.d/ntop.repo
      [ntop]
      name=ntop packages
      baseurl=http://www.nmon.net/centos-stable/\$releasever/\$basearch/
      enabled=1
      gpgcheck=1
      gpgkey=http://www.nmon.net/centos-stable/RPM-GPG-KEY-deri
      [ntop-noarch]
      name=ntop packages
      baseurl=http://www.nmon.net/centos-stable/\$releasever/noarch/
      enabled=1
      gpgcheck=1
      gpgkey=http://www.nmon.net/centos-stable/RPM-GPG-KEY-deri
      EOT
  7. 最後我們將 ntopng、ntopng-data等套件安裝到系統中:
    • yum remove mysql-community-libs mysql-community-common postfix ( 由於在 OEL 預設的 SQL 是使用 Mariadb,因此等等我們在安裝 nprobe 時會有相依性套件問題,所以安裝前先將 mysql 一些函數庫套件移除)
    • yum -y install ntopng ntopng-data tcpdump postfix nprobe (這邊多安裝 tcpdump 主要是待會筆者要透過他來測試訊息傳遞的狀態使用,不裝也可以)

完成上述步驟的安裝,此時我們已經擁有一個具備 ntopng 的作業環境,接下來的步驟我們將進行 SFlow 訊息的接收配置,操作方式如下所示:

  1. 首先,我們可以先透過 tcpdump 來測試一下目前 SFlow 訊息是否已經乖乖的會拋到這台主機的 UDP 6343 Port:
    • tcpdump -i ens32 udp port 6343
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on ens32, link-type EN10MB (Ethernet), capture size 65535 bytes
      21:16:06.002473 IP 192.168.1.254.43373 > Intranet-Netflow.localdomain.sflow: sFlowv5, IPv4 agent 192.168.1.254, agent-id 0, length 1284
      21:16:06.002826 IP 192.168.1.254.43373 > Intranet-Netflow.localdomain.sflow: sFlowv5, IPv4 agent 192.168.1.254, agent-id 0, length 1208
      21:16:06.003107 IP 192.168.1.254.43373 > Intranet-Netflow.localdomain.sflow: sFlowv5, IPv4 agent 192.168.1.254, agent-id 0, length 1244
    • 如果你可以順利看到上面的類似訊息就表示目前 SFlow 訊息的傳遞沒有太大問題
  2. 接著我們必須將系統上的 Redis 服務啟動起來,並設定為預設開啟:
    • [root@localhost ~]# systemctl enable redis.service
      [root@localhost ~]# systemctl start redis.service
      [root@localhost ~]# systemctl status redis.service
      redis.service – Redis persistent key-value database
      Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled)
      Drop-In: /etc/systemd/system/redis.service.d
      └─limit.conf
      Active: active (running) since 三 2015-07-01 21:18:13 CST; 51s ago
      Main PID: 11736 (redis-server)
      CGroup: /system.slice/redis.service
      └─11736 /usr/bin/redis-server 127.0.0.1:6379

      7月 01 21:18:13 Intranet-Netflow.localdomain systemd[1]: Starting Redis per…
      7月 01 21:18:13 Intranet-Netflow.localdomain systemd[1]: Started Redis pers…
      Hint: Some lines were ellipsized, use -l to show in full.

  3. 最後我們要開啟 Ntopng 與 Nprobe 來接收交換機所拋過來的 SFlow 訊息:
    • mkdir /ntopng && chown -R nobody.nobody /ntopng
    • ntopng -i tcp://127.0.0.1:5556 -d /ntopng -w 3000 -v >> /var/log/ntopng.log &
    • nprobe –collector-port 6343 –zmq tcp://127.0.0.1:5556 >> /var/log/nprobe.log &

完成相關配置之後,接著我們可以透過瀏覽器連線到 Ntopng 的網頁,http://IP:3000 (預設使用 admin/admin 登入),如下所示:

ntop01

 

順利的話你應該可以在登入後看到相關數據的呈現:

ntop02

GitLab 一個可以快速建立 Git 專案庫的開放式原始碼

2015年6月6日 評論已關閉

GitLab是一個透過 Ruby on Rails 開發的開放式原始碼軟體,我們可以透過它快速的建立一個具備 Web 介面的自館型 Git 專案庫,它的功能與 GitHub 類似,但好處是安裝佈署的方式十分簡單。目前官方網站有提供 Ubuntu 12.04、Ubuntu 14.04、Debian 7、Debian8、CentOS 6 與 7 六個不同的發行套件安裝模組,你可以前往 https://about.gitlab.com/downloads/挑選對應的發行套件,依據說明來進行安裝與配置。

補充1. 如果你是使用 Oracle Enterprise Linux 來作為安裝 GitLab 的環境時,你會發現在 CentOS 對應安裝說明文件中的第二步驟,當你執行 sudo yum install gitlab-ce 時,會告訴你找不到 gitlab-ce 這個套件,主要原因是預設的 GitLab 套件庫路徑命名並未提供 OEL 的路徑,因此你必須要調整  /etc/yum.repos.d/gitlab_gitlab-ce.repo 檔案中的路徑,讓它改找 EL ( Enterprise Linux ) 的目錄才可以順利安裝。

[gitlab_gitlab-ce]
name=gitlab_gitlab-ce
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[gitlab_gitlab-ce-source]
name=gitlab_gitlab-ce-source
baseurl=https://packages.gitlab.com/gitlab/gitlab-ce/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

補充2. 由於 GitLab 的安裝可以算是一個懶人包的配置方式,因此包含網站伺服器 ngnix 、資料庫 PostgreSQL 等你都不需要額外安裝,系統會自動幫你配置好在 /opt 目錄中,因此建議你在安裝之前可以將 /opt 目錄獨立一個磁碟空間,方便後續專案上傳與存取使用。

補充3. GitLab 也可以支援環境中的 AD 或是 LDAP 伺服器,若是你需要整合這類的帳號伺服器時,可以依據下列步驟進行調整:

  1. 首先,請你先切換使用者帳號到 git 中:
    [root@git-server ~]# su – git
    Last login: Sat Jun 6 19:41:31 CST 2015 on pts/0
    -sh-4.2$
  2. 接著,切換路徑到 gitlab-rails/etc/ 目錄內:
    -sh-4.2$ cd gitlab-rails/etc/
  3. 調整 gitlab.yml 檔案中關於 LDAP 的相關配置,如下所示,設定完畢後重啟便可以在網站首頁看到 LDAP 的登入頁面選項
    ## LDAP settings
    # You can inspect a sample of the LDAP users with login access by running:
    # bundle exec rake gitlab:ldap:check RAILS_ENV=production
    ldap:
    enabled: true
    host: ‘IP’
    port: 389
    uid: ‘sAMAccountName’
    method: ‘plain’ # “tls” or “ssl” or “plain”
    bind_dn: ‘CN=Administrator,CN=Users,DC=abc,DC=com,DC=tw’
    password: ‘123456’
    active_directory:
    allow_username_or_email_login:
    base: ‘CN=Users,DC=abc,DC=com,DC=tw’
    user_filter:## EE only
    group_base:
    admin_group:
    sync_ssh_keys:
    sync_time:

    GitLab-LDAP

 

 

MariaDB 中文編碼問題

2015年2月6日 尚無評論

預設在 OEL7 中使用 MariaDB 時,由於它預設的編碼原則非使用 UTF-8 格式,因此會導至儲存為 UTF-8 格式的資料撈出來後會變成亂碼,解決方式如下:

  1. 在 /etc/my.cnf 組態檔案中的 [mysqld] 區塊中添加下力描述
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
  2. 重新啟動 MariaDB 服務便可以解決

    systemctl restart mariadb

建立一台 Local YUM 伺服器

2014年1月17日 尚無評論

如果你的工作環境內有多台 Linux 主機需要進行配置或者是安裝套件等,但又不想每次都是透過 Public YUM 或是光碟片來安裝光碟,那麼我們可以在環境中配置一台 Local YUM 伺服器來協助我們進行套件源庫的提供,操作方式如下所示:

  • 首先,我們需要安裝 createrepo 這個套件
    # yum install createrepo
  • 接著,將安裝光碟或者是套件來源掛載到一個本地端目錄內,然後執行 createrepo 指令來建立相關 repodata,這個動作會需要一些時間,要耐心等候
    # mkdir /media/OL6
    # mount -o loop /data/OL6.iso /media/OL6
    # cd /media
    # createrepo .
    執行完畢後會在目錄內產生 filelists.xml.gz、other.xml.gz、 repomd.xml、primary.xml.gz等檔案
  • 再來將 YUM 快取清空
    # yum clean all
  • 再來將 RPM-GPG-KEY 複製到 /media 目錄下
    # cp /media/OL6/RPM-GPG-KEY-oracle /media
  • 最後添加一個 YUM Server的定義檔案放在 /etc/yum.repos.d 目錄內
    # cat /etc/yum.repos.d/local.repo
    [LocalRepo]
    name=OL6
    baseurl=file:///media
    enabled=1
    gpgkey=file:///media/RPM-GPG-KEY-oracle
    gpgcheck=1
  • 如果你需要把這台 YUM Server 給網路中的其他主機運用,只要在搭配一個 Web Service 便可以達成

這樣便可以完成一台 Local Yum Server 的配置。

關閉 Red Hat Subscription Manager 服務

2014年1月13日 尚無評論

在安裝  RHEL  6 之後,若無訂閱註冊,一段時間在 /var/log/messages 裡面就會出現 “rhsmd: In order for Subscription Manager to provide your system with updates, your system must be registered with RHN. Please enter your Red Hat login to ensure your system is up-to-date.”,解決方式有兩種:

  • 方法一
    touch /etc/sysconfig/rhn/systemid
  • 方法二
    yum remove subscription-manager subscription-manager-firstboot 
    subscription-manager-gnome

AH01630: client denied by server configuration 錯誤

2013年12月6日 尚無評論

在  Apache 服務升級到 2.4 以後有一些以往的配置方式需要調整一下,若你突然發現到原先運作正常的組態配置在升級後無法進行連線時,請檢查一下  LOG 內容看是否有出現 AH01630: client denied by server configuration: 錯誤訊息,接著調整:

原先:

Order Allow, Deny
Allow from all

改為:

Require all granted

在新版的  Apache 2.4 似乎對於混搭著舊有與新制存取驗證語法有著一些混淆,導致會在某些舊有存取驗證語法運行時出現 403 的錯誤,要馬,我們必須將所有組態中舊有語法通通改為新制或者反之,但這樣還是有點麻煩,因此最好的方式就是升級你的組態語法吧

系統執行 showmount -e 出現 RPC:Unknown host 錯誤

2013年11月24日 尚無評論

當我們建制好 NFS 伺服器之後,通常可以透過  showmount  指令工具來檢視目前 export  的檔案系統有那些,但如果當你下達指令後出現下列狀況:

[ root@Host1 etc ] # showmount -e

clnt_create : RPC: Unknow host

可以嘗試改用下列語法測試:

[ root@Host1 etc ] # showmount -e 主機IP

若這個測試方式正常無誤,那就表示你目前的主機對應 IP 解析並未設定好,預設 showmount -e  不指定查詢主機時是以本機的 IP 來進行查找,因此如果我們在  /etc/hosts 或者是 DNS 中並未指定正確的解析紀錄,便會出現 clnt_create : RPC: Unknow host 錯誤訊息

Samba Server 啟用主機名稱解析功能配置

2013年7月28日 尚無評論

在 Samba Server 裡面預設我們可以透過 hosts allow 功能來限制存取的主機位置,可以使用 IP、網域名稱等方式來定義這些位置來源,由於 3.0 以後的 Samba Server 版本預設已經將名稱解析參數 hostname lookup 配置為 NO,因此當我們配置為網域名稱的清單格式時會無法進行名稱解析。修正方式只要在 /etc/samba/smb.conf 組態檔案的 [ Global ] 區間內配置  hostname lookup = yes,重新啟動服務便可以解析相關網域名稱條件。

Linux 下的磁碟重組問題

2013年5月13日 尚無評論

相信很多朋友在 M$ Windows 下使用的經驗過程中,一定都有操作過 “磁碟重組” 這個程式,但在 Linux 檔案系統上似乎我們很少聽到需要進行磁碟重組與看到磁碟重組的程式,這是為什麼呢 ? 其實,在 Linux 檔案系統下並非 “不需要” 進行磁碟重組,而是發生的機率遠低於 FAT 檔案系統而已,若是我們需要知道檔案系統是否有不連續的狀態 ( non-contiguous ) 出現時,可以透過 fsck 指令工具來進行操作,例如:

ns1:~ # fsck -nvf /dev/sdb1
fsck from util-linux-ng 2.16
e2fsck 1.41.9 (22-Aug-2009)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found. Create? no

Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/sdb1: ********** WARNING: Filesystem still has errors **********
48 inodes used (0.00%)
5 non-contiguous files (10.4%)
2 non-contiguous directories (4.2%)
# of inodes with ind/dind/tind blocks: 0/0/0
Extent depth histogram: 25/14
5965907 blocks used (2.44%)
0 bad blocks
1 large file

35 regular files
4 directories
0 character device files
0 block device files
0 fifos
0 links
0 symbolic links (0 fast symbolic links)
0 sockets
——–
39 files

這裡有一篇文章,針對 Linux 檔案系統為何不太需要進行磁碟重組,有十分簡單的說明,有興趣的朋友可以參考一下:Why doesn’t Linux need defragmenting ?

在 Linux 檔案系統中我們是採用索引式檔案系統 ( indexed allocation ) 的運作方式,簡單來說,當我們產生一個檔案之後,這個檔案會取得一個 i-node 位置,裡面會記載這個檔案的相關 metadata 的訊息與包含資料放在那幾個 data block 內,因此當我們存取這個檔案時,便可以快速的取得所有 data block 的位置。而在 FAT 檔案系統下的運作方式則是透過每一個儲存的 data block 間互相告知下一個 data block 的所在位置,這種模式稱之為鏈結串列,但也因為如此,當我們存取放置在兩個檔案系統下的檔案時,會發現 Linux 檔案系統的存取效能會優於 FAT 檔案系統格式,因為我們可以很快速地知道所有 data block 放在什麼地方而一次取得,但 FAT 檔案系統必須反覆的存取這些 data block 才可以串起一個資料內容,一來一反間變增加許多存取時間。

但如果我們真的需要在 Linux 檔案系統下進行重組呢 ? 其實,也是可以,底下有幾個工具有興趣的朋友可以試試看:

  • SHAKE:Shake is a defragmenter that runs in userspace, without the need of patching the kernel and while the system is used (for now, on GNU/Linux only).

    ns1:~ # wget http://download.savannah.nongnu.org/releases/shake/shake-0.999.tar.bz2
    ns1:~ # tar jxvf shake-0.999.tar.bz2
    編譯 shake 需要使用 cmake、libattr-devel、help2man,因此編譯前可以先透過 yum 或者是 zypper 於作業系統內先行安裝:
    ns1:~# cmake /root/shake-fs-0.999
    當你執行 cmake 時已經安裝了 libattr-devel 卻一時反應沒安裝的情況時,請修改 /root/shake-fs-0.999/CMakeLists.txt 檔案,將 78、86、87、88這四行註解後重新執行 cmake 就可以

    ns1:~ # cd shake-fs-0.999/
    ns1:~/shake-fs-0.999 # make ; make install

    在使用 shake 重組磁碟時,必須先將磁碟裝置掛載到目錄,並且記得掛載 user_xattr 參數

    ns1:~ # mount -o user_xattr /dev/sdb1 /data
    ns1:~ # mount | grep data
    /dev/sdb1 on /data type ext4 (rw,user_xattr)

    ns1:~ # /usr/local/bin/shake /data
    ns1:~# umount /data
    重組後,可以在執行一次 fsck 檢查一下不連續的狀態,重輸出結果便可以發現已經有所改善

    ns1:~ # fsck -nvf /dev/sdb1
    fsck from util-linux-ng 2.16
    e2fsck 1.41.9 (22-Aug-2009)
    Warning! /dev/sdb1 is mounted.
    Warning: skipping journal recovery because doing a read-only filesystem check.
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    /lost+found not found. Create? no

    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    Free blocks count wrong (238224093, counted=238224094).
    Fix? no
    /dev/sdb1: ********** WARNING: Filesystem still has errors **********
    48 inodes used (0.00%)
    1 non-contiguous file (2.1%)
    2 non-contiguous directories (4.2%)
    # of inodes with ind/dind/tind blocks: 0/0/0
    Extent depth histogram: 26/13
    5965907 blocks used (2.44%)
    0 bad blocks
    1 large file

    35 regular files
    4 directories
    0 character device files
    0 block device files
    0 fifos
    0 links
    0 symbolic links (0 fast symbolic links)
    0 sockets
    ——–
    39 files

  • defrag:這是另外一隻重組腳本程式,使用方式比較簡單先,直接透過 Shell 下執行該程式指定針對的裝置便可以進行檢查重組
    ns1:~ # wget http://ck.kolivas.org/apps/defrag/defrag-0.08/defrag
    –2013-05-13 10:05:28– http://ck.kolivas.org/apps/defrag/defrag-0.08/defrag
    Resolving ck.kolivas.org… 193.19.136.183
    Connecting to ck.kolivas.org|193.19.136.183|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 2773 (2.7K) [text/plain]
    Saving to: `defrag’

    100%[======================================>] 2,773 –.-K/s in 0.001s

    2013-05-13 10:05:29 (1.77 MB/s) – `defrag’ saved [2773/2773]

    ns1:~ # sh defrag /dev/sdb1
    Creating list of files…
    511 files will be reordered

    0 files left
    Succeeded

  • 在 Ubuntu 底下還有一個針對 EXT4 檔案系統的重組程式,e4defrag,有興趣的朋友也可以試試看,使用方式可以參考這篇文章:Defragment Ext4 File systems using e4defrag (Ubuntu)

awk 語法中使用環境變數

2012年12月20日 尚無評論

awk 是一個十分強大的工具,剛好有朋友在詢問在 awk 語法中如果我需要使用到環境變數內的值,該怎樣使用,例如:

var=100

在awk語法中若要使用 var 這個變數值,則需要透過下列語法操作:

awk -v new_var=$var ……………….