本文主要是介绍Iptables四表五链及规则组成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
iptables组成:四张表 + 五条链(Hook point) + 规则
Iptables和Netfilter的关系:
Netfilter: Netfilter是linux操作系统核心层内部的一个数据包处理模块
Hook point: 数据包在Netfilter中的挂载点(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING )
Iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
Iptables四表五链
四表:filter、nat、managle、raw,默认是filter表。表的处理优先级:raw>managle>nat>filter
filter | 过滤数据包 |
nat | 网络地址转换(端口映射、地址映射等。) |
mangle | 用于对特定数据报的修改。 |
raw | 优先级最高,设置raw时一般是为了不再让iptables做数据报的链接跟踪处理,提高性能。 |
五链:PREROUTING 、INPUT、FORWARD、OUTPUT、POSTROUTING。
PREROUTING | 数据包进入路由表之前,对数据包做路由选择前应用此链路中的规则,所有的数据包进来的时候都先由这个链处理 |
INPUT | 通过路由表后目的为本机,进来的数据报应用此规则链上的策略 |
FORWARD | 通过路由表后,目标地址不为本机,做转发数据报时应用此规则链上的策略 |
OUTPUT | 由本机产生的外出的数据包向外转发时,应用此规则链中的策略 |
POSTROUTING | 数据报做路由选择后发送后到网卡接口之前应用此链中的规则,所有的数据包出来的时候都先由这个链处理 |
表与链之间的包含关系:
filter | INPUT、FORWARD、OUTPUT |
nat | PREROUTING(DNAT)、OUTPUT、POSTROUTING(SNAT) |
mangle | PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING |
raw | PREROUTING、OUTPUT |
数据包在4张表和5条链的流向:
iptables规则组成
数据包访问控制:ACCEPT、DROP、REJECT
数据包改写:SNAT、DNAT
信息记录:LOG
iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理办法
command:
管理规则:
-A:附加一条规则,添加在链的尾部
-I CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条,不指定默认为第一条
-D CHAIN [num]:删除指定链中的第num条规则
-R CHAIN [num]:替换指定的规则
管理链:
-F [CHAIN]:flush,情况指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN:设定指定链的默认策略 iptables -P INPUT DROP
-N:自定义一个新的空链
-X:删除一个自定义的空链
-Z:置零指定链中所有规则的计数器
-E:重命名自定义的链
查看类:
-L:显示指定表中的规则-n:以数字格式显示主机地址和端口号-v:显示链及规则的详细信息-x:显示计数器的精确值--line-numbers:显示规则号码
匹配保准:
通用匹配:
-s,--src :指定源地址
-d,--dst :指定目标地址
-p{tcp|udp|icmp} :指定协议
-i interface :指定数据报文流入的接口(eth0)可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o interface :指定数据报文流出的接口可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
隐含扩展匹配:不用特别指明由哪个模块进行的扩展,因为此时使用{tcp|udp|icmp}
-p tcp--sport PORT[-PORT]: 源端口--dport PORT[-PORT]: 目标端口--tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;--tcp-flags SYN,FIN,ACK,RST SYN = --syn--syn
-p icmp (ping)--icmp-type 0: echo-reply ping应答8: echo-request ping请求iptables -A INPUT -p icmp --icmp-type 8 -s 192.168.239.0/24 -j DROP iptables -A INPUT -p icmp --icmp-type any -s 192.168.239.0/24 -j DROP-p udp--sport--dport
显示扩展匹配:使用额外的匹配机制,必须指明由哪个模块进行的扩展,在iptables 中使用-m选型可完成此功能
-m state:状态扩展结合ip_conntrack追踪会话状态NEW:新连接请求ESTABLISHED:已建立的链接INVALID:非法链接RELATED:相关联的 (ftp,需要加载模块)iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT-m multiport:离散的多端口匹配扩展--source-ports--destination-ports--ports-m multiport --destination-ports 21,22,80 -j ACCEPT -m iprange 指定范围--src-range--dst-rangeiptables -A INPUT -p tcp -m iprange --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT-m connlimit 连接数限制! --connlimit-above n iptables -A INPUT -d 192.168.2.102 -p tcp --dport 80 -m connlimit ! --connlimit-above 2 -j ACCEPT iptables -A INPUT -d 192.168.2.102 -p tcp --dport 80 -m connlimit --connlimit-above 2 -j DROP -m limit--limit rate[/second|/minute|/hour|/day]--limit-burst number the default is 5iptables -A INPUT -d 192.168.2.102 -p tcp --dport 80 -m limit --limit 5/minute --limit-burst 3 -j ACCEPT -m string--algo {bm|kmp}--string pattern
动作(target):
ACCEPT:放行
DROP:丢弃
REJECT:拒绝
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装
LOG:日志 --log-prefix prefix
MARK:打标记-j SNAT --to-source ipaddr[-ipaddr][:port[-port]]iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 172.16.100.1iptables -t nat -L 查看-j DNAT--to-destination [ipaddr][-ipaddr][:port[-port]]iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.7:8080-j MASQUERADE (外网地址动态获取时使用)
保存规则:
# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
常用示例
1.设置链的默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
2.允许回环访问
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
3.允许外部主机ping内部主机
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type any -s 192.168.239.0/24 -j DROP
4.匹配端口范围
iptables -A INPUT -p tcp --dport 18:80 -j DROP
iptables -A INPUT -p tcp -m multiport --dport 21,22,23 -j DROP
5.防攻击
connlimit模块
作用:用于限制每一个客户端ip的并发连接数
参数:–connlimit-above n //限制并发个数
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT (并发访问控制)
limit模块
作用:限速,控制流量
参数:–limit rate[/second|/minute|/hour|/day]
–limit-burst number the default is 5
iptables -A INPUT -p icmp -m limit --limit 5/minute --limit-burst 3 -j ACCEPT
iptables -A INPUT -p icmp -j REJECT
6.局域网机器共享上网
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.19
7.外部地址和端口映射到内部地址和端口
iptables -t nat -A PREROUTING -d 10.0.0.19 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.20:8080
这篇关于Iptables四表五链及规则组成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!