iptables是Linux系统中的防火墙管理工具,它的功能强大并且使用灵活,可用于网络防护、路由转发等功能应用。由于防火墙功能是基于Linux内核实现的,具有稳定和高效率的特点,因此常被广泛地使用到多个场景中。解锁iptables的技能,将会成为我们Linux网络安全的神器。
本文将介绍 iptables 的基础知识、使用方法和实际应用场景,旨在帮助初学者快速上手。
一. iptables介绍
iptables主要工作在网络层,可以通过规则控制数据包的进出方向、源/目的地址、源/目的端口等信息,来实现对包的过滤、转发、重定向等操作。
iptables 中有几个基本概念需要了解:
1. Chain(链)
链是 iptables 规则的容器,用于存放一组规则。
Linux 内核中预定义了五个链:INPUT、FORWARD、OUTPUT、PREROUTING 和 POSTROUTING。
它们的功能分别如下:
链 | 功能 |
INPUT | 区配进入本机,并且目标IP是本机地址的数据包; |
FORWARD | 匹配由本机进行转发的数据包; |
OUTPUT | 匹配由本机发出的数据包 |
PREROUTING | 匹配刚到达本机的所有数据包,可用于修改目的地址,通常用于实现DNAT功能。 |
POSTROUTING | 匹配即将离开本机的数据包,可用于修改源地址,通常用于实现SNAT功能。 |
2. Rule(规则)
规则定义了对数据包进行处理的具体动作,由匹配条件和动作两部分组成。
匹配条件可以是数据包的源地址、目的地址、端口等信息,动作可以是ACCEPT(允许通过)、DROP(丢弃数据包)、REJECT(拒绝)等。
配置规则时需要指定所属的表和链,如果不指定表则默认为filter表。
3. Table(表)
表是存放链的容器,每个表包含若干个链。iptables 中有四个预定义的表:filter、nat、mangle 和 raw,其中filter和 nat 表是被使用最多的,分别用于数据包过滤和网络地址转换功能。
二. iptables的使用方法
1. 显示规则
要查看当前的iptables规则,可以使用以下命令:
$ iptables -L
这将显示所有规则,包括输入、输出和转发规则。通过观察规则列表,您可以了解当前网络流量的策略。
2. 添加规则
要添加一个规则,可以使用以下命令:
iptables -A <chain> <rule>
其中,<chain>指定要添加规则的链,例如INPUT、OUTPUT或FORWARD。<rule>是规则本身,可以是允许或拒绝特定类型的流量。
例如,如果您想允许SSH连接(TCP端口22),可以使用以下命令:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
这将在INPUT链中添加一个规则,允许TCP端口22的流量通过。
3. 删除规则
要删除一个规则,可以使用以下命令:
iptables -D <chain> <rule>
其中,<chain>和<rule>是要删除的规则的链和规则本身。例如,如果您要删除前面添加的SSH规则,可以使用以下命令:
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
这将删除输入链中允许TCP端口22的流量通过的规则。
4. 修改规则
要修改一个规则,可以先删除旧规则,再添加新规则,或者使用以下命令修改规则:
iptables -R <chain> <rule_number> <new_rule>
其中,<chain>是要修改的规则的链,<rule_number>是要修改的规则的编号(可以在iptables -L命令的输出中找到),<new_rule>是要添加的新规则。
例如,如果您要将输入链中允许SSH连接的规则更改为允许HTTP连接(TCP端口80),可以使用以下命令:
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT
这将输入链中编号为1的规则更改为允许TCP端口80的流量通过。
iptables是一个功能非常强大的工具,以上只是几个最简单的使用示例,还有很多高级选项和用法。限于文章篇幅,此处不做介绍,感兴趣的读者可自行查阅相关文档资料。
三. 应用案例
这是之前在工作中的一个iptables应用案例,虽然场景简单但参考性较强,可便于举一反三的应用到其他场景中。
首先说下场景:公司内部有几台跳板机,用于给到特定的人员登录访问服务器。由于之前出现过个别跳板机被黑客入侵的情况,现在需要对其进行安全加固。经过考虑以后,决定使用iptables的防火墙功能来实现,这类方案的特点是简单且成本低。
安全方面的需求很简单,需要对跳板机进行访问限制,只允许指定IP的机器访问该主机,从而达到阻止黑客入侵系统的目的。同时 ,需要保证跳板机可以正常访问业务系统。
本案例以操作系统Centos7.x为例来进行演示,该需求将使用filter表和其中的INPUT链来实现。
1. 关闭firewalld防火墙。
$ systemctl stop firewalld
$ systemctl disable firewalld
2. 安装iptables-services ,并启用服务。
$ yum install iptables-services
$ systemctl enable iptables
$ systemctl start iptables
3. 清空现有INPUT链的规则。
$ iptables -F INPUT
4. 配置访问规则
# 开放指定IP访问,此处IP根据实际情况变更
$ iptables -A INPUT -s 192.168.4.168 -j ACCEPT
# 配置状态为RELATED、ESTABLISHED的连接可通过,保证跳板机对外发起请求,对端的回复可通过。
$ iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
# 开放icmp访问
$ iptables -A INPUT -p icmp -j ACCEPT
# 开放dns访问,用于域名解析
$ iptables -A INPUT -p udp --sport 53 -j ACCEPT
# 开放时间服务器访问,用于时间同步
$ iptables -A INPUT -p udp --sport 123 -j ACCEPT
注释:-A用于添加规则到表;-s用于指定源IP;-p用于指定协议;--sport用于指定源端口,此处用于放行时间服务器和DNS服务器返回的数据包;--state RELATED,ESTABLISHED用于指定连接的状态,用于放行目标机器返回的数据包。
5. 更改INPUT默认规则为DROP,屏蔽其他所有连接。
$ iptables -P INPUT DROP
注意:该规则需要在上方其他规则配置完成后,才能执行。否则会导致机器无法连接。
6. 查看规则,已完成。
$ iptables -nL INPUT
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 192.168.4.168 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:123
7. 保存iptables配置,否则重启机器后会丢失。
$ service iptables save
专注于Devops、SRE、运维开发等技术分享,扫码关注公众号,获取更多精彩内容!
标签:iptables,--,0.0,解锁,Linux,规则,INPUT,数据包 From: https://blog.51cto.com/u_14065119/6122712