【SRE笔记 2022.11.17 iptables及防火墙】

您所在的位置:网站首页 zabbix监控深信服防火墙 【SRE笔记 2022.11.17 iptables及防火墙】

【SRE笔记 2022.11.17 iptables及防火墙】

2023-06-18 00:39| 来源: 网络整理| 查看: 265

SRE笔记 2022.11.17 iptables及防火墙 防火墙防火墙种类商用防火墙Linux防火墙 防火墙应用中的架构位置学好IPtables的技术栈基础Iptables介绍及原理介绍iptables企业常用场景iptables工作流程iptables的表和链包含关系5表不同的表包含不同的链5链表和链的工作流程图 iptables实践(主要在filter表配置规则)需求1 禁止所有主机访问22端口需求2 禁止IP 访问需求3 禁止允许管理网段的访问封IP生产经验匹配端口范围封堵ICMP匹配网络状态限制指定时间包的允许通过数量及并发数burst 限制 企业防火墙项目各种清零允许自己的网段访问及22端口设置默认规则其他必要操作用其他主机扫描测试永久生效 iptables维护iptables NAT表局域网共享上网IPTABLE配置路由器端口映射IP一对一映射(DMZ)映射多个外网IP上网iptables故障及内核优化

防火墙 防火墙种类 商用防火墙 华为深信服天融信思科金盾 Linux防火墙 iptables祖先:ipfwadm,ipchainsfirewalld:为了改变而改变firewalld和iptables区别 在这里插入图片描述 防火墙应用中的架构位置 有条件的用硬件防火墙,放在企业入口位置。放在旁路位置,服务器的IP地址绑在防火墙上? 学好IPtables的技术栈基础

在这里插入图片描述

Iptables介绍及原理 介绍

是linux自带(C7以前)的开源的一款免费的基于包过滤的防火墙工具; 可以对流入、流出、流经服务的数据包进行精细的控制 IPtables主要工作在OSI七层的二三四层, IPtables也可以支持7层控制(squid代理+iptables),需要重新编译内核(人为的控制7层代理效率非常低。无论是nginx或lvs)

iptables企业常用场景 场景1 做主机防火墙功能(filter表的INPUT链)场景2 局域网共享上网,做网关(nat表的POSTROUTING链),半个路由器,NAT功能:zabra+squid场景3 端口及IP映射(NAT表的PREROUTING链),硬防的NAT功能场景4 实现IP一对一映射(DMZ) iptables工作流程 iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否进入主机一般出站不控制,只控制入站图解如下 图片来源网络,侵删防火墙是一层一层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的如果匹配了上规则,即明确表明是阻止还是允许,此时数据包就不再向下匹配新规则了如果所有规则中都没有明确表明是阻止还是通过这个数据包,继续向下匹配,知道匹配到默认规则得到明确的阻止还是通过防火墙的默认规则是对应链的所有规则执行万以后才执行的 iptables的表和链 iptables官网查询帮助 man iptables 链:对入站、出站、流经起一个称呼,不同的链对应不同的内容表:按照功能区别 包含关系 iptables(用户空间)=》netfilter(内核空间)=》 5个表(tables)=》5个链(chains)=》规则(policy) 5表

常用前两个 filter(主机防火墙),iptables默认的表 nat(端口或IP映射或共享上网) mangle(配置路由标记ttl tos mark)用的很少 raw(忽略,几乎不用) security(新出的,先忽略)

不同的表包含不同的链

filter:INPUT OUTPUT FORWARD NAT:POSTROUTING PREROUTING OUTPUT MANAGEL:INPUT OUTPUT FORWARD POSTROUTING PREROUTING

5链

INPUT 进入主机的数据包 OUTPUT 流出主机的数据包 FORWARD 流经主机的数据包 PREROUTING 进入服务器最先经过的链,NAT端口或IP映射(NAT表的PREROUTING链);在路由之前 POSTROUTING 在流出服务器后经过链,NAT共享上网,局域网共享上网(NAT表的POSTROUTING链);在路由之后

表和链的工作流程图 可把mangle表去掉。简化流程图 在这里插入图片描述 iptables实践(主要在filter表配置规则) 安装前关闭selinux,建议先临时关闭,再用命令修改 #临时关闭 [root@nfs01 ~]$ setenforce 0 #查看 [root@nfs01 ~]$ getenforce 关闭firewalld功能安装iptables #安装服务和命令 [root@nfs01 ~]$ yum install -y iptables-services.x86_64 [root@nfs01 ~]$ rpm -qa | grep iptables* iptables-1.4.21-35.el7.x86_64 iptables-services-1.4.21-35.el7.x86_64 检查内核模块是否支持 [root@nfs01 ~]$ lsmod | egrep "ip|nat|filter" ipt_REJECT 12541 0 nf_reject_ipv4 13373 1 ipt_REJECT nf_conntrack_ipv4 15053 0 nf_defrag_ipv4 12729 1 nf_conntrack_ipv4 nf_conntrack 139264 2 xt_conntrack,nf_conntrack_ipv4 iptable_filter 12810 0 ip_tables 27126 1 iptable_filter

如果内核没有,可执行下述命令在内核加入参数,写入rc.local开机自启

modprobe ip_tables modprobe iptable_filter modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_state 启动 [root@nfs01 ~]$ systemctl enable iptables.service Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service. [root@nfs01 ~]$ systemctl start iptables.service iptables -h 帮助 在这里插入图片描述安装完iptabls会有默认表filter,包含三个链 [root@nfs01 ~]$ iptables -L -n 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 针对默认的filter表,如下操作是临时清0,重启IPTABLES后又会出现 [root@nfs01 ~]$ iptables -X #清除自定义表 [root@nfs01 ~]$ iptables -Z #计数器清0 [root@nfs01 ~]$ iptables -F #规则清0 [root@nfs01 ~]$ 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 需求1 禁止所有主机访问22端口

-t filter 可不加 -p 指定协议,不加默认所有 tcp,udp,icmp -j 对规则的具体处理方法: ACCEPT #允许 DROP #直接丢弃,不予回应 REJECT #拒绝,必要时给数据发送端一个响应信息 SNAT 源地址转换,解决内网用户用同一个公网地址上网的问题 MASQUERADE 是SNAT的一种特殊形式,适用于动态的,临时会变 的Ip上 DNAT 目标地址转换 REDIRECT #在本机做端口映射 –dport/sport :指定目的或源端口 -A 在结尾添加规则

[root@nfs01 ~]$ iptables -t filter -A INPUT -p tcp --dport 22 -j DROP #已断开连接 查看创建的规则 在这里插入图片描述用命令删规则,先查看规则编号,再删除 在这里插入图片描述 需求2 禁止IP 访问

-s 源地址 -I 放在规则第一条位置 建立禁止都用大i。放在头部,如果IP不标记掩码,默认32位,不标记在内网也能用 -i 指定网卡

[root@nfs01 ~]$ iptables -I INPUT -p tcp -s 10.0.61.61 -i eth0 -j DROP #该IP已无法访问 用其他机器远程访问,能登录 在这里插入图片描述查询iptables规则 在这里插入图片描述 需求3 禁止允许管理网段的访问 [root@nfs01 ~]$ iptables -I INPUT -p tcp -s 10.0.61.0/24 -i eth0 -j DROP 加叹号取反,经测试,同网段的主机也不能访问了,只能管理网段访问 [root@nfs01 ~]$ iptables -I INPUT -p tcp ! -s 10.0.61.0/24 -i eth0 -j DROP 封IP生产经验 通过netstat -an ,用awk过 tcp开头的占用状态的IP,如果ip的连接数大于一定值,执行封堵,写入定时任务 匹配端口范围 封堵多个端口,以及删除规则 [root@nfs01 ~]$ iptables -I INPUT -p tcp -m multiport --dport 21,23,24,80 -j DROP [root@nfs01 ~]$ iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 21,23,24,80 DROP tcp -- !10.0.61.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@nfs01 ~]$ iptables -D INPUT -p tcp -m multiport --dport 21,23,24,80 -j DROP [root@nfs01 ~]$ iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- !10.0.61.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 封堵端口范围23到8089端口 [root@nfs01 ~]$ iptables -I INPUT -p tcp --dport 23:8089 -j DROP [root@nfs01 ~]$ iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:23:8089 DROP tcp -- !10.0.61.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 封堵ICMP 首先ping有很多类型,常用的为类型8 [root@nfs01 ~]$ iptables -I INPUT -p icmp --icmp-type 8 -j DROP

在这里插入图片描述

生产经验:允许自己人可ping。 匹配网络状态 -m state --state NEW:已经或将启动新的连接 ESTABLISHED:已建立的连接 RELATERD:正在启动的新连接 INVALID:非法或无法识别 #允许关联的状态包(ftp协议) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j DROP 限制指定时间包的允许通过数量及并发数 -m limit --limit n/{second/mintute/hour} #指定时间内的请求数量为n iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min -j DROP burst 限制 # 在同一时间内允许通过的请求n为数字,不指定默认为5 iptables -I -s 10.0.0.0/24 -p icmp --icmp-type 8 -m -limit --limit 6/in --limit-burst 2 -j ACCEPT 企业防火墙项目 部署主机使用白名单模式,默认拒绝部署网关时使用黑名单模式,默认允许 各种清零 [root@nfs01 ~]$ iptables -X [root@nfs01 ~]$ iptables -F [root@nfs01 ~]$ iptables -Z [root@nfs01 ~]$ 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 允许自己的网段访问及22端口 22端口最好指定源地址 [root@nfs01 ~]$ iptables -A INPUT -s 10.0.61.0/24 -j ACCEPT [root@nfs01 ~]$ iptables -A INPUT -s 10.0.61.61 -p tcp --dport 22 -j ACCEPT 设置默认规则 [root@nfs01 ~]$ iptables -P INPUT DROP [root@nfs01 ~]$ iptables -P FORWARD DROP [root@nfs01 ~]$ iptables -P OUTPUT ACCEPT

查看修改后的规则 在这里插入图片描述

其他必要操作

回环网卡必须允许,不然某些服务起不来

[root@nfs01 ~]$ iptables -A INPUT -i lo -j ACCEPT

关联的网络状态必须允许

[root@nfs01 ~]$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

设置其他允许,如业务端口80、3306,允许内网网段访问,如下设置rpc端口

[root@nfs01 ~]$ iptables -A INPUT -p tcp --dport 111 -j ACCEPT

命令都在内存中生效

用其他主机扫描测试

nfs01属于192.168.3.0网段,用同网段主机nmap扫描

[root@zabbix ~]$ nmap 192.168.3.203 -p 1-1000 Starting Nmap 6.40 ( http://nmap.org ) at 2022-12-09 16:30 CST Nmap scan report for 192.168.3.203 Host is up (0.00032s latency). Not shown: 999 filtered ports PORT STATE SERVICE 111/tcp open rpcbind MAC Address: 00:50:56:BA:4B:FD (VMware) Nmap done: 1 IP address (1 host up) scanned in 5.10 seconds 永久生效

C6

/etc/init.d/iptables save

C7,重启测试,策略依然有,如果不追加文件,是不行的

[root@nfs01 ~]$ iptables-save >/etc/sysconfig/iptables # Generated by iptables-save v1.4.21 on Fri Dec 9 16:36:57 2022 *filter :INPUT DROP [2107:108641] :FORWARD DROP [0:0] :OUTPUT ACCEPT [49:5064] -A INPUT -s 10.0.61.0/24 -j ACCEPT -A INPUT -s 10.0.61.61/32 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT COMMIT # Completed on Fri Dec 9 16:36:57 2022 iptables维护 日常封堵IP,直接编写iptables配置文件,重新加载iptables,注意顺序永久封堵 [root@nfs01 ~]$ cat /etc/sysconfig/iptables # sample configuration for iptables service # you can edit this manually or use system-config-firewall # please do not ask us to add additional ports/services to this default configuration *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -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 [root@nfs01 ~]$ systemctl reload iptables.service

临时封堵,用iptables命令

iptables NAT表 指定表用 -t参数,因为默认的表示filter,所以之前添加策略都没有加该参数 [root@web01 ~]$ iptables -nL -t filter 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 [root@web01 ~]$ iptables -nL -t mangle Chain PREROUTING (policy ACCEPT) target prot opt source destination 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 Chain POSTROUTING (policy ACCEPT) target prot opt source destination

局域网共享上网 准备db02和web02两台服务,用web02做db01的代理上网服务器在db02中开启内核转发 [root@db02 ~]$ tail -n1 /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@db02 ~]$ sysctl -p 关闭db02网卡 在这里插入图片描述 在这里插入图片描述添加默认路由 在这里插入图片描述确保web02能够上网 在这里插入图片描述 开启web02的内核路由转发 [root@web02 ~]$ tail -n1 /etc/sysctl.conf net.ipv4.ip_forward = 1 iptable安装后,默认的所有表链都是允许策略,直接创建转发策略o 出口网卡接口名称j SNAT --to-source 10.0.0.8 #将源地址改写 [root@web02 ~]$ iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.8 [root@web02 ~]$ iptables -nL -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination 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.0.8 在db02上测试,可以上网了 在这里插入图片描述关闭转发,再次测试,不能转发了。测试成功如果外网地址会变化 如拨号上网,使用如下命令也可实现固定ip的NAT上网 iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j MASQUERADE #伪装 IPTABLE配置路由器

在这里插入图片描述

端口映射 将web02的22端口映射到db02的9000端口目前db02的网卡处于down状态,二者已实现共享上网。 [root@web02 ~]$ iptables -t nat -A PREROUTING -d 10.0.0.8 -p tcp --dport 9001 -j DNAT --to-destination 172.16.1.51:22 测试连接,成功 在这里插入图片描述 在这里插入图片描述 IP一对一映射(DMZ)

创建辅助IP 10.0.0.81 在这里插入图片描述

创建IPtables过滤规则,源和目的分别做转换 [root@web02 ~]$ iptables -t nat -I POSTROUTING -s 172.16.1.51 -o eht0 -j SNAT --to-source 10.0.0.51 [root@web02 ~]$ iptables -t nat -I PREROUTING -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51 在windows主机上 模拟外网访问 db02,映射成功。 在这里插入图片描述 在该条件下,关掉web02的网卡模拟内网主机,模拟内网主机访问在网关上创建的虚拟IP。 在这里插入图片描述 在这里插入图片描述 #适合内网的机器访问NAT外网的IP iptables -t nat -I POSTROUTING -s 172.16.1.0/24 -d 10.0.0.81 -j DNAT --t0-destination 172.16.1.51 映射多个外网IP上网

例子 五个子网:10.0.1.0/24。。。。10.0.5.0/24网关均为1

iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.61.16 iptables故障及内核优化 dmesg里显示ip_conntrack table full,droping pachket是什么原因需要对iptables在内核添加优化参数即可 /var/log/dmesg net.nf_conntrack_max =25000000 net.netfilter.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_tcp_timeout_established = 180 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 查看conntrack信息 [root@web02 ~]$ cat /proc/1/net/nf_conntrack ipv4 2 tcp 6 299 ESTABLISHED src=10.0.0.1 dst=10.0.0.8 sport=51980 dport=22 src=10.0.0.8 dst=10.0.0.1 sport=22 dport=51980 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3