文章目录

  • 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