Iptables详解---扩展模块速成

简介: 本篇文章是 Iptables 系列的第二篇,主要介绍Iptables的扩展模块及相关使用旨在帮助大家更好的了解和使用 iptables。我们知道,httpd服务的默认端口为80,当我们使用curl或者浏览器访问主机时,默认会连接服务端的80端口,假设,我们现在想要使用iptables设置一条规则,拒绝来自192.168.1.100的访问请求,我们就可以拒绝100上的报文能够发往本机的80号端口,这个时候,就需要用到”目标端口”选项。


本篇文章是 Iptables 系列的第二篇,主要介绍Iptables的扩展模块及相关使用旨在帮助大家更好的了解和使用 iptables。


Iptables扩展模块

我们知道,httpd服务的默认端口为80,当我们使用curl或者浏览器访问主机时,默认会连接服务端的80端口,假设,我们现在想要使用iptables设置一条规则,拒绝来自192.168.1.100的访问请求,我们就可以拒绝100上的报文能够发往本机的80号端口,这个时候,就需要用到”目标端口”选项。

tcp扩展模块

常用的扩展匹配条件如下:

-p tcp -m tcp –sport 用于匹配tcp协议报文的源端口,可以使用冒号指定一个连续的端口范围

-p tcp -m tcp –dport 用于匹配tcp协议报文的目标端口,可以使用冒号指定一个连续的端口范围

dport_80.png

# 更多示例如下
iptables -t filter -I OUTPUT -d 192.168.1.100 -p tcp -m tcp --sport 80 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.100 -p tcp -m tcp --dport 80:90 -j REJECT  
iptables -t filter -I OUTPUT -d 192.168.1.100 -p tcp -m tcp ! --sport 80 -j ACCEPT

udp扩展

常用的扩展匹配条件 –sport:匹配udp报文的源地址 –dport:匹配udp报文的目标地址

#示例
iptables -t filter -I INPUT -p udp -m udp --dport 137 -j ACCEPT
iptables -t filter -I INPUT -p udp -m udp --dport 131:168 -j ACCEPT
#可以结合multiport模块指定多个离散的端口

icmp扩展

常用的扩展匹配条件 –icmp-type:匹配icmp报文的具体类型

# 更多示例如下
iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT
iptables -t filter -I INPUT -p icmp --icmp-type 8 -j REJECT
iptables -t filter -I OUTPUT -p icmp -m icmp --icmp-type 0/0 -j REJECT
iptables -t filter -I OUTPUT -p icmp --icmp-type 0 -j REJECT
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT

multiport扩展模块

常用的扩展匹配条件如下:

-p tcp -m multiport –sports 用于匹配报文的源端口,可以指定离散的多个端口号,端口之间用”逗号”隔开
-p udp -m multiport –dports 用于匹配报文的目标端口,可以指定离散的多个端口号,端口之间用”逗号”隔开


multiport.png

# 更多示例如下
iptables -t filter -I OUTPUT -d 192.168.1.100 -p udp -m multiport --sports 137,138 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.100 -p tcp -m multiport --dports 22,80 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.100 -p tcp -m multiport --dports 22,80:88 -j REJECT

string模块

如果我们需要匹配制定的字符串就需要用到string扩展模块;

常用扩展匹配条件如下

–algo:指定对应的匹配算法,可用算法为bm、kmp,此选项为必需选项。
–string:指定需要匹配的字符串

string.png

# 更多示例如下
iptables -t filter -I INPUT -p tcp -m string --algo bm --string "youtube" -j DROP
iptables -t filter -I INPUT -p tcp -m string --algo kmp --string "youtube" -j DROP

time模块

如果我们需要根据时间来放行或者拒绝通过,那么就需要用到time模块。 常用扩展匹配条件如下 –timestart:用于指定时间范围的开始时间,不可取反

–timestop:用于指定时间范围的结束时间,不可取反
–weekdays:用于指定”星期几”,可取反
–monthdays:用于指定”几号”,可取反
–datestart:用于指定日期范围的开始日期,不可取反
–datestop:用于指定日期范围的结束时间,不可取反

time.png

# 更多示例如下
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 6,7 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --monthdays 22,23 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time ! --monthdays 22,23 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --datestart 2017-12-24 --datestop 2017-12-27 -j REJECT

iprange模块

常用的-s选项与-d选项并不能一次性的指定一段连续的IP地址范围,如果我们需要指定一段连续的IP地址范围, 这个时候就可以用iprange扩展模块

包含的扩展匹配条件如下

–src-range:指定连续的源地址范围
–dst-range:指定连续的目标地址范围

iprange.png

# 更多示例如下
iptables -t filter -I INPUT -m iprange --src-range 192.168.1.1-192.168.1.10 -j DROP
iptables -t filter -I OUTPUT -m iprange --dst-range 192.168.1.10-192.168.1.20 -j DROP
iptables -t filter -I INPUT -m iprange ! --src-range 192.168.1.100-192.168.1.200 -j DROP

–tcp-flags模块

用于匹配报文的tcp头的标志位

# 更多示例如下
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK -j REJECT
iptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags SYN,ACK -j REJECT
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN -j REJECT

我们可以用-syn匹配tcp新建连接的请求报文,相当于使用”–tcp-flags SYN,RST,ACK,FIN SYN”

# 更多示例如下
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --syn -j REJECT

自定义链

当默认链中的规则非常多时,不方便我们管理,这个时候自定义链就能派上用场。

想象这样一个场景,如果INPUT链中存放了100条规则,这些规则里面有针对httpd服务的,有针对ftp服务的,有针对私网IP的,有针对公网IP的,如果想要修改针对nas服务的相关规则,没有配置自定义链之前我们需要从头看一遍这100条规则,找出哪些规则是针对nas的,然后进行修改。 如果我们之前配置自定义链,这就能很方便的解决我们的问题。

创建自定义链

#示例:在filter表中创建IN_WEB自定义链
iptables -t filter -N IN_WEB

引用自定义链

#示例:在INPUT链中引用刚才创建的自定义链
iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB

重命名自定义链

#示例:将IN_WEB自定义链重命名为WEB
iptables -E IN_WEBB WEB

N.png

删除自定义链

删除自定义链需要满足两个条件

1、自定义链没有被引用

2、自定义链中没有任何规则

#示例:删除引用计数为0并且不包含任何规则的SSH链
iptables -X SSH

参考文章

https://en.wikipedia.org/wiki/Iptables
http://www.netfilter.org
https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html



目录
相关文章
|
网络协议 网络性能优化 算法
iptables深入解析-mangle篇
      讲了filter、ct、nat 现在剩下最后一个知名模块mangle,但是自身虽然知道内核支持修改数据包的信息,它主要用在策略路由和qos上.我们就具体分析一下.      mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(T...
7774 0
|
小程序 容器
日程安排小程序实战教程
日程安排小程序实战教程
|
3月前
|
NoSQL JavaScript Java
基于 RuoYi-Vue-Pro 定制了一个后台管理系统 , 开源出来!
从职业生涯伊始,我一直是微服务架构的坚定拥趸,这很大程度上源于长期深耕互联网行业,习惯了高并发、分布式架构下的开发模式。 然而,去年在优化某航空公司核心用户中心系统时,我的技术认知受到了不小的冲击。 因为航空公司用户中心是一个典型的单体应用——尽管业务量不小,但稳定的业务模型和有限的扩展需求,使得单体架构反而比微服务更高效、更经济。
基于 RuoYi-Vue-Pro 定制了一个后台管理系统 , 开源出来!
|
存储 安全 Linux
网络请求的高效处理:C++ libmicrohttpd库详解
网络请求的高效处理:C++ libmicrohttpd库详解
|
12月前
|
负载均衡 网络协议 算法
|
9月前
|
Oracle 关系型数据库 数据库
【YashanDB知识库】oracle dblink varchar类型查询报错记录
在使用Oracle DBLink查询VARCHAR类型数据时,可能会遇到多种报错。通过了解常见错误原因,采取合适的解决方法,可以有效避免和处理这些错误。希望本文提供的分析和示例能帮助你在实际工作中更好地处理DBLink查询问题。
230 10
|
12月前
|
监控 安全 数据库
深入探究:GitLab数据备份与还原的高效策略
【10月更文挑战第19天】 在现代软件开发中,GitLab作为一个强大的代码管理和协作平台,其数据备份与还原是保障项目安全和连续性的关键环节。本文将深入探讨GitLab数据备份与还原的高效策略,确保在数据丢失或损坏的情况下,能够快速恢复GitLab实例。
361 2
|
存储 缓存 算法
python中递归深度超限(RecursionError)
【7月更文挑战第15天】
584 1
|
Java
【Java Swing】3D山脉模型实现
【Java Swing】3D山脉模型实现
308 1
|
IDE Linux 开发工具
Linux本地RStudio工具安装指南及远程访问配置安装RStudio Server
Linux本地RStudio工具安装指南及远程访问配置安装RStudio Server