为了防范DDoS攻击,自动屏蔽攻击者IP地址,你可以使用如下的Python脚本作为示例。这个脚本使用了iptables命令来动态地屏蔽IP地址。确保你的系统中已经安装了iptables,并且你有足够的权限来执行这些操作。
import sys
import subprocess
# 监听的日志文件和IPTables规则链
LOG_FILE = '/var/log/syslog'
CHAIN = 'ddos'
# 初始化IPTables规则
def init_iptables():
subprocess.call(['iptables', '-N', CHAIN])
subprocess.call(['iptables', '-F', CHAIN])
subprocess.call(['iptables', '-A', 'INPUT', '-j', CHAIN])
# 屏蔽一个IP地址
def block_ip(ip):
subprocess.call(['iptables', '-I', CHAIN, '-s', ip, '-j', 'DROP'])
# 解除屏蔽的IP地址
def unblock_ip(ip):
subprocess.call(['iptables', '-D', CHAIN, '-s', ip, '-j', 'DROP'])
# 检查日志文件中的攻击IP并屏蔽它们
def check_log_for_attacks(log_file):
with open(log_file, 'r') as f:
f.seek(0, 2) # 移动到文件末尾
while True:
line = f.readline()
if not line:
break
# 这里添加匹配攻击IP的正则表达式
# 例如 'INVALID LOGIN ATTEMPT'
if 'DDoS' in line: # 假设日志中包含"DDoS"时表示攻击
ip = extract_ip_from_log(line)
block_ip(ip)
# 从日志行中提取IP地址
def extract_ip_from_log(line):
# 这里添加正则表达式来匹配IP地址
# 例如 '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
return '123.123.123.123' # 示例IP
# 主函数
def main():
init_iptables()
check_log_for_attacks(LOG_FILE)
# 这里可以加入一个循环来定期检查日志文件和屏蔽新的攻击IP
if __name__ == '__main__':
main()