1、iptables简介
其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。
语法格式:iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
- -t:指定需要维护的防火墙规则表 filter、nat、mangle或raw。在不使用 -t 时则默认使用 filter 表。
- COMMAND:子命令,定义对规则的管理。
- chain:指明链表。
- CRETIRIA:匹配参数。
- ACTION:触发动作。
“四表五链”:
1. filter表——三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter
2. Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
3. Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle
4. Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw
规则表之间的优先顺序:raw > mangle > nat > filter
参考来自:Linux iptables命令详解-CSDN博客
iptables全面详解(图文并茂含命令指南)_iptables命令详解-CSDN博客
2、NAT表
IPtables中可以灵活的做各种网络地址转换(NAT),网络地址转换主要有两种:SNAT和DNAT。
在路由模式下,包从路由器的lan侧出去的时候,会经过nat表的POSTROUTING链,去做SNAT,然后才能发送至外网。MASQUERADE的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。
参考来自:Linux防火墙配置工具iptables中MASQUERADE的含义_iptables masquerade-CSDN博客(总结版)
iptable端口重定向 MASQUERADE[通俗易懂]-腾讯云开发者社区-腾讯云 (tencent.com)(详细版)
3、Filter表
动作区别:iptables drop与reject 的区别-CSDN博客,里面还提及了用tcpdump抓包、time nmap查看端口耗时。
nc可以监听端口,还可以像telnet一样查看某IP的端口是否可用。
iptables 之 REJECT 与 DROP 对比_iptables drop reject-CSDN博客
4、具体操作
首先安装:yum install iptables-services
注意:iptables-services 和 iptables 是不一样的,iptables 一般自带会有,但是安装了 services 才有/etc/sysconfig/iptables。
1、查看所有规则,以排序方式列出,可以看见行号
[root@centos7 ~]# iptables -L --line-number
2、替换某条规则,需要用到这个行号
3、删除规则,需要用到这个行号
[root@centos7 ~]# iptables -D INPUT 1 -s 10.7.0.0/16 -p icmp -j REJECT
或
[root@centos7 ~]# iptables -D INPUT 1
有时需要删除的规则较长,删除时需要写一大串的代码,这样比较容易写错,这时可以先使用 -line-number 找出该条规则的行号,再通过行号删除规则。
这里尝试了一下好像-s是删不掉的,还是直接使用行号删除吧。
4、添加规则
使用 -A 选项添加防火墙规则会将该规则追加到整个链的最后,而使用 -I 选项添加的防火墙规则则会默认插入到链中作为第一条规则。
允许源IP地址为192.168.0.0/24网段的包流进(这里没有加-p,就包括了所有的协议。这里也可以指定单个IP)
[root@centos7 ~]# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
5、调整规则顺序
可以在添加规则时,指定新增规则的编号,这样我们就能在任意位置插入规则了,只需要把刚才的命令稍作修改即可,这里举例子示范了一下:
仍然使用-I选项进行插入规则操作,-I INPUT 2表示在INPUT链中新增规则,新增的规则的编号为2。
5、使规则永久生效
当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。为了让配置永久生效,根据平台的不同,具体操作也不同。下面进行简单介绍:
1、保存现有的规则
保存在默认文件夹中(保存防火墙规则):# iptables-save > /etc/sysconfig/iptables
【CentOS 7 系统中防火墙规则默认保存在 /etc/sysconfig/iptables 文件中】
保存在其他位置(备份防火墙规则):# iptables-save > 文件名称
2、保存iptables规则
iptables-save
service iptables save
【注意:可以修改/etc/sysconfig/iptables-config 将里面的IPTABLES_SAVE_ON_STOP=”no”, 这一句的”no”改为”yes”这样每次服务在停止之前会自动将现有的规则保存在 /etc/sysconfig/iptables 这个文件中去。】
3、重启iptables服务
systemctl restart iptables
4、查看当前规则
cat /etc/sysconfig/iptables-config
iptables --list
iptables -nvL或iptables -L
5、列出XX表的规则内容
iptables-save -t nat
iptables-save -t filter
iptables -t nat --list
6、清空规则
清空所有的规则:iptables -F
清空指定链 INPUT 上面的所有规则:iptables -F INPUT
清除iptables nat表规则:iptables -F -t nat