Iptables防火墙
一、Iptables防火墙概述
1.应用场景
1.主机安全
2.内部共享上网
3.端口或IP转发
2.iptables注意事项
1.匹配规则是从上往下依次执行的
2.只要匹配到某一条规则,就不会在往下执行
3.如果都没有匹配到规则,就执行默认规则
4.默认规则最后执行,默认允许所有
5.经常使用的规则尽量往前放
二、iptables四表五链
1.四表五链
#四表:
filter表——过滤数据包
Nat表——用于网络地址转换(IP、端口)
Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表——决定数据包是否被状态跟踪机制处理
#五链:
INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
2.filter表
#过滤数据包,主要作用就是阻止和允许访问
1.INPUT链:过滤流入主机的数据包
2.OUTPUT链:过滤流出主机的数据包
3.FORWARD链:负责转发流经主机的数据包
3.Nat表
#用于网络地址转换,主要作用就是端口转发和ip转发
1.OUTPUT链:过滤流出主机的数据包
2.PREROUTING链:数据包到达防火墙时进行判断,改写数据包的地址或或端口(进)
3.POSTROUTING链:数据包到达防火墙时进行判断,改写数据包的地址或或端口(出)
三、iptables安装
1.安装
[root@lb01 ~]# yum install -y iptables-services
2.启动
[root@lb01 ~]# systemctl stop firewalld
[root@lb01 ~]# systemctl restart iptables
3.iptables常用参数
1.链管理:
-N:new, 自定义一条新的规则链;
-X:delete,删除自定义的规则链;
注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
## 查看防火墙 [root@lb01 ~]# iptables -nL
2.规则管理:
-A:append,追加;
-I:insert, 插入,要指明位置,省略时表示第一条;
-D:delete,删除;
(1) 指明规则序号;
(2) 指明规则本身;
-R:replace,替换指定链上的指定规则;
-F:flush,清空指定的规则链;
-Z:zero,置零;
iptables的每条规则都有两个计数器:
(1) 匹配到的报文的个数;
(2) 匹配到的所有报文的大小之和;
3.查看:
-L:list, 列出指定链上的所有规则;
-n:numberic,以数字格式显示地址和端口号;
-v:verbose,详细信息;
-vv, -vvv
-x:exactly,显示计数器结果的精确值;
--line-numbers:显示规则的序号;
四、iptables常用操作
1.查看防火墙策略(filter)
[root@lb01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 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 all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@lb01 ~]# iptables -nL --line-numbers # 显示防火墙规则的序号
2.查看指定表
-t 指定表
[root@lb01 ~]# iptables -nL -t raw
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# 防火墙的表 raw 、nat 、filter 、mangle
3.清空防火墙规则
#删除规则
[root@lb01 ~]# iptables -F
#删除自定义的链
[root@lb01 ~]# iptables -X
#计数器清零
[root@lb01 ~]# iptables -Z
# 只能一个一个执行, iptables -F
4.添加防火墙规则
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP # 轻易勿用
iptables #命令
-t #指定表
filter #指定链
-A #添加规则
INPUT #链的名字
-p #指定协议
tcp #tcp协议
--dport #指定端口
22 #端口
-j #指定动作
DROP #丢弃
### 执行完这条命令,机器自动断开 ,然后清空所有规则才能连接
#删除规则
[root@lb01 ~]# iptables -F
#删除自定义的链
[root@lb01 ~]# iptables -X
#计数器清零
[root@lb01 ~]# iptables -Z
5.删除防火墙规则
#1.查看防火墙规则序号
[root@lb01 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
#2.删除防火墙规则
[root@lb01 ~]# iptables -D INPUT 1
#3.再次查看
[root@lb01 ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
五、防火墙配置实例
1.禁止端口访问
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp --dport 111 -j DROP
2.拒绝IP访问
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.10.0.1 -i eth0 -j DROP # 轻易勿用
-i 指定网卡
-s 指定源地址IP
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.10.0.1 -i eth0 -j REJECT
3.禁止IP网段访问
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.10.0.0/24 -i eth0 -j REJECT
4.只允许某个IP访问
#正规的使用方法
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.10.0.1 -i eth0 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.10.0.0/24 -i eth0 -j DROP
#取反的使用
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.10.0.1 -i eth0 -j DROP
#添加允许的ip时
[root@lb01 ~]# iptables -t filter -I INPUT -p tcp -s 10.10.0.8 -i eth0 -j ACCEPT
-I 向上添加规则
六、企业一般配置
1.配置前考虑
1.考虑防火墙开在哪台机器上
2.这台机器部署了哪些服务
nginx
keepalive
3.服务对应的端口和协议
80
111
443
vrrp
22
4.配置默认拒绝所有
#配置
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,443,111 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p vrrp -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 172.16.1.6 --dport 22 -j ACCEPT
[root@lb01 ~]# iptables -P INPUT DROP
#注意天坑:
配置好以后,不要清空防火墙规则,小心删除规则,因为我们最后一条配置的是默认拒绝所有,而清空防火墙规则不会更改其状态,还是默认拒绝所有,所以完犊子了
[root@lb01 ~]# iptables -P INPUT ACCEPT
2.防火墙规则永久生效
#配置完防火墙,执行以下操作,将自己配置的规则添加到防火墙的配置文件中
[root@lb01 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@lb01 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Wed Dec 16 15:39:15 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:176]
:POSTROUTING ACCEPT [1:176]
COMMIT
# Completed on Wed Dec 16 15:39:15 2020
# Generated by iptables-save v1.4.21 on Wed Dec 16 15:39:15 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5168]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -s 10.10.0.1/32 -i eth0 -p tcp -j ACCEPT
-A INPUT -s 10.10.0.0/24 -i eth0 -p tcp -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Dec 16 15:39:15