菜鸟科技网

如何用命令进入并配置防火墙?

在Linux系统中,防火墙的管理通常依赖于不同的发行版和防火墙工具,常见的有iptables(传统工具)、firewalld(CentOS/RHEL 7+默认)以及nftables(较新版本),要使用命令进入防火墙配置模式,需根据具体工具和需求选择对应操作,以下将分场景详细说明各类防火墙的进入方式及基础配置逻辑。

如何用命令进入并配置防火墙?-图1
(图片来源网络,侵删)

基于iptables的防火墙进入与配置

iptables是Linux内核集成的包过滤工具,通过规则链控制数据流,进入配置模式实质是执行iptables命令进行规则管理,无需“进入”特定界面,而是直接在终端输入命令。

查看当前规则

sudo iptables -L -n -v

参数说明:-L列出规则,-n以数字形式显示地址和端口(避免DNS解析延迟),-v显示详细信息(如数据包计数、网络接口)。

配置规则示例

  • 允许SSH连接(默认端口22)

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    -A表示添加规则到链尾,-p tcp指定协议,--dport 22目标端口,-j ACCEPT允许通过。

    如何用命令进入并配置防火墙?-图2
    (图片来源网络,侵删)
  • 拒绝特定IP访问

    sudo iptables -A INPUT -s 192.168.1.100 -j DROP

    -s指定源IP,-j DROP直接丢弃数据包。

保存规则(防止重启失效)

不同发行版保存方式不同:

  • CentOS 6/7:使用iptables-service服务
    sudo service iptables save  # CentOS 6
    sudo /usr/libexec/iptables/iptables.init save  # CentOS 7
  • Debian/Ubuntu:安装iptables-persistent后自动保存
    sudo apt install iptables-persistent
    sudo netfilter-persistent save

基于firewalld的防火墙进入与配置

firewalld采用区域(Zone)概念动态管理规则,支持运行时配置和永久配置分离,进入配置模式主要通过firewall-cmd命令实现。

如何用命令进入并配置防火墙?-图3
(图片来源网络,侵删)

检查服务状态

sudo firewall-cmd --state

若返回running,则服务已启动。

查看当前区域及默认区域

sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone

动态添加规则(临时生效,重启后失效)

  • 开放HTTP服务(端口80)
    sudo firewall-cmd --add-service=http --zone=public
  • 开放自定义端口
    sudo firewall-cmd --add-port=8080/tcp --zone=public

永久保存规则

添加规则时使用--permanent参数,或单独执行以下命令:

sudo firewall-cmd --runtime-to-permanent

交互式配置(可选)

通过firewall-config图形工具(需安装)进入可视化界面:

sudo firewall-config &

基于nftables的防火墙进入与配置

nftables是iptables的替代品,语法更简洁,在Ubuntu 20.04+、CentOS 8+等新版本中默认使用。

查看当前规则集

sudo nft list ruleset

添加基础规则

  • 创建链表
    sudo nft add table inet filter
    sudo nft add chain inet filter input { type filter hook input priority 0 \; }
  • 允许SSH流量
    sudo nft add rule inet filter input tcp dport 22 ct state new,established accept

保存规则

nftables规则默认保存在/etc/nftables.conf,修改后需手动加载:

sudo nft -f /etc/nftables.conf

防火墙规则管理通用操作

操作 iptables命令 firewalld命令 nftables命令
查看所有规则 sudo iptables -L sudo firewall-cmd --list-all sudo nft list ruleset
清空规则 sudo iptables -F sudo firewall-cmd --reload sudo nft flush ruleset
禁用防火墙 sudo systemctl stop iptables sudo systemctl stop firewalld sudo systemctl stop nftables
启用防火墙开机自启 sudo systemctl enable iptables sudo systemctl enable firewalld sudo systemctl enable nftables

注意事项

  1. 规则顺序:防火墙按规则顺序匹配,一旦匹配即停止,因此规则顺序至关重要(如拒绝规则应放在最后)。
  2. 远程管理安全:修改防火墙规则时,建议先通过本地终端操作,避免因SSH端口被误封导致远程连接断开。
  3. 日志记录:通过-j LOG记录被拦截的包(如sudo iptables -A INPUT -j LOG --log-prefix "DROP: "),便于排查问题。

相关问答FAQs

Q1: 修改防火墙规则后如何立即生效?
A1: 不同工具生效方式不同:

  • iptables:临时规则立即生效,永久规则需执行sudo service iptables restart(CentOS)或sudo netfilter-persistent reload(Ubuntu)。
  • firewalld:临时规则使用sudo firewall-cmd --reload重新加载,永久规则需先添加--permanent参数再重载。
  • nftables:执行sudo nft -f /etc/nftables.conf重新加载配置文件。

Q2: 如何确认防火墙是否成功拦截了特定连接?
A2: 可通过以下方式验证:

  1. 日志检查
    • iptables:查看/var/log/messages/var/log/kern.log(需先配置-j LOG)。
    • firewalld:执行sudo journalctl -u firewalld查看服务日志。
    • nftables:使用sudo dmesg | grep nft查看内核日志。
  2. 测试连接:在客户端使用telnetnc测试目标端口,若连接失败且无防火墙放行规则,则说明拦截成功。telnet 192.168.1.10 80
分享:
扫描分享到社交APP
上一篇
下一篇