iptables:防火墙
firewall:TCP/IP协议栈; linux(内核)
主机防火墙
网络防火墙
工作于主机或网络边缘,对于进出的报文根据定义的规则做检查,进而对被规则匹配到的报文作为做响应处理的套件。
IPS,intrusion protect system入侵防御系统
IDS:intrusion detect system入侵检测系统
防火墙:
网络层防火墙
应用层防火墙
防火墙的分类:
简单包过滤防火墙
带状态检测的包过滤防火墙
Iptables内置链:
prerouting:路由前
input:到达本机内部的报文必经之路
forward:由本机转发的报文必经之路
output:由本机发出的报文必经之路
postrouting:路由后
iptables表
filter:过滤,定义是否允许通过防火墙
nat:地址转换,启用connection_track; 目标端口,源端口
mangle:报文拆封,包装,转发
raw:目标是关闭nat表上启用的连接追踪功能 。
Iptables内置链和表对应关系
①PREROUTING ②INPUT ③FORWARD ④OUTPUT ⑤POSTROUTING
Fliter:②③④
nat:①④⑤ 在①做目标地址转换 在⑤做源地址转换
mangle:①-⑤
raw:①④
数据报文流程:
跟本机内部进程通信;
进入:-->prerouting-->input
出去:-->output-->postrouting
由本机转发:
请求:-->PREROUTING,-->FORWARD-->POSTROUTING
响应:-->PREROUTING,-->FORWARD-->POSTROUTING
规则中如果限定原地址、目标地址、源端口、目标端口等与流向相关的设定
写规则
数据报文的流向:
源IP和目标IP由流向决定;
注意:iptables:用户空间的工具,写规则,并自动发往netfilter,立即生效;
netfilter:接收并生效规则。
如何保存启用的规则于规则文件中:
1、#iptables-save > /etc/sysconfig/iptables
2、#service iptables Sava
生效规则文件中的规则:
1、#iptables-restore < /etc/sysconfig/iptables
2、#service iptables restart
执行的操作:清空现有规则,读取并生效规则文件中的规则。
iptables基本语法:
iptables[-t table] command chain crtiria -j target
指明那张表 命令选项 做什么处理 匹配条件 跳转目标
-t TABLE:
nat, mangle, raw, filter
默认为filter
command
链:
-F:flush清除 清空规则链 如果不指定表 表明全部清空
-N:new,自建一条链
-X:delete删除一条自定义的空链
-Z:zero计数器归零 被本规则所匹配包数 和字节大小之和
-P:policy设定默认策略,对filter表来讲,默认规则为accept或drop;
-E:rename重命名自定义链
链中的规则
-A,append增加
-I:insert插入一条新规则
-D:delete删除
-R:replace替换规则
查询:
-L:列表
-n:numeric以数字格式显示主机地址和端口
-v:详细格式;-vv
--line-numbers:显示规则编号
-x:不要对计数器的计数结果做单位换算,而显示其精确值。
pkts bytes target prot opt in out source destination
包数 字节数 目标 协议 选项 流入的接口 流出的接口 源地址 目标地址
iptables [-t table] -A 链名 匹配条件 -j 处理目标
匹配条件
通用匹配
-s 地址:匹配包的源地址,指定报文源ip地址匹配的范围;可以是ip,也可以是 网络地址;可使用!取反。
--src,--source
-d地址:目标地址 指定报文目标ip地址匹配的范围;
--dst,--destination
-P协议:指定匹配报文的协议类型,一般有三种tcp,udp和ICMP;
-i IN_IF;数据报文流入的接口; prerouting,input,forward
-o OUT_IF:数据报文流出的接口;output,forward,postrouiting
扩展匹配:调用netfilter额外模块实现特殊检查机制,(使用到相关功能,要使用iptables命令的-m选项来指定调用哪个模块)
隐式扩展:当使用-p{tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项
-p tcp [-m tcp]
--sport port[-port]:指定源端口
--dport port[-port]:指定目标端口
--tcp-flags :tcp标志位 要检查标志位列表(用逗号分隔) 必须为1的标志位列表(逗号分隔)
例如:--tcp-flags syn,ack,rst,fin
-all 所有位
例如: iptables -I INPUT -p tcp --tcp-flags all all -j DROP
-all none
例如:iptables -I INPUT -p tcp --tcp-flags all none -j DROP
--syn
-p udp [-m udp]
--sport
--dport
-p icmp [-m icmp]
--icmp-type
0:echo-reply,ping响应
8:echo-request,ping请求
显示扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项
-m:扩展模块名称
-m state --state
multiport:多端口匹配
可用于匹配非连续或连续端口;最多指定15个端口;
专用选项:
--source-ports,--sports port[,port,port:port]源端口
--destiantion-ports,--dports 目标端口
--ports:不做限定
例如:
# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT
# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange:匹配指定范围内的地址;匹配一段连续的地址而非整个网络时有用;
专用选项:
[!]--src-range IP[-IP]
[!]--dst-range
例如:
# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
string:字符串匹配,能够检测报文应用层中的字符串
字符串匹配检测高效算法
kmp,bm
专用选项:
--algo {kmp|bm}
--string “STRING”
--hex-string “HEX_STRING”:HEX_STRING为编码成16进制格式的字串;
例如:# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP
time:基于时间做访问控制
专用选项:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]
mon,tue
例如:# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT
connlimit:连续数限制,对每ip所能够发起并发连接数做限定;
专用选项
[!]--connlimit-above [n]
例如:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
limit:速率限制
专用选项
--limit n[/second|/minute|/hour|/day]
--limit-burst n
例如:# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
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
2、放行请求报文:
(1)放行NEW状态对21端口请求的报文;
(2) 放行ESTABLISHED以及RELATED状态的报文
3、放行响应报文:
(1) 放行ESTABLISHED以及RELATED状态的报文
NEW:有限放行
优化规则:尽量减少规则条目,彼此不相关的匹配机会较多的放在上面,属于同一功能匹配规则更严格放在上面;
处理目标:
内置目标
DROP 拒绝 悄悄丢弃
REJECT 明确说明拒绝
ACCEPT 允许
自定义的链
例如:iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p icmp -j DROP
删除
iptables [-t table] -D chain rulenum
例如:iptables -t filter -D input 1
设定策略:
iptables [-t table] -p chain target
修改规则
iptables [-t table] -R chain rulenum rule-specification
例如:iptables -R OUTPUT 1 -s 172.16.100.7 -d 172.16.0.0/16 -o eth0 -p tcp --sport 22 -j ACCEPT
插入规则:
iptables [-t table] -I chain [rulenum] rule-specification
iptables -I INPUT -i lo -j ACCEPT 能进不能出
iptables -I OUTPUT -o lo -j ACCEPT 可进可出
创建自定义链:
iptables [-t table ] -N chain
例如:iptables -t filter -N http_in
iptables -A http_in -d 172.16.100.7 -p tcp --dport 80 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
删除自定义且0引用的空链
iptables [-t table ] -X chain
重命名自定义链且 0引用
iptables [ -t table ] -E old_name new_name
目标:
RETURN:在自定义链中无法匹配报文时,将其返回主链
NAT:
SNAT:源地址转换
DNAT:目标地址转换
PNAT:端口地址转换
FULL NAT:全地址转换
SNAT
--to-source SIP表示转换成那个源地址图5-23
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 172.16.100.7
MASQUERADE:地址伪装