文章目录
- Linux 防火墙IPTables的 表、链、规则基础
- IPTABLES 表概念
- Iptables五种链的概念
- Iptables中表和链的关系
- IPTABLES 规则
- 对Iptables防火墙的一些简单操作
- 对Iptables防火墙规则的查看方法
- 修改iptables规则的方法
- 添加iptables则的步骤如下
Linux 防火墙IPTables的 表、链、规则基础
iptables 包含多个表,表包含多个链(链可以是内置的或用户定义的),一种链又可以存放在不同的表中,链中可能包含多个规则(规则是为数据包定义的),四表五链。所以,iptables有这几个概念 , Tables、Chains、Rules。
IPTABLES 表概念
IPTables 有以下 4 个内置表。
filter表:负责过滤数据包。
nat表:用于网络地址转换。
mangle表:修改数据包中的内容,例如服务类型、TTL、QOS等等。
raw表:决定数据包是否被状态跟踪机制处理。
Iptables五种链的概念
Iptables有五种不同的链,分别是INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
INPUT:从外界进入防火墙的数据包会应用此规则链中的策略。
OUTPUT:当前服务器从防火墙外出的数据表会应用此规则链中的策略。
FORWARD:转发数据包时会应用此规则链中的策略。
PREROUTING:主机外的报文要进入防火墙,所有的数据包进来的时候都会由PREROUTING链进行处理。
POSTROUTING:主机内的报文要从防火墙出去,需要经过POSTROUTING链进行处理。
Iptables中表和链的关系
raw | mangle | nat | filter | |
INPUT | + | + | + | |
OUTPUT | + | + | + | + |
FORWARD | + | + | ||
PREROUTING | + | + | + | |
POSTROUTING | + | + |
IPTABLES 规则
以下是 iptables 规则要记住的要点。
- 规则包含一个标准和一个目标。
- 如果条件匹配,则转到目标中指定的规则(或)执行目标中提到的特殊值。
- 如果条件不匹配,则继续执行下一条规则。
对Iptables防火墙的一些简单操作
systemctl list-unit-files |grep iptables #查看是否安装了iptables防火墙
systemctl status iptables #查看防火墙状态
启动iptables服务
systemctl start iptables
重启iptables服务
systemctl restart iptables
service iptables restart
关闭iptables防火墙
service iptables stop
systemctl stop iptables
开机启动防火墙
chkconfig iptables on #开机启动iptables
开机不启动防火墙
chkconfig iptables off #永久关闭iptables
查看或清除规则
iptables -F #清除现有规则
iptables -t 表名 -F 链名 #清空规则F
对Iptables防火墙规则的查看方法
如果您执行 iptables --list (或) iptables -L,您将看到系统上所有可用的防火墙规则。如果防火墙没有开启,显示默认输入表,带有默认输入链、前向链和输出链。
[root@MiWiFi-R4AC-srv ~]# iptables -t filter --list #执行该操作以查看filter表
[root@MiWiFi-R4AC-srv ~]# iptables -t mangle --list #执行该操作以查看mangle表
[root@MiWiFi-R4AC-srv ~]# iptables -t nat --list #执行该操作以查看nat表
[root@MiWiFi-R4AC-srv ~]# iptables -t raw --list #执行该操作以查看raw表
注意:如果不指定 -t 选项,它将显示默认过滤器表。因此,以下两个命令是相同的
iptables -t filter --list
(or)
iptables --list
下面的 iptable 示例显示了在过滤表的输入、转发和输出链中定义了一些规则。
iptables --list
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
iptables --list 命令输出中的规则包含以下字段:
- num - 特定链中的规则编号
- target – 我们上面讨论的特殊目标变量
- prot - 协议。tcp、udp、icmp等,
- opt –该特定规则的特殊选项
- source – 数据包的源 IP 地址
- destination-目的地 - 数据包的目的地 IP 地址
修改iptables规则的方法
iptables操作的一些参数
选项 | 用法 |
-A | 在指定链路末尾追加一条规则,如:iptables-A INPUT(操作) |
-I(大写) | 在指定链中的头部加入一条规则,如:iptables -I INPUT (操作) |
-P(大写) | 指定默认规则,如:iptables -P OUTPUT ACCEPT(操作) |
-D | 删除指定规则 iptables -t nat -D INPUT (操作) |
-R | 修改、替换一条规则 iptables -t nat -R INPUT()操作) |
-L | 查看 iptables-tnat-L(查看) |
-n | 有字段以数字形式显示,如: iptables -L -n,iptables -nL,iptables -vnL (查看) |
-v | 查看时显示更详细信息 |
–line-number | 规则带编号,如: iptables -t nat -L -n --line-number /iptables -t nat -L–line-number |
-F | 清除链中所有规则 iptables -F |
-X | 清空自定义链的规则,不影响其它链 iptables -X |
-Z | 清空链的计数器(匹配到的数据包的大小和总和) iptables -Z |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 iptables -t nat -S,iptables -t nat -S POSTROUTING 1 |
-j | ACCEPT/DROP/REJECT |
-m iprange --src-range | IP范围匹配: -m iprange --src-range IP范围 |
-m mac --mac-source | MAC地址匹配: -m mac --mac-source MAC地址 |
-I num | 在规则链的头部加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外 |
-d | 匹配目标地址 |
-i | 网卡名称匹配从这块网卡流入的数据 |
-o | 网卡名称匹配从这块网卡流出的数据 |
-p | 匹配协议,如TCP、UDP、ICMP |
–dport num | 匹配目标端口号 |
–sport num | 匹配来源端口号 |
目标值列表
控制类型 | 作用 |
ACCEPT | 允许数据包通过accret |
DROP | 直接丢弃数据包,不给出任何回应消息dorp |
REJECT | 拒绝数据包通过,会给数据发送端一个响应信息reject |
SNAT | 源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射。 |
DNAT | 修改数据包的目的地址 |
MASQUERADE | 伪装成一个非固定公网IP地址masquerand |
LOG | 在/var/log/messages中记录日志信息,然后将数据包传递给下一条规则log |
添加iptables则的步骤如下
命令行操作:
(1)使用命令"iptables-L"查看现有的链;
(2)使用命令"iptables-A [chain_name]-p [protocol] --dport[destination_port]-j ACCEPT"添加新规则;
例如:iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
(3)使用命令"iptables-L"确认添加的规则生效;
(4)使用命令"iptables-S"保存规则;
(5)重启iptables务,使添加的规则永久有效
修改配置文件操作:
/etc/sysconfig/iptables
实例:修改3080端口tcp协议转发的命令
echo "1" > /proc/sys/net/ipv4/ip_forward #启用IPV4转发
iptables -F -t filter #清空filter表,以防止本来有规则影响后面的操作
iptables -F -t nat #清空nat表,以防止本来有规则影响后面的操作
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3080 -j DNAT --to-destination IP1:3080 #修改nat表的PREROUTING连3080端口的目的地址为IP1:3080
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 3080 -j SNAT --to-source IP2 #修改nat表POSTROUTING连3080端口原地址为IP2
service iptables save #保存修改
service iptables restart #重启服务使之生效
实例:设置固定网段的可以访问22端口
[root@linux ~]# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT #将INPUT规则链设置为只允许指定网段的主机访问本机的22端口
[root@linux ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT 将INPUT规则链设置为只允许指定网段的主机访问本机的22端口
实例:向INPUT规则链中添加拒绝192.168.10.5主机访问本机80端口(Web服务)的策略规则:
[root@linux ~] # iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT