iptables服务
➤前述:
linux 系统的防火墙:IP信息包过滤系统,它实际上由两个组件netfulter和iptables组成主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口等信息的处理
➤netfilter/iptables的关系
➤netfilter:属于"内核态" 的防火墙功能体系,是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。
➤iptables:属于"用户态"的防火墙功能体系,是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录
➤netfilter/iptables 后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw,mangle,nat和filter 四个规则表,表中所有规则配置后,立即生效,不需要重启服务
➤四表五链
➤四表:
raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT PREROUTING
mangle表:修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT.OUTPUT.FORWARD.PREROUTINGPOS.TROUTING
nat表:负责网络地址转换,用来修改数据源包中的源、目标IP地址或端口。包含三个规则链,OUTPUT.PREROUTINGPOS.TROUTING
filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT.FORWARD.OUTPUT
➤五链
INPUT链——处理入站数据包,匹配目标IP为本机的数据包
OUTPUT链——处理出站数据包,一般不在此链上做配置
FORWARD链——转发数据包时匹配流经本机的数据包
PREROUTING链——在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT,相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上
POSTROUTING链——在进行路由选择后处理数据包,用来修改源地址,用来做SNAT,相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网
➤总结:表里有链,链里有规则
规则表的作用:容纳各种规则链
规则链的作用:容纳各种防火墙规则
在iptable 的四个规则标准,mangle表和raw表的应用相对较少
➤数据包到达防火墙时,规则表之间的优先顺序:
raw > mangle > nat > filter
➤规则链之间的配置顺序
➤主机型防火墙
入站数据(来自外界的数据包,且目标地址是防火墙本机):PREROUTING>INPUT>本机的应用程序
出站数据(从防火墙本机向外部地址发送的数据包):本机的应用程序>OUTPUT>POSTROUTING
➤网络型防火墙
转发数据(需要经过防火墙转发的数据包):PREROUTING>FORWARD>POSTROUTING
➤规则链内的匹配顺序:
自上向下按顺序依次进行检查,找到匹相配的规则即停止<LOG策略例外,表示记录相关日志>
若在该链内找不到相匹配的规则,则按该链默认策略处理(未修改的状况下,默认策略未允许)
➤ iptables 命令行配置方法
➤iptables的安装
centos7默认使用firewalld防火墙,没有安装iptables. 需要关闭firewalld.
systemctl stop firewalld
systemctl disable firewalld.service
yum -y install iptables iptables-services
systemctl start iptables
➤命令格式:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
➤参数说明
不指定表名时,默认指filter表
不指定链名时,默认指定表内所有链
除非设置链的默认策略,否则必须指定匹配条件
控制类型使用大写字母,其余均为小写
常用的管理选项:
-A: 在指定链的末尾追加一条新的规则
-I: 在指定链的开头中插入一条新的规则
-R: 修改替换指定链中的某一条规则
-P: 设置指定链的默认策略
-D: 删除指定链的策略
-F: 清空指定链的所有策略
-L: 列出指定链中所有规则
-j: 执行目标
-p: 协议
-n: 使用数字形式显示输出结果[如显示IP地址而不是主机名]
-v: 显示详细信息,包括每条规则的匹配包数量和匹配字节数
--line-numbers: 查看规则时,显示规则的序号
常用的控制类型:
ACCEPT:允许数据包通过
DROP: 直接丢弃数据包
REJECT: 拒绝数据包通过
DNAT :修改数据包的目的地址
SNAT :修改数据包的源地址
MASQUERADE :伪装成一个非固定公网IP地址
LOG: 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
►实例
►查看规则列表
iptables [-t 表名] -n -L [链名] [--line-numbers]
iptables -[vn]L #不能写成-Ln
iptables -n -L --line-numbers
►添加新的规则
iptables -t filter -A INPUT -p icmp -j REJECT
如不指定表则默认时filter表
#禁止ping通 ,过滤入站所有icmp的数据包,就是不让icmp协议的数据包通过
iptables -I INPUT -p tcp --dport 22 -j DROP
拒绝TCP的22的目的端口
登陆本机查看结果
►在第二行增加一条规则
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
►删除第一条规则[从下网上删]
iptables -D INPUT 1
iptables -D INPUT -p icmp -j REJECT
若规则列表中有多余相同的规则,按内容匹配只删除的序列号最小的
►设置默认策略
iptables [-t 表名] -P <链名> <控制类型>
iptables -P INPUT DROP
►清空规则
iptables [-t 表名] -F [链名]
iptables -F INPUT
1.-F仅仅是清空链中的规则,并不影响-P设置的默认规则,默认规则需要是手进行修改
2.-P设置了DROP后,使用-F一定要注意,推荐先增加一条放通22
3.如果不写表名和链名,默认清空filter表中所有链里的所有规则
➤规则的匹配条件
1.通用匹配
可直接使用,不依赖于其他的条件按或扩展,包括网络协议、IP地址、网络接口等条件
协议匹配 -p 协议名
地址匹配 -s 源地址、-d 目的地址
接口匹配 -i 入站网卡、-o 出站网卡
iptables -A FORWARD ! -p icmp -j ACCEPT #除了icmp协议,其他所有都可以转发
iptables -A INPUT -s 192.168.78.22 -j DROP #来自192.168.78.22 的入站数据包直接丢弃
iptables -I INPUT -i ens33 -s 192.168.78.0/24 -j DROP #来自192.168.78.0网段的网卡的入站数据包直接丢弃
2.隐含匹配
要求以特定的协议匹配作为前提[包括端口、TCP标记、ICMP类型等条件]
端口匹配:–sport 源端口 --dport目的端口
--sport 100 指定
--sport 100:200 指定100~200
--sport :100 100以下
--sport 100: 100以上
iptables -A INPUT -p tcp --dport 1:5 -j ACCEPT #行尾添加入站数据包类型为tcp协议前往端口1到5的数据可以通过
- TCP标记匹配
--tcp-flags TCP标记
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT #插入一条入站网卡为tcp数据包标记为 syn,rst,ack中的 syn数据可以通过
- ICMP类型匹配
--icmp-type ICMP类型[可以是字符串及数字代码]
Echo-Request[请求] 代码为8
Echo-Reply[回显] 代码为0
Destination-Unreachable[目标不可达] 代码为3
iptables -A INPUT -p icmp -j REJECT
iptables -I INPUT -p icmp --icmp-type 8 -j DROP # 禁止其他主机Ping 本机
iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT #允许本机Ping 其他主机
iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT #当本机ping不通其他主机显示不可达
server1:
server2:
- 显示匹配
要求以-m模块模式的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
多端口匹配
-m multiport --sport 源端口列表
-m mulitiport --dport 目的端口列表
注意:
ftp : 20(数据端口) 21(控制端口)
ssh :22
DNS: 53
apache-tomcat:8080
iptables -A INPUT -p tcp -m multiport --dport 8080,22,21,20 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
6.IP范围匹配
-m iprange --src-range IP范围
iptables -A FORWARD -p udp -m iprange --src-range 192.168.xxx.xxx-192.168.xxx.xxx -j DROP
iptables -A FORWARD -p udp -m iprange --dst-range 192.168.1.xxx-192.168.1.xxx -j DROP
7.MAC地址匹配
-m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
8.状态匹配
-m state --state 连接状态
常见的连接状态
NEW 与任何连接无关的,还没开始连接
ESTABLISHED 响应请求或者已创建连接的
RELATED 衍生的已有连接
INVALID 不能被识别属于哪个连接或没有任何状态
iptables -A FORWARD -m state --state ESTABLISHED;RELATED -p -tcp ! --syn -j DROP