Centos 7 使用iptables
的全面指南
前言

在 CentOS 7 中,默认的防火墙服务是 Firewalld,许多用户仍然习惯于使用iptables
来配置防火墙规则,本文将详细介绍如何在 CentOS 7 上安装、配置和使用iptables
,包括如何禁止 Firewalld 开机启动、安装iptables
、启动和设置iptables
为开机启动以及查看和修改iptables
的默认规则。
1. 禁止 Firewalld 开机启动
为了防止与iptables
冲突,首先需要禁用 Firewalld 并停止其服务,执行以下命令查看 Firewalld 状态:
- systemctl status firewalld
如果服务处于运行状态,执行以下命令停止 Firewalld 服务:
- systemctl stop firewalld
禁止 Firewalld 开机启动:
- systemctl disable firewalld
2. 安装iptables

执行以下命令安装iptables
:
- yum install y iptablesservices
3. 启动iptables
并设置为开机启动
执行以下命令启动iptables
:
- systemctl start iptables
查看iptables
是否成功启动:
- systemctl status iptables
系统显示类似如下,说明iptables
已经成功启动:
- ● iptables.service IPv4 Packet Filtering Core Backend
- Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled)
- Active: active (running) since Mon 20231023 14:56:18 PDT; 1h 1min ago
- Docs: man:iptables(8)
- Main PID: 892 (iptables_restore)
- CGroup: /system.slice/iptables.service
- ├─892 iptables_restore
- └─903 iptables
执行以下命令,设置iptables
开机启动:

- systemctl enable iptables.service
设置完成后,重启实例以验证配置:
- systemctl reboot
4. 查看并修改iptables
默认规则
执行以下命令查看iptables
的现有规则:
- iptables L n
清空所有规则:
- iptables F
根据业务需求添加规则,例如放行 80 端口和 22 端口:
- iptables I INPUT p tcp dport 80 m state state NEW j ACCEPT
- iptables I INPUT p tcp dport 22 m state state NEW j ACCEPT
添加规则,使 INPUT 链拒绝所有请求:
- iptables P INPUT DROP
确认新规则生效:
- iptables L
保存添加的规则:
- iptablessave > /etc/sysconfig/iptables
5. 其他规则设定
如果要添加内网 IP 信任(接受其所有 TCP 请求),可以执行以下命令:
- iptables A INPUT p tcp s 192.168.1.104 j ACCEPT
过滤所有非以上规则的请求:
- iptables P INPUT DROP
要封停一个 IP,使用以下命令:
- iptables I INPUT s... j DROP
要解封一个 IP,使用以下命令:
- iptables D INPUT s... j DROP
6. 关闭 SELinux
在某些情况下,SELinux 可能会影响iptables
的配置,可以选择关闭 SELinux:
- vi /etc/selinux/config
将SELINUX=enforcing
改为SELINUX=disabled
,然后重启系统。
FAQs
Q1:如何更改iptables
规则的顺序?
A1:可以使用iptables
的I
选项在指定链的开头插入规则,要在 INPUT 链的开头插入一条规则,可以使用:
- iptables I INPUT p tcp dport 80 j ACCEPT
这条命令会在 INPUT 链的最上面插入一条放行 80 端口的规则。
Q2:如何删除特定的iptables
规则?
A2:可以使用iptables
的D
选项删除特定规则,使用iptables L linenumbers
列出带有行号的规则,然后使用以下命令删除指定行号的规则:
- iptables D INPUT 行号
要删除第 3 条规则:
- iptables D INPUT 3