网络安全之iptables教程
iptables
3.6.3 禁止网段连入(禁止 10.0.0.0/24 网段访问 8888 端口)
3.6.4 只允许指定网段连入(允许 172.1 6.1.0 网段)
3. 完成后 在 web 01 发出 ip r 和 ping 外网 ip 的结果
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
共享上网。
- 点赞
- 收藏
- 关注作者
评论(0)