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表

#过滤数据包,主要作用就是阻止和允许访问。防火墙大部分规则都在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 start iptables.service

3.iptables常用参数

1.链管理:
  -N:new, 自定义一条新的规则链;
  -X:delete,删除自定义的规则链;
      注意:仅能删除 用户自定义的 引用计数为0的空的链;
  -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:***
     --dport    --- 表示指定目标端口信息
     --sport    --- 表示指定源端口号信息
  -j:指定对相应匹配规则执行什么操作(  
     ACCEPT 允许通过
     DROP 直接拒绝 
     REJECT 委婉拒绝
     REDIRECT 重定向
     MASQUERADE 地址伪装
     SNAT 如果内网主机访问外网而经过路由时,源IP会发生改变,这种变更行为就是SNAT
     DNAT 当外网的数据经过路由发往内网主机时,数据包中的目的IP (路由器上的公网IP) 将修改为内网IP,这种变更行为就是DNAT
  -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;

2.规则管理:
  -A:append,追加;
  -I:insert, 插入,要指明位置,省略时表示第一条;
  -D:delete,删除;
     (1) 指明规则序号;
     (2) 指明规则本身;
  -R:replace,替换指定链上的指定规则;
  -F:flush,清空指定的规则链;
  -Z:zero,置零;
      iptables的每条规则都有两个计数器:
        (1) 匹配到的报文的个数;
        (2) 匹配到的所有报文的大小之和;
  -s:指定匹配的源地址网段信息,或者匹配的主机信息
  -d:指定匹配的目标地址网段信息,或者匹配的主机信息
  -i:指定匹配的进入流量接口信息 只能配置在INPUT链上
  -o:指定匹配的发出流量接口信息 只能配置在OUTPUT链上
  -m:指定应用扩展模块参数
    multiport --- 可以匹配多个不连续端口信息

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

2.查看指定表

-t   指定表
[root@lb01 ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
Chain INPUT (policy ACCEPT)
target     prot opt source               destination       

3.清空防火墙规则 (慎用)

#删除规则
[root@lb01 ~]# iptables -F
#删除自定义的链
[root@lb01 ~]# iptables -X
#计数器清零
[root@lb01 ~]# iptables -Z

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			#丢弃

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
2    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
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:443
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.0.0.1 -i eth0 -j DROP
-i		指定网卡
-s		指定源地址IP

[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -i eth0 -j REJECT 

3.禁止IP网段访问

[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j REJECT

4.只允许某个IP访问

#正规的使用方法
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -i eth0 -j ACCEPT
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP

#取反的使用
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP

#添加允许的ip时
[root@lb01 ~]# iptables -t filter -I INPUT -p tcp -s 10.0.0.7 -i eth0 -j ACCEPT
-I		向上添加规则

六、企业一般配置

1.配置前考虑下

1.考虑防火墙开在哪台机器上
2.这台机器部署了哪些服务
	nginx
	keepalive
3.服务对应的端口和协议
	80
	443
	vrrp
	22
4.配置默认拒绝所有

#配置
[root@lb01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,443 -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.7 --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.0.0.1/32 -i eth0 -p tcp -j ACCEPT
-A INPUT -s 10.0.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 2020
posted @ 2021-06-03 16:50  小绵  阅读(92)  评论(0编辑  收藏  举报