iptables 是一个配置 Linux 内核 防火墙 的命令行工具,是netfilter 项目的一部分。 iptables 也经常代指该内核级防火墙。iptables 可以直接配置,也可以通过许多前端和图形界面配置。
说道工作机制我们需要先理解表,链,规则。
数据包的过滤基于规则,规则由2部分组成,匹配和动作。根据规则匹配条件来尝试匹配报文,一旦匹配成功,就由规则定义的处理动作作出处理;
链是一些按顺序排列的规则的列表,也可以说链是规则的容器,用来存放规则的。默认情况下,任何链中都没有规则。可以向链中添加自己想用的规则。iptables内置有5条链,同时还允许用户自定义链
表是由链组成,来完成不同的功能,iptables中默认有5个表,以及默认包含的链
理解 iptables 如何工作的关键是这张图。图中在上面的小写字母代表 表,在下面的大写字母代表链。从任何网络端口 进来的每一个 IP 数据包都要从上到下的穿过这张图。一种常见的困扰是认为 iptables 对从内部端口进入的数据包和从面向互联网端口进入的数据包采取不同的处理方式,相反,iptabales 对从任何端口进入的数据包都会采取相同的处理方式。可以定义规则使 iptables 采取不同的方式对待从不同端口进入的数据包。当然一些数据包是用于本地进程的,因此在图中表现为从顶端进入,到 停止,而另一些数据包是由本地进程生成的,因此在图中表现为从 发出,一直向下穿过该流程图。
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
iptables命令有很多选项,我们可以先分类
选项
[!] -s, --source address[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围;
[!] -d, --destination address[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围;
[!] -p, --protocol protocol,指定协议,常用的有tcp,udp,icmp
[!] -i, --in-interface name:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链;
[!] -o, --out-interface name:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;
[!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围;
[!] --destination-port,--dport port[:port]:匹配报文的目标端口;可以是端口范围;
[!] --tcp-flags mask comp,其中mask是一个列表,可以是 SYN,ACK,FIN,RST,comp是mask列表中必须被设置为1的标志。例如:“--tcp-flags SYN,ACK,FIN,RST SYN”表示,要检查的标志位为SYN,ACK,FIN,RST四个,中SYN必须为1,余下的必须为0;
[!] --syn:用于匹配第一次握手,相当于”--tcp-flags SYN,ACK,FIN,RST SYN“;
[!] --source-port, --sport port[:port]:匹配报文的源端口;可以是端口范围;
[!] --destination-port,--dport port[:port]:匹配报文的目标端口;可以是端口范围;
[!] --icmp-type {type[/code]|typename}
常用的一些扩展模块
[!] --src-range from[-to]
[!] --dst-range from[-to]
--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;
- string:对报文中的应用层数据做字符串模式匹配检测
--algo {bm|kmp}:字符串匹配检测算法;
[!] --string pattern:要检测的字符串模式;
[!] --hex-string pattern:要检测的字符串模式,16进制格式;
--connlimit-upto n:连接的数量小于等于n时匹配;
--connlimit-above n:连接的数量大于n时匹配;
--limit rate[/second|/minute|/hour|/day] ##最大速率
--limit-burst number ##表示最大能接受多少个请求
[!] --state STATE
conntrack机制:追踪本机上的请求和响应之间的关系;状态有如下几种:
- NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;
- ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;
- RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;
- INVALID:无效的连接;
- UNTRACKED:未进行追踪的连接;
iptables(二)常用的示例
参考链接1
参考链接2