当前位置: 首页 > news >正文

IPtables部署和使用

目录

一、IPtables是什么?

二、IPtables企业应用场景

三、IPtables工作流程

四、IPtables环境准备

1.安装IPtables管理命令

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

3.查看已加载的模块

4.启动防火墙

五、IPtables基本操作命令

1.查看防火墙规则

2.清除防火墙规则

3.添加防火墙规则

4.网络连接状态

5.删除某个规则

六、IPtables实践

1.禁止某个端口访问

2.禁止某个IP访问

3.禁止除跳板机以外的IP访问

4.匹配端口范围

5.匹配ICMP类型

七、简单练习

1.封掉10.0.0.7

2.让10.0.0.7和SSH客户端(10.0.0.1)服务器可以Ping,其它的不能Ping

3.封掉3306端口

4.单向访问控制(A可以访问B, 但B不能访问A)

八、IPtables注意事项


一、IPtables是什么?


IPtables是开源的基于数据包过滤的防火墙工具,是CentOS7服务器之前版本的默认防火墙工具。从CentOS7开始默认防火墙工具由Firewalld取代,仍挡不住广大使用者对IPtables的一往情深。


二、IPtables企业应用场景


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


三、IPtables工作流程


IPtables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。

1.防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2.如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
3.如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,则向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4.防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。


四、IPtables环境准备

1.安装IPtables管理命令

[root@base ~]# yum install iptables-services -y

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

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

3.查看已加载的模块

[root@base ~]# lsmod |egrep 'filter|nat|ipt'

4.启动防火墙

#首先停止firewalld,从CentOS7开始默认防火墙已经变成了firewalld
[root@base ~]# systemctl stop firewalld
[root@base ~]# systemctl disable firewalld#开启iptables
[root@base ~]# systemctl start iptables.service
[root@base ~]# systemctl enable iptables.service

五、IPtables基本操作命令

1.查看防火墙规则

[root@base ~]# 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 

2.清除防火墙规则

iptables -F <- 清除所有规则,不会处理默认的规则
iptables -X <- 删除用户自定义的链
iptables -Z <- 链的计数器清零(数据包计数器与数据包字节计数器)

3.添加防火墙规则

iptables -t <-指定表d(efault: `filter')
iptables -A <-把规则添加到指定的链上,默认添加到最后一行。
iptables -I <-插入规则,默认插入到第一行(封IP)。
iptables -D <-删除链上的规则

4.网络连接状态

NEW:已经或将启动新的连接
ESTABLISHED:已建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的

5.删除某个规则

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

六、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

七、简单练习

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

4.单向访问控制(A可以访问B, 但B不能访问A)

iptables -I INPUT -m iprange --src-range 192.168.8.200-192.168.8.254 -m state --state NEW -j DROP -m comment --comment "IDC网络策略隔离"
iptables -I INPUT -m iprange --src-range 192.168.60.200-192.168.60.254 -m state --state NEW -j DROP -m comment --comment "IDC网络策略隔离"


八、IPtables注意事项


1、从上往下依次匹配
2、一但匹配上,就不在往下匹配了
3、默认规则,默认的情况,默认规则是放行所有


-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 :执行动作 放行
iptables A INPUT -p tcp -m state --dport 22 -j DROP禁止一个数据包:
tcp协议
访问的端口是22
iptables -A INPUT -p tcp --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 DROP2条规则冲突,会以谁先谁为准
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 -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.0.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 ACCEPTiptables -nL

共享上网

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61-t nat :NAT表
-A POSTROUTING :POSTROUTING链
-s 172.16.1.0/24 :源地址172.16.1.0/24
-j SNAT :SNAT 改写源地址
–to-source 10.0.0.61 :将源地址改写成10.0.0.61172.16.1.7发给百度的数据包格式
源端口: 80
目的端口: 80
源IP: 172.16.1.7
目的IP: 百度的IP
网关: 172.16.1.61如果172.16.1.7想上网,需要改成如下的包格式10.0.0.61访问百度
源端口: 80
目的端口: 80
源IP: 10.0.0.61
目的IP: 百度的IP
网关: 10.0.0.2

注意:

如果你的默认规则设置了拒绝所有,又执行了清除规则的语句-F,那就意味着,所有的请求全部都拒绝了,原因是-F不会改变默认规则。

[root@base ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destinationChain FORWARD (policy DROP)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination

解决:
1、如果是托管的物理机,那就有的玩了,只能去机房自己清空或者让机房的人重启服务器,前提条件是规则没有写入配置里
2、云服务器则直接通过控制台恢复。

如何避免:
1、测试规则之前,先写个定时任务,每隔5分钟重启一次iptables

FORWARD链默认为DROP的时候共享上网失效
解决方法:

第一种,添加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

端口映射:
访问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

iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22

注意:
改写数据包的目标IP和端口
用到的是PREROUTING链

IP映射:

ip a add 10.0.1.62/24 dev eth0 label eth0:0
iptables -t nat -A PREROUTING -d 10.0.1.62 -j DNAT --to-destination 172.16.1.7

保存命令:

iptables-save
iptables-save > iptables_m01
iptables-restore < iptables_m01
iptables-save > /etc/sysconfig/iptables

相关文章:

  • 基于LangChain的AI助手开发:从零到上线
  • Alist Win 基本用法
  • 强化学习-深度学习和强化学习领域
  • 第十二节:第四部分:集合框架:List系列集合:LinkedList集合的底层原理、特有方法、栈、队列
  • 【C语言】C语言经典小游戏:贪吃蛇(上)
  • 【操作系统·windows快捷键指令】
  • 第二十一章 格式化输出
  • 16.FreeRTOS
  • make_unique
  • 启动metastore时报错MetaException(message:Version information not found in metastore
  • NodeJS全栈WEB3面试题——P7工具链 测试
  • 池中锦鲤的自我修养,聊聊蓄水池算法
  • 代码随想录算法训练营第六天| 242.有效的字母异位词 、 349. 两个数组的交集 、 202. 快乐数 、1. 两数之和
  • 2023年12月6级第一套第一篇
  • 英文投资理财源码挖矿源码投资理财系统源码(源码下载)
  • 线程安全与线程池
  • 审计- 1- 审计概述
  • python打卡训练营打卡记录day43
  • 【存储基础】【VFS】inodedentrysuper_block以及它们之间的关系
  • ER图递归关系画法,chen氏
  • 网站开发图片多打开速度慢/怎样把产品放到网上销售
  • 招聘网站系统怎么做/app平台搭建
  • 如何做竞价网站数据监控/农产品营销方案
  • 农产品网站管理员怎么做/如何创建自己的卡网
  • 做纱窗修水管的一个网站/新闻热点事件2021(最新)
  • 反馈网站怎么做/关键词优化包含