linux系统中的防火墙(iptables与firewalld)——iptables

iptables

关闭firewalld打开iptables
linux系统中的防火墙(iptables与firewalld)——iptables_第1张图片

相关概念

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。
与Linux内核各版本集成的防火墙历史版本:
2.0.X内核:ipfwadm
2.2.X内核:ipchains
2.4.X内核:iptables

iptables的组成

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

表名 功能
filter 过滤规则表,根据预定义的规则过滤符合条件的数据包
nat 地址转换规则表
mangle 修改数据标记位规则表

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

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

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

表和链的对应关系

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

iptables相关管理命令

基础命令

iptables -n(不做解析)L(不接受当前火墙策略) #######查看iptables规则
linux系统中的防火墙(iptables与firewalld)——iptables_第2张图片
iptables -F ######清除iptables规则
linux系统中的防火墙(iptables与firewalld)——iptables_第3张图片
service iptables save ######保存修改过的iptables规则
linux系统中的防火墙(iptables与firewalld)——iptables_第4张图片

相关参数

iptables -A -I -n -F -P -D -R

-A 添加(添加到指定链的最后一行)
-I 添加(可以指定添加到链的哪一行)
-n 不解析
-F 清空iptables表的信息
-P 设定iptables的默认类型(DROP ACCEPT)
-D 删除链中的某列信息   ###iptables -D INPUT 2 删除INPUT表中的第二列信息
-R 修改链中特定列的信息

iptables相关实验操作

只让指定主机使用ssh连接本机

1:将指定主机添加进本机的iptables规则
iptables -A INPUT -p tcp --dport 22 -s 172.25.66.250 -j ACCEPT
linux系统中的防火墙(iptables与firewalld)——iptables_第5张图片
2:将iptables默认类型设置为DROP

-P:设置默认策略的(设定默认门是关着的还是开着的)
默认策略一般只有两种
iptables -P INPUT (DROP|ACCEPT):默认是关的/默认是开的

iptables -P INPUT DROP :这就把默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。
linux系统中的防火墙(iptables与firewalld)——iptables_第6张图片
现在,这台主机已经拒绝除172.25.66.250主机外的所有主机的远程访问了,172.25.66.250主机也只能使用ssh访问
用172.25.66.250主机连接本机(被允许,可以连接):
linux系统中的防火墙(iptables与firewalld)——iptables_第7张图片
我们使用其他主机远程访问本机试试,用172.25.66.12主机:
linux系统中的防火墙(iptables与firewalld)——iptables_第8张图片
无法连接

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

只要不是第一次允许的服务,在下一次连接时直接通过,不用进行验证
1:清空表中信息 -F
linux系统中的防火墙(iptables与firewalld)——iptables_第9张图片
2:将已经连接过或者正在连接的服务的iptables策略设置为ACCEPT,即为这些服务打开门
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
linux系统中的防火墙(iptables与firewalld)——iptables_第10张图片
将从未连接过的服务添加进iptables的ACCEPT策略
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
linux系统中的防火墙(iptables与firewalld)——iptables_第11张图片
service iptables save
linux系统中的防火墙(iptables与firewalld)——iptables_第12张图片
vim /etc/sysconfig/iptables
此文件中就是刚刚添加的iptables规则
linux系统中的防火墙(iptables与firewalld)——iptables_第13张图片

nat地址转换

NAT地址转换详细原理可以参考:网络地址转换NAT的原理及其作用
1:iptables -F
linux系统中的防火墙(iptables与firewalld)——iptables_第14张图片
2:SNAT源地址转换
nat网关将内网中客户机发出的数据包中的私有IP转换成对外的公有IP然后将数据包发给服务端
(一):将本机作为SNAT server
网卡eth0设置内部IP:172.25.66.11
网卡eth1设置外部IP:172.25.254.22
将server2主机作为局域网内的主机
网卡eth0设置IP:172.25.66.12
默认路由指向SNAT server的内部地址172.25.66.11
linux系统中的防火墙(iptables与firewalld)——iptables_第15张图片
(二):在SNAT server中
iptables -t nat -A POSTROUTING -o 外网网卡 -s 内网网段 -j SNAT --to-source 外网IP
iptables -t nat -A POSTROUTING -o eth1 -s 172.25.66.0/24 -j SNAT --to-source 172.25.254.22
linux系统中的防火墙(iptables与firewalld)——iptables_第16张图片
修改/etc/sysctl.conf net.ipv4.ip_forward = 1
sysctl -p
linux系统中的防火墙(iptables与firewalld)——iptables_第17张图片
(三):在server2中用ssh连接一台外网主机,然后在登陆上的外网主机中查看登陆审计
linux系统中的防火墙(iptables与firewalld)——iptables_第18张图片
如此,便实现了源地址转换,使用局域网内主机server2(172.25.66.12)连接外网主机,server2经过SNAT server(172.25.66.11)后,SNAT server将server2的源地址转换成了SNAT server中的外网IP,这样就等于是将局域网内的地址保护了起来,所以在连接上的外网主机上登陆审计看到的是外网IP
3:DNAT目标地址转换
(一):将本机作为DNAT server
网卡eth0设置内部IP:172.25.66.11
网卡eth1设置外部IP:172.25.254.22
将server2主机作为局域网内的主机
网卡eth0设置IP:172.25.66.12
现在要把外网访问172.25.254.22的所有流量映射到172.25.66.12上
(二):iptables -F
iptables -F -t nat
linux系统中的防火墙(iptables与firewalld)——iptables_第19张图片
(三):iptables -t nat -A PREROUTING -d 172.25.254.22 -j DNAT --to-dest 172.25.66.12
iptables -t nat -A POSTROUTING -d 172.25.66.12 -j SNAT --to-source 172.25.66.11
linux系统中的防火墙(iptables与firewalld)——iptables_第20张图片
(四):我们用外网主机ssh连接DNAT server的外网IP172.25.254.22
linux系统中的防火墙(iptables与firewalld)——iptables_第21张图片
可以看到,我们用外网主机连接DNAT server的外网IP,直接映射到了局域网内部主机server2上,这样就完成的目标地址转换

你可能感兴趣的:(linux服务篇)