IPTABLES

  • 策略与规则链
  • iptables中基本的命令参数
  • 遇到的问题

在早期的Linux系统中,默认使用的是iptables防火墙管理服务来配置防火墙。尽管新型的firewalld防火墙管理服务已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因而继续使用iptables。

1.策略与规则链

防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。一般而言,防火墙策略规则的设置有两种:一种是“通”(即放行),一种是“堵”(即阻止)。当防火墙的默认策略为拒绝时(堵),就要设置允许规则(通),否则谁都进不来;如果防火墙的默认策略为允许时,就要设置拒绝规则,否则谁都能进来,防火墙也就失去了防范的作用

iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下

在进行路由选择前处理数据包(PREROUTING);

处理流入的数据包(INPUT);

处理流出的数据包(OUTPUT);

处理转发的数据包(FORWARD);

在进行路由选择后处理数据包(POSTROUTING)。

一般来说,从内网向外网发送的流量一般都是可控且良性的,因此我们大多数采用的是input规则链,该规则链可以增大黑客人员从外部入侵内网的难度

其中,策列规则相对于iptables服务的有相应的控制,如下表

名称

作用

ACCEPT

允许流量通过

REJECT

拒绝流量通过

LOG

记录日志信息

DROP

拒绝流量通过

其中,REJECT 跟 DROP的区别: REJECT是直接拒绝,不会委婉,当面表示无法连接流量;DROP则是委婉拒绝,你无法看到当前对方主机状态或者是否被拒绝

2.iptables中基本的命令参数

Iptables的4张表:

名称

作用

filter

负责过滤工程,防火墙

nat

网络地址转换功能 network address translate

mangle

拆解报文,做出修改,并重新封装

raw

关闭nat表上启用的连接追踪机制

表链关系

名称

使用表

raw

PREROUTING、OUTPUT

mangle

PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

nat

PREROUTING、OUTPUT、POSTROUTING (注:INPUT链 centos7有,centos6没有)

filter

INPUT、FORWARD、OUTPUT

iptables命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功,iptables就会根据策略规则所预设的动作来处理这些流量。另外,防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误

参数

作用

-P

设置默认策略

-F

清空规则链

-L

查看规则链

-A

在规则链的末尾加入新规则

-I num

在规则链的头部加入新规则

-D num

删除某一条规则

-s

匹配来源地址IP/MASK,加叹号“!”表示除这个IP外

-d

匹配目标地址

-i 网卡名称

匹配从这块网卡流入的数据

-o 网卡名称

匹配从这块网卡流出的数据

-p

匹配协议,如TCP、UDP、ICMP

–dport num

匹配目标端口号

–sport num

匹配来源端口号

使用iptables命令后添加-L参数查看已有的防火墙规则链

[root@centos  ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination 
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere 
INPUT_direct all -- anywhere anywhere 
INPUT_ZONES_SOURCE all -- anywhere anywhere 
###省略---

使用iptables命令后添加-F参数清空已有的防火墙规则链

[root@centos ~]# iptables -F
[root@centos ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

将某个规则链的默认策略设置为拒绝或者允许
格式:iptables -P 链名称 相应的策略(拒绝或允许)

向某个规则链中添加允许某个流量进入的策略规则
格式:iptables -I 链名称 -p 流量名称 -j ACCEPT

删除某个规则链中的策略
格式:-iptables -D 链名称 1

保存配置好的防火墙命令策略,使其永久生效
命令格式:service iptables save

[root@centos ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

3.遇到的问题

当我重新清空防火墙规则链,然后重新配置以后,在保存配置好的防火墙规则链的时候,出现如下错误

The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl
-------------------------------------------------------------翻译如下
service命令只支持基本的LSB操作(start、stop、restart、try restart、reload、force reload、status)。对于其他操作,请尝试使用systemctl

这时候我在想是不是因为版本问题,必经很少用到service这个命令,经过多方求证之后,发下CentOS 7开始,大部分管理系统启动和管理系统服务的相关命令全部由systemctl命令来代替。service命令只保留下了极少部分使用,大部分命令都要改用systemctl使用

但还是想保存自己配置的防火墙规则链,所以最终找到一个可用的方式:

1.首先停止防火墙:systemctl stop firewalld

2.安装或更新服务:yum install iptables-services

3.设置开机启动防火墙:systemctl enable iptables

4.可以使用下面命令管理iptables :systemctl [stop|start|restart] iptables

5.保存防火墙规则:service iptables save

6.重启iptables服务:
service iptables restart
执行完毕之后/etc/syscofig/iptables文件就有了