news 2026/7/22 3:11:58

iptables服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
iptables服务

一、iptables介绍

iptables服务是用户管理内核空间的iptables的管理工具,通过iptables书写内核空间的iptables策略

iptables的规则是至上而下的读取方式,遇到与数据包信息匹配的规则后直接采用

iptables的规则默认保存在内存中,如果需要永久保存需要把策略以字符的形式保存到/etc/sysconfig/iptables中

二、iptables命令的语法格式及常用参数

语法格式如下:

iptables -t 表名 <-A/I/D/R> 规则链名[规则号] <-i/o 网卡名> -p 协议名 <-s 源ip/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

常用参数如下:

参数

说明

-t

对指定的表进行操作,table必须是raw,nat,filter,mangle中的一个。默认是filter表。

-p

指定要匹配的数据包协议类型

-S

-source address/mask:把指定的一个或者一组地址作为源地址,按此规则进行过当后面没有mask时,address是一个地址,比如:192.168.1.1;当mask指定时,可

以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0

-d

--destinationaddress/mask:地址格式同上,但这指定地址为目的地址,按此进行过滤

-i

--in-interface name:指定数据包的来自来自网络接口,比如最常见的eth0。注意:它INPUT,FORWARD,PREROUTING这三个链起作用。如果没有指定此选项,说明

可以来自任何一个网络接口。同前面类似,"!"表示取反

-0

---0ut-interfacename:指定数据包出去的网络接口。只对OUTPUT,FORWARD,POSTROUTING三个链起作用

-L

--list[chain]列出链chain上面的所有规则,如果没有指定链,列出表上所有链的所有规

-A

--append chain rule-specification:在指定链chain的末入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定

-i

--insert chain[rulenum]rule-specification:在链chain中的指定位置插入一条或多条如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号

-D

--delete chain rule-specification -D,-delete chain rulenum:在指定的链chain中删除一个或多个指定规则

-R

num

Replays替换/修改第几条规则

-P

--policy chain target:为指定的链chain设置策略target。注意,只有内置的链才允许有策略,用户自定义的是不允许的

-F

--flush[chain]清空指定链chain上面的所有规则。如果没有指定链,清空该表上所有链的所有规则

-N

--new-chain chain用指定的名字创建一个新的链

-X

--delete-chain[chain]:删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链

-E

--rename-chain old-chain new-chain:用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响

-Z

--zero[chain]:把指定链,或者表中的所有链上的所有计数器清零

-j

--jump target<指定目标>:即满足某条件时该执行什么样的动作。target可以是内置的目标,比如ACCEPT,也可以是用户自定义的链

-h

显示帮助信息

三、firewalld服务管理方式与iptables的管理方式区别

iptables是基于Linux内核的Netfilter子系统构建的,直接操作Netfilter; 而firewalld则通过libnftables库与Netfilter交互,提供了一个更高的抽象层

iptables使用基于表的规则集,包括filternatmanglerawsecurty五个表;firewalld采用基于区域的规则集,包括defaultpublicinternalexternaldmz五个区域

iptables的配置较为复杂,需要用户掌握特定的命令行语法;firewalld提供了更直观和灵活的配置方式,支持命令行和图形界面

由于firewalld通过libnftables库与Netfilter交互,其性能相对于直接操作Netfilteriptables说较低。

由于firewalld通过libnftables库与Netfilter交互,其性能相对于直接操作Netfilteriptables来说较低。

四、实验环境

主机名 网卡 用途

node1 nat-172.25.254.10 外网主机

node2 nat-172.25.254.100 路由器

hostonly-192.168.0.100

node3 hostonly-192.168.0.10 内网主机

五、iptables启用

[root@node2 ~]# dnf install iptables-nft-services.noarch -y
[root@node2 ~]# systemctl start iptables.service
[root@node2 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

六、三张表五条链

Iptables是基于Netfilter框架实现的报文选择系统

iptables用于报文的过滤、网络地址转换和报文修改等功能

Iptables本质上是包含了5个规则表,而规则表则包含了一些列的报文的匹配规则以及操作目标

1、raw

第一优先级的表,设置raw表规则后,不会对数据包进行链接跟踪和NAT转换,使用于

PREROUTINGOUTPUT链,对应的动作为NOTRACK

2、mangle表:

第二优先级的表,根据规则,修改数据包的TOS(Type Of Service,服务类型)、TTL(TimeToLive,生存周期)以及设置Mark标记,以实现Qos以及策略路由等。

3、nat表:

第三优先级的表,网络地址转换表,用于修改源和目的的地址,分SNAT(源目的地址转换)和DNAT(目的地址转换)。

4、filter

第四优先级的表,用于控制到达链(forward链、input链、output链)上的数据包,是放行(accepte)、丢弃(drop)或者拒绝(reject)

5security表:

最不常用的表(通常,我们说iptables只有4张表,security表是新加入的特性),用于在数据包上应用SELinux

NFIPPREROUTING:位于路由之前,报文一致性检查之后(报文一致性检查包括:报文版本、报文度和checksum

NF_IP_LOCAL_IN:位于报文经过路由之后,并且目的是本机的

NF_IP_FORWARD:位于在报文路由之后,目的地非本机的。

NF_IP_LOCAL_OUT:由本机发出去的报文,并且在路由之前。

NF_IP_POST_ROUTING:所有即将离开本机的报文

七、filter表

在本机设定apache只能被192.168.0.0/24网段访问

[root@node2 ~]# echo 172.25.254.100 > /var/www/html/index.html
[root@node2 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

[root@node2 ~]# iptables -I INPUT 5 -p tcp --dport 80 -s 192.168.0.0/24 -m state --state new -j ACCEPT

[root@node2 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 192.168.0.0/24 0.0.0.0/0 tcp dpt:80 state NEW
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

测试

[root@node1 ~]# curl 172.25.254.100
curl: (7) Failed to connect to 172.25.254.100 port 80: 没有到主机的路由

[root@node3 ~]# curl 192.168.0.100
172.25.254.100

八、nat表

1.内网访问外网

[root@node3 ~]# ping 172.25.254.10
ping: connect: 网络不可达

#设定网关
[root@node3 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100
[root@node3 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[root@node3 ~]# nmcli connection reload
[root@node3 ~]# nmcli connection up eth0
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)
[root@node3 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0

在双网卡主机中设置出战策略

把所有从此主机中出去的数据包来源都转换成eth0网卡的ip

[root@node2 ~]# iptables -D FORWARD 1

[root@node2 ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100
[root@node2 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 0.0.0.0/0 0.0.0.0/0 to:172.25.254.100


#打开内核路由功能
[root@node2 ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0

[root@node2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@node2 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@node2 ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1

测试

[root@node3 ~]# ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) 比特的数据。
64 比特,来自 192.168.0.100: icmp_seq=1 ttl=64 时间=0.292 毫秒

[root@node1 ~]# w -i
11:37:55 up 1:36, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 10:02 1:35m 0.01s 0.01s -bash
root pts/0 172.25.254.1 10:32 2.00s 0.04s 0.00s w -i
root pts/1 172.25.254.100 11:37 6.00s 0.00s 0.00s -bash

2.外网访问内网

[root@node3 ~]# ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) 比特的数据。
64 比特,来自 192.168.0.100: icmp_seq=1 ttl=64 时间=0.292 毫秒

[root@node1 ~]# w -i
11:37:55 up 1:36, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 10:02 1:35m 0.01s 0.01s -bash
root pts/0 172.25.254.1 10:32 2.00s 0.04s 0.00s w -i
root pts/1 172.25.254.100 11:37 6.00s 0.00s 0.00s -bash

测试

[root@node1 ~]# ssh -l root 172.25.254.100
Activate the web console with: systemctl enable --now cockpit.socket

Register this system with Red Hat Insights: rhc connect

Example:
# rhc connect --activation-key <key> --organization <org>

The rhc client and Red Hat Insights will enable analytics and additional
management capabilities on your system.
View your connected systems at https://console.redhat.com/insights

You can learn more about how to register your system
using rhc at https://red.ht/registration
Last login: Tue Jul 21 10:33:22 2026 from 192.168.0.1
[root@node3 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:1e:58:f3 brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::575a:d7ac:c15a:3503/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@node3 ~]#

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 3:11:36

苹果M6芯片技术解析:2纳米工艺与AI性能优化

1. 苹果芯片战略转向&#xff1a;从性能竞赛到端侧AI优先苹果正在对Mac芯片路线图进行重大调整&#xff0c;这可能是自M1系列发布以来最激进的一次战略转向。根据供应链消息&#xff0c;苹果决定取消原定于2026年推出的M6 Pro和M6 Max芯片&#xff0c;转而将资源集中在2027年推…

作者头像 李华
网站建设 2026/7/22 3:11:30

C# 11新特性解析:泛型数学与字符串处理优化

1. C# 11 新特性概览C# 11 是微软在2022年11月发布的重大语言更新&#xff0c;作为.NET 7的核心组成部分&#xff0c;它带来了15项令人振奋的新功能。这些特性主要围绕三个核心方向&#xff1a;增强泛型数学支持、改进字符串处理能力&#xff0c;以及提升模式匹配的灵活性。在实…

作者头像 李华
网站建设 2026/7/22 3:10:49

C2000系统控制寄存器:复位、NMI与软件复位机制深度解析

1. 系统控制寄存器&#xff1a;嵌入式系统的“神经中枢”在嵌入式系统开发&#xff0c;尤其是工业控制、汽车电子这类对可靠性要求极高的领域&#xff0c;系统控制寄存器&#xff08;System Control Registers&#xff09;扮演着“神经中枢”的角色。它不像GPIO、UART那样直接与…

作者头像 李华
网站建设 2026/7/22 3:07:48

代码知识图谱化:提升大型代码库理解效率的工程实践

1. 项目概述&#xff1a;代码库知识图谱化的革命性方案在大型软件开发中&#xff0c;我们常常面临一个令人头疼的问题&#xff1a;随着代码量增长到百万行级别&#xff0c;即使是经验丰富的开发者也会迷失在复杂的调用关系和模块依赖中。传统IDE提供的符号跳转功能&#xff0c;…

作者头像 李华
网站建设 2026/7/22 3:07:11

C++对象编程:从基础概念到高级实践

1. C对象基础概念解析在C编程中&#xff0c;对象是面向对象编程的核心概念。简单来说&#xff0c;对象就是类的实例化产物&#xff0c;它包含了数据成员和操作这些数据的成员函数。想象一下&#xff0c;类就像建筑设计图纸&#xff0c;而对象就是根据这张图纸建造出来的实际房子…

作者头像 李华
网站建设 2026/7/22 3:06:51

RYU控制器开发实战:从安装到SDN应用开发

1. RYU控制器概述RYU是一款基于Python开发的开源SDN控制器&#xff0c;由日本NTT实验室开发并维护。作为轻量级控制器代表&#xff0c;它提供了完整的OpenFlow协议支持&#xff08;1.0-1.5版本&#xff09;和丰富的API接口。我在实际项目中发现&#xff0c;其模块化架构特别适合…

作者头像 李华