知识的价值不在于占有,而在于使用。这篇文章主要讲述#yyds干货盘点#--Linux下iptables的常用知识点相关的知识,希望能为你提供帮助。
一、iptables防火墙网路安全前言介绍学好iptables的基础:
?OSI7层模型以及不同层对应哪些协议?\\
?TCP/IP三次握手,四次断开的过程,TCP HEADER,状态转换\\
?常用的服务端口要非常清楚了解。\\
?常用服务协议原理http协议,icmp协议。
企业中安全配置原则:
?尽可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射。\\
?并发不是特别大情况有外网IP,可以开启防火墙服务。\\
?大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全。
二、 iptables防火墙概念介绍Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤
的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。
iptables是linux2.4及2.6内核中集成的服务。
iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制
三、 iptables防火墙使用时名词概念理解容器:装东西的器皿,docker容器技术,将镜像装在了一个系统中,这个系统就称为容器\\
iptables称为一个容器---装着防火墙的表\\
防火墙的表又是一个容器---装着防火墙的链\\
防火墙的链也是一个容器---装着防火墙的规则\\
iptables---表---链---规则
规则:防火墙一条一条安全策略
防火墙匹配规则流程:参见防火墙工作流程图
文章图片
- 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
- 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。
- 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,
向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。 - 防火墙的默认规则是所有规则执行完才执行的。
- INPUT对于指定到本地套接字的包,即到达本地防火墙服务器的数据包外面----> (门)房子iptables
- FORWARD路由穿过的数据包,即经过本地防火墙服务器的数据包外面-----(前门)房子(后门)---房子
- OUTPUT本地创建的数据包外面< -----(门)房子iptables
- PREROUTING一进来就对数据包进行改变在路由之前,进行数据包IP地址或端口信息的转换
- OUTPUT本地创建的数据包在路由之前进行改变本地防火墙要出去的流量进行相应转换(了解)
- POSTROUTING在数据包即将出去时改变数据包信息在路由之后,进行数据包IP地址或端口信息的转换
/etc/init.d/iptables start
chkconfig iptables on
iptables -F# 清除防火墙默认规则
iptables -X# 清除防火墙自定义链
iptables -Z#清除防火墙技术器信息
5.2 iptables防护墙信息查看方法
/etc/init.d/iptables status
iptables -L# -L 以列表形式显示所有规则信息
iptables -L -n# -n 以数字形式显示IP地址或端口信息,不要转换为字符串显示
iptables -t nat -L -n# -t 表示指定查看或者配置相应的表
iptables -L -n -v# -v 表示显示详细规则信息,包含匹配计数器数值信息
iptables-L -n --line-number# --line-number 显示规则序号信息
5.3 iptables防火墙端口规则配置:
实践01:阻止用户访问服务器的22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP--- -A 表示添加规则到相应链上,默认表示添加规则到结尾
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP--- -D 表示删除规则从相应链上。
iptables -t filter -D INPUT 规则序号
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP--- -I 表示插入规则到相应链上,默认表示插入规则到首部
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP --- 指定规则插入位置
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP--- -R 指定将配置好的规则信息进行替换
- 总结防火墙参数信息:
- -A--- 表示将规则添加到指定链上
- -I--- 表示将规则插入到指定链上
- -D--- 表示将规则从指定链上删除
- -R--- 表示将规则信息进行修改
- -p--- 指定相应服务协议信息(tcp udp icmp all)
- --dport--- 表示指定目标端口信息
- --sport--- 表示指定源端口号信息
- -j--- 指定对相应匹配规则执行什么操作(ACCEPT DROP* REJECT)
- -A--- 表示将规则添加到指定链上
10.0.0.0/24 -- 22端口(阻止)
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP
- 总结参数信息:
- -s--- 指定匹配的源地址网段信息,或者匹配的主机信息
- -d--- 指定匹配的目标地址网段信息,或者匹配的主机信息
- -i--- 指定匹配的进入流量接口信息 只能配置在INPUT链上
- -o--- 指定匹配的发出流量接口信息 只能配置在OUTPUT链上
- -s--- 指定匹配的源地址网段信息,或者匹配的主机信息
10.0.0.9(只允许)
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
# 通过利用 !进行规则取反,进行策略控制,表示只有10.0.0.9不匹配而往下匹配规则或默认规则,其余地址都匹配
实践04:指定阻止访问多个端口服务
22--80 22,24,25
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP# 匹配连续的端口号访问
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP# 匹配不连续的端口号访问
- 总结参数信息:
- -m--- 指定应用扩展模块参数
- multiport--- 可以匹配多个不连续端口信息
实现ping功能测试链路是否正常,基于icmp协议实现的
icmp协议有多种类型:
icmp-type 8:请求类型icmp-type 0:回复类型
情况一:实现禁止主机访问防火墙服务器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP
情况二:实现禁止防火墙访问主机服务器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j DROP
默认情况:所有icmp类型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP
5.6 、实现防火墙状态机制控制
- NEW: 发送数据包里面控制字段为syn=1,发送第一次握手的数据包
- ESTABLISHED: 请求数据包发出之后,响应回来的数据包称为回复的包
- RELATED: 基于一个连接,然后建立新的连接
- INVALID: 无效的的数据包,数据包结构不符合正常要求的
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
项目:部署一个最安全的企业级防火墙(案例)\\
两种思想:针对默认规则而言。\\
逛公园:黑名单\\
1、默认规则默认是允许的状态。\\
看电影:白名单(更安全,推荐配置)\\
2、默认规则默认是不允许的状态。更安全。\\
看电影的思想更安全。
1)保存防火墙配置文件信息
cp /etc/sysconfig/iptables,.bak
2)清除配置规则
iptables -F<
- 清空iptables所有规则信息(清除filter)
iptables -X<
- 清空iptables自定义链配置(清除filter)
iptables -Z<
- 清空iptables计数器信息(清除filter)
3)别把自己踢出到门外
iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT
4)配置防火墙filter上各个链的默认规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT# -P--- 指定相应链的默认规则策略,是允许还是阻止
5)允许iptables服务端ping自己的网卡地址
iptables -A INPUT -i lo -j ACCEPT--- 让自己可以ping自己
6)指定外网可以访问的端口信息
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
7)企业中内网之间不要配置防火墙策略
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT--- 允许架构内部服务进行访问
8)企业之间有合作关系的,不要将友商的网络禁止(主要经常改动)
iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT--- 允许一些合作企业的外网服务器进行访问
iptables -A INPUT -s 10.0.2.0/24 -j ACCEPT
【#yyds干货盘点#--Linux下iptables的常用知识点】9)如果防火墙上配置了FTP服务,需要配置网络状态机制
iptables -A INPUT-m state --state ESTABLISHED,RELATED -j ACCEPT--- 允许web服务与ftp服务器建立连接
10)实现iptables策略配置永久保存
①. 利用防火墙启动脚本命令参数,实现永久保存
/etc/init.d/iptables save②. 利用防火墙配置信息保存命令,实现永久保存
iptables-save >
/etc/sysconfig/iptables实例拓展:避免自己被踢出门外
01. 去机房重启系统或者登陆服务器删除刚才的禁止规则。
02. 让机房人员重启服务器或者让机房人员拿用户密码登录进去
03. 通过服务器的远程管理卡管理(推荐)
04. 先写一个定时任务,每5分钟就停止防火墙
05. 测试环境测试好,写成脚本,批量执行?以上内容为防火墙filter表的配置实践与原理说明
六、防火墙nat表的配置实践iptables NAT:(配置NAT表示就是配置以下两个链)
- postrouting(内网---外网-NAT源私网IP地址---源公网IP地址)
路由之后,进行地址映射转换,把源地址进行转换(源私网地址==> 源公网地址) - prerouting(外网---内网-NAT目标公网IP地址---目标私网IP地址映射目标端口)
路由之前,进行地址映射转换,把目标地址进行转换(目标公网地址==> 目标变为私网地址)
第一个历程:配置内网服务器,设置网关地址
/etc/init.d/iptables stop--- 内网服务器停止防火墙服务
ifdown eth0--- 模拟关闭内网服务器外网网卡
setup--- 修改内网网卡网关和DNS地址信息
[root@oldboyedu42-lnb-02 ~]# route -n
Kernel IP routing table
DestinationGatewayGenmaskFlags Metric RefUse Iface
172.16.1.00.0.0.0255.255.255.0U000 eth1
169.254.0.00.0.0.0255.255.0.0U100300 eth1
0.0.0.0172.16.1.70.0.0.0UG000 eth1
第二个历程:配置共享上网服务器,开启共享上网服务器路由转发功能
[root@oldboyedu42-lnb-02 ~]# vim /etc/sysctl.conf
[root@oldboyedu42-lnb-02 ~]# sysctl -p
net.ipv4.ip_forward = 1
第三个历程:配置共享上网服务器,实现内网访问外网的NAT映射
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7
# -s 172.16.1.0/24--- 指定将哪些内网网段进行映射转换
# -o eth0--- 指定在共享上网哪个网卡接口上做NAT地址转换
# -j SNAT--- 将源地址进行转换变更
# -j DNAT--- 将目标地址进行转换变更
# --to-source ip地址--- 将源地址映射为什么IP地址
# --to-destination ip地址--- 将目标地址映射为什么IP地址
如果开启:forward默认drop策略,如果配置forward链(让数据包有来有回)
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
以上实例指定映射的外网ip是10.0.0.7,但是一般上网是通过ppoe拨号的方式上网的,公网ip地址不固定怎么办呢
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE# 伪装共享上网,表示公网ip是说明就映射成说明地址
总结:配置映射方法
- 指定哪些网段需要进行映射-s 172.16.1.0/24
- 指定在哪做映射-o eth0
- 用什么方法做映射-j SNAT/DNAT
- 映射成什么地址--to-sourceip地址/--to-destination ip地址
需求:将网关的IP和9000端口映射到内网服务器的22端口\\
端口映射 10.0.0.7:9000 --> 172.16.1.8:22
实现命令:
iptables -t nat -A PREROUTING -d 10.0.0.7-i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22# -d 10.0.0.8目标地址。
# -j DNAT 目的地址改写。
推荐阅读
- 阿里云镜像使用阿里云openssh镜像安装配置SSH服务
- 阿里云镜像配置阿里巴巴开源镜像站镜像——Epel镜像
- docker 搭建neo4j 及迁移
- python学习(通过python实现快速ping)
- #yyds干货盘点# linux 基础命令之echo
- #yyds干货盘点#Linux启动流程和故障排错
- osi七层模型和TCP/IP五层模型TCP三次握手四次挥手TCP和UDP区别 网卡绑定bond0的实现
- #yyds干货盘点# Git 报错(fatal: destination path ‘.‘ already exists and is not an empty directory.)
- #yyds干货盘点#Windows Server之AD域软件分发