netstat:查看网络连接状态
netstat -tulnp # 查看所有监听端口及对应进程
netstat -anp # 查看所有活动连接
ss:更现代的socket统计工具
ss -tulnp # 类似于netstat但更高效
ss -s # 显示socket统计摘要
lsof:列出打开的文件(包括网络连接)
lsof -i # 查看所有网络连接
lsof -i :80 # 查看特定端口的连接
iptables (传统防火墙)
iptables -L -n -v # 查看所有规则
iptables -S # 以规则命令形式显示
nftables (新式防火墙)
nft list ruleset # 显示所有规则
firewalld (CentOS/RHEL)
firewall-cmd --list-all # 查看所有配置
firewall-cmd --state # 检查服务状态
# 检查异常ESTABLISHED连接
netstat -anp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
# 检查异常SYN_RECV连接(可能SYN洪水攻击)
netstat -anp | grep SYN_RECV | wc -l
# 检查被扫描的痕迹
grep -i "refused" /var/log/messages
grep -i "dropped" /var/log/messages
# 检查失败的SSH登录尝试
grep "Failed password" /var/log/auth.log
grep "Invalid user" /var/log/auth.log
# 检查成功登录
grep "Accepted password" /var/log/auth.log
tcpdump:基础抓包工具
tcpdump -i eth0 -nn -w capture.pcap # 捕获eth0接口流量
tcpdump -i eth0 port 22 # 捕获SSH流量
Wireshark/tshark:高级分析
tshark -i eth0 -f "port 80" -w http.pcap
iftop:实时流量监控
iftop -i eth0 -n # 显示eth0接口流量
nethogs:按进程统计流量
nethogs eth0 # 显示每个进程的网络使用
nmap:端口扫描
nmap -sS -p 1-65535 localhost # 扫描本地所有端口
lynis:安全审计
lynis audit system
/var/log/auth.log
- 认证相关日志/var/log/syslog
- 系统日志/var/log/messages
- 通用系统消息/var/log/secure
- RHEL/CentOS安全日志/var/log/kern.log
- 内核日志# 查看最近50条重要日志
tail -n 50 /var/log/syslog | grep -E "error|fail|denied"
# 统计IP访问次数
cat /var/log/auth.log | grep "Failed password" | awk '{print $11}' | sort | uniq -c | sort -nr
# 查看conntrack表状态
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max
# 查看conntrack表内容
conntrack -L
# 检查SYN洪水防护设置
sysctl net.ipv4.tcp_syncookies
sysctl net.ipv4.tcp_max_syn_backlog
#!/bin/bash
echo "===== 安全检查开始 ====="
echo "1. 检查监听端口:"
ss -tulnp
echo -e "\n2. 检查root用户SSH登录:"
grep "Accepted password for root" /var/log/auth.log
echo -e "\n3. 检查失败的SSH登录:"
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr
echo -e "\n4. 检查防火墙规则:"
iptables -L -n -v
echo "===== 安全检查结束 ====="
#!/bin/bash
THRESHOLD=10
ALERT_EMAIL="admin@example.com"
BAD_IPS=$(netstat -anp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | awk -v limit=$THRESHOLD '$1 > limit {print $2}')
if [ ! -z "$BAD_IPS" ]; then
echo "检测到异常连接:" > /tmp/alert.txt
echo "$BAD_IPS" >> /tmp/alert.txt
mail -s "服务器异常连接报警" $ALERT_EMAIL < /tmp/alert.txt
fi
定期更新:保持系统和安全软件更新
apt update && apt upgrade -y # Debian/Ubuntu
yum update -y # RHEL/CentOS
最小化服务:关闭不必要的网络服务
systemctl list-unit-files --type=service | grep enabled
使用SSH密钥认证:禁用密码登录
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
配置fail2ban:防止暴力破解
apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
启用SELinux/AppArmor:增强访问控制
sestatus # 检查SELinux状态
aa-status # 检查AppArmor状态
通过以上方法和工具,您可以有效地调试和解决Linux系统中的各类网络安全问题。