一、iptables的基本认识
iptables的实现是通过Netfilter组件,该组件集成在linux内核中,具有iptables,NAT等功能,
官网文档:https://netfilter.org/documentation/
为了扩展各种网络服务的结构化底层框架内核中选取五个位置放了五个hook(勾子函数) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则
由五个过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在5个链(chain)上。
iptables组成:
由五个表table:filter、nat、mangle、raw、security,五个链以及一些规则组成。
filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包(常用,默认包含3个链)
nat表:network address translation 地址转换规则表(常用,默认包含2个链)
mangle:修改数据标记位规则表
raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度
security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
三种报文流向:
1、流入本机:PREROUTING --> INPUT-->用户空间进程(比如httpd服务 )
2、流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
3、转发:PREROUTING --> FORWARD --> POSTROUTING
二、iptables的用法
规则格式:
iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
简单格式
SUBCOMMAND
1、查看
-L:list, 列出指定鏈上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号
-v:verbose,详细信息
-vv 更详细
-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
--line-numbers:显示规则的序号
常用组合:
-vnL --line-numbers
使用 iptables 的 -vnL 选项 和 -t 选项查看每个表所涉及的链, 默认表是filter可以不写
iptables -t filter -vnL
iptables -vnL
iptables -t filter -vnL INPUT
2、链管理
-N:new, 自定义一条新的规则链
-X:delete,删除自定义的空的规则链
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能
被删除
3、规则管理:
-A:append,追加
-I:insert, 插入,要指明插入至的规则编号,默认为第一条
-D:delete,删除
(1) 指明规则序号
(2) 指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空指定的规则链
基本匹配条件:无需加载模块,由iptables/netfilter自行提供
-s, --source address[/mask][,...]:源IP地址或范围
-d, --destination address[/mask][,...]:目标IP地址或范围
-p, --protocol protocol:指定协议,可使用数字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“
-i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、
FORWARD、PREROUTING链
-o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、 POSTROUTING链
处理动作:称为target,跳转目标
-j
内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...
示例
1、禁止ping回环网卡,
2、在当前规则前面插入一条规则,会自动占用当前规则的位置,INPUT 后面不跟编号加在第一条
3、删除第一条规则,或者iptables -D INPUT -s 127.0.0.1 -p icmp -j ACCEPT
4、清空链中匹配的数据包记录值,
5、清空所有规则 iptables -F
6、修改某个链上一条指定的规则,可以使用 -R 选项来完成。
iptables -R INPUT 1 -s 127.0.0.1 -p icmp -j ACCEPT
7、每个链都有其默认的处理规则,可以使用 -P 选项修改,一般不修改,没有允许的规则,全部拒绝xshell会断开
iptables -t filter -P INPUT DROP
8、自定义链
使用自定义链,
没有生效的原因在于,自定义链没有被执行,表内的链只有默认链会被执行,自定义链需要在默认链中调用才能执行,调用
重新命名链
iptables -E mychain mychain11
删除链
iptables -t filter -X mychain
iptables规则的持久性
由于规则是保存在内核内存中的,系统重启后会丢失。因此我们希望使用配置文件保存所有的 iptables 规则,方便进行规则重
置和系统启动后自动加载。
备份规则到iptables.rule
方法一
chmod +x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local
重启查看之前的规则还在
方法二
yum install iptables
systemctl enable iptables
iptalbes-save -c > /etc/sysconfig/iptables
在centos中不推荐使用iptables服务会和firewalld服务冲突