赞
踩
目录
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个安全框架"才是真正的防火墙,这个框架的名字叫netflter。netfilter才是防火墙真正的安全框架(framework) ,netflter位于内核空间。iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。netfilter/iptables (下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。 iptables是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流量。当一条网络连接试图在你的系统中建立时,iptables 会查找其对应的匹配规则。如果找不到,iptables将对其采取默认操作。
iptables的结构是由表(tables)组成,而tables是由链组成,链又是由具体的规则组成。因此我们在编写iptables规则时,要先指定表,再指定链。tables的作用是区分不同功能的规则,并且存储这些规则。
1、五张表: filter, nat, manglel (1) filter表:默认表,负责过滤数据包
(2) nat表:用于网络地址转换(IP、端口)
(3) mangle表:主要应用在修改数据包、流量整形、给数据包打标识
(4) raw表:这个表很少被用到,主要用于配置连接跟踪相关内容,使用频率较少
(5) security表:这个表用于安全Linux的防火墙规则,是iptables最近的新增表,使用频率较少
2、五条链:流量的方向 (1 ) input:匹配目标IP是本机的数据包,入站
(2) output:出口数据包,出站
(3) forward:匹配流经本机的数据包,转发
(4) prerouting:修改目的地址,用来做DNAT。如:把内网中的80端口映射到互联网端口
(5) postrouting:修改源地址,用来做SNAT。如:局域网共享一个公网IP接入Internet。
3、规则:基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行、遇到匹配的规则就不在继续向下检查、如果遇到不匹配的规则则会继续向下进行。
netfilter
Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能
位于Linux内核中的包过滤功能体系,称为Linux防火墙的“内核态”
iptables
与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置
位于/sbin/iptables,用来管理防火墙规则的工具
称为Linux防火墙的“用户态”
主要是网络层,针对IP数据包
体现在对包内的IP地址、端口等信息的处理上
CentOS 7之后系统默认使用 Firealld 防火墙,这里如要使用 iptables 需要进行安装并停用 Fireawalld 防火墙
- [root@woniuyang ~]# systemctl stop firewalld
- [root@woniuyang ~]# systemctl disable firewalld
- Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
- Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
- [root@woniuyang ~]# yum -y install iptables iptables-services
-
- systemctl stop firewalld
- firewalld默认在没有设定规则的情况下,是拒绝所有流量
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
规则表之间的顺序:raw→mangle→nat→filter
规则链之间的顺序
入站:PREROUTING→INPUT
出站:OUTPUT→POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
如果没有任何策略,则直接允许
- iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
- 举例:[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT
注意事项
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
ACCEPT:允许通过DROP:直接丢弃,不给出任何回应REJECT:拒绝通过,必要时会给出提示LOG:记录日志信息,然后传给下一条规则继续匹配
管理选项
类别 | 选项 | 用途 |
---|---|---|
添加新的规则 | -A | 在链的末尾追加一条规则 |
-I | 在链的开头(或指定序号)插入一条规则 | |
查看规则列表 | -L | 列出所有的规则条目 |
-n | 以数字形式显示地址、端口等信息 | |
-v | 以更详细的方式显示规则信息 | |
--line-numbers | 查看规则时,显示规则的序号 | |
删除、清空规则 | -D | 删除链内指定序号(或内容)的一条规则 |
-F | 清空所有的规则 | |
设置默认策略 | -P | 为指定的链设置默认规则 |
- #添加新规则
- [root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
- [root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
- [root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
- #查看规则
- [root@localhost ~]# iptables -nL --line-numbers
- Chain INPUT (policy ACCEPT)
- num target prot opt source destination
- 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
- 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
- 3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
- 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
- 5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
- 6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
- Chain FORWARD (policy ACCEPT)
- num target prot opt source destination
- 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
- 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
- 3 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
- Chain OUTPUT (policy ACCEPT)
- num target prot opt source destination
- [root@localhost ~]# iptables -D INPUT 3 #指定序号删除规则
-
- #删除所有规则
- [root@localhost ~]# iptables -F
- [root@localhost ~]# iptables -t nat -F
- [root@localhost ~]# iptables -t mangle -F
- [root@localhost ~]# iptables -t raw -F
- #为指定的链设置默认规则(要么是允许,要么是丢弃)
- [root@localhost ~]# iptables -t filter -P FORWARD DROP
- [root@localhost ~]# iptables -P OUTPUT ACCEPT
匹配条件
类别 | 条件类型 | 用法 | |
---|---|---|---|
通用匹配 | 协议匹配 | -p 协议名 | |
地址匹配 | -s 源地址、-d 目的地址 | ||
接口匹配 | -i 入站网卡、-o 出站网卡 | ||
隐含匹配 | 端口匹配 | —sport 源端口、—dport 目的端口 | |
TCP标记匹配 | —tcp-flags 检查范围 被设置的标记 | ||
ICMP类型匹配 | —icmp-type ICMP类型 | ||
显式匹配 | 多端口匹配 | -m multiport —sports \—dports 端口列表 | |
IP范围匹配 | -m iprange —src-range IP范围 | ||
MAC地址匹配 | -m mac —mac-source MAC地址 | ||
状态匹配 | -m state —state 连接状态 (NEW 新连接、ESTABLISHED 双向传输、RELATED 新连接但前提是有链接、INVAILD 未知链接,一般DROP) |
- # “ ! ” 表示取反
- [root@localhost ~]# iptables -I INPUT -p icmp -j DROP
- [root@localhost ~]# iptables -A FORWARD ! -p icmp -j ACCEPT
- # -s 指定源地址
- [root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
- [root@localhost ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP
- # -i ens37 指定入站网卡
- [root@localhost ~]# iptables -A INPUT -i ens37 -s 192.168.0.0/16 -j DROP
- [root@localhost ~]# iptables -A INPUT -i ens37 -s 10.0.0.0/8 -j DROP
- [root@localhost ~]# iptables -A INPUT -i ens37 -s 172.16.0.0/12 -j DROP
- # --dport 20:21 指定目标端口20和21
- [root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
- [root@localhost ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
- # 指定ICMP类型
- [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
- [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
- [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
- [root@localhost ~]# iptables -A INPUT -p icmp -j DROP
- #指定目的范围端口
- [root@localhost ~]# iptables -P INPUT DROP
- [root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
- [root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
- #指定范围多端口,指定IP范围,指定源MAC
- [root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
- [root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
- [root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
[root@localhost ~]#iptables-save > /etc/sysconfig/iptables
[root@localhost ~]# iptables -I FORWARD -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
三、基本的命令原理
- iptables -nL:将端口号以数字的形式显示默认表filter中的规则
-
- iptables -I INPUT -j DROP:所有入站流量全部丢弃,包括SSH请求(insect插入)
- iptables -I OUTPUT -j DROP:所有出站流量全部丢弃,包括SSH响应
- 上述两条命令一旦执行:所有流量无法进来,所有流量无法出去,断网状态
-
- iptables -A INPUT -j DROP(add添加)
- iptables -A OUTPUT -j DROP
- iptables -I INPUT -p tcp --dport 22 -j ACCEPT:打开目标端口22,接受流经该端口的流量
- iptables -I INPUT -p tcp --dport 80 -j ACCEPT
-
- iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT:打开目标端口22,接受流经该端口的流量
- iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
-
- iptables -I INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT:打开多个端口
-
- 防止DDOS攻击,设定一些数据的限制条件
- iptables -A INPUT -p tcp --dport 80 -m limit --1imit 25/minute --limit-burst 100 -j ACCEPT
-
- iptables -I INPUT -p icmp -j DROP
- iptables -I INPUT -p icmp -j REJECT
- iptables -I OUTPUT -p icmp -j DROP
-
- DRPO:直接丢失数据包,不会向源端做任何回复
- RESECT:拒绝接收数据包,并向源端发送拒绝响应
-
- iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
- iptables -I INPUT -p icmp --icmp-type echo-request -j REECT
- iptables -I OUTPUT 1 -p icmp --icmp-type echo-reply -j DROP
-
- iptables -LINPUT --line-numbers
- iptables -D INPUT 1
-
- #允许本地访问外部IP地址和端口号,通过设定白名单的方式可以防止本机去访问别的服务器
- #通过这种场景的设置,可以最大可能避免反弹she11和挖矿程序去试图通过本地访问目标服务器下载恶意程序或执行恶意指令。
- iptables -I OUTPUT -o ens33 -p tcp -d 192.168.179.1 --dport 8088 -j ACCEPT
- iptables -I INPUT -i ens33 -p tcp -s 192.168.179.1 --sport 8088 -j ACCEPT
-
- #本机端口转发:
- iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 80
-
- #远程端口转发:
- #需要确保端口转发功能是启用的
- vi /etc/sysct1.conf
- net.ipv4.ip_forward = 1
- sysctl -p /etc/sysct1.conf
-
- #PREROUTING上访问8888时,转发给目标服务器和目标端口
- #PREROUTING是先于FILTER执行的,所以不需要转发时允许8888端口ACCEPT
- iptables -t nat -A PREROUTING -d 192.168.179.1 -p tcp --dport 8888 -j DNAT --to-destination 192.168.179.2:8088
- iptables -t nat -A POSTROUTING -d 192.168.112.153 -p tcp --dport 8088 -j SNAT --to 192.168.179.1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。