iptables技术--局域网共享上网及映射

    技术2022-07-11  111

    文章目录

    一. iptables介绍1.iptables是什么2.iptables企业应用场景3.商用防火墙品牌 二.iptables工作流程三.iptables四表五链1.表与链对应关系2.FILTER表3.NAT表 四.iptables工作原理五.iptables环境准备(实操1)1.安装iptables管理命令2.加载防火墙的内核模块3.启动防火墙 六.iptables基本操作命令七.iptables规则练习八.iptables企业案例1.部署一个安全的防火墙2.局域网共享上网(实操2)3.端口映射(实操3)4.IP映射(实操4) 九.iptables规则保存十.iptables防坑指南

    一. iptables介绍

    1.iptables是什么

    iptables是开源的基于数据包过滤的防火墙工具。(主要工作于传输层) 补充:每层包含的协议

    2.iptables企业应用场景

    1、主机防火墙(filter表的INPUT链)。 2、局域网共享上网(nat表的POSTROUTING链)。半个路由器,NAT功能。 3、端口及IP映射(nat表的PREROUTING链),硬防的NAT功能。 4、IP一对一映射。

    3.商用防火墙品牌

    华为 深信服 思科 H3C Juniper 天融信 飞塔 网康 绿盟科技 金盾

    二.iptables工作流程

    iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。 1.防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。 2.如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。 3.如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。 4.防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。 即可简单归纳为: 1.从上往下依次匹配 2.一但匹配上,就不在往下匹配了 3.默认规则,默认的情况,默认规则是放行所有

    三.iptables四表五链

    1.表与链对应关系

    实际iptables包含4张表和五个链,但主要记住两张表即可filter和nat表即可。

    2.FILTER表

    3.NAT表

    四.iptables工作原理

    五.iptables环境准备(实操1)

    1.安装iptables管理命令

    m01操作: [root@m01 ~]# yum install iptables-services -y

    2.加载防火墙的内核模块

    m01操作: modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_state

    查看已加载的模块

    m01操作: [root@m01 ~]# lsmod |egrep 'filter|nat|ipt' nf_nat_ftp 12770 0 nf_conntrack_ftp 18638 1 nf_nat_ftp iptable_nat 12875 0 nf_nat_ipv4 14115 1 iptable_nat nf_nat 26787 2 nf_nat_ftp,nf_nat_ipv4 nf_conntrack 133053 6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4 iptable_filter 12810 0 ip_tables 27126 2 iptable_filter,iptable_nat libcrc32c 12644 3 xfs,nf_nat,nf_conntrack

    3.启动防火墙

    m01操作: 首先停止firewalld systemctl stop firewalld systemctl disable firewalld 开启iptables systemctl start iptables.service systemctl enable iptables.service

    这一步即为共享上网的环境准备,可直接开始下面共享上网的实施。

    六.iptables基本操作命令

    1.查看防火墙规则 [root@m01 ~]# iptables -nL 防火墙规则应用: -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT :把这条规则添加到INPUT链的最后一行 -p tcp :指定协议为tcp -m state --state NEW :匹配TCP的连接状态 -m tcp --dport 22 :匹配TCP协议的目标端口 -j ACCEPT :执行动作 放行 2.清除防火墙规则 [root@m01 ~]# iptables -F [root@m01 ~]# iptables -X [root@m01 ~]# iptables -Z [root@m01 ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 解释说明: iptables -F <- 清除所有规则,不会处理默认的规则 iptables -X <- 删除用户自定义的链 iptables -Z <- 链的计数器清零(数据包计数器与数据包字节计数器) iptables -nL --查看规则 iptables -nL --line-numbers --查看规则序号 iptables -D INPUT 1(连接成功) --删除规则序号 3.添加防火墙规则 iptables -t <-指定表d(efault: `filter') iptables -A <-把规则添加到指定的链上,默认添加到最后一行。 iptables -I <-插入规则,默认插入到第一行(封IP)。 iptables -D <-删除链上的规则 4.网络连接状态 NEW:已经或将启动新的连接 ESTABLISHED:已建立的连接 RELATED:正在启动的新连接 INVALID:非法或无法识别的 4.删除某个规则 iptables -nL --line-numbers 查看规则号码 iptables -D INPUT 1 删除指定链上的指定序号 iptables -A INPUT -p tcp -m state --dport 22 -j DROP iptables -nL iptables -nL --line-numbers iptables -D INPUT 1

    练习规则题

    禁止源地址是10.0.0.7的主机访问22端口 iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22 -j DROP 禁止源地址是10.0.0.7的主机访问任何端口 iptables -A INPUT -p tcp -s 10.0.0.7 -j DROP 禁止源地址是10.0.0.8的主机访问80端口 iptables -A INPUT -p tcp -s 10.0.0.8 --dport 80 -j DROP 禁止除了10.0.0.7以外的地址访问80端口 iptables -A INPUT -p tcp ! -s 10.0.0.7 --dport 80 -j DROP 2条规则冲突,会以谁先谁为准 iptables -I INPUT -p tcp -s 10.0.0.7 --dport 22 -j ACCEPT iptables -I INPUT -p tcp -s 10.0.0.7 --dport 22 -j DROP 禁止10.0.0.7访问22和80端口 iptables -I INPUT -p tcp -s 10.0.0.7 -m multiport --dport 22,80 -j DROP 禁止10.0.0.7访问22到100之间的所有端口 iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22:100 -j DROP 禁止所有主机ping iptables -A INPUT -p icmp --icmp-type 8 -j DROP 放行10.0.0.7可以ping iptables -I INPUT 2 -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT 只允许10.0.0.7可以ping ACCEPT icmp -- 10.0.0.7 0.0.0.0/0 icmptype 8 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8 等同于上一条,优化版,只要不是10.0.0.7就不允许ping iptables -I INPUT -p icmp --icmp-type 8 ! -s 10.0.0.7 -j DROP 优先级: 匹配频次最高的条件放前面 100次 80 90 22 10

    七.iptables规则练习

    1.禁止某个端口访问 iptables -t filter -A INPUT -p tcp --dport 22 -j DROP 规则解释: -p #<==指定过滤的协议-p(tcp,udp,icmp,all) --dport #<==指定目标端口(用户请求的端口)。 -j #<==对规则的具体处理方法(ACCEPT,DROP,REJECT,SNAT/DNAT) --sport #<==指定源端口。 2.禁止某个IP访问 iptables -I INPUT -p tcp -s 10.0.0.253 -i eth0 -j DROP iptables -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP iptables -A INPUT -p tcp ! -s 10.0.0.0/24 -i eth0 -j DROP 规则解释: -s #<==指定源地址或网段(192.168.1.0/24)。 ! 取反。 -d #<==指定目的地址(nat表prerouting)。 -i #<==进入的网络接口(eth0,eth1)。 -o #<==出去的网络接口(eth0,eth1)。 3.禁止除跳板机以外的IP访问 iptables -I INPUT -p tcp ! -s 10.0.0.1 -j DROP 4.匹配端口范围 iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT iptables -I INPUT -p tcp --dport 18:80 -j DROP #<==最佳 5.匹配ICMP类型 iptables -A INPUT -p icmp --icmp-type 8 例:iptables -A INPUT -p icmp --icmp-type 8 -j DROP iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT 6.练习题 1、封掉10.0.0.7 iptables -I INPUT -s 10.0.0.7 -j DROP 2、让10.0.0.7和SSH客户端(10.0.0.1)服务器可以Ping,其它的不能Ping iptables -I INPUT -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT iptables -I INPUT 2 -p icmp ! -s 10.0.0.1 --icmp-type 8 -j DROP 3、封掉3306端口 iptables -I INPUT -p tcp --dport 3306 -j DROP

    八.iptables企业案例

    1.部署一个安全的防火墙

    两种思想:针对默认规则而言。 1、默认规则默认是允许的状态。 2、默认规则默认是不允许的状态。更安全。 实战部署: [root@m01 ~]# iptables -F [root@m01 ~]# iptables -X [root@m01 ~]# iptables -Z [root@m01 ~]# iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT [root@m01 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT [root@m01 ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT [root@m01 ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT [root@m01 ~]# iptables -A INPUT -i lo -j ACCEPT [root@m01 ~]# iptables -P INPUT DROP [root@m01 ~]# iptables -P FORWARD DROP [root@m01 ~]# iptables -P OUTPUT ACCEPT [root@m01 ~]# iptables -nL Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ACCEPT all -- 10.0.0.0/24 0.0.0.0/0 ACCEPT all -- 172.16.1.0/24 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination

    2.局域网共享上网(实操2)

    实验环境: m01: 共享上网网关出口 ip地址:10.0.0.61 web01: 只有内网地址,网关指向m01 ip地址:10.0.0.7 web02: 验证 ip地址:10.0.0.8 实验实施: 在m01: iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p iptables -F iptables -X iptables -Z iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT web01操作: [root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes NAME=eth0 DEVICE=eth0 ONBOOT=no IPADDR=10.0.0.7 PREFIX=24 GATEWAY=10.0.0.2 DNS1=10.0.0.2 [root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes NAME=eth1 DEVICE=eth1 ONBOOT=yes IPADDR=172.16.1.7 GATEWAY=172.16.1.61 PREFIX=24 DNS1=10.0.0.2 [root@web01 ~]# systemctl restart network (此时已经连接不上) web02操作: ssh 172.16.1.7 可以连接上 [root@web01 ~]# ip r default via 172.16.1.61 dev eth1 proto static metric 100 172.16.1.0/24 dev eth1 proto kernel scope link src 172.16.1.7 metric 100 [root@web01 ~]# cat /etc/resolv.conf nameserver 10.0.0.2 [root@web01 ~]# ping www.baidu.com PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data. 64 bytes from 14.215.177.39: icmp_seq=1 ttl=127 time=7.70 ms 64 bytes from 14.215.177.39: icmp_seq=2 ttl=127 time=8.92 ms

    3.端口映射(实操3)

    实验目的: 访问10.0.0.61的9000端口,跳转到172.16.1.7的22端口 访问10.0.0.61的9000端口的数据包格式 源端口: 9000 目的端口: 9000 源IP: 10.0.0.1 目的IP: 10.0.0.61 源端口: 22 目的端口: 22 源IP: 10.0.0.1 目的IP: 172.16.1.7:22 注意: 改写数据包的目标IP和端口 用到的是PREROUTING链 m01操作: iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22 命令拆解: 表:nat 链:PREROUTING 目标IP:10.0.1.61 目标端口:9000 协议:tcp 动作:DNAT 目标IP:172.16.1.7 目标端口:22

    验证:

    4.IP映射(实操4)

    [root@m01 ~]# ip a add 10.0.0.62/24 dev eth0 label eth0:0 [root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.7 [root@m01 ~]# iptables -nL -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- 0.0.0.0/0 10.0.1.61 tcp dpt:9000 to:172.16.1.7:22 DNAT all -- 0.0.0.0/0 10.0.1.62 to:172.16.1.7 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 172.16.1.0/24 0.0.0.0/0 to:10.0.1.61

    验证:

    九.iptables规则保存

    iptables-save > iptables_m01 #将防火墙规则保存到文件中,只显示重启不生效 iptables-save > /etc/sysconfig/iptables #将防火墙规则保存到配置文件中,重启也会生效 iptables-restore < iptables_m01 #从配置文件里载入防火墙配置

    十.iptables防坑指南

    1.修改之前先导出备份一份 2.修改的时候小心别把自己关在外面 3.可以现在定时任务里添加一条定时清空的规则,等测试没问题再取消定时任务

    问题及反思:

    问题: 当FORWARD链默认为DROP的时候,即iptables -P FORWARD DROP 如果你实行命令iptables -F,此时会连接不上 原因: 如果你的默认规则设置了拒绝所有,又执行了清除规则的语句-F 那就意味着,所有的请求全部都拒绝了 原因是-F不会改变默认规则 解决方法: 1)如果你规则没有写入配置里,则可以重启虚拟机 开机后可连接上,实行下面的命令 解决方法: 第一种,添加2条规则 iptables -A FORWARD -s 172.16.1.0/24 -j ACCEPT iptables -A FORWARD -d 172.16.1.0/24 -j ACCEPT 第二种:修改FORWARD链默认规则为ACCEPT iptables -P FORWARD ACCEPT 2)物理机:去机房自己清空 云服务器:直接通过控制台恢复 如何避免: 1.测试规则之前,先写个定时任务,每隔5分钟重启一次iptables
    Processed: 0.014, SQL: 9