作为IT工程师,我可以提供一系列使用Linux命令和工具来防御网络攻击的方法。以下是分层防御策略:
# 实时监控网络连接
netstat -antp
ss -antp
# 检查异常连接
lsof -i
# 使用tcpdump抓包分析
tcpdump -i eth0 -n -w capture.pcap
# 基本防火墙规则示例
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许SSH
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP # 默认拒绝所有其他入站
# 防御SYN洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
# 限制连接速率
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP
# 检查不必要的开放端口
netstat -tulnp
# 禁用不必要的服务
systemctl disable <service_name>
# 检查SUID/SGID文件
find / -perm -4000 -o -perm -2000 -type f -exec ls -la {} \;
# 检查root权限的进程
ps -ef | grep ^root
# 使用AIDE检查文件完整性
aide --check
# 检查可疑的cron任务
crontab -l
ls /etc/cron*
# 检查登录历史
last
lastb # 查看失败登录尝试
# 检查auth日志
grep "Failed password" /var/log/auth.log
#!/bin/bash
# 自动封禁多次失败SSH登录的IP
FAILED_LOGIN_THRESHOLD=5
LOG_FILE="/var/log/auth.log"
# 获取失败登录超过阈值的IP
BAD_IPS=$(grep "Failed password" $LOG_FILE | awk '{print $(NF-3)}' | sort | uniq -c | awk -v limit=$FAILED_LOGIN_THRESHOLD '$1 > limit {print $2}')
for IP in $BAD_IPS; do
# 检查是否已在黑名单
if ! iptables -L INPUT -v -n | grep $IP; then
iptables -A INPUT -s $IP -j DROP
echo "$(date) - Banned IP: $IP" >> /var/log/iptables_ban.log
fi
done
# 安装和使用Fail2ban
sudo apt-get install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 使用TCP Wrappers (/etc/hosts.allow和/etc/hosts.deny)
echo "sshd: ALL" >> /etc/hosts.deny
echo "sshd: 192.168.1.0/24" >> /etc/hosts.allow
# 使用DenyHosts (针对SSH暴力破解)
sudo apt-get install denyhosts
# 使用Lynis进行安全审计
sudo apt-get install lynis
sudo lynis audit system
# 检查系统漏洞
sudo apt-get update
sudo apt-get upgrade
这些命令和工具可以组合使用,根据您的具体环境和安全需求进行调整。记住,安全是一个持续的过程,需要定期审查和更新防御措施。