Linux防火墙iptables基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux防火墙iptables基础相关的知识,希望对你有一定的参考价值。

IPtables基础

    简介

    iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙、NAT。

    iptables里面有4张表,分别是filter,NAT,mangle,raw表。运维人员的话主要关注的是filter和NAT表。

  1. filter:主要是过滤包的,内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。

  2. NAT:主要用户地址转换和端口映射,内建三个链,分别是PREOUTING、OUTPUT、POSTROUTING。




    iptables命令基本结构

    iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

    iptables [ –t 表名 ]命令选项 [ 链名 ] [ 条件匹配 ] [ –j 目标动作或跳转 ]

    注:如果-t默认表是filter表。

技术分享

    Command(命令)   

-F:flush, 清空规则链; 省略链, 表示清空指定表上的所有的链;

  -N: new, 创建新的自定义规则连;

  -X: delete/drop, 删除用户自定义的空的规则链;

   -Z: zero, 清零, 置零规则计数器

   -P: Policy, 为指定链设置默认策略,未符合过滤条件之封包,预设的处理方式;

  filter表中的链而言, 默认策略通常有ACCEPT(允许,放行), DROP(丢弃), REJECT(拒绝);

  -E: rEname, 重命名自定义链; 引用计数不为0的自定义链, 无法改名, 也无法删除;

  -L, --list:列出某规则链中的所有规则。

 规则管理:

  -A: append, 将新规则追加于指定链的尾部;

  -I: insert, 将新规则插入至指定链的指定位置;  //不指明插入的行数时默认插入到第一行.

  -D: delete, 删除指定链上的指定规则;

    有两种指定方式:

      (1) 指定匹配条件;

      (2) 指定规则编号;

  -R: replace, 替换指定链上的指定规则;


        查看:

     -L: list, 列出指定链上的所有规则;

     -n: numberic, 以数字格式显示地址和端口号;

     -v: verbose, 显示详细信息;

        -vv, -vvv:详细更详细信息.

     --line-numbers: 显示规则编号;

     -x: exactly, 显示计数器计数结果的精确值;


    Parameter(参数)

  [!] -s IP|Netaddr: 检查报文中的源IP地址是否符合此处指定的地址范围;

  [!] -d IP|Netaddr: 检查报文中的目标IP地址是否符合此处指定的地址范围;

  -p {tcp|udp|icmp}: 检查报文中的协议, 即ip首部中的protocols所标识的协议;

  -i IFACE: 数据报文的流入接口; 仅能用于PREROUTING, INPUT及FORWARD链上;

  -o IFACE: 数据报文的流出接口; 仅能用于FORWARD, OUTPUT及POSTROUTING链上;

    

    Target:

      ACCEPT: 接收

      DROP: 丢弃

      REJECT: 拒绝

      LOG: 记录日志

      MARK: 做防火墙标记

      DNAT: 目标地址转换

      SNAT: 原地址转换

      MASQUERADE: 地址伪装


   基础命令

  •  iptables -nvL               //iptables -nvL 查看规则

[[email protected] ~]# iptables -nvL
Chain INPUT (policy ACCEPT 45 packets, 8317 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1284  149K ACCEPT     tcp  --  *      *       172.31.11.189        0.0.0.0/0           tcp dpt:22 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
    3   152 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 916 packets, 230K bytes)
 pkts bytes target     prot opt in     out     source               destination


  • iptables -t filter -A INPUT -p tcp --dport 80 -s X.X.X.X -j DROP //-A 表示插入到最后一行

  • iptables -t filter -I INPUT -p tcp --dport 80 -s X.X.X.X -j DROP //-A 表示插入到最后一行

[[email protected] ~]# iptables -t filter -A INPUT -p tcp --dport 80 -s 172.31.24.150 -j DROP
[[email protected] ~]# iptables -t filter -I INPUT -p tcp --dport 80 -s 172.31.24.151 -j DROP
[[email protected] ~]# iptables -nvL        
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       tcp  --  *      *       172.31.24.151        0.0.0.0/0           tcp dpt:80 
  466 41872 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.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 
    2   473 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
    0     0 DROP       tcp  --  *      *       172.31.24.150        0.0.0.0/0           tcp dpt:80 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
Chain OUTPUT (policy ACCEPT 10 packets, 1888 bytes)
 pkts bytes target     prot opt in     out     source               destination


  • iptables -nvL --line-numbers     //查看规则带有id

  • iptables -D INPUT 6    //根据规则的id号删除对应规则

[[email protected] ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      311 27704 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5        2   473 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
6        0     0 ACCEPT     tcp  --  *      *       172.31.24.150        0.0.0.0/0           tcp dpt:80
  • service iptables save //iptables如果不保存的话重启服务就会丢失,所以配置好之后一定要保存下,保存的路径在/etc/sysconfig/iptables

[[email protected] ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
  • iptables-save > X.bak //可以指定文件进行保存。

  • iptables-restore <3.bak  //可以将备份的文件导入。

[[email protected] ~]# iptables-save > 3.bak      //将iptables配置文件导出
[[email protected] ~]# cat 3.bak 
# Generated by iptables-save v1.4.7 on Thu Dec 29 10:38:16 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [108:16105]
-A INPUT -s 172.31.24.151/32 -p tcp -m tcp --dport 80 -j DROP 
-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 -j REJECT --reject-with icmp-host-prohibited 
-A INPUT -s 172.31.24.150/32 -p tcp -m tcp --dport 80 -j DROP 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Thu Dec 29 10:38:16 2016
# Generated by iptables-save v1.4.7 on Thu Dec 29 10:38:16 2016
*nat
:PREROUTING ACCEPT [833:120780]
:POSTROUTING ACCEPT [11:681]
:OUTPUT ACCEPT [11:681]
COMMIT
# Completed on Thu Dec 29 10:38:16 2016
[[email protected] ~]# iptables-restore <3.bak        //将备份的文件导入
  • iptables -Z    //-Z: zero, 清零, 置零规则计数器



案例

    针对filter表,预设策略INPUTDROP,其他两个链ACCEPT,然后针对172.31.24.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。写脚本执行是为了方便。:

#!/bin/bash
ips="/sbin/iptables"
$ips -F                  //对iptables配置进行清空下
$ips -P INPUT DROP        //请谨慎使用,执行后就会断开一切INPUT连接,所以这里用脚本导入。
$ips -P OUTPUT ACCEPT
$ips -P FORWARD ACCEPT
$ips -A INPUT -s 172.31.24.0/24 -p tcp --dport 22 -j ACCEPT
$ips -A INPUT -s 172.31.11.189 -p tcp --dport 22 -j ACCEPT 
$ips -A INPUT -p tcp --dport 80 -j ACCEPT
$ips -A INPUT -p tcp --dport 22 -j DROP


本文出自 “阿初.com” 博客,请务必保留此出处http://jimac.blog.51cto.com/401206/1887410

以上是关于Linux防火墙iptables基础的主要内容,如果未能解决你的问题,请参考以下文章

Linux防火墙iptables基础

Linux防火墙------iptables(基础概述)

Linux上iptables基础应用

Linux基础命令---防火墙iptables

Linux 之 iptables基础

Linux防火墙工具iptables基础介绍