iptables的使用

iptables 是 Linux 系统中用于配置和管理防火墙规则的核心工具。它允许用户定义、修改和查看数据包过滤规则,从而控制网络流量的进出。通过 iptables,用户可以设置允许或阻止特定 IP 地址、端口或协议的通信,实现网络安全策略的灵活管理。其规则链包括 INPUT,OUTPUT 和 FORWARD,分别用于处理进入、离开和转发的数据包。iptables 功能强大,是 Linux 系统网络安全的重要组成部分。

一.iptables表和链的数量

1.早期2.4 - Linux的内核版本仅支持3个表:filter,nat,mangle,这是常见的说法

2.现代版本2.6 -Linux的内核版本新增了raw,security,capture,route表,理论上总共有七个表,但最后两个,capture,route表极为少用,一般说为五表五链。但有人因为security表功能较少使用,一般也有人统称四表五链。

3.数据包进入通过五表的顺序(rwa,mangle,nat,filter,security)

二.五表五链的结构

filter 表

这是使用最为频繁的表,主要用于过滤数据包,默认的表。它包含以下三个链:

  • INPUT 链:处理目标地址为本机的入站数据包,用于决定是否允许特定的入站流量到达本机的服务或应用程序。比如可设置规则允许来自特定 IP 地址段的 SSH 连接请求进入本机。

  • OUTPUT 链:处理从本机发出的出站数据包,能控制本机向外发送的流量。例如可限制本机某些程序连接外部特定 IP 或端口。

  • FORWARD 链:当本机充当路由器时,处理需要转发的数据包,决定是否将数据包从一个网络接口转发到另一个网络接口。比如在企业网络中,通过该链规则允许或禁止内部子网间的流量转发。

nat 表

用于网络地址转换(NAT),包括源地址转换(SNAT)和目的地址转换(DNAT)。它包含以下三个链:

  • PREROUTING 链:在进行路由选择之前处理数据包,常用于目的地址转换(DNAT)。比如将外部对服务器公网 IP 的特定端口访问映射到内部服务器的相应端口。

  • POSTROUTING 链:在进行路由选择之后处理数据包,常用于源地址转换(SNAT)。比如在家庭网络中,让内网多台设备共用一个公网 IP 访问互联网。

  • OUTPUT 链:处理从本机发出的数据包,可在此链进行源地址转换等操作,让本机以特定的公网 IP 地址访问外部网络。

mangle 表

用于修改数据包的 TOS(服务类型)、TTL(生存时间)等信息,还可对数据包进行标记。它包含全部五个链:

  • PREROUTING 链:在数据包进入路由决策之前进行标记或修改 TOS、TTL 等字段。

  • INPUT 链:对目标地址为本机的入站数据包进行修改和标记。

  • FORWARD 链:对需要转发的数据包进行修改和标记。

  • OUTPUT 链:对从本机发出的数据包进行修改和标记。

  • POSTROUTING 链:在数据包完成路由决策之后进行修改和标记。

raw 表

主要用于配置数据包是否被状态跟踪机制处理,以提高性能或实现特殊的处理需求。它包含以下两个链:

  • PREROUTING 链:在数据包进入路由选择之前,决定是否对其进行状态跟踪。

  • OUTPUT 链:在本机发出数据包时,决定是否对其进行状态跟踪。

security 表

用于强制访问控制(MAC),与 SELinux 等安全机制配合使用。它包含以下三个链:

  • INPUT 链:对目标地址为本机的入站数据包进行基于安全上下文的过滤和控制。

  • OUTPUT 链:对从本机发出的数据包进行基于安全上下文的过滤和控制。

  • FORWARD 链:对需要转发的数据包进行基于安全上下文的过滤和控制。

语法

-A 追加规则-->iptables -A INPUT

-D 删除规则-->iptables -D INPUT 1(编号)

-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)

-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位

-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则

通用参数:

-p 协议  例:iptables -A INPUT -p tcp

-s 源地址 例:iptables -A INPUT -s 192.168.1.1

-d 目的地址 例:iptables -A INPUT -d 192.168.12.1

--sport 源端口 例:iptables -A INPUT -p tcp --sport 22

--dport 目的端口 例:iptables -A INPUT -p tcp --dport 22

-i 指定入口网卡 例:iptables -A INPUT -i eth0

-o 指定出口网卡 例:iptables -A FORWARD -o eth0

-j 指定要进行的处理动作

常用的ACTION:

DROP:丢弃

REJECT:明示拒绝

ACCEPT:接受

2.使用

iptables  -t fileter -L        #查看filter的所有规则

Chain INPUT (policy ACCEPT)   # INPUT链默认规则是接受(ACCEPT)

target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)   # FORWARD链默认规则是接受

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)   # OUTPUT链默认规则是接受

target     prot opt source               destination  

[root@localhost ~]# iptables -P FORWARD DROP   #设置FORWARD的默认规则是DROP(丢弃) 

[root@localhost ~]# iptables -L                       (不指定表名,就默认操作filter表)
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

 [root@localhost ~]# iptables -F                     (清空所有规则)

iptables语法

iptables [-t 表名] 选项 [链名] [条件] [-j 满足条件的操作]

iptables -A INPUT -s 192.168.1.13 -j   ACCEPT     #在INPUT链种添加源地址为192.168.1.13 的ip允许进入本机

iptables -I INPUT -s 192.168.1.13 -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT 

# 允许ip为192.168.1.0的网段访问目标地址的22端口 (一般想要禁止数据使用ssh一般是禁掉目标端口为22的数据,而不是禁掉源地址的22端口的数据包,因为源地址连接目标地址的ssh的端口是随机的,而不是固定的22端口)

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#允许所有地址所有的tcp协议可以访问80端口

#FORWARD链

#默认拒绝所有数据包通过

iptables -P FORWARD DROP

#源地址是192.168.1.0/24网段到192.168.2.0/24网段的放行

iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT

#允许源地址192.168.1.0/24使用icmp协议(ping命令所使用的协议)访问192.168.2.0/24

iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -p icmp -j ACCEPT

你可能感兴趣的:(网络,服务器,安全)