防火墙iptables介绍
firewalld:防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘
对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测,
对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬件,也可以是软件):
- 主机防火墙
- 网络防火墙
功能(也叫表)
filter:过滤,防火墙 nat:network address translation,网络地址转换 mangle:拆分报文,做出修改,在封装起来 raw:关闭nat表上启用的连接追踪功能
链(内置):
PREROUTING INPUT FORWARD OUTPUT POSTROUTING
数据报文的流向
流入:PREROUTING --> INPUT 流出:OUTPUT --> POSTROUTING 转发:PREROUTING --> FORWARD --> POSTROUTING
各功能可以在哪些链上实现
filter: INPUT,FORWARD,OUTPUT nat:PREROUTING(DNAT),OUTPUT,INPUT,POSTROUTING(SNAT) mangle: PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING raw:PREROUTING,OUTPUT
iptables使用详解
iptables的使用格式如上图所示
table
-t后面跟上你要操作的表
如果不使用-t默认操作的是filter表
-t:指定表名(默认是对filter表进行操作) 有如下四种: -t filter -t nat -t mangle -t raw
command
即需要执行的命令常用命令操作有-A,-I, -D,-F,-L
-A:追加新规则 -D:删除指定的规则 -I:首部或者指定的位置插入新规则 -F:清空规则 -Z:清空计数器 -P:修改默认规则 -N:自定义一条链 -X:删除自定义的链 -E:修改自定义链的名字 -L;列举出iptables中所配置的规则 -n:如果不用n选项,那么系统会将协议反解为协议名称,这个过程很慢,该选择的作用是就用来实现禁止反解为名称 --line:在行首显示规则编号 -v:显示详细信息(通常用来看计数器) 注意: 规则中的表名、链名要区分大小写
chain
即链,需要指出对哪个表中的哪个链进行操作
表名为小写,链名为大写,严格区分大小写
有如下五种: INPUT OUTPUT FORWARD PREROUTING POTROUTING
parameter
即参数,分为通用匹配和扩展匹配
扩展匹配又分为隐式匹配和显示匹配
通用匹配 扩展匹配 隐式扩展 显式扩展
target
即目标动作
ACCEPT: 请求被运行,数据包可以通过 DROP: 认定是一个非法请求,将数包悄悄的丢弃 REJECT: 认定是一个非法请求,禁止数据包同行的(带有通知机制) LOG: 将这次客户端的请求记录到日志中 MARK: 标记一个连接 SNAT: 把数据包中的源地址部分替换为指定的IP DNAT: 修改数据包中的目的IP
iptables简单常用的操作
1. 设置默认规则
[root@ken ~]# iptables -P INPUT DROP #设置INPUT链默认规则设置为DROP [root@ken ~]# iptables -P INPUT ACCEPT #设置INPUT链默认规则设置为ACCEPT [root@ken ~]# iptables -P OUTPUT DROP #设置OUTPUT链默认规则设置为DROP,如果OUTPUT链开启DROP,相应组合后可防范反弹式木马 [root@ken ~]# iptables -P OUTPUT ACCEPT #设置OUTPUT链默认规则设置为ACCEPT
2.清空规则
[root@ken ~]# iptables -t filter -F #清空filter表规则 [root@ken ~]# iptables -t nat -F #清空nat表规则 [root@ken ~]# iptables -t mangle -F #清空mangle表规则 [root@ken ~]# iptables -t raw -F #清空raw表规则
3. 查看规则链
[root@ken ~]# iptables -L -n --line -v
iptables通用匹配
-s:指定源ip -d:指定目标ip -i:指定进入数据包所经过网卡名称 -o:指定发出数据包所经过网卡名称
1. 指定仅能10.220.5.138可以ping(访问)本机
root@ken ~]# iptables -A INPUT -s 10.220.5.138 -j ACCEPT
2.允许所有进入10.220.5.138的流量
[root@ken ~]# iptables -A INPUT -d 10.220.5.138 -j ACCEPT
3.允许从eth0进入的流量
[root@ken ~]# iptables -A INPUT -i eth0 -j ACCEPT
iptables扩展匹配之隐式匹配
隐式匹配使用-p后面加上协议名称
-p tcp/udp/icmp
1.对于icmp协议的隐式匹配
格式:
-p icmp --icmp-type
ping数据包协议是icmp协议
type
0:应答包
8:请求包
1.可以从10.220.5.1 ping 其他主机,禁止其他主机ping 10.220.5.1
[root@ken ~]# iptables -I INPUT -p icmp --icmp-type 0 -d 10.220.5.1 -j ACCEPT [root@ken ~]# iptables -I INPUT -p icmp --icmp-type 8 -s 10.220.5.1 -j ACCEPT
2.对于tcp协议的隐式扩展
-p tcp 选项
选项:
--sport:源端口
--dport:目标端口
--tcp-flags list1 list2:根据tcp包中的标志位进行匹配
--syn:syn为1,ack,fin都为0,即三次握手的第一次
1.让所有主机可以访问10.220.5.1上的网站,但是禁止10.220.5.191访问网站
[root@ken ~]# iptables -A INPUT -p tcp --dport 80 -d 10.220.5.1 -j ACCEPT [root@ken ~]# iptables -I INPUT -p tcp --dport 80 -s 10.220.5.191 -j DROP
2.只允许从10.220.5.182发送连接httpd请求
[root@ken ~]# iptables -I INPUT -p tcp -s 10.220.5.182 --tcp-flags syn,ack,fin syn -j ACCEPT
3. 对于udp协议的隐式扩展
-p udp --sport|--dport
用的不多。略
iptables扩展匹配之显示匹配
注意:用显式扩展的时候,必须指定扩展功能所依赖模块的名称
指定: -m 扩展名称 --options-xxx
显示扩展1:state
作用:根据nv_conntrack的记录来对连接进行规则匹配,是根据连接记录中的状态信息做匹配
状态:
NEW:表示新的连接请求(syn=1 ack=0 fin=0)
三次握手的第一次
ping请求的第一包
udp通信的第一个包
ESTABLISHED:连接建立完成状态下所传递的数据包(syn=0 ack=1 fin=0)
INVALID:非法连接
RELATED:相关联的连接
1.让所有人都可以访问web站点
[root@ken ~]# iptables -A INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT [root@ken ~]# iptables -A OUTPUT -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT
显示扩展2:multiport
作用:对连续或者离散的端口做匹配
选型:
--sports port[,port|,port:port]...
--dports port[,port|,port:port]...
--ports port[,port|,port:port]...
例子:
--sport 80,22,3306 逗号表示离散
--sport 80:1024 冒号表示连续
--sport 80,22,23:1024 离散和连续的可以写在一起
1.允许让10.220.5.182访问本机的80 22 443 3389 3306端口
[root@ken ~]# iptables -I INPUT -p tcp -s 10.220.5.182 -m multiport --dports 80,22,443,3389,3306 -j ACCEPT
显示扩展3:iprange
作用:用于对ip地址的范围做匹配
选项
--src-range
--dst-range
1. 10.220.5.1~10.220.5.100无法访问web
[root@ken ~]# iptables -I INPUT -p tcp --dport 80 -m iprange --src-range 10.220.5.1-10.220.5.100 -j DROP
显示扩展4:limit
作用:限速
--limit rate[/second|/minute|/hour|/day]:指示每分钟/限制最大连接数为
--limit-burst number:指示当总连接数超过xx时,启动 litmit/minute 限制
1.实现每分钟可以发送10个ping包,峰值是7
[root@ken ~]# iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 7 -j ACCEPT
2.防暴力破解。限制登录22端口的请求的频率(限制1小时只能尝试登录ssh5次)
[root@ken ~]# iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/hour --limit-burst 5 -j ACCEPT
显示扩展5:connlimit
作用:限制一个客户端可以同时与当前主机建立几个链接
[!] --connlimit-above n
1. 限制每个IP可以同时登录5个ssh
[root@ken ~]# iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j DROP [root@ken ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT