iptables

Posted

tags:

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

10.15 iptables filter表小案例

iptables扩展选项(了解)

其实匹配扩展中,还有需要加-m引用模块的显示扩展,默认是隐含扩展,不要使用-m。

状态检测的包过滤:

  • -m state --state {NEW,ESTATBLISHED,INVALID,RELATED} 指定检测那种状态

  • -m multiport 指定多端口号
    --sport
    --dport
    --ports

  • -m iprange 指定IP段
    --src-range ip-ip
    --dst-range ip-ip

  • -m connlimit 连接限定
    --comlimit-above # 限定大连接个数

  • -m limit 现在连接速率,也就是限定匹配数据包的个数
    --limit 指定速率
    --limit-burst # 峰值速率,最大限定

  • -m string 按字符串限定
    --algo bm|kmp 指定算法bm或kmp
    --string "STRING" 指定字符串本身

规则:放行指定端口

使用脚本设定规则:

创建脚本:

[[email protected] ~]# vi /usr/local/sbin/iptables.sh
[[email protected] ~]# vim /usr/local/sbin/iptables.sh

#! /bin/bash
ipt="/usr/sbin/iptables"
    # 定义一个变量——iptables命令(定义变量时尽量使用绝对路径,避免环境变量的影响)
 $ipt -F                         # 清空原有规则
 $ipt -P INPUT DROP
 $ipt -P OUTPUT ACCEPT
 $ipt -P FORWARD ACCEPT
     # 上面三行是定义其默认策略

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-m是指定检测状态,--state指定数据包状态(配合-m使用),该命令行的目的是使数据处理(通信

)更顺畅
$ipt -A INPUT -s 192.168.239.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

上面三行命令是指定放行的包的类型

    保存退出
    执行命令:
[[email protected] ~]# sh /usr/local/sbin/iptables.sh

查看

   [[email protected] ~]# iptables -nvL    

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 34  2296 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
0     0 ACCEPT     tcp  --  *      *       192.168.239.0/24     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
0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:21

icmp示例

先恢复成默认状态

 [[email protected] ~]# service iptables restart
 Redirecting to /bin/systemctl restart  iptables.service
[[email protected] ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 13  1114 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    80 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

icmp协议示例

[[email protected] ~]#iptables -I INPUT -p icmp --icmp-type 8 -j DROP

说明: 该规则的含义是:只允许本机访问外网,不允许外网访问本机!

10.16-10.18 iptables nat表应用

应用1

环境:

A机器两块网卡ens33(192.168.239.187)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。
准备工作:

准备两台虚拟机

  • A机器添加一块网卡ens37,ens37的网络连接方式选择‘LAN区段模式’(内网交换机连接,该模式下Windows无法与该客户端连接),开机后并设定IP为192.168.100.1
  • B机器关闭原有网卡连接,新增网卡ens37,开机后设定IP为192.168.100.100(网络连接模式选择LAN区段,并和A机器中的ens37网卡选择相同区段)
  • 设置ens37的IP:

  • 方法1:
    直接在命令行使用ifconfig命令
    [[email protected] ~]# ifconfig ens37 192.168.100.1/24
    注: 该方法只是临时设定IP,重启后会丢失。

方法2: 复制ens33的配置文件,然后在配置问价年内进行设置!
A和B机器可以100网段可以ping通

需求:

  • 需求1: 可以让B机器连接外网

    • 步骤一:A机器打开路由转发

      [[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
      该命令是更改内核设置,打开路由转发功能,默认值是0.
  • 步骤二:在A机器的nat表中增加一条规则
    [[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
    [[email protected]dai003 ~]# iptables -t nat -nvL
    Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens33 192.168.100.0/24 0.0.0.0/0
说明: -o 选项后面跟设备名称,表示出口网卡,MASQUERADE是伪装、冒充的意思。

  • 步骤三:为B设置网关为A机器ens37的IP:
    [[email protected] ~]# route add default gw 192.168.100.1
    步骤四:配置DNS(编辑DNS配置文件)
    [[email protected] ~]# vim /etc/resolv.conf

    Generated by NetworkManager

    nameserver 202.101.172.35       
            然后使用ping命令检测,网络通畅!      

    注: 此时B机器可以连通外网,但是外网机器无法访问B机器,A机器的作用就类似于一个路由器!

    • 需求2: C机器只能和A通信,让C机器可以直接连通B机器的22端口(端口映射)
    • 步骤一:A机器打开路由转发

      [[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
      该命令是更改内核设置,打开路由转发功能,默认值是0.

    • 步骤二:在A机器的nat表中增加2条规则(执行该步骤前先清除nat表原有规则)
    • 规则1:
      [[email protected] ~]# iptables -t nat -A PREROUTING -d 192.168.8.239.187 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

规则2:
[[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.239.187

  • 步骤三:为B设置网关为A机器ens37的IP:
    [[email protected] ~]# route add default gw 192.168.100.1
    Finish!    

    应用2

    iptables限制syn(同步)速度
    原理: 每5s内tcp三次握手大于20次的属于不正常访问。
    [[email protected] ~]# iptables -A INPUT -s ! 192.168.0.0/255.255.255.0 -d 192.168.239.187 -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name httpuser --rsource

[[email protected] ~]# iptables -A INPUT -m recent --update --seconds 5 --hitcount 20 --name httpuser --rsource -j DROP

说明: 其中192.168.0.0/255.255.255.0 为不受限制的网段,192.168.239.187为本机IP。
该iptables策略,可有效预防syn攻击,也可以有效防止机器人发垃圾帖。

应用3

iptables针对一个网段设置规则:
[[email protected] ~]# iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROP

iptables中DNAT、SNAT和MASQUERADE

DNAT(Destination Network Address Translation,目的地址转换) 通常被叫做目的映射。
SNAT(Source Network Address Translation,源地址转换)通常被叫做源映射。
iptables中DNAT和SNAT工作原理:
在任何一个IP数据包中,都会有Source IP Address与Destination IP Address这两个字段,数据包所经过的路由器也是根据这两个字段是判定数据包是由什么地方发过来的,它要将数据包发到什么地方去。而iptables的DNAT与SNAT就是根据这个原理,对Source IP Address与Destination IP Address进行修改。

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

CentOS中iptables防火墙 开放80端口方法

Iptables 网络安全

iptables防火墙

iptables基础知识

Linux中iptables防火墙指定端口范围

iptables防火墙