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主机地址