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)规则链内部各条防火墙规则之间的顺序:从上往下,一旦匹配,立即终止。
一个报文的走向如下:
根据这个图,我们可以总结出以下数据包的流向:
到本机某进程的报文: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