2016/12/30

一直以來snort 啟動時都會出現如下的log

Dec 30 14:35:39 a236 snort[2425]: Encoded Rule Plugin SID: 39634, GID: 3 not registered properly.  Disabling this rule.
Dec 30 14:35:39 a236 snort[2425]: Encoded Rule Plugin SID: 38753, GID: 3 not registered properly.  Disabling this rule.
Dec 30 14:35:39 a236 snort[2425]: Encoded Rule Plugin SID: 41102, GID: 3 not registered properly.  Disabling this rule.

看起來好像就是so_rule沒有load進去
今天找了一下解決的方法
原來是不能直接使用下載回來的更新檔內的so_rule
而是必須要自己再compile一次
做完之後
再改了一下update rule的shell 目前看來是正常
不過
dns的alert好多

2016/12/04

日前把一台有800G HD的linux server 在不停機的狀態下p2v轉到proxmox
記錄一下流程

linux server雖然不停機但是在轉換過程中資料不能有異動

1. 在原server上使用sshfs把proxmox的目錄mount進來

modprobe fuse

sshfs root@10.0.0.1:/mnt/data /mnt/10

2. 使用dd把原server的HD完整複制成一個raw檔

dd if=/dev/cciss/c0d0 of=/mnt/10/www.raw bs=1M
                   ^^^^^^^
              這個參數一定要加 加快速度

3. 在proxmox上新開的vm hd要指定為ide 格式為raw
 否則開机時會出現kernel panic 無法開機
    再來把www.raw更名為已開vm的檔名

4. guest os 要修正 /etc/udev/rules.d/70-persistent-net.rules 網卡編號
    視需要修正crontab
    在/etc/rc.local加上開机對時
    修正後reboot
    注意備份路徑
    加上proxmox備分
   

5. 舊机器shutdown

2016/11/24

在linux shell中常常會需要判斷某個檔案內是否有特定字串
或是某個指令執行有沒有成功
視情況以進行接下來的處理
之前都是用grep把結果導到/tmp
再用test去判斷檔案是否存在
其實也可以用$?來判斷
$?是shell中一個特別的變數
如果上一個指令成功則為0
反之則為1
範例如下

grep error file
[ $? == 0 ] && echo "not ok"

假設file 內有error這個字串
則印出 not ok

http://c.biancheng.net/cpp/view/2739.html

2016/11/21

因為有個單位是使用自行申請的ADSL
近來每天都打電話來說網路被鎖
在想說要不要寫個程式在user開机時把ip傳來同時在黑名單把ip刪掉
先找了一些資料

找出目前使用的ip

curl icanhazip.com

curl ipv4.icanhazip.com

wget -qO- icanhazip.com


在批次檔中使用ftp傳檔

ftp -s:upload.txt

upload.txt內容
open ftp.server.com
user@server.com
userpwd
prompt
cd ftp_upload
mput test.txt
bye


使用python拿到ip並寄出

import urllib2,smtplib,sys
response = urllib2.urlopen('http://icanhazip.com/')
html = response.read()
print html

sender = "test_from_hinet@hinet.net"
receipt = "abc@de.com"
smtp = smtplib.SMTP("168.95.4.10")
header = "Subject: ip \r\n\r\n"
msg = html
smtp.sendmail(sender, receipt, header+msg)
smtp.quit()


http://neochung.com/2015/01/pc/batch-file/windows%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%89%B9%E6%AC%A1%E6%AA%94-bat-%E4%B8%8A%E5%82%B3ftp%E6%AA%94%E6%A1%88/

http://askubuntu.com/questions/95910/command-for-determining-my-public-ip

2016/11/10

之前找到一個滿精簡又好用的web mail rainloop
只是每次更新都要再重新設定一次
做一下記錄

把捉回來的zip 解壓到 /var/www/rainloop/

cd /var/www/rainloop/

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chown -R www-data:www-data .

再來進到管理介面進行設定

For example: http://webmail.domain.com/?admin

Default login is "admin", password is "12345".

首先更改admin的密碼
再來把常使用的domain設上去
把預設的google domain取消
















http://www.rainloop.net/

2016/11/08

根据資安要求
每半年要執行一次弱掃
已經改用openvas好几年了
但每次只要更新 就不能用
所以打算直接用 kali linux
把vm下載回來後
調整一下cpu ram及usb
直接boot就可以用了
預設的帳號密碼是 root toor
不管是lite 或完整版預設都沒有裝openvps
要手動安裝 建議下載lite 檔案比較小

apt update
apt install openvas

裝完後執行openvas initial setup 如下圖


























完成時系統會自動給一組密碼
再來打開firefox
https://127.0.0.1:9392
登入的帳號為admin
密碼是之前系統給的那組
記得要馬上改掉

目前碰到的問題是只要apt upgrade 整個os 更新
openvas就一定會掛點
所以不建議整個os更新
或是要用時再去捉一次vm回來
另外要掃瞄之前要更新特徵碼
可以從網頁上執行 但看不到進度
或直接下指令

openvas-feed-update


openvas-certdata-sync
openvas-nvt-sync
openvas-scapdata-sync


2016/11/07

今天在確認nfcapd有沒有ipv6的資料時發現一個問題
nfdump時ipv6位址不完整





查了文件才知道 原來nfdump預設是會把ipv6省略表示的
如果要顯示完整ip
必須加上參數
-o long6

-o extended6


2016/10/27

在proxmox上裝完win10後發現一個問題
每次關機後開機一定要開二次
第一次一定會不正常關机
找了一下資料
發現應該是 Fast startup的問題
而且win10預設Fast startup 就是on
把她off後就正常了





















https://www.reddit.com/r/Windows10/comments/3ixg13/windows_10_longer_boot_times_and_having_to_boot/

http://www.tenforums.com/tutorials/4189-fast-startup-turn-off-windows-10-a.html

2016/10/08

為了安全
愈來愈多的網站都改用https的傳輸方式了
Let`s Encrypt提供了一個方便 自動而且免費的方式來達成這個需求
certbot幫助管理者方便的佈署
只要選擇使用的web server及os
就有完整的安裝方式

https://certbot.eff.org/
https://letsencrypt.org/
假設檔案內的文字或字串是以特殊符號分隔
如 , . ; - 或空白等等
要如何在shell中隔開後取出
此時就必須利用IFS

範例如下

#!/bin/bash                                                                                                                                                                                                    
IFS=" "
export IFS;

words="abb cdd eff"

for word in $words; do
    echo "$word"
done

輸出為
abb
cdd
eff

http://blog.roga.tw/2011/05/2516

2016/10/04

之前不久proxmox上的backup出現問題

看了一下log
出現以下的訊息

Sep 13 00:01:57 proxmox78 kernel: [571754.499445] hpsa 0000:05:00.0: scsi 2:1:0:0: resetting logical  Direct-Access     HP       LOGICAL VOLUME   RAID-5 SSDSmartPathCap- En- Exp=1
Sep 13 00:02:08 proxmox78 kernel: [571766.276361] hpsa 0000:05:00.0: scsi 2:1:0:0: reset logical  completed successfully Direct-Access     HP       LOGICAL VOLUME   RAID-5 SSDSmartPathCap- En- Exp=1
Sep 13 00:05:57 proxmox78 kernel: [571994.368353] hpsa 0000:05:00.0: scsi 2:1:0:0: resetting logical  Direct-Access     HP       LOGICAL VOLUME   RAID-5 SSDSmartPathCap- En- Exp=1
Sep 13 00:06:09 proxmox78 kernel: [572007.128671] hpsa 0000:05:00.0: scsi 2:1:0:0: reset logical  completed successfully Direct-Access     HP       LOGICAL VOLUME   RAID-5 SSDSmartPathCap- En- Exp=1

再進到ilo去看後
發現以下的狀況








有HD出現smart error了
但面版上並沒有出現異常
也還是可以用
本想說應該不是出現reset的原因
但沒几天
另一台也出現同樣的問題
因為已經過保
也不打算修理
於是把其中一台關掉
把沒問題的HD拿到另一台試看看
到目前已經三週
沒有再出現問題
打電話去HP
HP回覆因為机器已經過保 無法回答問題
真是想罵人

2016/08/12

一直以來在shell中都比較習慣使用cut來切割字串
但在log裡總是會碰到一個問題
就是在月份的單日會多一個空格
此時cut就會有問題
導致程式出狀況
awk就不會有這個問題

ex:

Aug  7 03:30:11 mail snmpd[2067]: Connection from UDP

Aug 12 08:30:10 mail snmpd[2067]: Connection from UDP

用cut和awk就會出現不同的結果
如下

cat ex |cut -d ' ' -f 3
7
08:30:10

cat ex |awk '{print $3}'
03:30:11
08:30:10

因此在取空格時 建議使用awk 比較不會有因空格造成的問題

http://www.xlgps.com/article/350744.html

2016/07/23

在某些情況下table內只能有一筆唯一的資料存在
而此時在insert時一般會先select看看存不存在
mysql提供了一個方便的語法

mysql INSERT ... ON DUPLICATE KEY UPDATE (新增或是更新一行完成)

必要條件:
  1. 資料表中必須有 PRIMARY或UNIQUE的索引。
  2. INSERT時須帶入1. 欄位的資料

SQL語法範例
INSERT INTO `gamePlayer` (`pNode`, `gsn`,`out`, `monster`, `club3`, `changecolor`) VALUES ('K',4, 100, -1, 0, 1) ON DUPLICATE KEY UPDATE `out`=100, `monster`=-1, `club3`=0, `changecolor`=1


http://note.tc.edu.tw/765.html

2016/07/18

proxmox 升到4.2後又有新的狀況

設定完自動備份後
一直發生備份到一半
guest就不明原因的不正常關机
導致備分不成功
甚至有nas因此而當机
找了半天 看了原廠的forum也沒看到什縻解决方法
但在3.x版共沒有這個問題
原本以為只有自動排程會有問題
測了一下連手動也一樣
原本預設的備份會使用lzo壓縮備份檔
比對了一下3.x版的備份
發現預設並沒有使用lzo
所以用手動方式不壓縮先備份一次
正常沒問題
所以把自動排程的備份全部改成不壓縮
再觀察看看

2016/07/14

今天重新安裝proxmox 4.2版
可是裝完後發現之前版本會有的

/dev/mapper/pve-data   3856   808  3046 8% /var/lib/vz

不見了
到forum上去找 才發現 4.2的架構已經不同了
變成直接使用LVM來放image及ct
而不再把該lvm mkfs後再mout來用
因此必須手動把這個storage加上去

步驟
Datacenter -> Storage -> Add -> LVM-Thin

所以不建議用原机升級的方式來升到4.2
reinstall是比較好的方法

https://forum.proxmox.com/threads/dev-pve-data-not-mounted-after-fresh-4-2-install.27220/

用了LVM-Thin後有几個情況
雖然LXC可以在不用停机的情況下使用LVM的snapshot功能備份
但在不同node要migrate時 proxmox是使用dd來操作
導致效能非常的差 而且沒有百分比的顯示
評估過後
因為目前不使用LXC而且以後使用的机率也不大
所以再改回來使用目錄
步驟如下

lvremove /dev/pve/data

lvcreate -L 4M -n data pve

lvcreate -l 100%FREE -n datastore pve

mkfs.xfs /dev/pve/datastore

And mount it on your /etc/fstab

/dev/pve/datastore /mnt/datastore xfs defaults 0 0


2016/07/06

nfdump 有提供 nfexpire來維護資料檔

使用方式做一下記錄

1. nfexpire -e /flowdata -s 100M 會在/flowdata產生一個.nfstat 記錄相關參數

2. nfcapd -4 -t 600 -z -w -D -p 9995 -l /flowdata -S 0 -e
    開始收取封包並依 第1點定義的參數進行維護

http://blog.csdn.net/omg2012/article/details/6742783

2016/07/05

原本一直以來都是使用flow-tools來收netflow的資料

http://freecode.com/projects/flow-tools
flow-capture

但最近的工作需要收集從fortiget傳來的netflow的資料
一開始也是使用flow-capture
但一直沒有資料
用tcpdump去看
是有資料進來的
但查了一些文件才知道fortiget送過來的是netflow v9
flow-capture不支援
於是改用nfdump 支援 v5 v7 v9
資料就正常收取了
http://nfdump.sourceforge.net/
nfcapd

2016/06/27

最近的新增需求是要起一個ftp server
可是不想要用vsftp或其他daemon
所以直接使用pyftpdlib
還滿方便的 有很多範例可以直接套用
但用了後發現沒有log功能
再查了一下資料
發現只要加紅色二行就搞定了

import logging

from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer

authorizer = DummyAuthorizer()
authorizer.add_user('user', '12345', '.', perm='elradfmwM')
handler = FTPHandler
handler.authorizer = authorizer

logging.basicConfig(filename='/var/log/pyftpd.log', level=logging.INFO)

server = FTPServer(('', 2121), handler)
server.serve_forever()

2016/06/18

在python中撈取mysql的資料
在cursor.execute後可以用cursor.fetchone()及cursor.fetchall()

如果回傳的只有一筆資料 可以使用cursor.fetchone() 可以少一點code
語法

cursor.execute(select count(*) from table)
result = cursor.fetchone()
print result[0]

如果回傳的資料有很多 則使用cursor.fetchall()

語法
cursor.execute(select * from table)
result = cursor.fetchall()
if result:
for record in result:
print record[0]


2016/06/17

今天找了一下有關mysql 日期時間的使用
大約記一下
分為

NOW()        2001-02-02 19:00:46

CURDATE()    2001-02-02

CURTIME()    19:00:46

使用加減功能

NOW() - INTERVAL 1 DAY  結果       2001-02-01 19:00:46

CURDATE() + INTERVAL 1 DAY  結果      2001-02-03 00:00:00


未來      >         NOW()       <        過去

select * from table where enddate > NOW()          表示在NOW()之後的時間      表示未來    大未來

select * from table where enddate < NOW()          表示在NOW()之前的時間      表示過去    小過去

http://wen198599.pixnet.net/blog/post/22450019-mysql%E6%97%A5%E6%9C%9F%E5%92%8C%E6%99%82%E9%96%93%E5%87%BD%E6%95%B8%E4%B8%8D%E6%B1%82%E4%BA%BA

http://www.webasp.net/article/25/24538.htm

http://www.w3school.com.cn/sql/func_now.asp

http://www.mysqltutorial.org/mysql-now/