Linux基础篇学习——Linux安全之iptables

iptables简介

iptables是工具(CentOS7.6的工具为firewalld),用户通过iptables将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"是真正的防火墙,名为netfilter

1.netfilter是防火墙真正的安全框架,位于内核空间
2.iptables是一个命令行工具,位于用户空间,通过这个命令行工具操作netfilter
3.netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能

内核空间 也叫做内核态,操作系统占据的内存区域
用户空间 也叫做用户态,用户进程所在的内存区域

硬件驱动代码运行在内核空间,与kernel运行在相同空间内,所以驱动程序发生问题容易造成系统的崩溃。将用户空间与内核空间隔离开,可减少系统崩溃的可能,提高系统的稳定性。在现实环境中,应用程序崩溃的情况比一些硬件故障出现的概率要多的多得多。所以将用户空间和内核空间隔离开很有必要。

【centos7使用iptables】

yum install -y iptables-services
systemctl stop firewalld	;禁止firewalld自动启动
systemctl disable firewalld
systemctl enable iptables	;将iptables设置为开机自动启动

防火墙分类

从逻辑上分类

主机防火墙 针对单个主机进行防护
网络防火墙 处于网络入口或者边缘,针对网络入口进行防护,服务于防火墙背后的本地局域网

从物理上分类

硬件防火墙 在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高
软件防火墙 应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低

iptables四表五链

四表

具有相同功能的规则的集合叫做“表”,不同的规则放置于不同的表中工作

说明内核模块
filter表过滤,防火墙iptable_filter
nat表网络地址转换iptable_nat
mangle表拆解封装,重新封装iptable_mangle
raw表关闭nat表上启用的连接追踪机制iptable_raw

RAW表注意事项
(1) RAW表只使用在PREROUTING链和OUTPUT链上
(2) 对收到的数据包在连接跟踪前进行处理
(3) 在使用了RAW表的链上,处理RAW表后将跳过NAT表和处理ip_conntrack(记录iptables网络包的状态)
(4) RAW表可以应用在不需要nat的情况下,以提高性能(如大量访问的web服务器,可以让80端口不进行数据包的链接跟踪处理,以提高用户的访问速度)

五链

表是链上的一些具有相同功能规则的集合

PREROUTINGraw表,mangle表,nat表
INPUTmangle表,filter表(Centos7中有nat表)
FORWARDmangle表,filter表
OUTPUTraw表,mangle表,nat表,filter表
POSTROUTINGmangle表,nat表

INPUT、FORWARD、OUTPUT默认策略都是ACCEPT,放行当前所有发往本机的报文

在实际使用中,通常是用表来操作

表(功能)链(钩子)
rawPREROUTING,OUTPUT
manglePREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
natPREROUTING,OUTPUT,POSTROUTING(Centos7中有INPUT)
filterINPUT,FORWARD,OUTPUT

当不同的表处于同一条"链"时,优先级次序由高到低为 raw-->mangle-->nat-->filter

iptables配置规则

定义 根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理
匹配条件加上处理动作共同组成了规则

基本匹配条件扩展匹配条件
源地址 Source IP源端口 Source Port
目标地址 Destintion IP目标端口 Destination Port
匹配条件含义
ACCEPT允许数据包通过
DROP直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
SNAT源地址转换,解决内网用户用同一个公网地址上网的问题
MASQUERADE是SNAT的一种特殊形式,适用于动态的、临时会变的ip上
DNAT目标地址转换
REDIRECT在本机做端口映射
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配

iptables管理命令

OPTION

-L 查看规则 默认查看filter表
-t 表名 -L 查看指定表的规则
-F 清空规则
-Z 将指定链或所有链的计数器清零
-v 显示详细信息
-n 表示不解析ip地址,直接显示
--line-numbers 显示详细信息

-I 插入规则到链 默认添加到最前面
-A 追加规则到链 追加到最前面
-j 动作
! 非

-s 匹配报文的源地址可以同时指定多个源地址,每个IP之间用逗号隔开
-d 匹配报文的目标地址可以同时指定多个目的地址,每个IP之间用逗号隔开
-p 匹配报文的协议类型TCP、UDP、ICMP等
-i 网卡名称 匹配的报文从哪个网卡接口流入本机
-o 网卡名称 匹配的报文从哪个网卡接口流出本机
--dport num 匹配目标端口号
--sport num 匹配来源端口号

-D num 删除
-R 修改
-P 修改链的默认策略 iptables -P INPUT DROP/ACCEPT,DROP后SSH也会断开
规则链的默认拒绝动作只能是DROP

iptables保存规则

方法1 直接保存
service iptables save
方法2 iptables-save命令配合重定向保存
iptables-save > /etc/sysconfig/iptables

从指定文件中重载规则 iptables-restore < /etc/sysconfig/iptables 临时有效,需保存才永久有效

练习

练习1 把INPUT规则链的默认策略设置为拒绝,向INPUT链中添加允许ICMP流量进入的策略规则
iptables -P INPUT DROP
iptables -I INPUT -p icmp -j ACCEPT

练习2 把INPUT规则链的默认策略设置为允许,将INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量
iptables -P INPUT ACCEPT
iptables -I INPUT -s 192.168.232.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT

防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务

练习3 向INPUT规则链中添加拒绝192.168.232.125主机访问本机80端口(Web服务)的策略规则
iptables -t filter -I INPUT -p tcp -s 192.168.232.125 --dport 80 -j REJECT

练习4 向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则
iptables -t filter -I INPUT -p tcp --dport 1000:1024 -j REJECT
练习5 指定位置插入链

[root@zylinux ~]# iptables -t filter -I INPUT 2 -s 192.168.232.125 -j REJECT	;指定插入的位置编号
[root@zycentos7 ~]# ping 192.168.232.123
PING 192.168.232.123 (192.168.232.123) 56(84) bytes of data.
From 192.168.232.123 icmp_seq=1 Destination Port Unreachable
^C
--- 192.168.232.123 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1004ms

练习6 删除指定链
iptables -t filter -D INPUT 1
练习7 修改指定链
iptables -t filter -R INPUT 1 -s 192.168.232.125 -j DROP
练习8 DROP一个网段
iptables -t filter -I INPUT -s 192.169.232.0/24 -j DROP
练习9 不允许主机与192.168.232.125通信
iptables -t filter -I OUTPUT -d 192.168.232.125 -j DROP
练习10 192.168.232.125除了能ping,其他都不能

[root@zylinux ~]# iptables -I INPUT ! -p icmp -s 192.168.232.125 -j REJECT
[root@zycentos7 ~]# ping 192.168.232.123
PING 192.168.232.123 (192.168.232.123) 56(84) bytes of data.
64 bytes from 192.168.232.123: icmp_seq=1 ttl=64 time=0.478 ms
[root@zycentos7 ~]# curl 192.168.232.123
curl: (7) Failed connect to 192.168.232.123:80; Connection refused
[root@zycentos7 ~]# ssh 192.168.232.123
ssh: connect to host 192.168.232.123 port 22: Connection refused

练习11 禁止eth0网卡包流入
iptables -I INPUT -p icmp -i eth0 -j DROP
练习12 禁止eth0网卡包流出
iptables -I OUTPUT -p icmp -o eth0 -j DROP

iptables -nvL 结果分析

表项说明
pkts对应规则匹配到的报文的个数
bytes对应匹配到的报文包的大小总和
target规则匹配成功后需要采取的措施(动作)
prot规则对应的协议
opt规则对应的选项
in数据包由哪个接口(网卡)流入
out数据包由哪个接口(网卡)流出
source源地址
destination目标地址

iptables之forward转发

网络防火墙主机的主要工作就是过滤并转发
当外部网络中的主机与网络内部主机通讯时,所有报文都需要经过iptables所在的主机,由iptables所在的主机进行 “过滤并转发”。

演示环境

分类主机A主机B主机C
主机名ABC
IPeth0:192.168.213.125eth0:192.168.213.129 eth1:192.168.88.110eth0:192.168.88.111
GATEWAY192.168.213.2eth0:192.168.213.2 eth1:192.168.88.2192.168.88.110
网卡模式NATeth0:NAT,eth1:host-onlyhost-only

步骤1 新增一条路由,主机A访问192.168.88.0网段都发送给主机B的eth0网卡上

[root@localhost ~]# route add -net 192.168.88.0/24 gw 192.168.213.129
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.213.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.88.0    192.168.213.129 255.255.255.0   UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.213.2   0.0.0.0         UG    0      0        0 eth0
[root@localhost ~]# ping 192.168.88.110	;主机Aping通√
[root@localhost ~]# ping 192.168.88.111	;主机A无法ping通×

为什么192.168.88.110可以ping通,而192.168.88.111却无法ping通?

设置静态路由,192.168.88.0的网络通通下一跳给了192.168.213.129,当我们192.168.88.110的时候,首先主机B收到了这个报文,主机B发现,这个IP地址是自己的,给了主机A回应,所以可以ping通。
那为什么192.168.88.111无法ping通呢,因为主机B在收到了发给192.168.88.111这个报文的时候,发现自己并不是这个地址,没有回应。

步骤2 打开主机B的转发功能,让报文可以转发
echo 1 > /proc/sys/net/ipv4/ip_forward 临时打开转发功能

[root@localhost ~]# ping 192.168.88.111	;主机A可以ping通√
PING 192.168.88.111 (192.168.88.111) 56(84) bytes of data.
64 bytes from 192.168.88.111: icmp_seq=1 ttl=63 time=0.385 ms

iptables作为网络防火墙的“过滤和转发”示例

1.主机B上配置FORWARD链,拒绝任何报文通过,这时候主机A和主机C已无法访问

[root@localhost ~]# iptables -A FORWARD -j REJECT	;主机B
[root@localhost ~]# ping 192.168.88.111	;主机A
PING 192.168.88.111 (192.168.88.111) 56(84) bytes of data.
From 192.168.213.129 icmp_seq=1 Destination Port Unreachable

2.配置访问规则,允许内网主机C可以访问外网主机A的web服务

[root@localhost ~]# services httpd status ;查看A主机httpd服务状态
[root@localhost ~]# echo "OUTSIDE SERVER" > /var/www/html/index.html
[root@localhost ~]# iptables -I FORWARD -s 192.168.88.0/24 -p tcp --dport 80 -j ACCEPT ;主机B增加一条规则,放行源地址的是主机C,目的端口是80端口的报文
[root@localhost ~]# iptables -I FORWARD -d 192.168.88.0/24 -p tcp --sport 80 -j ACCEPT	;主机B增加一条规则,放行目标地址的是主机C,源端口是80端口的报文
[root@localhost html]# curl 192.168.213.125	;C主机curl主机A √
OUTSIDE SERVER

防火墙需要考虑双向通讯,使用state扩展模块可只考虑请求方

[root@localhost ~]# iptables -D FORWARD 1 	;删除FORWARD最上面的一条规则
[root@localhost ~]# iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT	;主机B增加一条规则

网络防火墙使用总结

1.开启核心转发
临时生效 立即生效,但是重启网络配置后会失效
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1

重启网络服务后永久生效
CentOS6 修改/etc/sysctl.conf 中 net.ipv4.ip_forward = 1
CentOS7 设置/usr/lib/sysctl.d/00-system.conf 中 net.ipv4.ip_forward = 1 sysctl -p 立即生效
2.iptables的角色变为“网络防火墙”时,规则只能定义在FORWARD链中
3.可以使用“白名单机制”,先添加一条默认拒绝的规则,然后再为需要放行的报文设置规则
4.配置规则时需要考虑"方向问题",针对请求报文与回应报文,考虑报文的源地址与目标地址,源端口与目标端口等
6. 使用state扩展模块,优化规则,省略“回应报文放行规则”

iptables -A FORWARD -j REJECT
iptables -I FORWARD -s 192.168.88.0/24 -p tcp --dport 22 -j ACCEPT	;允许网络内主机访问网络外主机的sshd服务
iptales -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

企业级安全体系介绍及案例

白名单、黑名单机制

链的默认策略:ACCEPTDROP

白名单机制

  当链的默认策略设置为DROP时,如果对应的链中没有配置任何规则,就表示拒绝所有报文,如果对应的链中存在规则,则按规则匹配。在链中配置规则时,链中的规则对应的动作应该为 ACCEPT ,表示只有匹配到规则的报文才会被放行,没有被规则匹配到的报文都会被默认拒绝,这就是"白名单"机制。

缺点:在对应的链中没有设置任何规则时,管理员自己也无法远程连接到主机,即使对应的链中存在放行规则,当不小心使用"iptables -F"清空规则后,放行规则被删除,所有数据包都无法进入

黑名单机制

  当链的默认策略设置为ACCEPT时,如果对应的链中没有配置任何规则,就表示接受所有的报文,如果对应的链中存在规则,则按规则匹配。在链中配置规则时,对应的动作应该设置为 DROP 或者 REJECT ,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是"黑名单"机制。

最佳策略

将链的默认策略保为 ACCEPT ,将 拒绝所有请求 这条规则放在链的尾部,将 放行规则 放在前面,这样做,既能实现"白名单"机制,又能保证在规则被清空时,管理员还有机会连接到主机

创建自定义链

在iptables中通过自定义链来解决默认链中的规则非常多的问题,方便管理

-t 表名 -L 查看指定表的规则
-N 指定自定义链的名称
-I 插入规则到链 默认添加到最前面
-s 匹配报文的源地址
-j 动作
-E OLD NEW 重命名自定义链
-X 删除自定义链

创建自定义链

[root@zycentos7 ~]# iptables -t filter -N IN_WEB
[root@zycentos7 ~]# iptables -nvL
……
Chain IN_WEB (0 references)
 pkts bytes target     prot opt in     out     source               destination

自定义链添加规则,拒绝来自192.168.232.123的请求

[root@zycentos7 ~]# iptables -t filter -I IN_WEB -s 192.168.232.123 -j REJECT
[root@zycentos7 ~]# iptables -nvL IN_WEB
Chain IN_WEB (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     all  --  *      *       192.168.232.123      0.0.0.0/0            reject-with icmp-port-unreachable

在默认链中引用讲自定义链

[root@zycentos7 ~]# iptables -I INPUT -p tcp --dport 80 -j IN_WEB
[root@zycentos7 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 24 packets, 1392 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 IN_WEB     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

通过192.168.232.123访问apache,已无法访问

[root@zylinux ~]# curl 192.168.232.125
curl: (7) couldn't connect to host

将IN_WEB自定义链重命名为WEB

[root@zycentos7 ~]# iptables -E IN_WEB WEB

删除引用计数为0并且不包含任何规则的WEB链
删除自定义链需要满足两个条件

  1. 自定义链没有被引用
  2. 自定义链中没有任何规则
[root@zycentos7 ~]# iptables -X WEB

REJECT和LOG处理动作

reject 拒绝信息

REJECT动作的常用选项为--reject-with可以设置提示信息,当对方被拒绝时,会提示对方为什么被拒绝,默认值为 icmp-port-unreachable

可用值
icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-prohibited
icmp-admin-prohibited
[root@zylinux ~]# iptables -I INPUT -s 192.168.232.125 -j REJECT --reject-with icmp-host-unreachable
[root@zycentos7 ~]# ping 192.168.232.123
PING 192.168.232.123 (192.168.232.123) 56(84) bytes of data.
From 192.168.232.123 icmp_seq=1 Destination Host Unreachable

log 记录日志

使用LOG动作,可以将符合条件的报文的相关信息记录到日志中
LOG的动作的报文信息记录在 /var/log/messages,可以修改,配置信息在 /etc/rsyslog.conf

tailf -5 /var/log/messages
LOG动作选项

- - log-level 指定记录日志的日志级别
- - log-prefix 给记录到的相关信息添加"标签"之类的信息,便于区分,方便过滤 - - log-prefix对应的值不能超过29个字符

[root@zylinux ~]# iptables -I INPUT -p icmp -s 192.168.232.125 -j LOG --log-level error
[root@zylinux ~]# iptables -I INPUT -p icmp -s 192.168.232.125 -j LOG --log-level alert --log-prefix " ping-icmp "
/var/log/messages记录如下:
Nov 30 12:17:26 zylinux kernel: ping-icmp 
选项level 级别
emerg0
alert1
crit2
error3
warning4
notice5
info6
debug7

NAT,SNAT,MASQUERADE,REDIRECT处理动作

NAT 网络地址转换

实际上报文在经过路由器或者防火墙的时候,内网的主机IP被隐藏,对应转换成路由器或者防火墙的IP并映射一个端口,这些信息会被NAT记录下来,当外部主机收到信息后,源地址和源端口显示的是防火墙的IP和映射的端口,当外部的主机回应时,首先是由防火墙或者路由器收到的,这时候会根据NAT的记录,将相应报文中的目标IP和目标端口,改为内部主机的IP和端口,再将报文发给内部主机,这样内部主机就可以隐藏IP上网

在整个过程中实际上有两次地址转换:
1.内部主机的报文发送出去,报文的源IP和端口发生了改变,SNAT
2.外部主机回应报文后,响应报文的目标IP和端口发生了改变,DNAT

NAT技术帮我们解决了隐藏内网IP,共享公网IP,IPV4地址不够用的问题

SNAT地址转换
iptables -t nat -A POSTROUTING -s 192.168.232.0/24 -j SNAT --to-source 192.168.1.153

在centos7中,SNAT规则只能存在于POSTROUTING链与INPUT链中,在centos6中,SNAT规则只能存在于POSTROUTING链中

DNAT地址转换
iptables -t nat -I PREROUTING -d 192.168.1.153 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.153:80

DNAT规则只配置在PREROUTING链与OUTPUT链中

MASQUERADE

MASQUERADE会动态的将源地址转换为可用的IP地址

iptables -t nat -I POSTROUTING -s 192.168.232.0/24 -o eth0 -j MASQUERADE

SNAT更高效

REDIRECT 端口映射

使用REDIRECT动作可以在本机上进行端口映射
将本机的8888端口映射到本机的80端口上(当别的机器访问本机的8888端口时,报文会被重定向到本机的80端口上)

[root@zylinux ~]# iptables -t nat -A PREROUTING -p tcp --dport 8888 -j REDIRECT --to-ports 80
[root@zylinux ~]# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8888 redir ports 80

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 SNAT       all  --  *      *       192.168.232.0/24     0.0.0.0/0           to:192.168.1.153

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

[root@zycentos7 ~]# curl 192.168.232.123:80
hello,world!
[root@zycentos7 ~]# curl 192.168.232.123:8888
hello,world!

REDIRECT规则只能定义在PREROUTING链或者OUTPUT链中


iptables进阶用法

iprange扩展模块

指定一段连续的IP地址范围

-m iprange 使用iprange扩展模块
--src-range 源地址范围
--dst-range 目标地址范围

[root@zycentos7 ~]# iptables -I INPUT -m iprange --src-range 192.168.232.110-192.168.232.140 -j DROP

取反

[root@zycentos7 ~]# iptables -I INPUT -m iprange ! --src-range 192.168.232.110-192.168.232.140 -j DROP

string扩展模块

指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件

-m string 使用string扩展模块
--algo 指定匹配算法bm或kmp,必选项
--string 指定需要匹配的字符串

[root@zycentos7]# iptables -I INPUT -m string --algo kmp --string "error" -j REJECT
[root@zycentos7]# iptables -nvL
Chain INPUT (policy ACCEPT 70 packets, 4504 bytes)
 pkts bytes target     prot opt in     out     source               destination
   13  1833 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           STRING match "error" ALGO name kmp TO 65535
[root@zylinux ~]# curl 192.168.232.125/error.html
网页无响应

time扩展模块

根据时间段区匹配报文,如果报文到达的时间在指定的时间范围以内,则符合匹配条件
-m time 使用time扩展模块
--timestart 指定起始时间,格式00:00:00
--timestop 指定结束时间
--weekdays 用数字或用缩写(Mon)指定星期几
--monthdays,--datestart,--datestop 指定日期范围

从0点到23点之间不允许访问

[root@zycentos7 html]# iptables -I INPUT -d 192.168.232.125 -p tcp --dport 80 -m time --timestart 00:00 --timestop 23:59 -j REJECT
[root@zylinux ~]# curl 192.168.232.125
curl: (7) couldn't connect to host

connlimit扩展模块

限制每个IP地址同时链接到server端的链接数量,针对每个客户端ip,即对单IP的并发链接数限制
-m connlimit 使用connlimit扩展模块
--connlimit-above 限制连接上限
--connlimit-mask 按照网段限制连接上限

[root@zylinux ~]# iptables -t filter -I OUTPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j REJECT

limit扩展模块

对报文到达速率进行限制
--limit # /second[/minute/hour/day] 主要用来限制单位时间内可以流入的数据包的数量
--limit-burst 令牌桶大小,默认是5

令牌桶原理
默认令牌桶数量是5个,每6秒产生一个令牌,在ping操作时,前五次没有任何影响,只是消耗了所有的令牌,从第6秒开始产生新的令牌,这时可以ping通,再要ping通需要等6秒再产生一个新的令牌

[root@zycentos7 ~]# iptables -I INPUT -m limit --limit 10/min -j ACCEPT
[root@zycentos7 ~]# iptables -A INPUT -p icmp -j REJECT
[root@zylinux ~]# ping 192.168.232.125
PING 192.168.232.125 (192.168.232.125) 56(84) bytes of data.
64 bytes from 192.168.232.125: icmp_seq=1 ttl=64 time=0.896 ms
64 bytes from 192.168.232.125: icmp_seq=2 ttl=64 time=0.510 ms
64 bytes from 192.168.232.125: icmp_seq=4 ttl=64 time=0.352 ms
From 192.168.232.125 icmp_seq=5 Destination Port Unreachable
From 192.168.232.125 icmp_seq=6 Destination Port Unreachable
From 192.168.232.125 icmp_seq=7 Destination Port Unreachable
From 192.168.232.125 icmp_seq=8 Destination Port Unreachable
From 192.168.232.125 icmp_seq=9 Destination Port Unreachable
64 bytes from 192.168.232.125: icmp_seq=10 ttl=64 time=0.766 ms

tcp-flags扩展模块

匹配tcp报文头部的标志位(SYN,ACK,FIN,RST,URG,PSH),然后根据标识位的实际情况实现访问控制的功能,防止SYN攻击

--tcp-flags ALL SYN
第一部分表示:需要匹配的标志位列表,ALL表示所有
第二部分表示:需要匹配的标志位列表中,哪个的标志位的值必须为1(其他标志位必须为0)

[root@zycentos7 ~]# iptables -I INPUT -p tcp --dport 80 --tcp-flags ALL SYN -j REJECT
[root@zylinux ~]# curl 192.168.232.125
curl: (7) couldn't connect to host
[root@zylinux ~]# nmap -sS 192.168.232.125

Starting Nmap 5.51 ( http://nmap.org ) at 2019-11-30 10:34 CST
Nmap scan report for 192.168.232.125
Host is up (0.00023s latency).
Not shown: 998 closed ports
PORT   STATE    SERVICE
22/tcp open     ssh
80/tcp filtered http
MAC Address: 00:0C:29:5D:AE:CB (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
[root@zylinux ~]# nmap -sT 192.168.232.125

Starting Nmap 5.51 ( http://nmap.org ) at 2019-11-30 10:34 CST
Nmap scan report for 192.168.232.125
Host is up (0.0037s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 00:0C:29:5D:AE:CB (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.33 seconds

state扩展

基于连接追踪功能查看每一报文当前所处的状态

报文状态含义
NEW第一次连接时
ESTABLISHED已建立的连接
INVALID无法识别的连接
RELATED相关联的连接
UNTRACKEDrow表上关闭连接追踪功能
[root@zycentos7 ~]# iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@zycentos7 ~]# iptables -A INPUT -j REJECT
[root@zycentos7 ~]# iptables -I INPUT 2 -p tcp --dport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@zycentos7 ~]# iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@zycentos7 ~]# iptables -A INPUT -j REJECT
[root@zycentos7 ~]# iptables -I INPUT 2 -s 192.168.232.123 -p tcp --dport 80 -j ACCEPT
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值