找回密码
 立即注册
Qt开源社区 门户 查看内容

Linux防火墙——iptables

2019-4-16 21:48| 发布者: admin| 查看: 811| 评论: 0

摘要: Linux防火墙——iptables防火墙防火墙工作在网络边缘,对进出网络数据包基于一定规则检查,并在匹配某规则时有规则定义的处理动作进行处理的一组功能组件。防火墙按工作层次分为两类:工作于OSI三层的网络层防火墙和 ...

Linux防火墙——iptables

防火墙


防火墙工作在网络边缘,对进出网络数据包基于一定规则检查,并在匹配某规则时有规则定义的处理动作进行处理的一组功能组件。

防火墙按工作层次分为两类:工作于OSI三层的网络层防火墙和工作于OSI七层的代理服务性防火墙。

网络型防火墙又称为包过滤防火墙,通过检查数据流中的源地址、目的地址、所用端口和协议状态等因素,或这些因素的组合来确定这些数据包的处理动作。

  • 优点:透明,处理速度快,易于维护。

  • 缺点:一旦被突破,就可以轻易的伪造数据包的源地址、目的地址和端口号——“IP地址伪造”。

代理服务型防火墙又称为应用层防火墙,将通信链路分为两段,该类型防火墙收到用户对某网站访问请求后,检查请求是否符合控制规则。如果规则允许,代理服务器会代替用户取回信息,转发给用户。内外网用户通过代理服务器的“链接”实现,起到了隔离防火墙内外网络。

  • 优点:在应用层对数据进行检查,比较安全。

  • 缺点:增加防火墙负载。

通常情况先将数据送至网络型防火墙检查网络数据,再送到代理服务型防火墙检查应用层。

Iptables

netfilter和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机制激动实现。

请求报文中的地址变动:修改源地址SNATMASQUERADE,修改目标地址DNAT,修改端口地址REDIRECT

NAT定义在nat表:PREROUTING、INPUT、OUTPUT、POSTROUTING,其中SNAT定义在POSTROUTING,DNAT定义在PREROUTING。


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:简单的脑洞,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了