配置防火墙是保护Linux服务器安全的关键步骤。以下是基于iptables/nftables和firewalld的详细方案,适用于大多数Linux发行版:
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# SSH (建议修改默认22端口)
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许ICMP (ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 防止SYN洪水攻击
iptables -N SYN-FLOOD
iptables -A SYN-FLOOD -m limit --limit 10/second --limit-burst 20 -j RETURN
iptables -A SYN-FLOOD -j DROP
iptables -A INPUT -p tcp --syn -j SYN-FLOOD
# 阻止非法包
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# Debian/Ubuntu
iptables-save > /etc/iptables.rules
# RHEL/CentOS
service iptables save
systemctl enable firewalld
systemctl start firewalld
# 设置默认zone
firewall-cmd --set-default-zone=public
# SSH (修改为你的端口)
firewall-cmd --permanent --add-service=ssh
# 或指定端口
firewall-cmd --permanent --add-port=2222/tcp
# Web服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 重新加载
firewall-cmd --reload
# 启用ICMP限制
firewall-cmd --permanent --add-icmp-block-inversion
# 限制连接速率
firewall-cmd --permanent --add-rich-rule='rule service name=ssh limit value=5/m accept'
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 5/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
# 每周备份iptables规则
0 3 * * 0 root iptables-save > /etc/iptables.backup.$(date +\%Y\%m\%d)
# 例如fail2ban
apt-get install fail2ban # Debian/Ubuntu
yum install fail2ban # RHEL/CentOS
iptables -L -n -v # iptables
firewall-cmd --list-all # firewalld
nmap -sS -p- 服务器IP
进阶建议: - 考虑配置基于区域的访问控制(如仅允许特定IP段访问管理端口) - 对于Web服务器,可结合TCP Wrappers(/etc/hosts.allow/deny)增强防护 - 高安全环境建议部署HIDS如OSSEC
以上配置可根据具体发行版(Ubuntu/Debian/RHEL/CentOS等)和系统版本进行适当调整。