1. 程式人生 > >clamav殺毒

clamav殺毒

系統 form port 子線程退出 ase pidfile 根據 監聽 方法

Clam AntiVirus(ClamAV)是一款免費而且開放源代碼的防毒軟件,軟件與病毒庫的更新皆由社區免費發布,官網地址: http://www.clamav.net/lang/en/。 目前ClamAV主要為Linux、Unix 。pyClamad ( http://xael.org/norman/python/pyclamd/)是一個 Python第三方模塊,可讓 Python直接使用 ClamAV病毒掃描守護進程clamd,來實現一個高效的病毐檢測功能,另外, pyClamad模塊也非常容易整合到我們已有的平臺當中。

groupadd clamav
useradd - g clamav - s / bin / false - c
"Clam AntiVirus"
clamav
/bin /false是最嚴格的禁止login選項,一切服務都不能用,而 /sbin /nologin只是不允許系統login,可以使用其他ftp等服務
如果想要用false在禁止login的同時允許ftp,則必須在 /etc /shells裏增加一行 /bin /false。


yum install -y bzip2 bzip2-devel libbz2 libbz2-devel gcc*

./configure - -prefix =/opt/clamav --disable-clamav -with-zlib=/usr/local/zlib ----enable-bzip2

make && make install

配置Clamav

創建目錄

mkdir /opt/clamav/logs

mkdir /opt/clamav/updata
創建文件

touch /opt/clamav/logs/freshclam.log
touch /opt/clamav/logs/clamd.log

chown clamav: clamav clamd.log
chown clamav:clamav freshclam.log

修改配置文件
# vi /opt/clamav

/etc/clam.conf

# Example 註釋掉這一行. 第8 行  

LogFile /opt/clamav/logs/clamd.log
刪掉前面的註釋目錄改為 /opt/clamav/logs/clamd.log

    PidFile /opt/clamav/updata/clamd.pid
刪掉前面的註釋路徑改為 /opt/clamav/updata/clamd.pid

    DatabaseDirectory/opt/clamav/updata
同上

# vi /opt/clamav

/etc/clamfreshclam.conf,將Example
這一行註釋掉。


升級病毒庫

/opt/clamav/bin/freshclam

掃描幫助

/opt/clamav/bin/clamscan - h


另一個安裝方式
(客戶端安裝
"安裝"
yum -y install clamav clamd clamav-update
"安裝clamavp相關程序包"

chkconfig --levels 235 clamd on
“添加掃描搜狐進程clamd系統服務”

/usr/bin/freshclam
#更新病毒庫,建議配置crontab定期更新

sed -i - e '^TCPAddr/( s/127.0.0.1/0.0.0.0/;)' /etc/clamd.conf
#更新守護進程監聽IP配置文件(根據環境不同自行調整)
/etc/init.d/clamd start #啟動掃描守護進程

'''

'''
服務器端
wget http://xael.org/norman/python/pyclamd/pyClamd-0.3.4.tar.gz (根據版本來修改wget)
tar -zxvf pyClamd-0.3.4.tar.gz
cd pyClamd-0.3.4
python setup.py install
''')

#pyClamad

'''
1、ClamdNetworkSocket() 類,使用網絡套接字操作clamd
2、ClamdUnixSocket()類,使用網絡套接字操作clamd

__init__(self,host='127.0.0.1',port=3310,timeout=None)
ClamdNetworkSocket類的初始化方法,
參數host連接主機IP
參數port為連接端口(/etc/clamd.conf配置文件中的TCPSocket參數保持一致)
timeout為連接的超時時間

contscan_file(self,file)
實現對指定的文件或目錄在掃描發生錯誤或發現兵符將不終止,
參數file(string類型)為指定的文件或目錄的絕對路徑

multiscan_file(self,file)
實現多線程掃描指定的文件或目錄,多核環境速度更快,在掃描發生錯誤或發現病毒將不終止
參數file(string類型)為指定的文件或目錄的絕對路徑

scan_file(self,file)
實現對指定的文件或目錄在掃描發生錯誤或發現兵符將終止
參數file(string類型)為指定的文件或目錄的絕對路徑

shutdown(self)方法 實現強制關閉clamd進程並退出

stats(salt) 獲取clamscan當前狀態

reload(self) 強制重載clamd病毒特征庫,掃描前建議做reload操作

EICAR(self) 返回EICAR測試字符串, 生成具有病毒特征的字符串便於測試


腳本如下:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import time, pyclamd
from threading import Thread


class Scan(Thread):
def __init__(self, IP, scan_type, file):
""" 構造方法,參數初始化"""
Thread.__init__(self)
self.IP = IP
self.scan_type = scan_type
self.file = file

def run(self):
try:
cd = pyclamd.ClamdNetworkSocket(self.IP, 3310) # 創建網絡套接字連接對象
if cd.ping(): # 探測連通性
self.connstr = self.IP + "connection [OK]"
cd.reload() # 強制重載clamd病毒特征庫,掃描前建議做reload操作
if self.scan_type == "contscan_file":
self.scanresult = "{0}\n".format(cd.contsacn_file(self.file))
elif self.scan_type == "multiscan_file":
self.scanresult = "{0}\n".format(cd.multiscan_file(self.file))
elif self.scan_type == "scan_file":
self.scanresult = "{0}\n".format(cd.scan_file(self.file))
time.sleep(1)
else:
self.connstr = self.IP + " ping ERROR,exit"
return

except Exception as e:
self.connstr = self.IP + " " + str(e)


IPs = ['192.168.1.1', '192.168.1.2'] # 掃描主機列表
scantype = "multiscan_file" # 掃描模式 支持multiscan_file、contscan_file、scan_file
scanfile = "/" # 指定掃描的目錄

i = 1

threadnum = 2 # 指定啟動的線程數
scanlist = [] # 存儲掃描scan類線程對象列表

for ip in IPs:
currp = Scan(ip, scantype, scanfile) # 創建掃描Scan類對象,參數(IP、掃描模式、掃描路徑)
scanlist.append(currp) # 追加對象到列表

if i % threadnum == 0 or i == len(IPs): # 達到指定的線程數或IP列表後啟動、退出線程
for task in scanlist:
task.start() # 啟動線程

for task in scanlist:
task.join() # 等待所有子線程退出,並輸出掃描結果
print(task.connstr) # 打印服務器連接信息
print(task.scanresult) # 打印掃描結果
scanlist = []
i += 1




clamav殺毒