Iptables加固服务器安全
文章目录
- Iptables加固服务器安全
- 一、信息安全概述系统方面
- 二、信息安全概述网络方面
- 三、信息安全概述Linux防火墙的建议
- 四、Iptables主机型防火墙概述
- 五、Iptables的table&Chain&police(四表五链一堆策略)
- 六、Iptables主机型防火墙规则语法
- 七、Iptables主机型防火墙配置规则示例:(宽进严格出,没有明确的允许皆为拒绝)
- 八、Iptables主机型防火墙规则进阶(条件匹配)
- 九、Iptables网络型防火墙SNAT(源地址网络地址转换)技术
- 十、Iptables网络型防火墙MASQUERADE(地址伪装)技术
- 十一、Iptables网络型防火墙DNAT(目标地址转换)技术
- 十二、Iptables网络型防火墙PNAT(端口映射)技术
一、信息安全概述系统方面
系统安全策略:SSH端口修改、SUDO、禁止ROOT登录
文件指纹:数据安全(加密认证)
Selinux:系统对内的防护,自身程序用于自身文件的访问(文件指纹),修改删除监控
Linux软件防火墙:系统对外的防护
前身:ipfwadm,ipchains
centos6:iptables(服务器自身和网络通信流量控制)
centos7:firewall
二、信息安全概述网络方面
1、网络防火墙
应用安全防火墙
WAF => Web Application Firewall ,可以用来屏蔽常见的网站漏洞攻击,如SQL注入,XML注入、XSS等。一般针对的是应用层而非网络层的入侵,从技术角度应该称之为Web IPS。其防护重点是SQL注入。
网络防火墙(UTM)
思科ASA5550、华为USG6650、启明星辰 天清汉马 USG-2000C
UTM安全设备的定义是指一体化安全设备,它具备的基本功能包括网络防火墙、网络入侵检测/防御和网关防病毒功能,但这几项功能并不一定要同时得到使用,不过它们应该是UTM设备自身固有的功能。
防毒墙
垃圾邮件病毒邮件过滤、国信冠群Yorton-2000应用安全网关 、趋势科技
2、上网安全行为
网康NI3200-50
3、入侵检测
IDS,IPS(网络扫描,网络嗅探)
绿盟,华为,天融信,启明星辰
4、传输安全VPN 虚拟专用网
三、信息安全概述Linux防火墙的建议
关闭Linux自身防火墙。(解决安全问题尽量不给服务器配置外网IP.需要访问的话,就使用代理转发。)因为高并发,iptables会加大延迟。除非并发小,服务器必须处于公网。考虑开启防火墙。
四、Iptables主机型防火墙概述
1、概述:
linux提供了大量的网络服务,FTP,WEB,EMAIL.DB等,保护互联网应用访问。通过linux防火墙,防火墙有:netfilter和iptables可以有效控制进出服务器的流量和流经服务器的流量。今天主要掌握墙的结构,匹配流程和编写规则。
netfilter:内核态,即不以文件和形式存在(kernal space)的防火墙。
iptables:用户态,在/sbin/iptables存在(User space)的防火。操作上二者没有区分
2、Iptabiles工作在TCP/IP2、3、4层模型
linux-iptables主机型防火墙工作在2,3,4层,对TCP/IP数据包进行过滤和限制。属于包过滤型防火墙(无法过滤病毒)。(除非编译内核才可以使iptables支持7层)
3、Iptables防火墙缺点
(1)防火墙虽然可以过滤互联网的数据包,但却无法过滤内部网络的数据包。因此若有人从内部网络攻击时,防火墙没有作用。
(2)电脑本身的操作系统亦可能因一些系统漏洞,使入侵者可以利用这些漏洞绕过防火墙过滤,从而入侵电脑。
(3)防火墙无法有效阻挡病毒攻击,尤其是隐藏在数据中的病毒。
(4)正常状况下,所有互联网的数据包软件都应经过防火墙的过滤,这将造成网络交通的瓶颈。例如在攻击性数据包出现时,攻击者会不时寄出数据包,让防火墙疲于过滤数据包,而使一些合法数据包软件亦无法正常进出防火墙。
PS:没有绝对安全的操作系统,虽然防火墙有这些缺点,但还是能阻挡大多数来自于外网的攻击!
五、Iptables的table&Chain&police(四表五链一堆策略)
1、四个表
filter过滤/nat装换/mangle碾压/raw生的
主要是filter和nat
表像安防小队
2、五个链
PREROUTING预路由
POSTROUTING已路由
INPUT入站
OUTPUT出站
FORWARD转发
主要是INPUT、OUTPUT、POSTROUTING
链像安防小队中的安防员
3、一堆策略
Iptables的防火墙规则
4、Iptables数据包过滤架构图和表链关系结构图
5、表链关系
filter表
INPUT:访问本机的数据包进行过滤
FORWARD:途径本机的数据包进行过过滤
OUTPUT:本机访问互联网的数据包进行过滤
总结:根据规则来处理数据包,如转或者丢。就是实现主机型防火墙的主要表。内核模块 iptable_filter
nat
PREROUTING:修改目的地址
POSTTOUTING:修改源地址
OUTPUT:主要是控制内部
总结:转换地址的表(改IP,改端口。当网关使用的linux。保护内外网流量。内核模块叫iptable_nat)
mangle
PREROUTING,POSTROUTING,INPUIT,OUTPUT,FORWARD
流量整形的表。路由标记用的表。改TOS,TTL,Mark标记策略路由等,内核模块iptables_mangle
raw:PREROUTING,OUTPUT,新表,数据包跟踪 iptables_raw
6、表的应用顺序
raw → mangle → nat → filter
7、链之间的顺序
入站
比如访问自身的web服务流量。先PREROUTING(是否改地址),再INPUT(是否允许)到达程序。
转发
经过linux网关的流量。先PREROUTING(是否改地址),然后路由。转发给FORWARD(转发或者丢弃),最后经过POSTROUTING(看看改不改地址。如NAT)
出站
源自linux自身的流量。先OUTPUT,然后路由。再给POSTROUTING(是否改IP)。
8、规则的应用顺序
ACL(访问控制列表)逐条匹配,匹配即停止。(除了LOG规则)
六、Iptables主机型防火墙规则语法
iptables -t 表名 管理选项 [链名] [匹配条件] [-j 控制类型]
表名:filter(默认)、nat、mangle、raw
管理选项:
添加新的规则
-I:在链的开头(或指定序号)插入一条规则
-A:在链的末尾追加一条规则
查看规则列表
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号(方便之处,通过需要删除规则-D INPUT 1
删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则(-X是清理自定义的链,用的少;-Z清零规则序号)(-F -X -Z连用,删除干净)
设置默认策略
-P:为指定的链设置默认规则
链名:PREROUTING、POSTROUTING、INPUIT、OUTPUT、ORWARD
匹配条件:数据包特征ip,端口等
控制类型:数据包处理方式,ACCEPT允许、REJECT拒绝、DROP丢弃、LOG日志(log不适用匹配即停止,记录后下一条)等
七、Iptables主机型防火墙配置规则示例:(宽进严格出,没有明确的允许皆为拒绝)
链名和控制类型名要用大写,默认的规则优先级最低
同一个表中的同一个链的配置规则中
优先级高的规则放行之后,后面的拒绝规则无效
优先级高的规则拒绝之后,后面的放行规则无效
1、添加和删除禁止自己被ping的规则
[root@iptables ~]# iptables -t filter -I INPUT -p icmp -j REJECT
[root@iptables ~]# iptables -t filter -D INPUT -p icmp -j REJECT
2、第一行添加
[root@iptables ~]# iptables -t filter -I INPUT -p udp -j ACCEPT
3、第二行添加
[root@iptables ~]# iptables -t filter -I INPUT 2 -p icmp -j ACCEPT
4、A最后一行添加
[root@iptables ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
5、以数字形式显示端口、每行显示行号产看规则
[root@iptables ~]# iptables -L -n --line-number
6、通过行号删除规则
[root@iptables ~]# iptables -D INPUT 3
7、清空规则
[root@iptables ~]# iptables -F
[root@iptables ~]# iptables -X
[root@iptables ~]# iptables -Z
8、修改默认规则
[root@iptables ~]# iptables -t filter -P INPUT DROP
[root@iptables ~]# iptables -t filter -P INPUT ACCEPT
八、Iptables主机型防火墙规则进阶(条件匹配)
1、通用匹配(协议、ip地址、网络接口可以独立使用)
协议,不让别人ping自己
[root@iptables ~]# iptables -t filter -I INPUT -p icmp -j DROP
禁止10.11.67.85的主机ping自己(-s)
[root@iptables ~]# iptables -t filter -I INPUT -p icmp -s 10.11.67.85 -j REJECT
禁止10.11.67.0/24的网段ping自己
[root@iptables ~]# iptables -t filter -I INPUT -p icmp -s 10.11.67.0/24 -j REJECT
禁止物理接口eth0的数据包(-i)
[root@iptables ~]# iptables -t filter -I INPUT -i eth0 -j REJECT
2、隐含匹配–sport/–dport(源地址端口和目的地址端口),需要协议的前提
先设置默认拒绝所有,然后放行个别端口
[root@iptables ~]# iptables -t filter -P INPUT DROP
或者先设置默认允许所有,然后拒绝个别端口
[root@iptables ~]# iptables -t filter -P INPUT ACCEPT
端口匹配:允许个别端口,如网站端口,网站访问放行(–dport 80)
[root@iptables ~]# iptables -t filter -I INPUT -s 10.11.67.85 -p tcp --dport 80 -j ACCEPT
端口匹配:10:21表示端口范围,放行FTP(–dport 20:21)
[root@iptables ~]# iptables -t filter -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@iptables ~]# iptables -t filter -I INPUT -p tcp --dport 24500:24600 -j ACCEPT
标记位匹配(TCP连接类型SYN,ACK,RST)(–tcp-flags)
[root@iptables ~]# iptables -t filter -I INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP
ICMP类型匹配(请求8,回应0)(–icmp-type)
自己可以ping别人反过来不可以(input进口禁掉8)
[root@iptables ~]# iptables -t filter -A INPUT -p icmp --icmp-type 8 -j DROP
自己不能ping别人了。别人可以ping自己。。
[root@iptables ~]# iptables -t filter -A INPUT -p icmp --icmp-type 0 -j DROP
拒绝任何ping请求
[root@iptables ~]# iptables -t filter -I INPUT -p icmp -j DROP
3、显示匹配(通过调用模块:lsmod | grep xt_ 来加载内核扩展模块,如端口匹配,IP范围,MAC地址,状态等特殊匹配)
多端口匹配,一次放行多个端口(-m multiport --sports -m multiport --dports)
[root@iptables ~]# iptables -t filter -I INPUT -p tcp -m multiport --dport 18,21,20 -j DROP
IP地址范围匹配,自定义ip地址范围(-m iprange --src-range)
[root@iptables ~]# iptables -t filter -I INPUT -p tcp -m iprange --src-range 10.11.67.2-10.11.67.89 -j ACCEPT
MAC地址匹配,放行一个MAC地址(-m mac --mac-source)
[root@iptables ~]# iptables -t filter -A INPUT -p tcp -m mac --mac-source 00:0c:29:43:38:28 -j ACCEPT
TCP状态匹配,根据iptables跟踪链接状态,来定义链接的3个状态new新,established相应,related已有(-m state --state)
[root@iptables ~]# iptables -t filter -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
4、新的Web服务器的iptables规则示例
IPT="/usr/sbin/iptables"
$IPT --delete-chain
$IPT --flush
$IPT -P INPUT DROP #1
$IPT -P FORWARD DROP#1
$IPT -P OUTPUT DROP #1
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #2
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #3
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT #3
$IPT -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT#3
$IPT -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT #3
$IPT -A INPUT -i lo -j ACCEPT #4
$IPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT#5
$IPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT #5
$IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #6
$IPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT #7
$IPT -A OUTPUT -o lo -j ACCEPT #4
$IPT -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT #8
$IPT -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT #9
$IPT -A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT#10
$IPT -A OUTPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT #10
service iptables save
service iptables restart
存为脚本iptables. sh,执行sh iptables. sh自动配置防火墙。
解释:
#1、设置INPUT,FORWARD,OUTPUT链默认target为DROP,也就是外部与服务器不能通信。
#2、设置当连接状态为RELATED和ESTABLISHED时,允许数据进入服务器。
#3、设置外部客户端连接服务器端口80,22,21,873。
#4、允许内部数据循回。
#5、允许外部ping服务器。
#6、设置状态为RELATED和ESTABLISHED的数据可以从服务器发送到外部。
#7、允许服务器使用外部dns解析域名。
#8、设置服务器连接外部服务器端口80。
#9、允许服务器发送邮件。
#10、允许从服务器ping外部。
iptables保存:iptables-save
iptables还原:iptables-restore
九、Iptables网络型防火墙SNAT(源地址网络地址转换)技术
filter表主要做服务器流量控制。控制别人访问服务器的。
nat表主要做网关路由器的。网络地址转换。SNAT和DNAT
前言:
internet访问,在没有NAT(network address translation)时,外部服务器对内部的私有地址是无法进行路由的。做了SNAT就可以转换地址,进行路由通信。(注意:您的网卡名称不是ens32;注意:您的虚拟网络名称不是VMNET1)
环境:
CENTOS7A:内网客户机:192.168.100.10 ens32 VMnet1 GATEWAY:192.168.100.20
CENTOS7B:网关内网 :192.168.100.20 ens32 VMnet1 GATEWAY:无
CENTOS7B:网关外网 :192.168.200.10 ens33 VMnet2 GATEWAY:无
CENTOS7C:WEB服务器:192.168.200.20 ens32 VMnet2 GATEWAY:192.168.200.10 (WEB 服务器)
原理:
1、配置IP,将同一网段打通。注意配置网关地址
配置网关,就可以进行不同网段的打通
谁带我上网,谁就是我的网关
2、启动CENTOS7B的路由转发功能,后测试内外网互通。成功
echo “net.ipv4.ip_forward = 1” >>/usr/lib/sysctl.d/50-default.conf (重启一下,永久开启)
sysctl -a | grep ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward(临时开启)
3、删除CENTOS7C的网关,模拟私有IP没有路由的情况。尝试通信失败
4、建立SNAT。通信成功
iptables -FXZL(清空一下,分开执行)
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to-source 192.168.200.10
Linux-CentOS7做路由器的Iptables加上这个规则
参数
-t nat NAT表
-A POSTROUTING 追加,已路由链
-s 192.168.100.0/24 源地址
-o ens33 接口33,出方向
-j SNAT 动作:源地址转换
--to-source 192.168.200.10 源地址转成 200.10
通过CENTOS7Cweb主机的访问日志,可以看出来访者。
less /var/log/httpd/access_log
十、Iptables网络型防火墙MASQUERADE(地址伪装)技术
MASQUERADE —— 地址伪装
地址伪装:适用于外网IP地址非固定的情况
因为:对于ADSL拨号连接,接口通常为 ppp0、ppp1
所以:将SNAT规则改为MASQUERADE即可,使动态地址作为SNAT的目标地址。效果同前一个实验
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
参数 -t nat -A POSTROUTING -s 92.168.100.0/24 -o ens33 -j MASQUERADE
十一、Iptables网络型防火墙DNAT(目标地址转换)技术
发布内网服务器,DNAT转换目标地址
①先部署内网服务器。100.10部署成web/ssh
②在网关配置DNAT,外网访问内网测试成功。
iptables -t nat -A PREROUTING -i ens33 -d 192.168.200.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10
参数
-t nat
-A PREROUTING
-i ens33
-d 192.168.200.10
-p tcp --dport 80
-j DNAT
--to-destination 192.168.100.10
十二、Iptables网络型防火墙PNAT(端口映射)技术
DAT端口转换(映射)。安全性更高,比如内网服务器的SSH程序的22号端口。发布时SSH使用2345端口。
演示配置端口映射
iptables -t nat -A PREROUTING -i ens33 -d 192.168.200.10 -p tcp --dport 2345 -j DNAT --to-destination 192.168.100.10:22
参数
-t nat NAT表
-A PREROUTING 预路由链
-i ens33 接口33 ,入方向
-d 192.168.200.10 目的地址 200.10
-p tcp --dport 2346 协议,端口2346
-j DNAT 目标地址转换
--to-destination 192.168.100.10:22 转成目标地址100.10
那么外网访问的时候,就要访问改过的外网地址和端口了。
ssh -p 2345 192.168.200.10