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)](#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管理命令

bash 复制代码
[root@base ~]# yum install iptables-services -y

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

bash 复制代码
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

3.查看已加载的模块

bash 复制代码
[root@base ~]# lsmod |egrep 'filter|nat|ipt'

4.启动防火墙

bash 复制代码
#首先停止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.查看防火墙规则

bash 复制代码
[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.清除防火墙规则

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

3.添加防火墙规则

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

4.网络连接状态

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

5.删除某个规则

bash 复制代码
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.禁止某个端口访问

bash 复制代码
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访问

bash 复制代码
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访问

bash 复制代码
iptables -I INPUT -p tcp ! -s 10.0.0.1 -j DROP

4.匹配端口范围

bash 复制代码
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类型

bash 复制代码
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

bash 复制代码
iptables -I INPUT -s 10.0.0.7 -j DROP

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

bash 复制代码
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端口

bash 复制代码
iptables -I INPUT -p tcp --dport 3306 -j DROP

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

bash 复制代码
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、默认规则,默认的情况,默认规则是放行所有


bash 复制代码
-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 :执行动作 放行
bash 复制代码
iptables A INPUT -p tcp -m state --dport 22 -j DROP

禁止一个数据包:
tcp协议
访问的端口是22
bash 复制代码
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 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

安全策略:
一种是广场上巡逻的人,默认认为大家都是安全的,只有通缉令上的人需要关注
一种是火车进站安检,默认所有人都是不安全的,只有有票的人才放行

bash 复制代码
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 ACCEPT

iptables -nL

共享上网

bash 复制代码
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.61

172.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不会改变默认规则。

bash 复制代码
[root@base ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

解决:

1、如果是托管的物理机,那就有的玩了,只能去机房自己清空或者让机房的人重启服务器,前提条件是规则没有写入配置里

2、云服务器则直接通过控制台恢复。

如何避免:

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

FORWARD链默认为DROP的时候共享上网失效

解决方法:

第一种,添加2条规则

bash 复制代码
iptables -A FORWARD -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -d 172.16.1.0/24 -j ACCEPT

第二种:修改FORWARD链默认规则为ACCEPT

bash 复制代码
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

bash 复制代码
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映射:

bash 复制代码
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

保存命令:

bash 复制代码
iptables-save
iptables-save > iptables_m01
iptables-restore < iptables_m01
iptables-save > /etc/sysconfig/iptables
相关推荐
天天摸鱼的java工程师3 分钟前
凌晨四点,掘金签到 bug 现场抓包,开发同学速来认领!
服务器·前端·后端
conkl10 分钟前
Kali Linux 安全工具解析
linux·网络·安全·kali
链上Sniper13 分钟前
智能合约安全漏洞解析:从 Reentrancy 到 Integer Overflow
开发语言·网络·架构·区块链·php·智能合约
JAVA和人工智能31 分钟前
linux 安装 canal 的详细步骤
linux·运维·服务器
小格子衬衫1 小时前
系统巡检常见工作
网络·安全·web安全
小艺E1 小时前
联通专线赋能,亿林网络裸金属服务器:中小企业 IT 架构升级优选方案
服务器·网络·架构
风筝超冷1 小时前
通过模型文件估算模型参数量大小
linux·服务器
deeper_wind1 小时前
防火墙设置实战操作案例(小白的“升级打怪”成长之路)
linux·运维·网络
huangyuchi.1 小时前
【Linux】自动化构建-Make/Makefile
linux·运维·服务器·笔记·自动化·makefile·make
suzhou_speeder1 小时前
网络交换机:构建高效、安全、灵活局域网的基石
网络·安全·交换机·poe·poe交换机