防火墙种类
netfilter
位于Linux内核中的包过滤功能体系
称为Linux防火墙的“内核态”
iptables
位于/sbin/iptables,用来管理防火墙规则的工具
称为防火墙的“用户态”
包过滤的工作层次
主要是网络层,针对IP数据包
体现在对包内的IP地址、端口等信息的处理上(还有tcp、udp)
表、链结构
规则链
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙的规则
链的分类依据:处理数据包的不同时机
默认5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
PREROUTING链:在进行路由选择前处理数据包
POSTROUTING链:在进行路由选择后处理数据包
规则表
作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认4个规则表
raw表:确定是否对该数据包进行状态跟踪
表中包含PREROUTING链、OUTPUT链
要跟踪就必须是自己发出的
mangle表:为数据包设置标记
表中包含五种链
nat表:修改数据包中的源、目标IP地址或端口
表中包含PREROUTING链、POSTROUTING链、OUTPUT链
filter表:确定是否放行该数据包(过滤)
表中包含INPUT链、FORWARD链、OUTPUT链
数据包控制的匹配流程
规则表之间的顺序
raw→mangle→nat→filter
规则链之间的顺序
入站:PREROUTING→INPUT
出站:OUTPUT→POSTROUTING、
转发:PREROUTING→FORWARD→POSTROUTING
规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略除外)
若找不到相匹配的规则,则按该链的默认策略处理
编写防火墙规则
基本语法、控制类型
语法构成:iptables 【-t 表名】 选项 【链名】 【条件】【-j 控制类型】
示例:iptables -t filter -I INPUT -p icmp -j REJECT
控制类型:ACCEPT:允许通过
DROP:直接丢弃,不回应任何(拒绝一般用DROP)
REJECT:拒绝通过,必要时给出提示
LOG:记录日志信息,然后传给下一条规则链继续匹配,不对数据包进行控制
注意: 不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
添加、查看、删除规则
添加新规则(选项名)
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序列号)插入一条规则
示例:iptables -I INPUT 2 -p icmp -j ACCEPT
删除、清空规则
-D:删除链内的指定序列号的规则
示例:iptables -D INPUT 10
-F:清空所有规则
示例:iptables -F
查看
iptables -L -n --line-number -v
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-number:查看规则时,显示规则的序号
设置默认策略(ACCEPT、DROP)
-P:为指定的链设定默认规则
示例:iptables -t filter -P DROP
注意
修改后虽然实时生效,但必须save,不然重启后消失(进配置选项修改后不用save)
规则的匹配条件
通用匹配: 可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口
常见的通用匹配条件
协议匹配:-p 协议名
地址匹配:-s 源地、-d目的地址(可以192.168.8.0/24指定网段)
接口匹配:-i入站网卡(接eth0)、-o出站网卡
示例
iptables -A INPUT -s 192.168.8.252 -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.8.0/24 -p icmp -j ACCEPT
iptables -I INPUT -i eth0 -p icmp -j DROP
隐含匹配 要求以特定的协议匹配为前提
端口匹配
--sport 源端口
--dport 目的端口
TCP标记匹配:
--tcp-flags 检查范围,被设置的标记
ICMP类型匹配:
--icmp-type ICMP类型(百度有哪些类型)
--icmp-type类型: 8 icmp请求 0 icmp回显 3 不可达
示例
iptables -I INPUT -s 192.168.8.122 -p tcp --dport 22 -j ACCEPT(先设置此协议,防止后面不能远程登录服务器)
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
显示匹配 要求以-m扩展模块的形式明确指出类型
多端口匹配:-m multiport --sport/–dport (加不加S??)
示例:iptables -I INPUT -m multiport -p tcp --dports 80,443 -j REJECT
IP范围:-m IPrange --src-range
MAC范围:-m mac --mac-source mac地址
示例:iptables -I INPUT -m mac --mac-source mac地址 -p icmp -j DROP
数据包状态匹配:-m state --state 连接状态
示例:iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
附
!:取反
-p协议:TCP、UDP、ICMP
ICMP:Internet Control Message Protocol,控制报文协议是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
iptables -L -n --line-number -v查询时
pkts:匹配了多少包
bytes:总共多少字节
policy:默认策略,只要DROP和ACCEPT
HTTP协议:默认80端口的TCP连接
保存防火墙规则:service iptables save(也可以把修改写入配置文件)
两种地址转换
SNAT
应用环境: 局域网主机共享单个公网IP地址接入internet
原理: 源地址转换,修改数据包的源地址
前提条件 局域网各主机正确设置IP地址/子网掩码
局域网各主机正确设置默认网关地址
Linux网关支持IP路由转发
实现方法
编写SNAT转换规则
固定公网IP时
iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth0 -j SNAT --to-source 192.168.18.66
eth0是外网接口名称、POSTROUTING表示路由选择后再处理
不固定公网IP(如家庭的公网Ip,几小时会自动更换一次)
iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth0 -j MASQUERADE
MASQUERADE表示复用公网IP,当时是多少就映射为多少
编写配置文件/etc/sysctl
net.ipv4.ip_forward = 1
保存退出后 sysctl -p (让配置起作用)
验证(访问的httpd服务)
cat /var/log/httpd/access_log
DNAT
目的地址转换
实现: iptables -t nat -A PREROUTING -i eth0 -d 192.168.8.122 -p tcp --dport 80 -j DNAT --to-destination 192.168.18.66
端口转换: 在转换成的ip后加 :端口号
规则的备份
备份:iptables-save > /路径
示例:iptables-save > /iptables.txt
还原:iptables-restore < /路径
附
服务脚本路径:/etc/init.d/iptables
规则配置文件路径:/etc/sysconfig/iptables
转载:https://blog.csdn.net/weixin_45562700/article/details/101301151