可以,Linux 的防火墙支持按源/目的 IP、端口、协议、接口、ICMP 类型等条件进行精细化过滤,并可自定义规则优先级与处置动作(如ACCEPT/REJECT/DROP/LOG)。常见工具包括:底层的 iptables/nftables、动态管理的 firewalld,以及简化的 ufw。这些工具既支持基础端口/IP 放行或拒绝,也支持创建自定义链或富规则来实现复杂策略。
| 工具 | 主要能力 | 典型场景 |
|---|---|---|
| iptables/nftables | 基于表/链(如 filter、nat、mangle),规则自上而下匹配,可创建自定义链、设置默认策略、按接口/地址/端口/协议精确过滤 | 需要完全自定义、性能敏感或复杂网关/转发场景 |
| firewalld | **区域(zone)**管理、服务/端口便捷放行、富规则(Rich Rules)精细控制、Direct Rules直通底层、支持日志与限速 | 服务器日常运维、需要动态变更与分区分域管理 |
| ufw | 简化语法、快速开启/关闭端口与服务 | Ubuntu 桌面/服务器的快速配置 |
| 以上能力在主流发行版均可用,选择取决于你对灵活性与易用性的权衡。 |
使用 iptables 按源 IP 与端口放行,并创建自定义链分类管理
# 允许来自 192.168.1.100 的 SSH
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
# 创建自定义链并跳转
sudo iptables -t filter -N WEB_IN
sudo iptables -A WEB_IN -s 203.0.113.10 -j ACCEPT
sudo iptables -A WEB_IN -j DROP
sudo iptables -A INPUT -p tcp --dport 80 -j WEB_IN
# 持久化(示例路径,按发行版调整)
sudo iptables-save > /etc/iptables/rules.v4 # Debian/Ubuntu
sudo service iptables save # CentOS/RHEL 传统方式
提示:规则按顺序匹配,善用自定义链可提升可维护性;变更前务必备份与测试。
使用 firewalld 的富规则与 Direct 规则
# 富规则:仅允许 192.168.1.0/24 访问 7900–8000/TCP
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-8000 protocol=tcp accept'
sudo firewall-cmd --reload
# 富规则:对 SSH 记录日志
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule service name="ssh" log prefix="ssh " level="INFO" accept'
sudo firewall-cmd --reload
# Direct 规则:仅允许 172.25.254.77 访问本机 80/TCP(优先级更高)
sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 1 \
-p tcp --dport 80 -s 172.25.254.77 -j ACCEPT
提示:未加 –permanent 的规则为临时生效;使用 Direct 规则需谨慎,避免与现有策略冲突。