iptables安全加固
主机型
用户态,在/sbin/iptables存在(user iptables)的防火墙,是用户看得见能操作的。
linux-iptables主机型防火墙工作在2,3,4层,对TCP/IP数据包进行过滤和限制。属于包过滤型防火墙。(除非编译内核才可以使iptables支持7层)
缺点
1.无法过滤内部网络的数据包。因此若有人从内部网络攻击时,防火墙没有作用。
2.电脑本身的操作系统亦可能因一些系统漏洞,使入侵者可以利用这些漏洞绕过防火墙过滤,从而入侵电脑。
3.防火墙无法有效阻挡病毒攻击,尤其是隐藏在数据中的病毒。
4.正常状况下,所有互联网的数据包软件都应经过防火墙的过滤,这将造成网络交通的瓶颈。例如在攻击性数据包出现时,攻击者会不时寄出数据包,让防火墙疲于过滤数据包,而使一些合法数据包软件亦无法正常进出防火墙。
PS:没有绝对安全的操作系统,虽然防火墙有这些缺点,但还是能阻挡大多数来自于外网的攻击!
表&链
四个表
filter过滤 nat装换 mangle碾压 raw不追踪
五个链
PREROUTING预路由
POSTROUTING已路由
INPUT入站
OUTPUT出站
FORWARD转发
架构图
关系图
表链关系
1.filter表
INPUT 访问本机的数据包进行过滤
FORWARD 途径本机的数据包进行过过滤
OUTPUT 本机访问互联网的数据包进行过滤
总结:根据规则来处理数据包,如转或者丢。就是实现主机型防火墙的主要表。内核模块 iptable_filter
2.nat表
PREROUTING 修改目的地址
POSTTOUTING 修改源地址
OUTPUT 主要是控制内部
总结:转换地址的表(改IP,改端口。当网关使用的linux。保护内外网流量。内核模块叫iptable_nat)
3.mangle表
PREROUTING,POSTROUTING,INPUIT,OUTPUT,FORWARD
流量整形的表。路由标记用的表。改TOS,TTL,Mark标记策略路由等,
内核模块iptables_mangle
4.raw表
PREROUTING,OUTPUT
新表,数据包跟踪 iptables_raw
表的应用顺序
raw > mangle > nat > filter
链之间的顺序
入站:
比如访问自身的web服务流量。
先PREROUTING(是否改地址),再INPUT(是否允许)到达程序。
转发:
经过linux网关的流量。
先PREROUTING(是否改地址),然后路由。转发给FORWARD(转发或者丢弃),最后经过POSTROUTING(看看改不改地址。如NAT)
出站:
源自linux自身的流量。
先OUTPUT,然后路由。再给POSTROUTING(是否改IP)。
规则的应用顺序
ACL逐条匹配,匹配即停止。(除了LOG规则)
进来一条流量,从第一条规则开始匹配。又进来一条规则,还是从第一条规则开始匹配。
编写防火墙规则
基本语法
iptables -t 表名 管理选项 [链名] [匹配条件] [-j 控制类型]
-t 表名 :每个表都可用,不写默认fliter表。
管理选项 :操作方式如插入,删除,查看等。
链名 :PREROUTING,POSTROUTING,INPUIT,OUTPUT,FORWARD
匹配条件 :数据包特征IP,端口,协议等。
控制类型 :数据包处理方式,ACCEPT允许,REJECT拒绝,DROP丢弃,
LOG日志(LOG不适用匹配即停止,记录后下一条)等。
添加新规则
-I:在链的开头(或指定序号)插入一条规则
-A:在练的末尾追加一条规则
iptables -I INPUT -p udp -j ACCEPT
#添加到第一行
iptables -I INPUT 2 -p icmp -j ACCEPT
#(插入到第2行)第二行
iptables -t filter -A INPUT -p tcp -j ACCEPT
#添加到最后一行
查看规则列表
-L:列出所有的规则条目
-n:以数字形式显示地址,端口信息
-v:以更详细的方式显示规则信息
iptables-save:完整列出防火墙的规则
--line-numbers:查看规则时,显示规则的序号(可以通过'-D INPUT 2'按序号删除规则)
iptables -L -n #查看
删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
-X:清理自定义的链
-Z:清零规则序号
iptables -D INPUT 3 #删除第三行
iptables -F #全清空(改不了默认)
设置默认策略
-P:为指定的链设置默认规则
iptables -t filter -P INPUT ACCEPT
#配入站链为允许(默认同意)
iptables -t filter -P INPUT DROP
#配入站为不理会(不知道为啥配置不了拒绝REJECT)
规则的匹配条件
1、协议&地址&物理接口
iptables -I INPUT -s 192.168.122.1 -j REJECT
-s 192.168.122.1 : 指定地址
-s 192.168.122.0/24 : 指定地址段
-i ens33 : 指定网卡
2、隐含匹配–sport/–dport,需要协议的前提
iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
#允许22和23端口进
-p tcp: 指定tcp协议
-p tcp --dport 20:25 :指定一片端口
-p tcp --sport 80 :指定端口
dport :目的端口
sport :来源端口
iptables -I INPUT -i eth0 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP
#tcp连接状态为 SYN,RST,ACK SYN 的包丢弃
-p tcp --tcp-flags SYN,RST :匹配指定TCP标记
SYN( 同步; 表示开始会话请求 ), ACK(应答),
FIN(结束; 结束会话),RST(复位;中断一个连接)
PSH(推送; 数据包立即发送),URG(紧急 ),
ALL(指选定所有的标记),NONE(指未选定任何标记)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
#允许ping别人,不允许别ping自己
-p icmp --icmp-type 8为ping
命令请求信号,ping别人可以,反之不行
-p icmp --icmp-type 0为ping
命令响应信号,不能ping别人,别人可以ping自己
3.显示匹配(通过调用模块:lsmod | grep xt_ 来加载内核扩展模块,如端口匹配,IP范围,MAC地址,状态等特殊匹配)
多端口匹配
iptables -A INPUT -p tcp -m multiport --dport 80,20,21 -j DROP
-m multiport --dports 目的端口
-m multiport --sports 来源端口
#一次放行多个端口。更加自由
IP范围匹配
iptables -I INPUT -p tcp -m iprange --src-range 192.168.100.21-192.168.100.28 -j ACCEPT
-m iprange --src-range
#自定义IP范围
MAC地址匹配
iptables -I INPUT -m mac --mac-source 00:0C:29:64:E3:8D -j ACCEPT
-m mac --mac-source
#放一个MAC地址进来
TCP状态匹配
# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -P INPUT DROP
-m state --state
#根据iptables跟踪链接状态,来定义链接的3个状态new新,established相应,related已有
网络型
将iptables作为路由使用
开启路由装发功能:
echo "net.ipv4.ip_forward = 1">>/usr/lib/sysctl.d/50-default.conf (重启一下)
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -a | grep ip_forward
SNAT(源地址转换)
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to-source 192.168.200.10
-t nat :NAT表
-A POSTROUTING :追加,已路由链
-s 192.168.100.0/24 :源地址
-o ens33 :接口33,出方向
-j SNAT :动作:源地址转换
--to-source 192.168.200.10 :源地址转成200.10
#将100网段已路由(要出去)的地址转换为200.10并从ens33出去
目的:内网访问外网,并得到数据
条件:外网地址已知
缺点:外网无法访问内网
MASQUERADE(地址伪装)
外网地址是什么就伪装成什么
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
-t nat
-A POSTROUTING
-s 192.168.100.0/24
-o ens33
-j MASQUERADE
目的:内网上外网
条件:外网地址不固定
缺点:外网无法访问内网
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 :目标地址转换为
目的:使外网能访问内网——发布内网服务器
#外网访问路由器网关,由于路由器配了DNAT,所以目标地址转换为了路由规则所配置的内网地址
PNAT(端口映射)
P=port :端口
内网地址在映射到外网时换一个端口
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
目的:外网访问内网时还要添加指定端口,安全性提高
缺点:不便捷