五十一、IPtables

1、IT安全问题

随着互联网IT技术飞速发展,安全概念非常重要。IT 安全主要体现在硬件层面、软件层面、系统层面和网络层面

硬件层面:
进出机房,设置门禁、指纹识别、来访登记、具体操作的事项;
防止静电、监控机房温度、电子监控、空调安全运行的情况;
电力安全保障、UPS+服务器双电源、灭火器、消防设备;
接地线、防水、防地震、机房异地灾备、机柜加固、防雷。

软件层面:
软件服务的BUG、是否存在漏洞;
软件服务的安全、权限设置、对外进程、端口;
软件服务是否携带病毒、木马,定时检查;
WEB页面防止篡改、数据库对外权限、执行的SQL;
防止人为误操作、误删除、定期备份软件服务等。

系统层面:
Linux内核版本是否稳定、BUG、漏洞;
远程连接端口、SSHD服务、端口和服务;
登录用户名、密码安全、授权访问的IP地址;
启动文件、误操作、误删除、备份核心文件。

网络层面:
硬件设备、防火墙、交换机、路由器设备的安全;
ARP欺骗、攻击、冒充局域网网关;
DDOS攻击、大的流量访问;
过滤请求包、数据包协议、开放的策略。

2、安全防护策略

系统层面:
定期升级Linux内核版本,尽量使用稳定版本,及时给系统打补丁;
尽量不使用root用户登录,启用普通用户+sudo配置提权;
定期修改服务器远程登录用户名、密码,密码复杂度足够复杂;
引入系统级别的防火墙,关闭不必要的服务、端口、进程、设置安全策略;
引入杀毒软件,木马拦截工具、定期扫描服务器系统的安全;
编写运维服务器管理流程、规范运维人员命令、配置,防止误操作、删除;
7x24小时x365监控服务器系统CPU、MEM、DISK、NET、I/O使用情况;
引入Selinux系统级别的安全防护,限制某个软件、进程、目录访问权限;
定期备份操作系统重要配置文件、WEB代码、数据库、启动文件、任务计划。

软件层面:
尽量使用普通用户运行软件服务,不建议使用root;
定期更新软件服务的版本,尽量使用稳定版本,及时打补丁;
尽可能隐藏软件服务的版本号,替换软件服务的名称;
保障软件服务之间的依赖库稳定、保障其兼容性、稳定性;
授予用户访问软件服务的权限、r、w、x权限,尽量设置最小的权限。

3、Iptables

3.1 简介

Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。Iptables主要工作在OSI七层的二、三、四层。
Iptables 是Linux 内核集成的 IP 信息包过滤系统。如果Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然Netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。Netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
Iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。

3.2 IPtables表与链功能

Iptables的规则链分为三种:输入、转发和输出。
输入——这条链用来过滤目的地址是本机的连接。例如,如果一个用户试图使用SSH登陆到你的PC/服务器,iptables会首先匹配其IP地址和端口到iptables的输入链规则。
转发——这条链用来过滤目的地址和源地址都不是本机的连接。例如,路由器收到的绝大数数据均需要转发给其它主机。如果你的系统没有开启类似于路由器的功能,如NATing,你就不需要使用这条链。
输出——这条链用来过滤源地址是本机的连接。例如,当你尝试ping www.baidu.com时,iptables会检查输出链中与ping和www.baidu.com相关的规则,然后决定允许还是拒绝你的连接请求。

注意:当ping一台外部主机时,看上去好像只是输出链在起作用,其实外部主机返回的数据要经过输入链的过滤。当配置iptables规则时,需牢记许多协议都需要双向通信,所以需要同时配置输入链和输出链。在配置SSH的时候通常会忘记在输入链和输出链都配置它。

3.3 IPtables数据包流程

在这里插入图片描述
数据包先经过PREOUTING,由该链确定数据包走向:
目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①—>②;
若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①—>③—>④—>⑥;
主机发送数据包时,流程则是⑤—>⑥;
其中PREROUTING和POSTROUTING指的是数据包的流向,如上图所示POSTROUTING指的是发往公网的数据包,而PREROUTING指的是来自公网的数据包。
在这里插入图片描述

3.4 IPtables 四张表五条链

在这里插入图片描述
企业中常用到filter表和nat表

Filter表:
IPtables 的默认表,因此如果没有自定义表,那么就默认使用filter表,它具有以下三种内建链,
INPUT链 – 处理来自外部的数据;
OUTPUT链 – 处理向外发送的数据;
FORWARD链 – 将数据转发到本机的其他网卡设备上。

Nat表:
NAT (网络地址转换) 技术在平时是很多见的,如家庭中在使用路由器共享上网时,一般用的就是 NAT 技术,它可以实现众多内网 IP 共享一个公网 IP 上网。NAT 的原理,简单的说就是当内网主机访问外网时,内网主机的数据包要通过路由器,路由器将数据包中的源内网 IP 地址改为路由器上的公网 IP 地址,同时记录下该数据包的消息;外网服务器响应这次由内而外发出的请求或数据交换时,外网服务器发出的数据包经过路由器,原本是路由器的公网 IP 地址被路由器改为内网 IP 。
SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT 。NAT表有三种内建链,
PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT链 – 处理本机产生的数据包。

3.5 IPtables 命令

在这里插入图片描述
命令

-A 顺序添加,添加一条新规则
-I 插入,插入一条新规则 -I 后面加一数字表示插入到哪行
-R 修改, 删除一条新规则 -D 后面加一数字表示删除哪行
-D 删除,删除一条新规则 -D 后面加一数字表示删除哪行
-N   新建一个链
-X   删除一个自定义链,删除之前要保证次链是空的,而且没有被引用
-L 查看
 @1.iptables -L -n 以数字的方式显示
 @2. iptables -L -v显示详细信息
 @3. iptables -L -x 显示精确信息
-E   重命名链
-F 清空链中的所有规则
-Z   清除链中使用的规则
-P 设置默认规则

匹配条件

隐含匹配:
-p  tcp udp icmp
   --sport指定源端口
   --dport指定目标端
-s 源地址
-d 目的地址
-i 数据包进入的网卡
-o 数据包出口的网卡
扩展匹配:
-m state --state   匹配状态
-m multiport --source-port   端口匹配 ,指定一组端口
-m limit --limit 3/minute   每三分钟一次
-m limit --limit-burst  5   只匹配5个数据包
-m string --string --algo bm|kmp --string"xxxx"  匹配字符串
-mtime --timestart 8:00 --timestop 12:00  表示从哪个时间到哪个时间段
-mtime --days    表示哪天
-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq   表示匹配腾讯qq的,当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 这个显示扩展匹配

动作

-j
DROP 直接丢掉
ACCEPT 允许通过
REJECT 丢掉,但是回复信息
LOG --log-prefix"说明信息,自己随便定义" ,记录日志
SNAT       源地址转换
DNAT       目标地址转换
REDIRECT   重定向
MASQUERAED  地址伪装
保存iptables规则
service iptables save
# 重启iptables服务
service iptables stop
service iptables start

3.6 解析

[root@localhost ~]# yum install -y iptables*
[root@localhost ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Sat Apr 18 10:23:11 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [163:114112]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sat Apr 18 10:23:11 2020

:INPUT ACCEPT [0:0] #该规则表示INPUT表默认策略是ACCEPT ([ 0:0 ]里记录的是通过该规则的数据包和字节总数。)

:FORWARD ACCEPT [0:0] #该规则表示FORWARD表默认策略是ACCEPT。

:OUTPUT ACCEPT [163:114112] #该规则表示OUTPUT表默认策略是ACCEPT。

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#允许进入的数据包只能是刚刚发出去的数据包的回应,ESTABLISHED:已建立的链接状态,RELATED:该数据包与本机发出的数据包有关。

-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
#允许本地环回接口在INPUT表的所有数据通信,-i 参数是指定接口,接口是lo,lo就是Loopback(本地环回接口)。

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。

3.7 实例

# 开启80端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# INPUT设置成DROP的时候允许icmp包通过,也就是允许ping
[root@localhost ~]# iptables -A INPUT -p icmp -j ACCEPT

# 将本机10.0.0.150的8080端口转发至其他主机,目标主机IP和端口:10.0.0.149:80,开启iptables forward转发功能
[root@localhost ~]# iptables -t nat -A PREROUTING -d 10.0.0.150/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.0.0.149:80
[root@localhost ~]# iptables -t nat -A POSTROUTING -d 10.0.0.149/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 10.0.0.150
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

# 同时开启多个端口
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,22 -j ACCEPT

注意:以上添加都是添加到内存中,机器重启后就会失效,如何进行持久化?

# 添加完之后可以先进行查看
[root@localhost ~]# iptables -L -n --line-numbers
# 持久化
[root@localhost ~]# iptables-save >/etc/sysconfig/iptables

当然,也可以直接编辑iptables配置
[root@localhost ~]#vim /etc/sysconfig/iptables
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值