iptables简述及命令示例

发布时间 2023-09-12 18:04:00作者: 杜jn

iptables:

在 Linux 系统中,iptables 不仅仅是一个服务或守护进程,它实际上是内核空间的一部分,用于处理网络包过滤和网络地址转换。这意味着,即使 iptables 服务没有运行,内核模块仍然会按照当前的 iptables 规则来处理网络数据包。

iptables.service 或者 iptables-services 通常用于在系统启动时加载一组预定义的 iptables 规则,以及在系统关闭时(或者需要时)保存当前的 iptables 规则。然而,这并不意味着 iptables 作为一个系统服务需要一直运行。一旦规则被加载到内核,即使 iptables 服务停止了,这些规则仍会继续工作。

简而言之,iptables 规则是直接由内核处理的,不依赖于任何用户空间的服务或进程。因此,即使 iptables 服务状态显示为 "inactive" 或 "dead",仍然可能有一组活动的 iptables 规则在系统上生效。
如果你对当前系统的 iptables 规则有疑问,你可以使用 iptables -L -v 命令来查看所有当前活动的规则。这将显示所有配置的规则,不论 iptables 服务是否运行。

永久禁止外部访问tcp端口10008:

echo "iptables -A INPUT -p tcp -s 127.0.0.1 --dport 10008 -j ACCEPT ; iptables -A INPUT -p tcp --dport 10008 -j DROP" >> /etc/rc.d/rc.local;source /etc/rc.d/rc.local

iptables 是一个强大的工具,用于配置 Linux 内核防火墙。下面是一些常见的 iptables 命令用例:

查看现有规则

要查看所有的 iptables 规则,你可以运行:

sudo iptables -L

要查看更详细的信息,包括数据包和字节的计数器,你可以添加 -v 选项:

sudo iptables -L -v

清空现有规则

清空所有规则:

sudo iptables -F

禁止特定IP地址访问

要禁止特定 IP 地址访问服务器,你可以使用以下命令:

sudo iptables -A INPUT -s [IP_ADDRESS] -j DROP

替换 [IP_ADDRESS] 为你想要禁止的 IP 地址。

允许特定端口访问

要允许特定端口(例如 SSH 端口 22)的流量:

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

禁止特定端口访问

要禁止特定端口的流量,你可以使用以下命令:

sudo iptables -A INPUT -p tcp --dport [PORT] -j DROP

替换 [PORT] 为你想要禁止的端口号。

限制每个 IP 的连接数

为了防止单个 IP 地址的过多连接,你可以使用以下规则:

sudo iptables -A INPUT -p tcp --syn --dport [PORT] -m connlimit --connlimit-above [NUMBER] -j DROP

这里,[PORT] 是你想要限制的端口号,[NUMBER] 是允许的最大连接数。

保存规则

在某些系统中,你需要保存 iptables 规则以便在重启后还能生效。

在 Debian/Ubuntu:

sudo iptables-save > /etc/iptables/rules.v4

在 CentOS/RHEL:

sudo service iptables save

或者

sudo iptables-save > /etc/sysconfig/iptables