第二十四章 IPtables防火墙

一、iptables防火墙基本概述

1.应用场景

1.主机安全
2.端口转发/ip转发
3.内部共享上网

2.iptables工作流程

1.配置防火墙规则可以添加在下面,也可以添加在前面,是有顺序的
2.匹配规则时是按照从上到下依次匹配
3.只要符合匹配到的规则,就不再往下匹配
4.如果都没有匹配上,则匹配默认规则
5.默认规则最后执行,默认规则是全部都允许
6.匹配次数越多的规则越往前放

二、iptables四表五链

#四表:
1.filter表
2.nat表
3.raw表
4.mangle表

#五链:
1.INPUT
2.OUTPUT
3.FORWARD
4.PREROUTING
5.POSTROUTING

1.filter表

主要作用就是阻止和允许访问
#包含的链:
1.INPUT:过滤进入主机的数据包
2.OUTPUT:过滤从主机出去的数据包
3.FORWARD:转发经过主机的数据包

2.nat表

主要作用就是IP和端口转发
#包含的链:
1.PREROUTING:数据流入时,改写数据包地址
2.POSTROUTING:数据流出时,改写数据包地址
3.OUTPUT:过滤从主机出去的数据包

三、iptables安装

1.安装

[root@m01 ~]# yum install -y iptables-services

2.安装iptbles支持的内核模块

[root@m01 ~]# modprobe ip_tables
[root@m01 ~]# modprobe iptable_filter
[root@m01 ~]# modprobe iptable_nat
[root@m01 ~]# modprobe ip_conntrack
[root@m01 ~]# modprobe ip_conntrack_ftp
[root@m01 ~]# modprobe ip_nat_ftp
[root@m01 ~]# modprobe ipt_state

#查看加载的模块
[root@m01 ~]# lsmod | egrep 'filter|nat|ipt'

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

3.启动

[root@m01 ~]# systemctl stop firewalld.service

[root@m01 ~]# systemctl start iptables.service

4.iptables常用命令

#常用参数
1.链管理:
   -N:new, 自定义一条新的规则链;
   -X:delete,删除自定义的规则链;
      注意:仅能删除 用户自定义的 引用计数为0的 空的 链;
   -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
          ACCEPT:接受
          DROP:丢弃
          REJECT:拒绝
   -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
   
2.规则管理:
   -A:append,追加规则;
   -I:insert, 插入,要指明位置,省略时表示第一条;
   -D:delete,删除;
      (1) 指明规则序号;
      (2) 指明规则本身;
   -R:replace,替换指定链上的指定规则;

   -F:flush,清空指定的规则链;
   -Z:zero,置零;
      iptables的每条规则都有两个计数器:
          (1) 匹配到的报文的个数;
          (2) 匹配到的所有报文的大小之和;        
3.查看:
-L:list, 列出指定鏈上的所有规则;
   -n:numberic,以数字格式显示地址和端口号;
   -v:verbo;
   --line-numbers:显示规则的序号;

四、iptables常用操作

1.查看防火墙

#默认是filter表
[root@m01 ~]# 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

2.查看指定表

#-t:    指定表
[root@m01 ~]# iptables -nL -t nat

3.清除防火墙规则

[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z

4.添加防火墙规则

[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

[root@m01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

5.删除防火墙规则

#防火墙规则加序号
[root@m01 ~]# 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:2
2   DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

Chain FORWARD (policy ACCEPT)
num target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
num target     prot opt source               destination

#删除指定id的规则
[root@m01 ~]# iptables -D INPUT 3

五、防火墙配置实例

1.禁止访问22端口

[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

iptables #防火墙命令
-t #指定表
filter #filter表
-A #追加规则到链
INPUT #指定链
-p #指定协议
tcp #tcp协议
--dport #指定端口
22 #端口号
-j #指定动作
DROP #丢弃

2.禁止IP访问

[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.7 -j DROP

-s #指定IP
10.0.0.7 #IP地址或网段

3.禁止IP网段

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

-i #指定网卡

4.只允许某个IP访问

#方式一:
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.1 -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -s 10.0.0.0/24 -j DROP

#方式二:
[root@m01 ~]# iptables -t filter -A INPUT -p tcp ! -s 10.0.0.1 -i eth0 -j DROP

! #取反

5.拒绝端口范围

#如果端口是连续的
[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22:200 -j DROP

#如果端口不是连续的
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 22:200,3000:4000 -j DROP

六、企业如何配置

1.配置之前

1.考虑一下哪些机器需要防火墙
2.该服务器部署了哪些服务
nginx
sshd
3.服务的端口
80
443
22
4.其他端口全部拒绝

2.配置

[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -X
[root@m01 ~]# iptables -Z
[root@m01 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -s 10.0.0.1 -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,443   -j ACCEPT
[root@m01 ~]# iptables -t filter -P INPUT DROP

3.防火墙规则永久生效

#防火墙配置文件,当重启防火墙时,会读取配置文件,配置文件中的配置才会永久生效
[root@m01 /home/lhd]# vim /etc/sysconfig/iptables

#想要永久生效配置,配置好防火墙策略,测试成功
[root@m01 /home/lhd]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

七、iptables转发

1.端口转发

[root@m01 ~]# iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 5555 -j DNAT --to-destination 172.16.1.7:22

[root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

2.IP转发

iptables -t nat -A PREROUTING -d 10.0.1.61 -j DNAT --to-destination 172.16.1.7
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

3.内部共享上网

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61

 

原文地址:https://www.cnblogs.com/jhno1/p/13687456.html