iptables


iptables

iptables基本介绍

  1.什么是防火墙

    防止别人恶意访问

  2 防火墙种类

    硬件防火墙

      F5

    软件防火墙

      iptables

      firewalld

    安全组

  3.流程

    用户  --->  调用iptables  --->  ip_tables内核模块  --->  Netfilter(系统安全框架) --->  过滤请求

   

  4.什么是包过滤防火墙

    1.什么是包

      在数据传输过程,并不是一次性传输完成的;而是将数据分成若干个数据包,一点一点的传输

    2. 什么是包过滤防火墙

      过滤数据包的防火墙

  5.包过滤防火墙如何实现

    通过系统安全框架,过滤数据包

iptables的使用

  使用前准备步骤:

    1.安装Iptables

      yum install iptables*

    2.启动Iptables

      systemctl start iptables

    3.关闭firewalld

      systemctl disable --now firewalld

  格式:

    iptables [参数-t] [表名] [选项] [链名称] [条件] [动作] [动作结果]

  参数:

    -t :指定操作的表

    -n:不反解地址

    -P:--policy 指定链的默认策略

    增:

    -I :--insert 插入一条规则,插入到顶部

    -A:--append 追加一条规则到链中

    -N:--new-chain 创建一个自定义链 

    删:

    -F:--flush 清空

    -Z:--zero 清空计数器(包数量、包大小)

    -D:--delete 删除链中的规则

    -X:--delete-chain 删除一个自定义链

    改:

    -R:--replace 修改

    查:

    -S:--list-rules 列出所有的规则

    -L:--list 列出当前的规则

    -v:显示数据包和数据包大小

  知识储备:

    netstat -nutlp :查看本机端口占用的命令

iptables的表和链

  四表五链

    1、那四个表,有哪些作用

      具备某种功能的集合叫做表

      filter     : 负责做过滤功能呢     : INPUT、OUTPUT、FORWARD

      nat       : 网络地址转换       :PREROUTING、INPUT、OUTPUT、POSTROUTING

      mangle: 负责修改数据包内容 :PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD

      raw      : 负责数据包跟踪         :PREROUTING、OUTPUT

    2、那五条链,运行在那些地方

      PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING

      1) PREROUTING   : 主机外报文进入位置,允许的表    mangle, nat

                (目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)

      2) INPUT         :报文进入本机用户空间位置,允许的表    filter, mangle

      3) OUTPUT       :报文从本机用户空间出去的位置,允许    filter, mangle, nat

      4) FOWARD      :报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle

      5) POSTROUTING:报文经过路由被转发出去,允许    mangle,nat

                (源地址转换,把原始地址转换为转发主机出口网卡地址

  流程图

    流入本机 :PREROUTING --> INPUT --> PROCESS(进程)

    经过本机 :PREROUTING --> FORWARD --> POSTROUTING

    从本机流出:PROCESS(进程) --> OUTPUT --> POSTROUTING

    流入本机 : ---> PREROUTING ---> INPUT ---> B

    流出本机 : A ---> OUTPUT ---> POSTROUTING ---> 

    经过本机 : A ---> OUTPUT ---> POSTROUTING | ---> PREROUTING ---> FORWARD ---> POSTROUTING ---> C --->   PREROUTING ---> INPUT ---> B

iptables的匹配条件

  TCP(http)

  UDP

  ICMP(ping)

  ALL

iptables的地址 

  -s:源地址      :发送请求的地址

  -d目标地址  :访问的地址

iptables的端口

  --sport:源端口    :发送请求的端口

  --dport:目标端口:访问的端口

iptables的动作

  -i   : 进来的网卡

  -o  : 出去的网卡

  -m : 指定模块

  -j   : 转发动作

  -p  : 指定协议

iptables动作结果

  ACCEPT     :将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链

  REJECT     :拦阻该数据包,并传送数据包通知对方

  DROP    :丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序

  REDIRECT :将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则

基础案例

  案例1:只允许22端口可以访问,其他端口全部无法访问

    iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT

    iptables -t filter -A INPUT -p TCP -j DROP

  案例2:只允许22,80,443端口可以访问,其他端口全部无法访问

    iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT

    iptables -t filter -A INPUT -p TCP --dport 80 -j ACCEPT

    iptables -t filter -A INPUT -p TCP --dport 443 -j ACCEPT

    iptables -t filter -A INPUT -p TCP -j DROP

  案例3:只允许22,80,443端口可以访问,其他端口全部无法访问,但是本机可以访问百度

  案例4:要求使用192.168.15.81能够通过22端口链接,但是其他的不行

    iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22 -j ACCEPT

    iptables -t filter -A INPUT -p TCP -j DROP

  案例5:只允许192.168.15.71能够通过22端口链接,其他的不行

    iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT

    iptables -t filter -A INPUT -p TCP -j DROP

  案例6:要求192.168.15.71对外部不可见

    iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP

  案例7:要求使用eth0网卡的所有请求全部拒绝

    iptables -t filter -A INPUT -p TCP -i etho -j DROP

  使用172.16.1.71登录进来的窗口,不允许访问百度

    iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP

  案例8:要求访问服务器的8080端口转发至80端口

    iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80

  案例9:要求只允许windows通过ssh连接192.168.15.81,其他的拒绝

    iptables -t filter -I INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT

    iptables -t filter -I INPUT -p TCP --dport 22 -j DROP

模块

  拓展iptables的功能的   

  1.multiport(连续匹配多个端口)

    --dports:

      指定多个端口(不同端口之间以逗号分割,连续的端口使用冒号分割)

  2.iprange(指定一段连续的ip地址范围)

    --src-range from[-to]:

      源地址范围

    --dst-range from[-to]:

      目标地址范围

  3.string(匹配指定字符串)

    --string pattern :

      指定要匹配的字符串

    --algo {bm|kmp} :

      匹配的查询算法

  4.time(根据时间段匹配报文)

    --timestart hh:mm[:ss] :

      开始时间

    --timestop hh:mm[:ss] :

      结束时间

    --monthdays day[,day...] :

      指定一个月的某一天

    --weekdays day[,day...] :

      指定周 还是 周天

  5.icmp(禁ping, 默认本机无法ping别人 、别人无法ping自己)

    --icmp-type {type[/code]|typename}

      echo-request (8) 请求

      echo-reply (0)     回应

  6.connlimit(限制链接数,并发连接数)

    --connlimit-upto n :

      如果现有连接数小于或等于 n 则 匹配

    --connlimit-above n :

      如果现有连接数大于n 则匹配

  7.limit(针对 报文速率 进行限制  秒、分钟、小时、天)

    --limit rate[/second|/minute|/hour|/day] :

      报文数量

    --limit-burst number :

      报文数量(默认:5)

模块案例

  案例1.要求将22,80,443以及30000-50000之间所有的端口向外暴露,其他端口拒绝

    iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT

    iptables -f filter -A INPUT -p TCP -j DROP

  案例2.要求访问数据包中包含HelloWorld的数据不允许通过

    iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP

  案例3.要求192.168.15.1 192.168.15.10之间的所有IP能够连接192.168.15.81,其他拒绝

    iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT 

    iptables -f filter -A INPUT -p TCP -j DROP

  案例4.要求每天的12到13之间,不允许访问

    iptables -t filter -A INPUT -p TCP -m time  --timestart 4:00   --timestop 5:00 -j DROP

    必须使用UTC时间

  案例5.要求别人不能ping本机,但是本机可以ping别人

    iptables -t filter -A INPUT -p TCP -m icmp --icmp-type "echo-request" -j DROP

  案例6.要求主机连接最多有2个

    iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP

  案例7.要求限制速率在500k/s左右

    iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT

    iptables -t filter -A INPUT -p TCP -j DROP

END

相关