zoukankan      html  css  js  c++  java
  • 防火墙iptables

    防火墙iptables

    iptables是开源的基于数据包过滤的防火墙工具。

    iptables应用场景

    1、主机防火墙(filter表的INPUT链)。
    2、局域网共享上网(nat表的POSTROUTING链)。NAT功能。
    3、端口及IP映射(nat表的PREROUTING链),硬防的NAT功能。
    4、IP一对一映射。
    

    iptables工作流程

    iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。
    1.防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
    2.如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
    3.如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
    4.防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
    

    iptables四表五链

    Filter

    NAT

    iptables工作原理图

    iptables环境安装

    [root@lb01 ~]# yum -y install iptables-services
    [root@lb01 ~]# systemctl start iptables.service
    [root@lb01 ~]# 
    [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 ~]# 
    

    加载防火墙内核模块

    [root@lb01 ~]# modprobe ip_tables
    [root@lb01 ~]# modprobe iptable_filter
    [root@lb01 ~]# modprobe iptable_nat
    [root@lb01 ~]# modprobe ip_conntrack
    [root@lb01 ~]# modprobe ip_conntrack_ftp
    [root@lb01 ~]# modprobe ip_nat_ftp
    [root@lb01 ~]# modprobe ipt_state
    [root@lb01 ~]# lsmod | egrep 'filter|nat|ipt'
    nf_nat_ftp             12770  0 
    nf_conntrack_ftp       18638  1 nf_nat_ftp
    iptable_nat            12875  0 
    nf_nat_ipv4            14115  1 iptable_nat
    nf_nat                 26787  2 nf_nat_ftp,nf_nat_ipv4
    ipt_REJECT             12541  2 
    nf_reject_ipv4         13373  1 ipt_REJECT
    nf_conntrack          133387  7 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4
    iptable_filter         12810  1 
    ip_tables              27115  2 iptable_filter,iptable_nat
    libcrc32c              12644  3 xfs,nf_nat,nf_conntrack
    [root@lb01 ~]# 
    [root@lb01 ~]# systemctl restart iptables.service 
    [root@lb01 ~]# 
    
    

    iptables基础命令

    #查看防火墙规则(默认查看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 -F <- 清除所有规则,不会处理默认的规则
    iptables -X <- 删除用户自定义的链
    iptables -Z <- 链的计数器清零(数据包计数器与数据包字节计数器)
    
    #添加防火墙规则
    iptables -t <-指定表d(efault: `filter')
    iptables -A <-把规则添加到指定的链上,默认添加到最后一行。
    iptables -I <-插入规则,默认插入到第一行(封IP)。
    iptables -D <-删除链上的规则
    
    #网络连接状态
    NEW:已经或将启动新的连接
    ESTABLISHED:已建立的连接
    RELATED:正在启动的新连接
    INVALID:非法或无法识别的
    
    #删除某个规则
    iptables -nL --line-numbers 查看规则号码
    iptables -D INPUT 1 删除指定链上的指定序号
    

    iptables配置Filter表

    #禁止某个端口访问
    [root@lb01 ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
    规则解释:
    -p       #<==指定过滤的协议-p(tcp,udp,icmp,all)
    --dport  #<==指定目标端口(用户请求的端口)。
    -j       #<==对规则的具体处理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)
    --sport  #<==指定源端口。
    
    #禁止某个ip访问
    [root@lb01 ~]# iptables -A INPUT -p tcp -s 10.0.1.6 -i eth0 -j DROP
    规则解释:
    -s       #<==指定源地址或网段(192.168.1.0/24)。 ! 取反。
    -d       #<==指定目的地址(nat表prerouting)。
    -i       #<==进入的网络接口(eth0,eth1)。
    -o       #<==出去的网络接口(eth0,eth1)。
    
    #禁止源地址访问是10.0.1.6的主机访问22端口
    [root@lb01 ~]# iptables -A INPUT -p tcp -s 10.0.1.6 --dport 22 -j DROP
    
    #禁止除了源地址是10.0.1.6以外的主机访问22端口
    [root@lb01 ~]# iptables -A INPUT -p tcp ! -s 10.0.1.6 --dport 22 -j DROP
    
    #禁止10.0.1.6访问22和80端口
    [root@lb01 ~]# iptables -I INPUT -s 10.0.1.6 -p tcp -m multiport --dport 22,80 -j DROP
    规则解释:
    -m 参数表示增加扩展匹配功能,multiport 实现不连续多端口扩展匹配
    
    #禁止10.0.1.6访问22到100的所有端口
    [root@lb01 ~]# iptables -A INPUT -p tcp -s 10.0.1.6 --dport 22:100 -j DROP
    
    #禁止ping本机
    [root@lb01 ~]# iptables -A INPUT -p icmp -j DROP
    
    #只要不是10.0.1.6就不允许ping本机
    [root@lb01 ~]# iptables -A INPUT -p icmp --icmp-type 8 ! -s 10.0.1.6 -j DROP
    

    NAT共享上网

    #lb01
    [root@lb01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.1.5
    [root@lb01 ~]# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf
    规则解释:
    -t nat :NAT表
    -A POSTROUTING :POSTROUTING链
    -s 172.16.1.0/24 :源地址172.16.1.0/24
    -j SNAT :SNAT 改写源地址
    --to-source 10.0.0.61 :将源地址改写成10.0.0.61
    
    #lb02
    [root@lb02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
    GATEWAY=172.16.1.5
    [root@lb02 ~]# ifdown eth1 && ifup eth1
    [root@lb02 ~]# vim /etc/resolv.conf 
    nameserver 10.0.1.254
    
    

    端口映射

    #访问10.0.1.5的9000端口,跳转到172.16.1.6的22端口
    [root@lb01 ~]# iptables -t nat -A PREROUTING -d 10.0.1.5 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.6:22
    命令拆解:
    表:nat
    链:PREROUTING
    目标IP:10.0.1.5
    目标端口:9000
    协议:tcp
    动作:DNAT
    目标IP:172.16.1.6
    目标端口:22
    改写数据包的目标IP和端口
    用到的是PREROUTING链
    

    IP映射

    [root@lb01 ~]# ip a add 10.0.1.59/24 dev eth0 label eth0:0
    [root@lb01 ~]# iptables -t nat -A PREROUTING -d 10.0.1.59 -j DNAT --to-destination 172.16.1.6
    
    

    iptables规则保存

    保持命令
    iptables-save
    
    iptables-save > iptables_m01
    iptables-restore < iptables_m01
    
    iptables-save > /etc/sysconfig/iptables
    
    
  • 相关阅读:
    SpringBoot梳理一(快速上手及常用配置)
    C# .NET写入记事本(规范版)
    PhpStorm安装及汉化
    C# .NET发送邮件方法
    Maven安装教程
    plsql连接Oracle数据库安装及配置
    Mysql常用SQL语句整理
    C#字符串处理和时间格式化整理
    PHP字符串处理和时间格式化整理
    pandas的小技巧
  • 原文地址:https://www.cnblogs.com/opesn/p/11644131.html
Copyright © 2011-2022 走看看