网络安全之iptables教程

举报
yd_231620336 发表于 2024/09/28 10:52:13 2024/09/28
【摘要】 iptablesiptables 防火墙 1. 防火墙概述 2. 防火墙 2.1 防 火墙种类及使用说明2.2 必须熟悉的名词 2.3 iptables 执行 过程※※※※※2.4 表与链※※※※※      2.4.1 简介 2.4.2 每个表说明 1) filter 表 2) nat 表 2.5 环境准备及命令 3.5.2 iptables 命令参数 3...

iptables

iptables 防火墙 1. 防火墙概述

2. 防火墙

2.1 火墙种类及使用说明

2.2 必须熟悉的名词

2.3 iptables 执行 过程※※※※※

2.4 表与链※※※※※

    

2.4.1 简介

2.4.2 每个表说明

1) filter

2) nat

2.5 环境准备及命令

3.5.2 iptables 命令参数

3.6 配置 filter 表规则※※※※※

3.6.1 禁止访问 22 端口

3.6.2 ip , 屏蔽某个 ip

3.6.3 禁止网段连入(禁止 10.0.0.0/24 网段访问 8888 端口)

3.6.4 只允许指定网段连入(允许 172.1 6.1.0 网段)

3.6.4 指定多个端口

3.6.5 匹配 ICMP 类型

3.6.6 匹配网络状态( TCP / IP 连接状态)

3.6.7 限制并发及速率

3.6.8 防火墙规则的保存与恢复 ☆☆☆☆

3.6.9 filter 表小结

3.7 实际生产用法

3.8 nat

3.8.1 实现共享上网※※※※※

1. 防火墙配置

2. web 配置

3. 完成后 web 01 发出 ip r ping 外网 ip 的结果

3.8.2 实现端口转发※※※※※

3.8.3 实现 ip 映射


3.8.4 nat 表总结

4. 总结

5 、请写出查看 iptables 当前所有规则的命令。

6 、禁止来自 10.0.0.188 ip 地址访问 80 口的请求

7 、如何使在命令行执行的 iptables 规则永久生效?

8 、实现把访问 10.0.0.3:80 的请求转到 172.16.1.17:80

9 、实现 172 .16 .1 .0/24 段所有主机通过 124 .32 .54 .26 外网 IP 共享上 网。


1 . 防火墙概述


目标 :


封端口 ,ip


实现NAT功能


共享上网


端口映射(端口转发) ,ip映射

2 . 防火墙


2 .1 防火墙种类及使用说明

硬件 : 整个企业入口

三层路由 : H3C 华为 Cisco(思科) 防火墙 : 深信服 ,绿盟 ,奇安信 . . . . .

o Juniper

软件 : 开源软件 网站内部 封ip ip

o iptables 写入到Linux内核中 ,以后服务docker 工作在 4(大部分)

o firewalld C7

o nftalbes C8

o ufw (ubuntu firewall) Ubuntu

. 云防火墙(公有云) 阿里云 :

安全组 (ip ,封端口)

NAT网关(共享上网 ,端口映射 . . . . ) waf应用防火墙

. waf防火墙(应用防火墙 ,处理7层的攻击) SQL注入 ,等攻击 . 书写规则(描述攻击过程 ,关键提示 ,关键操作 . )

企业选型建议 :


中小企业 : 使用公有云 ,安全组 ,waf防火墙 ,态势感知 .

访问量巨大 : 使用硬件防火墙 ,waf防火墙 ,硬件服务器+云服务器





2 .2 必须熟悉的名词

容器 : 瓶子 罐子 存放东西

. (table) : 存放的容器 ,防火墙最大概念

· (chain) : 存放规则的容器

. 规则(policy) : 准许或拒绝规则 ,未来书写的防火墙条件就是各种防火墙规则




Netfilter

表(tables

链( chains

规则( Policy

一栋楼

楼里的房子

房子里的柜子

柜子里衣服 ,摆放规则



2 .3 iptables 执行过程※※※※※

工作流程小结:⅛⅛⅛⅛⅛

1 . 防火墙是层层过滤 ,实际是按照配置规则的顺序从上到下 ,从前到后进行过滤的。

2 . 如果匹配成功规则 ,即明确表示是拒绝(DROP)还是接收(ACCEPT) 数据包就不再向下匹配新的规则

3 . 如果规则中没有明确表明是阻止还是通过的 ,也就是没有匹配规则 ,向下进行匹配 ,直到匹配默认规则得到明确的阻止还是通过。

4 . 防火墙的默认规则所有规则都匹配完才会匹配的

Q : 如果配置了一条拒绝的规则 ,该放在哪里


2 .4 表与链※※※※※


2 .4 .1 简介

· 表(table)是对功能的分类 ,防火墙功能(filter表) ,共享上网 ,端口转发(nat表) . 链对数据流进行处理 ,需要使用不同的链(数据流入(INPUT) ,数据流出(OUTPUT)) iptables 4表伍链

4表 : filter nat raw表 mangle表

伍链 : INPUT OUTPUT FORWARD PREROUTING POSTROUTING

pre . . . . 之前

post . . . . .之后


2 .4 .2 每个表说明


1 ) filter

是iptables默认的表 ,filter表示过滤 .

. 实现防火墙功能 : (对数据包的filter过滤)屏蔽或准许 ,端口 ,ip .


filter** **

强调:主要和主机自身相关 ,真正负责主机防火墙功能的(过滤流入流出主机的数据包) filter表示iptables默认使 用的表 ,这个表定义了三个链( chains企业工作场景:主机防火墙

INPUT

负责过滤所有目标地址是本机地址的数据包 通俗来说 就是过滤进入主机的数据包 (能否让数据包进入服务器)

FORWARD

路过 : 负责转发流经主机的数据包。起转发的作用 ,和NAT关系很大 ,后面会详细介绍 LVS NAT模式, net .ipv4 .ip_forward=0

OUTPUT

处理所有源地址是本机地址的数据包 通俗的讲 :就是处理从主机发出去的数据包


2 ) nat

实现nat功能

实现共享上网(内网服务器上外网) 端口映射和ip映射





nat

负责网络地址转换的 ,即来源与目的IP地址和port的转换。

应用:和主机本身无关 ,一般用于局域网共享上网或者特殊的端口转换服务相关。 工作场景:

1 . 用于企业路由( zebra)或网关( iptables 共享上网 POSTROUTING

2 . 做内部外部IP地址一对一映射( dmz 硬件防火墙映射IP到内部服务 ftp服务( PREROUTING

3 . WEB ,单个端口的映射 ,直接映射80端口( PREROUTING) 这个表定义了3个链 nat功能相当于网络的acl

制。和网络交换机acl类似。

OUTPUT

和主机放出去的数据包有关 ,改变主机发出数据包的目的地址。



PREROUTING

在数据包到达防火墙时 ,进行路由判断之前执行的规则 作用是改变数据包的目的地址、 目的端口等 就是收信时 ,根据规则重写收件人的地址。

例如 :把公网IP xxx .xxx .xxx .xxx映射到局域网的xx .xx .xx .xx服务器上。 如果是web服务 ,可以报80转换为局域网的服务器9000端口上

10.0.0.61 8080( 目标端口) ----nat 一à 10 .0 .0 .7 22


POSTROUTING

在数据包离开防火墙时进行路由判断之后执行的规则 ,作用改变数据包的源地址 ,源端口等。 写好发件人的地址 ,要让家人回信时能够有地址可回。

例如。默认笔记本和虚拟机都是局域网地址 ,在出网的时候被路由器将源地址改为了公网地址。 生产应用 局域网共享上网



2 .5 环境准备及命令

iptables iptables启动或关闭的命令

m01

web01 web02

10 .0 .0 .61 10 .0 .0 .7 10 .0 .0 .8

172 .16 .1 .61 172 .16 .1 .7 172 .16 .1 .8

yum install -y iptables-services

[root@yunhe-m01 ~ ]# uname -r

3 .10 .0-862 .el7 .x86_64

[root@yunhe-m01 ~ ]# yum install -y iptables -

services




[root@m01 ~ ]# rpm -ql iptables-services /etc/sysconfig/ip6tables

/etc/sysconfig/iptables #

防火墙的配置文件

/usr/lib/systemd/system/ip6tables .service

/usr/lib/systemd/system/iptables .service #

防火墙服务配置文件(命令) systemctl start iptables [root@m01 ~ ]# rpm -ql iptables




/usr/sbin/iptables

除/查看 规则(4表伍链)

/usr/sbin/iptables -save

/usr/sbin/iptables-restore


#iptables 命令 添加/删


#iptables规则 输出(保存) # 恢复

modprobe modprobe modprobe modprobe modprobe modprobe modprobe


#永久

ip_tables

iptable_filter iptable_nat

ip_conntrack

ip_conntrack_ftp ip_nat_ftp

ipt_state







[root@db01 ~]# cat >> /etc/rc.local <<EOF

> modprobe ip_tables

> modprobe iptable_filter

> modprobe iptable_nat

> modproble ip_conntrack

> modprobe ip_conntrack_ftp

> modprobe ip_nat_ftp

> modprobe ipt_state

> EOF




50 lsmod----显示已载入系统的模块 lsmod 其实就是list modules的缩写,即 列出所有模块

[root@m01 ~ ]# lsmod |egrep 'filter |nat |ipt '

nf_nat_ftp 12770 0

nf_conntrack_ftp 18638 1 nf_nat_ftp

iptable_nat 12875 0

nf_nat_ipv4 14115 1 iptable_nat

nf_nat 26787 2

nf_nat_ftp ,nf_nat_ipv4

nf_conntrack 133053 6

nf_nat_ftp ,nf_nat ,xt_state ,nf_nat_ipv4 ,nf_conntrack







_ftp ,nf_conntrack_ipv4 iptable_filter

ip_tables

iptable_filter ,iptable_nat

libcrc32c 12644 3

xfs ,nf_nat ,nf_conntrack

[root@m01 ~ ]# systemctl [root@m01 ~ ]# systemctl

[root@m01 ~ ]# systemctl [root@m01 ~ ]# systemctl

stop firewalld

disable firewalld




start iptables .service enable iptables .service

[root@m01 ~ ]# systemctl status iptables .service

● iptables .service - IPv4 firewall with iptables




Loaded : loaded

(/usr/lib/systemd/system/iptables .service; enabled; vendor preset : disabled)

Active : active (exited) since Fri 2021-05-28 09 :59 :53 CST; 5s ago

Process : 7971




#查看filter表中的规则 ,默认查看的是filter表




[root@m01 ~ ]# iptables -nL

#查看指定表中的规则

[root@m01 ~]# 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


3 .5 .2 iptables命令参数


参数

含义

-L

显示表中的所有规则

-n

不要把端口或ip反向解析为名字

指定表


-t

指定表 ,不指定默认是filter

指定连接(加入/追加/删除)


-A

append 追加把规则写入到链的末尾 .加入准许类规则 使用-A

-I

insert 把规则加在链的第1拒绝类规则放在所有规则最上面 拒绝类 -I

-D

delete 删除 -D INPUT 1


参数

含义


-p

指定协议 protocal tcp/udp/icmp/all


--dport

目标端口 dest destination指定端口的时候加上协议 -p tcp


--sport

源端口 source


-s

--source ip 如果只屏蔽/准许ip ,网段 ,不用加上协议 .


-d

--destination 目标ip


-m

指定模块 multiport


-i

input 输入的时候 从哪个网卡进来


-o

ouput 输出的时候 从哪个网卡出去


参数

含义


-j

满足条件后的动作 : DROP(拒绝)/ACCEPT(准许)/REJECT(拒绝)



DROP REJECT拒绝

DROP 把数据丢掉 不会返回信息给用户 REJECT 拒绝 返回拒绝信息





参数

含义


-F flush

清除指定表中所有的规则 ,备份 .


-X

删除用户自定义的链


-Z zero

链的计数器清零(数据包计数器与数据包字节计数器iptables


-v

显示数据包 ,数据量



iptables命令及选项

指定表

指定链

(插入/追加/删除)

ip

具体要求

(端口 ,ip ,协议)

端口

动作

iptables

-t filter

-A INPUT

-s

-p tcp/udp/icmp

--dport 目标端口

-j DROP



-I

-d


--sport 源端口

-j REJECT



-D




-j ACCEPT

3.6 配置filter表规则※※※※※

正式配置之前 先备份 , 清空规则

[root@m01 ~]# iptables -F [root@m01 ~]# iptables -X [root@m01 ~]# iptables -Z




[root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination




3.6.1 禁止访问22端口

#拒绝用户访问22端口

iptables -t filter -A INPUT -p tcp --dport 22 -j

DROP

#查看规则并加上序号

iptables -t filter -nL --line-number

#删除规则

iptables -t filter -D INPUT 1 #根据序号删除




-t 用于指定表 ,不写默认就是filter表

删除 规则 -D

3 .6 .2 封ip ,屏蔽某个ipoot@yunhe-m01 ~ ]# iptables -I INPUT -j DROP

[root@yunhe-m01 ~ ]# iptables -I INPUT

172 .16 .1 .7 -j DROP [root@yunhe-m01 ~ ]#

[root@yunhe-m01 ~ ]# iptables -nL

iptables -I INPUT -s 172 .16 .1 .0/24 -j DROP




3 .6 .3 禁止网段连入(禁止10 .0 .0 .0/24网段访问 8888端口)

nc ncat netcat

nc -lk

telnet

iptables -I INPUT -s 10 .0 .0 .0/24 -p tcp --dport

8080 -j DROP




[root@web01 ~ 阱 ssh 10 .0 .0 .61 hostname ^C

[root@web01 ~ 阱 ssh 172 .16 .1 .61 hostname root@172 .16 .1 .61 's password :

m01




3 .6 .4 只允许指定网段连入(允许172 .16 .1 .0网段)

实现阿里云白名单功能 :默认是拒绝 开放端口 网段

allow 10 .0 .0 .0/24;

all;




方法1 : 利用!进行排除

iptables -I INPUT ! -s 172 .16 .1 .0/24 -j DROP




#只准许 10 .0 .0 .0/24 访问 言外之意 除了 10 .0 .0 .0/24 都

拒绝

iptables -I INPUT ! -s 10 .0 .0 .0/24 -j DROP

#方法2 : 修改链默认规则 修改为拒绝 ,添加准许

先配置好规则 准许规则 修改默认规则

iptables -P INPUT DROP #修改默认规则

3 .6 .4 指定多个端口

iptables -I INPUT -p tcp --dport

iptables -I INPUT -p tcp --dport [root@yunhe-m01 ~ ]# iptables -nL Chain INPUT (policy ACCEPT)

target prot opt source

8888

9999




-j DROP -j DROP

destination

#指定多个端口

-m multiport -p tcp --dport 80,443

多端口模块

iptables -A INPUT -m multiport -p tcp --dport

80 ,443 -j ACCEPT iptables -nL

iptables -A INPUT -p tcp --dport 1 :1024 -j

ACCEPT

#补充 : #

iptables -I INPUT -p tcp -m multiport ! --dport

80 ,443 -j DROP

#如果是 连续的端口 可以不加上-m multiport 1 :1024

iptables -I INPUT -p tcp --dport 1024 :65535 -j

DROP


3 .6 .5 匹配ICMP类型

.

 ICMP( Internet Control Message Protocol) Internet控制报文协议 ping

 整个网站核心

通过防火墙规则 控制是否可以ping

iptables -I INPUT -p icmp --icmp-type 8 -j DROP



[root@m01 ~ ]# iptables -nL

--icmp-type 8 #ping是8号类型,加不加均可.

[root@m01 ~ ]# iptables -I INPUT -p icmp --icmp -

type 255 -j DROP

温馨提示 : 更加精确的写法是

iptables -t filter -I INPUT -p icmp --icmp-type 8 -j DROP

简单写法

iptables -t filter -I INPUT -p icmp -j DROP

通过内核参数 控制 禁止被ping

[root@m01 ~ ]# cat /etc/sysctl .conf

#/proc/sys/net/ipv4/icmp_echo_ignore_all #net网络 ipv4协议 icmp协议忽略所有

net .ipv4 .icmp_echo_ignore_all = 1

#生效

sysctl -p 


练习题 :

5、请写出查看iptables当前所有规则的命令。

6、禁止来自10.0.0.188 ip地址访问80端口的请求

7、如何使在命令行执行的iptables规则永久生效?

8、实现把访问10.0.0.3 :80的请求转到172.16.1.17 :80

9、实现172.16.1.0 /24段所有主机通过124.32.54.26 外网IP

共享上网。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。