Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux iptables防火墙

Linux中的iptables防火墙

作者:活老鬼

iptables防火墙由netfilter和iptables组成,其中netfilter是内核态的数据包过滤系统,iptables是用户态的防火墙管理程序,iptables包含raw、mangle、nat和filter四个规则表,以及INPUT、OUTPUT、FORWARD、PREROUTING和POSTROUTING五个规则链

一、iptables概述

iptables防火墙是Linux系统防火墙的一种,实际上由两个组件netfilter和iptables组成。

netfilters与iptables的关系:

netfilter/iptables后期简称为iptables。iptables是基于内核的防护墙,其中内置了raw、mangle、nat、filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

二、规则表与规则链结构(四表五链)

1.简述

总结:表中有链,链中有规则。

2.四表(规则表)

数据包到达防火墙时,数据表之间的优先顺序:

raw -> mangle -> nat -> filter

3.五链(规则链)

三、数据链过滤的匹配流程

四、iptables命令行配置方法

1.命令格式

iptables -t "表名" "管理选项" "链名" "匹配条件" -j "控制类型"

常用管理选项
常用选项解释
-A--apend 在指定表的末尾追加新规则
-I--insert 在指定链的开头插入一条新规则,不指定序号时默认在开头插入新规则
-R--replace 修改、替换指定链中某一条的规则,可指定序号或具体内容
-P--policy 设置指定链的默认策略
-D--delete 删除指定链中的某一条规则
-F--flush 清空指定链中的所有规则,若为指定链名,则清空表中所有链
-L--list 列出指定链中的所有规则,若为指定链名,则列出表中所有链
-n--numeric 使用数字形式输出结果,如显示IP地址而不是主机名
-v显示详细信息,包括每条规则的匹配包数量和匹配字节数
--line-numbers查看规则时,显示序号
常用的控制类型
常用控制类型解释
ACCEPT允许数据包通过
DROP直接丢弃数据包,不给出任何回应信息
REJECT拒绝数据包通过,会给数据发送端一个响应信息
SNAT修改数据包的源地址
DNAT修改数据包的目的地址
REDIRECT重定向改变目的端口,将接受的包转发至本机的不同端口
MASQUERADE伪装成一个非固定公网IP地址
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

2.基本匹配条件

基本匹配条件解释
-p指定协议
-s指定源地址
-d指定目的地址
-i指定入站网卡
-o指定出站网卡

3.隐含匹配

需以特定的协议匹配作为前提。

3.1.端口匹配

匹配条件解释
--sport源端口
--dport目的端口

例:

iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

ps:--sport 和 --dport 必须配合-p "协议类型"使用

3.2 TCP标志位匹配

标志位解释
SYN同步位
ACK确认位
FIN结束位
RST重置位
URG紧急位
PSH推送位

例:

iptables -I INPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT

拒绝来自22端口的SYN之外的tcp包(只接收SYN包)

3.2 ICMP类型匹配

类型代码解释
Echo-Reques8请求
Echo-Reply0回显
Destination-Unreachable3目标不可达

例:

iptables -A INPUT -p icmp --icmp-type 8 -j -DROP
#禁止其他主机ping本机

3.3 显示匹配

要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件。

3.3.1 多端口匹配:

-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表

例:

iptables -A INPUT -p tcp -m multiport --dport 80,22,21 -j ACCEPT

3.3.2 IP范围匹配:

-m iprange --src-range 源ip范围
-m iprange --dst-range 目的ip范围

例:

iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-19.2169.80.200

3.3.3 mac地址匹配

-m mace --mace-source "mac地址"

3.3.4 状态匹配

-m state --state "连接状态"
常见的状态连接解释
NEW与任何连接无关的,还没开始连接
ESTABLISHED响应请求或者已建立连接的,连接态
RELATED与已有连接有相关性的,衍生态,一般与ESTABLISHED 配合使用
INVALID无效的封包,例如数据破损的封包状态

例:

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

五、SNAT与DNAT

均需网关开启IP路由转发:

临时打开 echo 1 > /proc/sys/net/ipv4/ip_forward 或 sysctl -w net.ipv4.ip_forward=1

永久打开:

vim /etc/sysctl.conf

....
net.ipv4.ip_forward=1    #将此行写入配置文件


sysctl -p    #载入配置

1.SNAT

SNAT用于在网络中修改数据包的源地址。

SNAT转换前提条件:

iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1-12.0.0.10

2.DNAT

DNAT用于在网络中修改数据包的目的地址,通常是为了保护内网服务器的安全。

DNAT转换前提条件:

iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文