在Linux系统中,实现高效过滤的防火墙通常使用iptables或nftables。以下是使用这两种工具进行高效过滤的方法:
使用iptables
-
基本规则设置:
- 清除现有规则:
iptables -F - 设置默认策略:
iptables -P INPUT DROP(阻止所有输入),iptables -P FORWARD DROP(阻止所有转发),iptables -P OUTPUT ACCEPT(允许所有输出)。
- 清除现有规则:
-
允许必要的流量:
- 允许SSH连接:
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT - 允许HTTP/HTTPS连接:
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT和iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- 允许SSH连接:
-
限制连接数:
- 限制每秒连接数:
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
- 限制每秒连接数:
-
日志记录:
- 记录被拒绝的连接:
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
- 记录被拒绝的连接:
-
保存规则:
- 保存iptables规则:
iptables-save > /etc/iptables/rules.v4
- 保存iptables规则:
使用nftables
nftables是iptables的下一代,提供了更简洁和高效的规则管理。
-
基本规则设置:
- 清除现有规则:
nft flush ruleset - 设置默认策略:
nft add rule ip filter input drop,nft add rule ip filter forward drop,nft add rule ip filter output accept
- 清除现有规则:
-
允许必要的流量:
- 允许SSH连接:
nft add rule ip filter input tcp dport 22 accept - 允许HTTP/HTTPS连接:
nft add rule ip filter input tcp dport 80 accept和nft add rule ip filter input tcp dport 443 accept
- 允许SSH连接:
-
限制连接数:
- 限制每秒连接数:
nft add rule ip filter input tcp flags syn limit rate over 1/sec burst 3 accept
- 限制每秒连接数:
-
日志记录:
- 记录被拒绝的连接:
nft add rule ip filter input log prefix "nftables-Dropped: " level info
- 记录被拒绝的连接:
-
保存规则:
- 保存nftables规则:
nft list ruleset > /etc/nftables.conf
- 保存nftables规则:
其他优化建议
- 使用连接跟踪:通过
conntrack模块可以更精细地控制连接状态,例如只允许已建立的连接。 - 使用IP集:对于大量IP地址的过滤,可以使用IP集(ipset)来提高效率。
- 定期清理规则:定期清理不再需要的规则,以保持防火墙的高效运行。
通过以上方法,可以在Linux系统中实现高效的防火墙过滤,确保系统的安全性和性能。