iptables防火墙规则匹配

名词

容器:瓶子罐子存放东西表
(table):存放链的容器链
(chain):存放规则的容器规则
(policy):准许或拒绝规则

Netfilter表(tables)链(chains)规则(Policy)
一栋楼楼里的房子房子里的柜子柜子里衣服,摆放规则
iptablesnat/filter

防火墙规则匹配流程

  1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
  2. 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则.
  3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
  4. 防火墙的默认规则所有规则执行完才执行的。

注: 屏蔽规则一般放在最上面 允许规则放在下面

表与链

四表五链

四表:filter表(默认) nat表 raw表 mangle表

nat表的功能一般在云服务器不能用 filter表可以

filter表

filter表强调:主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包)filter表示iptables默认使用的表,这个表定义了三个链( chains )企业工作场景:主机防火墙
INPUT负责过滤所有目标地址是本机地址的数据包通俗来说:就是过滤进入主机的数据包
FORWARD 负责转发流经主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍LVS NAT模式, net.ipv4.ip_forward=0
OUTPUT 处理所有源地址是本机地址的数据包 通俗的讲:就是处理从主机发出去的数据包

NAT表

NAT表负责网络地址转换的,即来源与目的IP地址和port的转换。应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务相关。工作场景:1.用于企业路由( zebra )或网关( iptables ),共享上网( POSTROUTING )2.做内部外部IP地址一对一映射( dmz),硬件防火墙映射IP到内部服务器,ftp服务( PREROUTING )3. WEB,单个端口的映射,直接映射80端口( PREROUTING )这个表定义了3个链,nat功能相当于网络的acl控制。和网络交换机acl类似。
OUTPUT和主机放出去的数据包有关,改变主机发出数据包的目的地址。
PREROUTING 在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等就是收信时,根据规则重写收件人的地址。.例如:把公网IP : xxx.xxx.xxx.xxx映射到局域网的xx.xx.xx.xx服务器.上。如果是web服务,可以报80转换为局域网的服务器9000端口上
POSTROUTING 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等写好发件人的地址,要让家人回信时能够有地址可回。例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。生产应用:局域网共享上网
perrouting    数据来之前
postrouting   数据离开的时候
安装和使用
 安装
  ~]# yum install  iptables iptables-services -y
 启动
 Centos7
  ~]# systemctl start iptables.service 
  ~]# systemctl enable iptables.service 
 Centos6
  ~]# /etc/init.d/iptables.service
  ~]# chkconfig iptables on
 命令参数
 -n                      不要吧ip端口转换成服务名 例如0.0.0.0/0 会自动转换成anywhere
 -t                      指定表(默认是filter表)
 -I                      添加规则(放在最前 写拒绝规则的时候使用)  
 -A                      append 添加规则(放在最后)  后面指定链(INPUT..)
 -p                      指定协议
 --dport             (dest)目标端口 指定端口后面需要指定协议 tcp/udp/icmp(ping)/all
 -j                      处理的方法(DROP|ACCEPT)或者REJECT
 -D                      删除规则
 -s                      (source)指定源IP 范围 或者网段
 --line-number   显示行号
 -m multiport    可以添加多个端口
 DROP  丢掉数据无返回信息 
 REJECT 丢掉数据返回信息
 查看当前防火墙规则
  ~]# iptables -t nat -nL
  ~]# iptables -t filter -nL
  ~]# iptables -nL
 Chain INPUT (policy ACCEPT)  <---默认规则 放行
 target     prot opt source               destination         
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
 ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 Chain FORWARD (policy ACCEPT)
 target     prot opt source               destination         
 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 Chain OUTPUT (policy ACCEPT)
 target     prot opt source               destination
 防火墙关闭后 如果使用iptables -nL查看 , iptables会自动开启
 模块加载
 modprobe ip_tables                  是防火墙的核心模块,负责维护防火墙的规则表,通过这些规则,实现防火墙的核心功能。归纳起来,主要有三种功能:包过滤( filter ) NAT 以及包处理( mangle )
 modprobe iptable_filter         防火墙数据包过滤模块,实现对数据包的过滤与放行功能
 modprobe iptable_nat                防火墙数据包转发模块,用于对数据包进行修改,从而实现数据转发的目的
 modprobe ip_conntrack           主要用于修改应用层协议控制包,无比重要的作用就是实现nat
 modprobe ip_conntrack_ftp   与ftp服务nat映射相关的模块
 modprobe ip_nat_ftp 与ftp     服务nat映射相关的模块
 modprobe ipt_state                  防火墙状态信息模块,在新版centos6系统中已经忽略此模块的加载
 查看
  ~]# lsmod |egrep "nat|filter|ipt"
 iptable_nat            12875  0 
 nf_nat_ipv4            14115  1 iptable_nat
 nf_nat                 26787  1 nf_nat_ipv4
 ipt_REJECT             12541  2 
 nf_reject_ipv4         13373  1 ipt_REJECT
 nf_conntrack          133053  4 nf_nat,nf_nat_ipv4,xt_conntrack,nf_conntrack_ipv4
 iptable_filter         12810  1 
 ip_tables              27126  2 iptable_filter,iptable_nat
 libcrc32c              12644  3 xfs,nf_nat,nf_conntrack
 重启服务后失效  可以写进/etc/rc.local
 清空规则
 iptables -Z 清空所有规则,不会处理默认规则
 iptables -X 删除用户自定义的链
 iptables -F 链的计数器清零(数据包计数器与数据包字节计数器)
 删除规则
 只删除某一个规则
 查看规则的行号
  ~]# iptables -nL --line-number
 Chain INPUT (policy ACCEPT)
 num  target     prot opt source               destination         
 1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
 3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
 4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 Chain FORWARD (policy ACCEPT)
 num  target     prot opt source               destination         
 1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 Chain OUTPUT (policy ACCEPT)
 num  target     prot opt source               destination
 删除第一行规则
  ~]# iptables -D INPUT  1
 添加规则举例
 拒绝规则写在前面
 filter表
 黑名单模式
 实现只能通过内网访问22端口
 iptables -A INPUT -p tcp ! -s 172.16.1.0/24  --dport 22 -j DROP
 !表示 不是172.16.1.0/24这个网段就拒绝
 屏蔽端口
 只能访问80 443 22
 iptables -I INPUT -p tcp -m multiport ! --dport  80,443,22 -j DROP
 屏蔽范围端口
 iptables -I INPUT -p tcp -m muLtiport --dport  1024:2048 j DROP
 测试是否成功 可以用 nc-kl 1025
 然后另一台机器telnet 
 禁用某个IP
 ~]# iptables -I INPUT -p tcp -s 10.0.0.6 -j DROP
 禁ping 
 iptables -I INPUT -p icmp -j  DROP
 ICMP 协议 是ping的协议
 ping在其中的类型是8  所以命令中准确点可以加上--icmp-type 8 
 通过内核参数也可以禁ping 
  临时
 ~]# echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
  永久
  ~]# net.ipv4.icmp_echo_ignore_a11=1 写入到/etc/sysctl.conf
  ~]# sysct1 -P #生效
 限制并发速率
 --m limit 限制模块
 -m limit  --1imit 10/minute # 每分钟只能有10个数据包(单位可以是second/minute/hour)
 白名单模式
 只允许10网段通过
 iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT 只允许10网段通过
 iptables -P INPUT DROP # 修改默认规则为拒绝
 nat表
 共享上网
 云服务器不能用 阿里云可以用NAT网关
 需要把共享上网主机的内核转发模块打开net.ipv4.ip_forward=1
 iptables -t nat -A POSTROUTING -s 172.16.1.0/24 j SNAT --to-source 10.0.0.61
 修改的是POSTROUTING链 源ip是172.16.1. 0/24 经过防火墙处理修改为10.0.0.61
 然后另一台主机网关修改为10.0.0.61的内网IP
 端口转发
 用户访问a机器的一个端口 转发到b机器的一个端口
 iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9001 -j DNAT -- to-destination 172.16.1.7:22
 访问10.0.0.61的9000端口转发到了172.16.1.7的22端口
 规则的备份 及永久生效
 永久生效
  ~]# iptables-save >/etc/sysconfig/iptables #启动默认找的配置文件
  恢复
  ~]# iptables-restore >/root/rul
 [root@web03 ~]# ll 
 total 8
 -rw-------. 1 root root 1499 Jan 10 14:42 anaconda-ks.cfg
 -rw-r--r--  1 root root  472 May 14 10:55 rul
  ~]# cat rul 
 Generated by iptables-save v1.4.21 on Tue May 14 10:55:43 2019
 *filter
 :INPUT ACCEPT [0:0]
 :FORWARD ACCEPT [0:0]
 :OUTPUT ACCEPT [181:16663]
 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 -A INPUT -p icmp -j ACCEPT
 -A INPUT -i lo -j ACCEPT
 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
 -A INPUT -j REJECT --reject-with icmp-host-prohibited
 -A FORWARD -j REJECT --reject-with icmp-host-prohibited
 COMMIT
 Completed on Tue May 14 10:55:46 2019
 ~]# 
  ~]# iptables -X
  ~]# iptables -F
  ~]# iptables -Z
  ~]# 
  ~]# iptables-restore </root/rul 
  ~]# iptables -nL
 Chain INPUT (policy ACCEPT)
 target     prot opt source               destination         
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
 ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 Chain FORWARD (policy ACCEPT)
 target     prot opt source               destination         
 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
 Chain OUTPUT (policy ACCEPT)
 target     prot opt source               destination

原创文章,作者:Globaldc,如若转载,请注明出处:https://www.globaldc.cn/2021/03/iptables-filter.html

发表评论

邮箱地址不会被公开。