目录

  • Iptables简介
  • 4种规则表
  • 5种规则链
  • 匹配顺序
  • 使用iptables
  • 语法规则
  • 举例


Iptables简介

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统,所以它并不是真正的防火墙,可以将它理解为一个代理,我们通过这个代理,将规则对应到安全框架netfilter中。
因此,信息包过滤系统实际由netfilter和iptables两个组件构成。Netfilter是集成在内核中的一部分,它的作用是定义、保存相应的规则。而iptables是一种工具,用以修改信息的过滤规则及其他配置。用户可以通过iptables来设置适合当前环境的规则,而这些规则会保存在内核空间中。由此可以看出,Netfilter才可以算是真正的防火墙。

4种规则表

我们把具有相同功能的规则集合叫作表,不同功能的规则,我们放在不同的表当中。这样就方便了我们的管理。
在iptables中定义了4种表。如下:

raw表

确定是否对该数据包进行状态跟踪

mangle表

为数据包设置标记

nat表

修改数据包中的源、目标ip地址或端口

filter表

确定是否放行该数据包(过滤)

5种规则链

什么叫规则链呢?我们知道防火墙的作用就在于对所经过的报文进行规则的匹配,然后执行对应的动作。那么有可能我们制定的规则会是多条,当我们把这些规则串到一个链条上的时候,就形成了链。防火墙在匹配的时候,就会把链上所有的规则都匹配一遍,如果有符合条件的则执行对应操作。

INPUT

处理入站数据包

OUTPUT

处理出站数据包

FORWARD

处理转发数据包

POSTROUTING

在进行路由选择后处理数据包

PREROUTING

在进行路由选择前处理数据包

其中input、output链主要用在“主机型防火墙”中,主要针对服务器本机进行保护;
而FORWARD\POSTROUTING\PREROUTING多用在“网络型防火墙”中,如使用Linux防火墙作为网关服务器,在公司内网与Ineternet之间进行安全控制。

匹配顺序

(1)规则表之间的顺序:raw --> mangle–> nat–> filter
(2)规则链之间的顺序:不同链的处理时机比较固定,顺序取决于数据包的流向。
入站数据流向: 来自外界的数据包到达防火墙后,首选被PREROUTING链处理,然后进行路由选择;如果数据包的目的地址是防火墙本机,交给INPUT链进行处理,通过以后再交给系统上层应用程序进行响应。
转发数据流向: 来自外界的数据包到达防火墙后,首选被PREROUTING链处理,然后进行路由选择;如果数据包的目标地址是其他外部地址,则交给FORWARD链进行处理,最后交给POSTROUTING链进行处理。
出站数据流向:防火墙本机向外部地址发送数据包,首选被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链进行处理。
(3)规则链内部各条防火墙规则之间的顺序:从上往下,一旦匹配,立即终止。

一个报文的走向如下:

iptable和ebtables分别工作在哪一层_路由选择


根据这个图,我们可以总结出以下数据包的流向:

到本机某进程的报文:prerouting------>input

由本机转发的报文:prerouting------>forward---->postrouting

由本机的某进程发出的报文:output----->postrouting

使用iptables

systemctl stop firewalld  #关闭防火墙
yum install iptables-services #安装或更新服务
systemctl start iptables #打开iptables
再执行service iptables save #保存设置规则
systemctl restart iptables  # 重启服务新规则生效

语法规则

iptables [-t 表名]  管理选项  [链名] [条件匹配] [-j 目标动作]

注:不指定表名,默认为filter表
不指定链名,默认表示表中所有链
除非设置规则链的缺省策略,否则需要制定匹配条件

管理选项:

-A

在链尾追加一条新规则

-I

在指定位置插入一条新规则(默认行首)

-P

设置指定链的默认策略

-L

列表查看各条规则信息

-D

删除指定位置或内容的规则

-F

清空规则链内的所有规则

-h

查看iptables命令的使用帮助

匹配条件

-p

协议名

-s

源地址

-d

目标地址

-i

网络接口名(接收)

-o

网络接口名(发送)

-sport

源端口

-dport

目标端口

–tcp-flags

检查范围 如–tcp-flags syn,rst表示检查syn,rst两个标记。syn为1满足条件

–icmp-type

icmp的类型,如echo-request、echo-reply

-m mac

结合- -mac-source匹配mac地址

-m multiport

多端口匹配,结合- -sports源端口或者- -dports目标端口(多个端口用“,”隔开,连续端口用“:”分隔)

-m iprange

ip范围匹配,结合- -src-range源ip或者- -dst-range目标ip(以“-”连接起始结束ip地址)

处理动作

ACCEPT

允许数据包通过

DROP

直接丢弃数据包不给任何回应信息。用户请求就会显示超时

REJECT

拒绝数据包通过,客户端刚请求就会收到拒绝的嘻信息

SNAT

源地址转换,通常指私有地址转换为公有地址(内部发往外网的数据),对应postrouting

DNAT

目的地址转换 ,通常指公有地址转换为私有地址(外网发往内网的数据)对应prerouting

MASQUERADE

是SNAT的一种特殊形式,使用于动态的、临时会变的ip上

REDIRECT

在本机做端口映射

LOG

在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

举例

iptables -L  没有-t 指定表名,默认查看的是fileter表中的信息
iptables -L --line-number  查看的是fileter表中的信息,并显示行号  
iptables -F  没有-t 指定表名,默认清空fileter表中的信息
iptables -A INPUT -d 127.0.0.1 -p tcp --dport 22 -j ACCEPT  在链尾追加一条规则
iptables -I INPUT -s 192.168.75.1 -d 127.0.0.1 -p tcp --dport 22 -j ACCEPT  在第一个位置插入一条规则
iptables -I INPUT 2 -s 192.168.75.1 -d 127.0.0.1 -p tcp --dport 22 -j DROP 在第2条规则前插入一条规则
iptables -D INPUT 1  删除INPUT链中的第一条规则
iptables -P INPUT DROP    设置默认策略为拒绝所有连接
iptables -P INPUT ACCEPT  设置默认策略为允许已建立的规则进行连接
iptables  -A INPUT -s 192.168.0.1 -p tcp --dport 80 -j REJECT 拒绝192.168.0.1访问web服务
iptables -A INPUT -s 192.168.0.0/24 -p icmp -j REJECT  拒绝192.168.0.0/24ping通服务器
iptables -A INPUT -s 192.168.1.0/24 -m multiport -p tcp --dports 21,80 -j ACCEPT   允许192.168.1.0/24访问服务器的21与80端口
iptables -h        查看帮助信息
man iptables      查看iptables手册

附:

备份规则集:iptables-save > /etc/iptables-save
恢复规则集:iptables-restore < /etc/iptables-save