千家信息网

iptables大体了解

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,tcp/ip协议网络上一个节点,大门洞开,套接字会话,需要ip和端口,检查套接字报文,套接字和tcp/ip协议差别。主机防火墙,工作在主机上。进入网卡,到内核中的tcp/ip协议栈,工作在tcp/ip
千家信息网最后更新 2025年12月02日iptables大体了解

tcp/ip协议网络上一个节点,大门洞开,套接字会话,需要ip和端口,检查套接字报文,套接字和tcp/ip协议差别。主机防火墙,工作在主机上。进入网卡,到内核中的tcp/ip协议栈,工作在tcp/ip协议栈上,在一些协议栈上某些位置放上卡哨,在设定检查规则。

网络防火墙,在网络外部。

防火墙:工作与主机或网络边缘,对于进出的报文根据定义的规则做检查,进而对被规则匹配到的报文最为相应处理的套件;

网络层防火墙,检查报文的帧首部,IP首部,tcp首部,不能对数据内容进行检查。

iptables/netfilter ,netfilter就是tcp/ip协议栈上的卡哨,用iptables加入规则

规则优先级从高到低以及能工作的卡哨位置:

raw :目标是关闭nat表上启动的连接追踪功能,PREROUTING OUTPUT

mangle;修改tcp/ip首部的一些特性,任意位置。

nat:地址转换,POSTROUTING PREROUTING OUTPUT

filter;过滤 INPUT FORWORD OUTPUT

INPUT:在数据进入应用空间时设定的卡哨也叫做链。

FORWORD:主机路由过程的卡哨

OUTPUT:数据从应用程序发出时经过的卡哨

PREROUTING:数据进入网卡进行路由策略前的卡哨

POSTROUTING:数据最后选择网卡要离开前的卡哨

数据报文流程:跟本机内部通信,PREROUTING INPUT OUTPUT POSTROUTING

由本机转发的数据:PREROUTING FORWORD POSTROUTING

注意数据报文的流向,决定源IP目标IP。

iptables:用户空间的工具,写规则,并自动发往netfilter,立即生效。

基本语法

iptables 【-t TABLE】 -A 链名 匹配条件 -j 处理目标

默认的表filter

COMMAND:答题上有下边几种

1.对链上规则的一些命令-A:在后面加一条规则

-I:插入一条新规则

-D:删除规则

-R:替换规则

-L:查询规则 -L -n:数字格式显示地址和端口。-L -v:详细格式 --line-numbers显示规则行号 -x 不要对计数器计数结果做单位换算,显示精确值。

2.对链的一些命令:-F :清空规则链

-N:自建一个链,只能被调用

-X删除一个自定义链

-Z计数器归零

-P:设定默认策略,对filter表来讲,默认规则为ACCEPT 或者DROP

-E:重命名自定义链

iptables 【-t TABLE】 -A 链名 匹配条件 -j 处理目标

匹配条件:通用匹配

-s 地址:指定报文源IP地址匹配范围:可以是IP也可以是网络地址,可以用!取反。

-d地址:报文目标ip地址

-p协议,指定匹配报文的协议类型,一般tcp udp icmp

-i:数据报文流入网卡:只能作用在数据传入的前半部分PREROUTING INPUT FORWORD

-o:数据流出网卡:只能作用在数据传入的后半部分 FORWORD OUTPUT POSTROUTING

扩展匹配调用netfilter 用-m

隐式扩展:当使用-p {tcp|udp|icmp}中的一种时默认调用了对应模块,可以直接使用扩展选项

-p tcp对tcp/ip协议生效:--sport指定源端口 -dport 目标端口

--tcp-flags syn,ack,rst,fin syn all(全选,或者值都为1) none(值都为0)

--tcp-flags syn,ack,rst,fin syn 这是定义tcp第一次握手

--syn ALL 也可以定义tcp第一次握手

-p icmp主要限制ping的 :--icmp-type 8是能请求报文类型,0是指响应的报文类型

显式扩展:必须明确指出使用哪个模块进行扩展,才能使用扩展选项

-m 扩展模块名称(在iptables和netfilter上都要有这个模块)

1)multiport用于匹配非连续或者连续端口,对多指定15个端口

--sports 【port,port:port】指定源端口

--dports目标端口

--ports源和目标都包含

iptables -I INPUT -s 192.168.0.0/16 -d 192.168.147.128 -p tcp -m multiport --dports 22,80 -j ACCEPT是主机防火墙,在目标主机上添加,实现特定ip可以连接主机的http和ssh服务没指定表就默认在filter表上实现过滤,在INPUT链上从192.168网段到192.168.147.128的tcp报文使用multiport模块指定192.168.147.128主机上的端口可以接受报文

2)iprange:匹配指定范围内的地址,匹配一段连续地址而非整个网络。

[!]--src-range IP[-P]

[!]-dst-range IP[-P]

3)string:字符串匹配,检测应用层报文中的字符串。字符串算法,kmp, bm

专用选项--algo{kmp|bm}

--string

--hex-string 16进制的字符串

4)state:状态检查需要开启状态连接功能,不适用于高并发服务器。

--state

连接追踪中的状态

NEW:新建立一个会话

ESTABLISHED:已建立的连接

RELATED:有关联的连接

INVALID:无法识别的连接

调整连接追踪功能所能容纳的连接最大数值

/proc/sys/net/nf_conntrack_max

当前追踪的所有连接

/proc/net/nf_conntrack

追踪不同协议或连接类型追踪时的属性

/proc/sys/net/netfilter目录

放行被动模式下的ftp服务

1.装在模块/lib/modules/KERNEL_VERSION/kernel/net/netfilter/

模块:nf_conntrack_ftp

modeprobe加载模块

2.放行报文请求

a.放行NEW状态对21端口的请求

b.放行所有ESTABLISHED和RALATED状态报文

3.放行响应报文

放行所有ESTABLISHED和RALATED状态报文 limit:速率限制

--limit n [/second/minute/hour/day]

--limit-burst n :能最多存几个

time:基于时间做访问控制

--datestart

--datestop

--timestart

--timestop

--weeks

connlimit;连接数限制,对每IP能发起并发连接数限制

--connlimit-above N

处理目标:

内置目标:

DROP:悄悄丢弃

REJECT:强硬拒绝

ACCEPT:接受

写规则:先确定功能(表),确定报文流向,确定要实现的目标,确定匹配条件

流向:1.访问本机进程,PREROUTING INPUT

2.出去的报文,OUTPUT POSTROUTING

3.本机转发,PRETOUTING FORWARD POSTRONTING

4.响应,PRETOUTING FORWARD POSTRONTING

iptables 语法检查 netfilter立即生效

切记:写给则之前,先添加放行自己的会话

永久生效,规则文件,或者脚本 规则文件是/etc/sysconfig/iptables

保存规则iptables-save > /etc/sysconfig/iptables

service iptables save

生效iptables-restore < /etc/sysconfig/iptables

service iptables restart

设置默认策略

iptables -P 链 target

修改规则

iptables -R OUTPUT 1 指定那个表的那个链上的第几条规则,后面跟上完整的更改规则

优化规则:尽量减少规则条目,无关的规则把访问量大的放在上边,属于同一功能的匹配规格严格的放在上边。

为了更好的管理规则,自定义链;

iptables -t filter -N http_in

删除空的自定义链

iptables -X http_in

重命名自定义链

iptables -E oldname newname

地址转换SNAT 原地址转换

--to-source

MASQUERADE:自动获取转换的地址

DNAT 目标地址转换

--to-destination

PNAT端口转换

FULL NAT 全部转换

iptables -t nat -A POSTROUTING  -s 192.168.1.0/24 -j SNAT -to-source 172.16.100.7原地址转换成172.16.100.17主机地址
0