Linux防火墙——iptables防火墙 防火墙工作在网络边缘,对进出网络数据包基于一定规则检查,并在匹配某规则时有规则定义的处理动作进行处理的一组功能组件。
防火墙按工作层次分为两类:工作于OSI三层的网络层防火墙和工作于OSI七层的代理服务性防火墙。
网络型防火墙又称为包过滤防火墙,通过检查数据流中的源地址、目的地址、所用端口和协议状态等因素,或这些因素的组合来确定这些数据包的处理动作。
优点:透明,处理速度快,易于维护。
缺点:一旦被突破,就可以轻易的伪造数据包的源地址、目的地址和端口号——“IP地址伪造”。
代理服务型防火墙又称为应用层防火墙,将通信链路分为两段,该类型防火墙收到用户对某网站访问请求后,检查请求是否符合控制规则。如果规则允许,代理服务器会代替用户取回信息,转发给用户。内外网用户通过代理服务器的“链接”实现,起到了隔离防火墙内外网络。
优点:在应用层对数据进行检查,比较安全。
缺点:增加防火墙负载。
通常情况先将数据送至网络型防火墙检查网络数据,再送到代理服务型防火墙检查应用层。
Iptablesnetfilter和iptables netfilter是一种内核用于扩展各种网络服务的结构化底层框架。用户可以通过iptables向其写规则。 iptables是工作在用户层写规则的工具,写好的规则送往netfilter。这些规则告诉内核中的netfilter如何处理信息包。
iptables的组成 iptables由五个表和五个链以及一些规则组成。
iptables表决定功能,五个表分别是
filter :过滤规则表,该表根据管理员与定义的一组规则过滤符合条件的数据包。
nat :地址转换规则表
mangle :修改数据标记位规则
raw :跟踪数据表规则表
security :用于强制访问控制(Mandatory Access Control)网络规则,未被广泛使用。
iptables链决定路径,五个链分别为:INPUT、OUTPUT、FORWARD、PREROUTING、POSTOUTING。
表和链的对应关系
filter :INPUT、OUTPUT、FORWARD。
nat :OUTPUT、PREROUTING、POSTOUTING。
mangle :INPUT、OUTPUT、FORWARD、PREROUTING、POSTOUTING。
raw :OUTPUT、PREROUTING。
iptables内部数据包了流向图
iptables的使用 链管理
-N 自定义一条新链
iptables [-t table] -N chain
-X 删除自定义的规则链(仅能删除引用计数为0的空的自定义链)
iptables [-t table] -X [chain]
-P 设置默认策略
iptables [-t table] -P chain target
-E 重命名自定义链(不能重命名引用计数不为0的链)
iptables [-t table] -E old-chain-name new-chain-name
规则管理
-A 在尾部追加新规则
iptables [-t table] -A chain rule-specification
-I 插入新规则到指定位置(不指定为插入到第一条)
iptables [-t table] -I chain [rulenum] rule-specification
-D 删除指定规则
iptables [-t table] -D chain rulenum 指定序号删除 iptables [-t table] -D chain rule-specification 指定规则删除
-R 替换指定规则
iptables [-t table] -R chain rulenum rule-specification
-F 清空指定规则链(默认清空所有)
iptables [-t table] -F [chain [rulenum]] [options...]
-Z 归零规则链 iptables的每条规则都有两个计数器:匹配到的报文的个数、匹配到的所有报文的大小之和。使用iptables -Z 归零这两个计数器
iptables [-t table] -Z [chain [rulenum]] [options...]
rule-specification规则描述
iptables规则包含两个方面的内容:匹配条件和处理动作。 匹配条件分为基本匹配条件和拓展匹配条件,拓展匹配条件还有隐式拓展条件和显式拓展条件之分,隐式拓展不用再加扩展模块模块在-p 协议 中,显示拓展条件必须使用-m 指明调用的扩展模块。 用-j 动作 指明处理动作
基本匹配条件
[!] -s, --source address[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围; [!] -d, --destination address[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围;所有地址:0.0.0.0/0 [!] -p, --protocol //protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or "all" {tcp|udp|icmp} [!] -i, --in-interface name:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链; [!] -o, --out-interface name:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;
隐式拓展匹配条件
tcp: [!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围; [!] --destination-port,--dport port[:port]:匹配报文的目标端口;可以是端口范围; [!] --tcp-flags mask comp mask is the flags which we should examine, written as a comma-separated list,例如 SYN,ACK,FIN,RST comp is a comma-separated list of flags which must be set,例如SYN 例如:“--tcp-flags SYN,ACK,FIN,RST SYN”表示,要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0; [!] --syn:用于匹配第一次握手,相当于”--tcp-flags SYN,ACK,FIN,RST SYN“;
udp [!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围; [!] --destination-port,--dport port[:port]:匹配报文的目标端口;可以是端口范围;
icmp [!] --icmp-type {type[/code]|typename} echo-request:8 echo-reply:0
显示拓展条件匹配
1、multiport
以离散或连续的 方式定义多端口匹配条件,最多15个;
[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口; [!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;
# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT
2、iprange
以连续地址块的方式来指明多IP地址匹配条件; [!] --src-range from[-to] [!] --dst-range from[-to] # iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT
3、time
--timestart hh:mm[:ss] --timestop hh:mm[:ss] [!] --weekdays day[,day...] [!] --monthdays day[,day...] --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --kerneltz:使用内核配置的时区而非默认的UTC;
4、string
--algo {bm|kmp} [!] --string pattern [!] --hex-string pattern
--from offset --to offset
~]# iptables -I OUTPUT -m string --algo bm --string "say" -j REJECT
5、connlimit
--connlimit-upto n --connlimit-above n
~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
6、limit
--limit rate[/second|/minute|/hour|/day] --limit-burst number
~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT
限制本机某tcp服务接收新请求的速率:--syn, -m limit
7、state
[!] --state state INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.
NEW: 新连接请求; ESTABLISHED:已建立的连接; INVALID:无法识别的连接; RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接; UNTRACKED:未追踪的连接; state扩展: 内核模块装载: nf_conntrack nf_conntrack_ipv4 手动装载: nf_conntrack_ftp 追踪到的连接: /proc/net/nf_conntrack 调整可记录的连接数量最大值: /proc/sys/net/nf_conntrack_max 超时时长: /proc/sys/net/netfilter/*timeout*
处理动作
-j: ACCEPT/DROP 接受/丢弃 REJECT:--reject-with 返回错误 LOG:--log-level, --log-prefix 记录日志 自定义链 转入使用自定义链 RETURN 返回上一层链
iptables保存和还原iptables-save 保存iptables配置 iptables-restore 还原iptables配置(会清空原有配置)
iptables配置指令——nat NAT:(Network Address Translation)地址转换。请求报文由管理员定义,响应报文由NAT的conntrack机制激动实现。
请求报文中的地址变动:修改源地址SNAT 、MASQUERADE ,修改目标地址DNAT ,修改端口地址REDIRECT
NAT定义在nat表:PREROUTING、INPUT、OUTPUT、POSTROUTING,其中SNAT定义在POSTROUTING,DNAT定义在PREROUTING。
---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:简单的脑洞,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|