linux防扫描端口的方法-05互联
>

新闻中心 / linux防扫描端口的方法

linux防扫描端口的方法

发布时间:2024/11/13 10:34:29

我来详细介绍Linux防扫描端口的具体实现方法,主要从以下几个层面进行防护:

  1. 使用iptables实现高级防扫描规则

# 1. 防止SYN扫描
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP

# 2. 限制连接速率
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP

# 3. 防止端口扫描
iptables -N port-scanning
iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
iptables -A port-scanning -j DROP
  1. 使用port knocking实现端口动态开放

# 安装knockd
apt install knockd

# 配置knockd
cat > /etc/knockd.conf <<EOF
[options]
        UseSyslog
        LogFile = /var/log/knockd.log

[SSH]
        sequence    = 7000,8000,9000
        seq_timeout = 10
        command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn
        cmd_timeout = 30
        stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

[FTP]
        sequence    = 7001,8001,9001
        seq_timeout = 10
        command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 21 -j ACCEPT
        tcpflags    = syn
        cmd_timeout = 30
        stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 21 -j ACCEPT
EOF
  1. 配置fail2ban实现智能防护

# 安装fail2ban
apt install fail2ban

# 创建自定义配置
cat > /etc/fail2ban/jail.local <<EOF
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3

[portscan]
enabled = true
filter = portscan
logpath = /var/log/syslog
maxretry = 2
findtime = 300
bantime = 86400
action = iptables-multiport[name=portscan]

[ssh-portscan]
enabled = true
filter = ssh-portscan
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
bantime = 86400
EOF

# 创建端口扫描过滤器
cat > /etc/fail2ban/filter.d/portscan.conf <<EOF
[Definition]
failregex = kernel: \[.*\].*PORTSCAN.*PROTO=TCP.*SRC=<HOST>
ignoreregex =
EOF
  1. 使用psad进行入侵检测

# 安装psad
apt install psad

# 配置psad
cat > /etc/psad/psad.conf <<EOF
EMAIL_ADDRESSES            your-email@domain.com;
HOSTNAME                   your-hostname;
HOME_NET                   192.168.1.0/24;
ENABLE_AUTO_IDS           Y;
ENABLE_AUTO_IDS_EMAILS    Y;
EXPECT_TCP_OPTIONS        Y;
AUTO_IDS_DANGER_LEVEL     1;
EOF

# 启动psad服务
systemctl enable psad
systemctl start psad
systemctl start psad
  1. 实施端口混淆和伪装

# 1. 修改SSH端口
sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config

# 2. 配置端口重定向
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

# 3. 设置蜜罐端口
apt install honeyd
  1. 系统监控和日志分析

# 1. 实时监控连接
watch -n 1 "netstat -antup | grep ESTABLISHED"

# 2. 配置系统日志
cat >> /etc/rsyslog.conf <<EOF
# 记录所有连接
kern.* /var/log/connections.log
EOF

# 3. 创建端口监控脚本
cat > /usr/local/bin/port_monitor.sh <<EOF
#!/bin/bash
netstat -tun | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
EOF
chmod +x /usr/local/bin/port_monitor.sh
  1. 设置定期安全检查

# 创建安全检查脚本
cat > /usr/local/bin/security_check.sh <<EOF
#!/bin/bash
# 检查开放端口
echo "开放端口列表:"
netstat -tlnp

# 检查可疑连接
echo "可疑连接:"
netstat -antp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head

# 检查失败的登录尝试
echo "失败的登录尝试:"
grep "Failed password" /var/log/auth.log | tail -n 10
EOF
chmod +x /usr/local/bin/security_check.sh

# 添加到cron定时任务
echo "0 * * * * /usr/local/bin/security_check.sh > /var/log/security_check.log 2>&1" >> /etc/crontab

实施建议:

  1. 分步实施

  • 先实施基础防护(iptables规则)

  • 再添加高级功能(port knocking、fail2ban)

  • 最后实施监控和告警

  1. 安全性测试

  • 每实施一项措施后进行测试

  • 使用nmap等工具进行自查

  • 确保正常服务不受影响

  1. 持续优化

  • 根据日志分析调整规则

  • 定期更新防护策略

  • 保持系统和工具更新