讲道理,iptables和firewalld都不是真正意义上的防火墙,他们只是定义防火墙规则的服务而已。而且这些工具,我们只需要精通一个即可。

至于iptables“四表五链”的理论概念,个人认为无需有太多的了解,只需掌握常用的参数即可,应付日常工作足矣。

策略与规则链

一般而言,防火墙的策略规则有两种,一种是允许,一种是拒绝。

防火墙有默认策略,如果默认策略是拒绝,那么就需要设置允许规则;如果默认策略是允许,那么就需要设置拒绝规则。

防火墙会从上至下读取配置的策略规则,匹配到规则后,就去执行规则中的行为。如果匹配不到,就会去执行默认策略。

规则链会依据数据包的位置来进行处理,具体位置如下:

  • 在进行路由选择前处理数据包(PREROUTING)
  • 处理流入的数据包(INPUT)
  • 处理流出的数据包(OUTPUT)
  • 处理转发的数据包(FORWARD)
  • 在路由选择后处理数据包(POSTROUTING)

而我们是用最多的就是INPUT链,对于流入的数据包,我们有四个动作可以对其处理。

ACCEPT(允许)、REJECT(拒绝)、LOG(记录)、DROP(丢弃)

iptables中的命令参数

参数

作用

-P

设置默认策略

-F

清空规则链

-L

查看规则链

-A

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

-I num

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

-D num

删除某一条规则

-s

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

-d

匹配目标地址

-i 网卡名称

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

-o 网卡名称

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

-p

匹配协议,如TCP、UDP、ICMP

--dport num

匹配目标端口号

--sport

匹配来源端口号

下边来做一个INPUT链的测试

首先,我们设置INPUT链的默认规则为ACCEPT,也就是说入方向全部允许。现在是可以ping通这个IP地址的

iptables 出方向策略 iptables默认策略配置_linux

下边分三个步骤来设置防火墙规则。

1、在INPUT链上加上一条规则,协议是icmp,动作是DROP。

2、在INPUT链上的DROP动作之上再加上一条规则,协议是icmp,动作是REJECT。

3、分别删除这两个动作

iptables 出方向策略 iptables默认策略配置_端口号_02

得到的效果分别是:

1、无响应

2、unreachable

3、无响应

4、可以ping通 

可以看到,DROP动作就是不理你。而REJECT的动作则是告诉你,到达不了。

以上则是一个简单的举例,iptables还会对端口、IP地址等进行限制,下边再简单举几个例子。

  • 只允许固定网段的主机访问访问本机的22号端口
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
#INPUT链头部增加规则,允许192.168.1.0/24这个网段的tcp连接访问本地的22端口

iptables -A INPUT -p tcp --dport 22 -j REJECT
#INPUT链尾部增加规则,拒绝tcp连接访问本地的22端口

规则是从上往下读的,所以先匹配能进入的,剩下的都拒绝。

  • 拒绝所有人访问本机的3306端口
iptables -I INPUT -p tcp --dport 3306 -j REJECT

iptables -I INPUT -p udp --dport 3306 -j REJECT
  • 拒绝一个IP地址访问本机的80端口
iptables -I INPUT -p tcp -s 192.168.1.10 --dport 80 -j REJECT
  • 拒绝所有主机访问本机的1000-2000端口
iptables -I INPUT -p tcp --dport 1000:2000 -j REJECT

iptables -I INPUT -p udp --dport 1000:2000 -j REJECT

以上就是关于iptables的一些用法,理解最重要,只要能完全吸收,应付日常工作足够了。

设置完需要保存防火墙的策略

service iptables save

#有些机器不支持service管理,但是有iptables的命令,如下:

iptables-save