2017年12月27日 星期三

Extreme XOS run pyton scripts

XOS run python scripts v15.7 or high

將交換器上的 IP & MAC 往syslog 丟, 簡單將IP資料保留下



## 編緝Scripts
# vi ip2syslog.py


#!/usr/bin/python
# Client program
import sys
import io
from socket import *

f = open('/proc/self/ns_id', 'w')
f.write('2\n') #VR-DEFAUTL
f.close()

exsh.clicmd('disable clipaging', False)

# Set the socket parameters
host = "192.168.254.10"
port = 514         
buf = 1024
addr = (host,port)

# Create socket
UDPSock = socket(AF_INET,SOCK_DGRAM)
cnt = 0
for line in exsh.clicmd('show iparp', True).splitlines():
    tokens = line.split()
    if len(tokens) == 0:
        continue 
    if len(tokens) == 8:
        if tokens[2][0].isdigit():
            oui = tokens[2].lower()[:8]
            if oui:
                UDPSock.sendto('MAC:'+tokens[2]+' IP:'+tokens[1]+' port:'+tokens[-1], addr)
            cnt += 1
UDPSock.close()

## 執行scripts
# run scripts ip2syslog.py
## 收到LOG ...
    
Nov 28 03:26:56 10.100.3.145 MAC: 74:3e:cb:10:21:89 IP:192.168.1.221 port:15
Nov 28 03:26:56 10.100.3.145 MAC: 78:44:76:d6:5c:b9 IP:192.168.1.232 port:23
Nov 28 03:26:56 10.100.3.145 MAC: 74:3e:cb:10:27:4d IP:192.168.1.234 port:18
Nov 28 03:26:56 10.100.3.145 MAC: 74:3e:cb:10:22:2f IP:192.168.1.236 port:5
Nov 28 03:26:56 10.100.3.145 MAC: 74:3e:cb:10:27:49 IP:192.168.1.238 port:11
Nov 28 03:26:56 10.100.3.145 MAC: 74:3e:cb:10:27:45 IP:192.168.1.241 port:7
Nov 28 03:26:56 10.100.3.145 MAC: 00:d0:41:d8:cb:fd IP:192.168.1.242 port:23
Nov 28 03:26:56 10.100.3.145 MAC: 74:3e:cb:10:22:2b IP:192.168.1.244 port:10
Nov 28 03:26:56 10.100.3.145 MAC: 74:3e:cb:10:22:29 IP:192.168.1.245 port:12
Nov 28 03:26:56 10.100.3.145 MAC: 00:11:32:49:5e:7f IP:192.168.1.252 port:4
...
...
...
    
##在搭 upm 排程執行, 就可以簡單記錄IP & MAC


2017年8月31日 星期四

Postfix 指定特定帳號寄信到MailList


指定email 可寄到全公司帳號, 做為發送公告或通知


由scripts AD產生一個maillist

# cat /etc/postfix/maillist
#!/usr/bin/bash
echo 'all@example.com'
/usr/bin/ldapsearch -b "dc=example,dc=com" -D "example\vmail" -x -w vmail@password \
           -h 192.168.1.1  -p 389 "(&(objectClass=user)(objectCategory=person))" mail | \
           awk '{ if(match($0,/mail:/)) print " ",$2}'

產生一個檔案 virtual , 內容如:
all@example.com
    user01@example.com
    user02@example.com
    user03@example.com
    user04@example.com
不知道是不是postfix virtual 的關係, 本機 /etc/aliases不生效
原本要用 aliases 直接跑 scripts 處理掉 all:   "|/etc/postfix/maillist"


postfix 參數
check_recipient_access  :  檢查收件者email
check_sender_access : 檢查寄件者email
smtpd_restriction_classes : 增加類別, 一樣可以用, 隔開產生多個不同的類別

設定postfix main.cf
增加 virtual_alias_maps 對應到virtual
增加 smtpd_recipient_restrictions, 到第一個, 也限制permit_mynetworks
增加 smtpd_restriction_classes 一個類 trust_email

virtual_alias_maps = ldap:/etc/postfix/ad_virtual_group_maps.cf,
                                   hash:/etc/postfix/virtual 

smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/restrict.allalias, 
                                                  permit_mynetworks,

smtpd_restriction_classes = trust_email
trust_email = check_sender_access hash:/etc/postfix/restrict.allaliasEmail, reject

限制all 只有 trust_email 才接受
cat /etc/postfix/restrict.allalias
    all@example.com trust_email

trust_email 類別內容, 指定一個或多個 email
# cat /etc/postfix/restrict.allaliasEmail
    alva@example.com OK



2017年8月28日 星期一

Rsyslog 收集所有設備SYSLOG, 依設備的IP分檔案儲存

Rsyslog增加 udp & tcp syslog 服務, RULES 來源IP分類檔案
若是有大量設備效果非常好, 也可必免單檔快速過大


cat /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
#$AllowedSender UDP, 10.0.0/8

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

#### RULES ####(放在 kernel messages 前)
$template PerHostLog,"/var/log/device/%fromhost-ip%.log"
:fromhost-ip, !isequal, "127.0.0.1" ?PerHostLog
& stop


增加logrotate 以天為單位保留90天,
壓縮, 防止系統檔案被塞爆, 對文字檔案效果非常好
壓縮時預設會有日期

# vim /etc/logrotate.conf
daily
rotate 90
compress

修正syslog 目錄, 增加設備目錄檔
# vim /etc/logrotate.d/syslog 
/var/log/device/*.log


依主機設備,日期存檔, 增加日期的識別率
$template PerHostLog,"/var/log/device/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
:fromhost-ip, !isequal, "127.0.0.1" ?PerHostLog




2017年8月23日 星期三

CACTI Alert 增加 LineNotify

加入CACTI程式裡, 取代原有的2G簡訊系統, 改由LineNotify

增加在plugins: settings & thold 的function 內
# vim plugins/settings/include/functions.php
   function send_mail {}

# vim plugins/thold/thold_functions.php
   function thold_mail {}

$subject 是要傳送的文字訊息.

## line token
$ch = curl_init();
$lineurl="https://notify-api.line.me/api/notify" ;
$linehead=array("Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXX");
$linefields=array("message" => $subject);
curl_setopt($ch, CURLOPT_URL, $lineurl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $linehead);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $linefields);
curl_exec($ch);
curl_close($ch);





另一種方式, curl 命令模式:
$ curl -X POST https://notify-api.line.me/api/notify \
          -H 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXX \
          -F 'message=alert' \
          -F 'imageFile=@/tmp/alert.jpg'


第三種, 附加圖檔(jpeg or png)
    function curl_file_create() 產生上傳檔案

<?php
if (!function_exists('curl_file_create')) {
    function curl_file_create($filename, $mimetype = '', $postname = '') {
    return "@$filename;filename="
            .($postname ?: basename($filename))
            .($mimetype ? ";type=$mimetype" : '');
    }
}

$ch = curl_init();
$lineurl="https://notify-api.line.me/api/notify" ;
$linehead=array("Content-Type: multipart/form-data",
                "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXX");
$linefields = array('message' => 'Alert',
                    'imageFile' => curl_file_create('/tmp/alert.jpg'));
curl_setopt($ch, CURLOPT_URL, $lineurl);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $linehead);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $linefields);
curl_exec($ch);
curl_close($ch);
?>




2013年12月19日 星期四

刪除目錄內所有tar檔案內的特定檔案

一年排程設備備份檔案, 年初不小心在目錄內誤放了幾個不相關 img, 結果年底要燒成光碟
結果總容量共22G, 沒辨法燒錄CD, 所以只好處理*.gz檔案, 刪除img後 剩下2xxM . O_O

原本想用人工一個一個檔案處理, 結果處理到第三個就放棄, 因為有3xx多個檔案


簡單迴圈顯示目錄下所有檔案
for f in `ls`; do
  echo "File -> $f"
done
簡單迴圈顯示目錄下所有.gz檔案
for f in `ls *.gz`; do
  echo "File -> $f"
done

#看一下gz檔案內的檔案列表
tar --list --file=device.config.20131219.tar.gz


#用gunzip 將.gz 解回.tar, 刪除掉檔案, 在將檔案用 gzip 壓縮
  (zip 的檔案好像無法直接刪除檔)

for f in `ls *.gz`; do
  echo "gzip File -> $f"
  gunzip $f
  fn=`echo $f|awk -F.gz '{print $1}'`
  echo "tar File -> $fn"
  tar --delete --file=$fn tftpboot/RFS7000-5.4.4.0-007R.img
  gzip $fn
done





Extreme XOS run pyton scripts

XOS run python scripts v15.7 or high 將交換器上的 IP & MAC 往syslog 丟, 簡單將IP資料保留下 ## 編緝Scripts # vi ip2syslog.py #!/usr/bin/python # ...