名词
容器:瓶子罐子存放东西表
(table):存放链的容器链
(chain):存放规则的容器规则
(policy):准许或拒绝规则
防火墙规则匹配流程
- 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则.
- 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
- 防火墙的默认规则是所有规则执行完才执行的。
注: 屏蔽规则一般放在最上面 允许规则放在下面
表与链
四表五链
四表: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
原创文章,作者:赛福,如若转载,请注明出处:https://www.safecdn.cn/1078.html
本站不销售、不代购、不提供任何支持,仅分享网络信息,请自行辨别,请遵纪守法、文明上网。