IPTables防火墙介绍
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个安全框架"才是真正的防火墙,这个框架的名字叫netfiter。netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
五张表:filter,nat,mangle,raw,security
表主要用于将不同的规则储存在不同表中
(1) filter表:默认表,负责过滤数据包,使用频率最高
(2) nat表:用于网络地址转换(IP、端口)和流量转发
(3) mangle表:主要应用在修改数据包、流量整形、给数据包打标识
(4) raw表:这个表很少被用到,主要用于配置连接跟踪相关内容
(5) security表:这个表用于安全Linux的防火墙规则,是iptables最近的新增表
五条链:
流量方向
(1) INPUT:处理入站数据包
(2) OUTPUT:处理出站数据包
(3) FORWARD:处理转发数据包
(4) PREROUTING:在进行路由选择后处理数据包,用来做DNAT
(5) POSTROUTING:在进行路由选择前处理数据包,用来做SNAT
规则:
基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行、遇到匹配的规则就不在继续向下检查、如果遇到不匹配的规则则会继续向下进行。
包过滤原理:
主要是网络层,针对IP数据包,体现在对包内的IP地址,端口等信息的处理上
匹配流程:
1)表间的优先顺序
raw–>mangle–>nat–>filter
2)链间的优先顺序
入站数据:PREROUTING–>INPUT
出站数据:OUTPUT–>POSTROUTING
转发数据:PREROUTING–>FORWARD–>POSTROUTING
注意:
1)如果没有任何策略,则直接允许
2)不指定表时,默认filter表
3)不指定链名时,默认指表内所有链
4)除非设置链的默认策略,否则必须指定匹配条件
5)选项、链名、控制类型使用大写字母,其余均为小写字母
6)规则写在 /etc/sysconfig/iptables 文件中
安装与配置IPTables
CentOS-7默认启动的是firewalld防火墙,启动iptables时需要停止firewalld防火墙
停止firewalld防火墙
systemctl stop firewalld
安装iptables防火墙
yum install -y iptables iptables-services
启动iptables
systemctl start iptables
IPTables使用方法
格式
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
例:
iptables -t filter -A INPUT -p icmp -j ACCEPT
查看命令
选项 | 作用 |
-L | 列出所有的规则条目 |
-n | 以数字形式显示地址、端口等信息 |
-v | 以更详细的方式显示规则信息 |
--line-numbers | 查看规则时,显示规则序号 |
例:
常用命令
有序号的查看规则
iptables -nL --line-numbers
常见操作命令
选项 | 作用 |
-A | 后面添加规则 |
-I num | 插入,把当前规则插入为第num条(默认在最前面,也可以在某条规则的前面添加) |
-D num | 删除,删除链内第num条的一条规则 |
-F | 清空iptables默认表的所有规则 |
-P | 设置默认策略 |
例:
指定序号删除
iptables -D INPUT 3
常见匹配条件
类别 | 条件类型 | 用法 |
通用匹配 | 协议匹配 | -p 协议名 |
地址匹配 | -s 源地址、-d 目的地址 | |
接口匹配 | -i 入站网卡、-o 出站网卡 | |
隐含匹配 | 端口匹配 | -sport 源端口、-dport 目的端口 |
TCP标记匹配 | -tcp-flags 检查范围被设置的标记 | |
ICMP类型匹配 | -icmp-type ICMP类型 | |
显示匹配 | 多端口匹配 | -m multiport --端口匹配(--sport/--dport) |
IP范围匹配 | -m iprange --src-range IP范围 | |
MAC地址匹配 | -m mac -- mac-source MAC地址 | |
状态匹配 | -m state --state连接状态(NEW 新连接、ESTABLISHED双向传输、RELATED 新连接但前提是有链接、INVAILD未知链接,—般DROP) |
常见控制类型
类型 | 作用 |
ACCEPT | 允许通过 |
DROP | 直接丢弃,不给出任何回应 |
REJECT | 拒绝通过,必要时会给出提示 |
LOG | 记录日志信息,然后传给下一条规则继续匹配 |
永久性保存修改的规则
service iptables save
注意:不保存关机会清空规则
注意:源端口和目的端口的关系
例:
假设我的服务器地址为192.168.1.1,ikun的IP为12.34.56.78,端口为8088,给自己的服务器配置
出站:
iptables -I OUTPUT -o ens33 -p tcp -d 12.34.56.78 --dport 8088 -j ACCEPT
入站:
iptables -I INPUT -i ens33 -p tcp -s 12.34.56.78 --sport 8088 -j ACCEPT
同时设定多个端口入站
iptables -A INPUT -i ens33 -p tcp -s 12.34.56.78 -m multiport --sport 80,22,443,3306 -j ACCEPT
指定IP范围入站
iptables -A INPUT -i ens33 -p tcp -m iprange --src-range 12.34.56.78-12.34.56.89 -j ACCEPT
状态连接
对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
ICMP类型匹配
代码8表示请求,代码0表式回显
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
指定源MAC匹配
iptables -A INPUT -m mac-source 00-50-56-C0-00-02 -j DROP
TCP标记匹配
丢弃SYN请求包,放行其他包
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
IPTables NAT策略和地址伪装
注意:地址转发和地址伪装需要开启IPv4转发,并允许转发
开启转发:
echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
允许转发:
iptables -I FORWARD -p tcp -j ACCEPT
SNAT
源地址转换,Source Network Address Translation,典型应用环境(局域网主机共享单个公网IP地址接入Internet)
例:
将192.168.1.0/24网段转换成78.94.56.12出去
iptables -t nat -A POSTROUTING -p tcp -o ens33 -s 192.168.1.0/24 -j SNAT --to-source 78.94.56.12
MASQUERADE
地址伪装
1)适用于外网IP地址非固定的情况
3)对于ADSL拨号连接,接通常为ppp0、ppp1
2)将SNAT规则改为MASQUERADE即可
例:
将192.168.1.0/24网段进行地址伪装
iptables -t nat -A POSTROUTING -o ens33 -p tcp -s 192.168.1.0/24 -j MASQUERADE
DNAT
目标地址转换,Destination Network Address Translation,典型应用环境(在Internet中发布位于企业局域网内的服务器)
例:
访问79.94.56.12的8888端口时,转发给192.168.1.1的8088端口
iptables -t nat -A PREROUTING -p tcp -i ens33 -d 78.94.56.12 --dport 8888 -j DNAT --to-destination 192.168.1.1:8088
如有错误欢迎指出,最后感谢杨老师的教导