iptables/netfilter

iptables/netfilter:

Firewall:防火墙,隔离工具;工作于主机或网络边缘,对于进出本主机或本网络的报文根据事先定义的检查规则作匹配检测,对于能够被规则匹配到的报文作出相应处理的组件;
主机防火墙
网络防火墙
软件防火墙(软件逻辑):
硬件防火墙(硬件和软件逻辑):NetScreen,CheckPoint,。。。
iptables(netfilter)
netfilter:kernel
hooks function(钩子函数):
iptables:cli
rules untility
hooks function(钩子函数):
input
output
forward
prerouting
postrouting
报文流向:
流入本机:PREROUTING –> INPUT ==>用户空间进程;
由本机流出:用户空间进程==> OUTPUT –> POSTROUTING;
转发:PREROUTING –> FORWARD –> POSTROUTING
功能:表(table)
filter:过滤,防火墙;
nat:network address translation网络地址转换;用于修改源IP或目标IP,也可以改端口;
mangle:拆解报文,按需修改;
raw:关闭nat表上启用的连接追踪机制;
 iptables:
1、内置链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING;对应于一个钩子函数(hook function);
2、自定义链:用于内置链的扩展和补充,可实现更灵活的规则管理机制;
表<==>链:
filter:INPUT,FORWARD,OUTPUT
nat:PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
raw:PREROUTING、OUTPUT

优先级:同一个链上的不同的表的规则的应用优先级(高–>低):raw>managle>nat>filter

 

路由功能发生的时刻:

1、报文进入本机后:判断目标主机是否为本机?是:INPUT;否:FORWARD(真正是否生效取决于是否开启路由转发)

2、报文离开本机之前:判断经由哪一个接口送往下一跳?

 

规则:
组成部分:根据规则匹配条件来尝试匹配报文,一旦匹配成功,就由规则定义的处理动作作出处理;
a、匹配条件:
1、基本匹配条件
2、扩展匹配条件
b、处理动作(target):
1、基本处理动作
2、扩展处理动作
3、自定义处理机制
添加规则时的考量点:
(1) 要实现哪种功能:判断添加到哪个表上;
(2) 报文流经的路径:判断添加到哪个链上;

链上规则的次序:即为检查的次序,因此隐含一定的法则:自上而下检查

1、同类规则(访问同一应用),匹配范围小的放上面;

2、不同类规则(访问不同应用),匹配到报文频率较大的放上面;

3、将那些可由一条规则描述的多个规则合并为一个;

4、设置默认策略;

 

 

Centos 7
~]# systemctl stop firewalld.service
~]# systemctl disable firewalld.service
注意:当修改iptables规则时,避免出错导致远程访问给阻挡,应在应用规则前定义一个at或者crontab任务,清除规则,保证远程访问可以正常访问
规则格式:iptables   [-t table]   SUBCOMMAND   chain   [-m matchname [per-match-options]]   -j targetname [per-target-options]
-t table:
raw, mangle, nat, [filter]
SUBCOMMAND:
链管理:
-N:new, 新增一条自定义链;
-F:flush,清空指定的规则链;
-X: delete,删除自定义的空链;
-Z:zero,置零规则计数器;iptables的每条规则都有两个计数器:(1) 匹配到的报文的个数;(2) 匹配到的所有报文的大小之和;
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:ACCEPT:接受、DROP:丢弃、REJECT:拒绝
-E:rename,重命名自定义的未被引用的链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
规则管理:
-A:append,在最后追加;
-I:insert, 插入,要指明位置,省略时表示第一条;
-D:delete,删除指定规则;
-R:replace,替换指定链上的指定规则;
两种指定方式:(1) 指明规则序号;(2) 指明规则本身;
 -S:selected,以iptables-save命令的格式显示链上的规则;
查看:
-L:list, 列出指定鏈上的所有规则;
-n:numeric,以数字格式显示地址和端口;
-v:verbose,详细信息;
-vv, -vvv
-x:exactly,显示计数器结果的精确值而非换算后的结果;
–line-numbers:显示链上的规则的编号;
chain:
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
匹配条件:
基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供;
[!] -s, –source  address[/mask][,…]:检查报文中的源IP地址是否符合此处指定的地址或范围;
[!] -d, –destination address[/mask][,…]:检查报文中的目标IP地址是否符合此处指定的地址或范围;
[!] -p, –protocol 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链;
扩展匹配条件: 需要加载扩展模块,方可生效;其模块目录为/usr/lib64/xtables/
隐式扩展:可以不用使用-m选项专门加载相应模块;前提是要使用-p选项可匹配何种协议;
[!] -p, –protocol protocol
协议protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or  “all”
{tcp|udp|icmp}
tcp:隐含指明了“-m tcp”,有专用选项:
[!] –source-port, –sport port[:port]:匹配报文的tcp首部的源端口;可以是端口范围;
[!] –destination-port,–dport port[:port]:匹配报文的tcp首部的目标端口;可以是端口范围;
[!] –tcp-flags  mask  comp:检查报文中的mask指明的tcp标志位,而要这些标志位comp中必须为1;
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 :隐含指明了“-m udp”,有专用选项:
[!] –source-port, –sport port[:port]:匹配报文的源端口;可以是端口范围;
[!] –destination-port,–dport port[:port]:匹配报文的目标端口;可以是端口范围;
icmp :隐含指明了“-m icmp”,有专用选项:
[!] –icmp-type {type[/code]|typename}
echo-request:8/0echo请求
echo-reply:0/0 echo应答
显式扩展:必须要手动加载扩展模块, [-m matchname [per-match-options]];
处理动作:
-j targetname [per-target-options]
ACCEPT
DROP
REJECT
RETURN:返回调用的链;
REDIRECT:端口重定向;
LOG:记录日志;
MARK:做防火墙标记;
DNAT:目标地址转换;
SNAT:源地址转换;
MASQUERADE:地址伪装;
自定义链:
防火墙(服务):
CentOS 6:
service  iptables  {start|stop|restart|status}
start:读取事先保存的规则,并应用到netfilter上;
stop:清空netfilter上的规则,以及还原默认策略等;
status:显示生效的规则;
restart:清空netfilter上的规则,再读取事先保存的规则,并应用到netfilter上;
默认的规则文件:/etc/sysconfig/iptables
CentOS 7:
systemctl  start|stop|restart|status  firewalld.service
systemctl  disable  firewalld.service
systemctl  stop  firewalld.service

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/100479

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班