1. 程式人生 > >PPTP自定義日誌審計

PPTP自定義日誌審計

在Linux環境中搭建的l2tp協議v p n服務,日誌檔案並沒有像nginx一樣有指定的日誌格式寫到指定的檔案當中,而是統統寫到了系統日誌messages裡,這樣一來我們想查詢一些記錄或者做一些日誌審計就非常的麻煩,那麼我們可以通過ppp的控制來做自定義的日誌

其實簡單的來說就是寫兩個指令碼,一個是/etc/ppp/ip-up,另一個是/etc/ppp/ip-down

  • /etc/ppp/ip-up:當連線v p n服務的時候觸發執行

  • /etc/ppp/ip-down:當斷開連線v p n服務的時候觸發執行

當然,這兩個檔案都各自定義了一些內建的變數從而大大的方便了我們進行使用,兩個檔案中定義的內建變數都大為相同,不過ip-down所定義的比ip-up的多了幾個,下面進行詳細一點的說明

  • $1:連線到伺服器的虛擬網絡卡口名稱

  • $4:連線到伺服器的閘道器地址

  • $5:分配給客戶端的IP地址

  • $6:客戶端的源IP地址(好像不行,不知道是不是我自己的問題,反正這個變數輸出為空)

  • $PEERNAME:連線時所使用的認證使用者名稱

  • $CONNECT_TIME:關閉連線後統計總共的連線時間,以秒為單位

  • $BYTES_SENT:關閉連線後統計總共傳送的位元組數,以位元組為單位

  • $BYTES_RCVD:關閉連線後統計總共接收的位元組數,以位元組為單位

瞭解上面的內建變數後,那麼我們就可以開始自定義我們的日誌輸出指令碼了,我們直接在ip-up檔案和ip-down檔案中新增即可

vim /etc/ppp/ip-up
#獲取客戶源IP地址
a1=`date +"%h"`
a2=`date +"%H:%M"`
sip=`grep "$a1" /var/log/messages | grep "$a2" | grep "xl2tpd" | grep "Connection established to" | awk '{print $9}' | awk -F, '{print $1}'`

#獲取當前時間
time=`date +"%Y-%m-%d %H:%M:%S"`

#將資訊寫入到日誌檔案中
echo "------------Login------------" >> /var/log/pptpd.log
echo "Time: $time" >> /var/log/pptpd.log
echo "SourceIP: $sip" >> /var/log/pptpd.log
echo "User: $PEERNAME" >> /var/log/pptpd.log
echo "Device: $1" >> /var/log/pptpd.log
echo "ServerIP: $4" >> /var/log/pptpd.log
echo "ClientIP: $5" >> /var/log/pptpd.log
echo "ServerArea: HK" >> /var/log/pptpd.log

#將資訊寫入到資料庫中
/usr/bin/mysql -h127.0.0.1 -u*** -p'123456' -e "INSERT INTO ***.conn_log(Time,SourceIP,User,Device,ServerIP,ClientIP,ServerArea) VALUES ('$time','$sip','$PEERNAME','$1','$4','$5','HK');"
vim /etc/ppp/ip-down
#獲取客戶源IP地址
a1=`date +"%h"`
a2=`date +"%H:%M"`
sip=`grep "$a1" /var/log/messages | grep "$a2" | grep "xl2tpd" | grep "control_finish: Connection closed" | awk '{print $10}' | awk -F, '{print $1}' | head -n 1`

#計算總傳輸位元組數
bs=`expr $BYTES_SENT + $BYTES_RCVD`
#計算平均每秒傳輸位元組數
as=`expr $bs / $CONNECT_TIME`

#獲取開始連線的時間
st=`date -d "-$CONNECT_TIME second" +"%Y-%m-%d %H:%M:%S"`
#獲取斷開連線的時間
pt=`date +"%Y-%m-%d %H:%M:%S"`

#獲取uuid值
uuid=`/usr/bin/mysql -h127.0.0.1 -u*** -p'123456' -e "SELECT UUID FROM ***.conn_log WHERE Time='$st';" | grep "\|" | tail -n 1`

#將資訊寫入到日誌檔案中
echo "------------Logout------------" >> /var/log/pptpd.log
echo "UUID: $uuid" >> /var/log/pptpd.log
echo "StartTime: $st" >> /var/log/pptpd.log
echo "StopTime: $pt" >> /var/log/pptpd.log
echo "SourceIP: $sip" >> /var/log/pptpd.log
echo "User: $PEERNAME" >> /var/log/pptpd.log
echo "Device: $1" >> /var/log/pptpd.log
echo "ServerIP: $4" >> /var/log/pptpd.log
echo "ClientIP: $5" >> /var/log/pptpd.log
echo "ConnectTime: $CONNECT_TIME" >> /var/log/pptpd.log
echo "BbytesSum: $bs" >> /var/log/pptpd.log
echo "AverageSpeed: $as" >> /var/log/pptpd.log
echo "BytesSend: $BYTES_SENT" >> /var/log/pptpd.log
echo "BytesRcvd: $BYTES_RCVD" >> /var/log/pptpd.log
echo "ServerArea: HK" >> /var/log/pptpd.log

#將資訊寫入到資料庫中
/usr/bin/mysql -h127.0.0.1 -u*** -p'123456' -e "INSERT INTO ***.cloes_log(UUID,StartTime,StopTime,SourceIP,User,Device,ServerIP,ClientIP,ConnectTime,BbytesSum,AverageSpeed,BytesSent,BytesRcvd,ServerArea) VALUES ($uuid,'$st','$pt','$sip','$PEERNAME','$1','$4','$5','$CONNECT_TIME','$bs','$as','$BYTES_SENT','$BYTES_RCVD','HK');"

這裡編寫的不僅輸出到了檔案中,同時還輸出到了資料庫裡,當然各位可以根據自己的需求而定~

感到對你有幫助的話,不妨點個關注唄~~ :-)