讲道理,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地址的
下边分三个步骤来设置防火墙规则。
1、在INPUT链上加上一条规则,协议是icmp,动作是DROP。
2、在INPUT链上的DROP动作之上再加上一条规则,协议是icmp,动作是REJECT。
3、分别删除这两个动作
得到的效果分别是:
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