(企业服务篇)Linux火墙服务之iptables

本文深入探讨了Linux的IPTABLES防火墙机制,包括其核心概念如三张表五条链,以及如何通过iptables命令进行规则管理和实验操作,如SSH连接限制、状态跟踪和地址转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IPTABLES

IPTABLES 是3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

三张表五条链:
三张表:
防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
我们现在用的比较多的表有3个:

filter 过滤规则表,根据域定义的规则过滤符合条件的数据包
nat    地址转换规则表
mangel  修改数据标记规则表

五条链
链:数据从进入到流出的五个环节,相当于源端到目的端的五道门
五条链也被成为五个钩子函数:

链名:          位置
prerouting      报文进入本机的路由前的位置
INPUT           到达本机内部的报文的位置
FORWARD         由本纪转发的报文的位置
OUTPUT          由本机内部发出的报文的位置
POSTROUTING     斑纹路由后流出本机的位置

这是NetFilter规定的五个数据链,任何一个数据包,只要经过本机,必经过这五个>链中的其中某一条链。
表与规则之间的关系:一个表中放的是一条条规则
规则与链之间的关系:一条规则只能作用在某个链上
表和链的对应关系

表名            链
filter          INPUT,FORWARD,OUTPUT
nat             PREROUTING(SNAT),POATROUTING(DNAT),OUTPUT
mangle          PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

iptables相关管理命令:
基础命令:
iptables -n(不做解析)L(不接受当前火墙策略)  ###查看iptables规则
iptables -F    ###清除iptables规则
service iptables save   ###保存修改过的iptables规则

相关参数
iptables -A -l -n -F -P -D -R

-A      添加(添加到iptables的最后一行)
-I      插入(可以指定插入到某一行)
-n      不做解析
-L      刷新当前的iptables
-P      设定当前默认表的默认动作
-D      删除某张表的某条链中的某条信息iptables -D  INPUT 1  就是删除INPUT表中的第一条信息
-R      修改某条信息


iptables相关实验操作:

只让指定主机使用ssh连接本机:
1:将指定主机添加到本机的iptables规则
iptables -A INPUT -p tcp --dport 22 -s 172.25.254.6 -j ACCEPT

2.将filter表的默认操作更改为:DROP(DROP为丢掉所有发送过来的包,不会有回应)

此时用172.25.254.6使用ssh访问172.25.254.106主机:可以连接上:

用172.25.254.206主机连接172.25.254.106主机:(此时没有回应)

2.使允许过的服务或者正在连接的服务下次连接时直接通过(速度块)

只要不是第一次允许的服务,在下一次连接时直接通过,不用直接验证
1:清空表中信息

iptables -F

2.将已经连接过或者正在连接的服务的iptables策略设置为ACCEPT。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

此时的iptables里面写的是:

3.将新的创建的连接加入到iptables中:

iptables -A INPUT -m state --state NEW  -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -m state --state NEW  -p tcp --dport 53 -j ACCEPT

iptables -A INPUT -m state --state NEW  -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -m state --state NEW  -p tcp --dport  443 -j ACCEPT

将此时的iptables的配置保存,查看文件/etc/sysconfig/iptables(这个文件就是iptables 的策略文件):

service iptabls save    ###将当前iptables的配置保存

vim /etc/sysconfig/iptables    ###将此时的iptables的配置保存

此时只能有相应的被允许的端口可以进行访问。

nat地址转换
1.iptables -F   ###将iptables中的设置清除:


2.SNAT源地址转换
nat网关将内网中客户机发出的数据包中的私有IP转换成对外的公有IP,然后将数据包发给服务端
服务端:
1.将本机网卡非别设置成172.25.254.106
eth1设置ip为:1.1.1.106

将另一台客户端主机设置:
ip:1.1.1.206
网关设置:1.1.1.106   网关设置可以设置全局网关地址是/etc/sysconfig/network

在服务端主机上设置:
iptables -t nat -A POSTROUTNG -o eth0 -s 1.1.1.0/24 -j SNAT --to-source 172.25.254.6

将iptables中写入一条规则:

nat表中的POSTROUTING 链中写入:eth0网卡接受到的1.1.1.0网段的信息进行源地址转换(SNAT):转换到172.25.254.106

测试:用用户端ssh 172.25.254.6的时候查看登录审计:(但是当前登录操作的主机是172.25.254.206,登录审计是106主机,这是因为:在206发送ssh命令的时候数据通过了106主机,106主机对于发送过来的主机的ip做了地址的转换,转换成了106的ip与6主机进行数据交流)

4.DNAT地址转换:

1.iptables -t nat -F    ###将nat表里的信息刷掉

在服务端设置:eth0 172.25.254.106  eth1 1.1.1.106

在客户端设置: eth0 1.1.1.206

2.服务器端设置DNAT    SNAT转换:

iptables -t nat -A PREROUTING -d 172.25.254.106 -j DNAT --to-dport 1.1.1.206

iptables -t nat -A POSTROUTING -d 1.1.1.206 -j SNAT --to-source 1.1.1.106

测试:用另外一台主机ssh 172.25.254.106,查看当前登录审计:

此时172.25.254.106主机的设置完成所有连接172.25.254.106主机的操作都会转移到1.1.1.206主机上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值