美文网首页VPS
20170827Ubuntu防火墙

20170827Ubuntu防火墙

作者: cndaqiang | 来源:发表于2017-08-28 17:16 被阅读4次

    防火墙再不学就没法深入学习更多东西了

    首先纠正自己一个误解

    在使用iptables过滤特定端口的数据包时,我喜欢使用在线端口扫描检测我的操作结果,结果检测都是未开放,原来能检测到,不仅需要防火墙允许通过,还要有监听的程序,后通过Apache监听特定端口&在线端口扫描检测操作结果

    除非你的vps可以随时重装系统,或者可以断网后通过其他方式访问,否则不要轻易尝试

    参考

    Nftables HOWTO 中文翻译
    iptables文档
    看了那么多iptables的教程,这篇教程还是比较全面易懂的
    iptables详细教程:基础、架构、清空规则、追加规则、应用实例
    Ubuntu_IptablesHowTo
    鸟哥的Linux 私房菜-- Linux 防火墙与NAT 服务器
    保存iptable规则并开机自动加载

    环境

    Ubuntu 14.04 vps

    注:腾讯云有额外的安全组,需要在控制面板里打开,不然配置了防火墙也达不到目的

    iptables

    安装

    apt-get install iptables
    

    结构

    iptables的结构:iptables -> Tables表 -> Chains链 -> Rules规则

    1. Table表&Chains链

    鸟哥的Linux私房菜——iptables 内建各表格与链的相关性

    1.1 Filter表

    Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

    • INPUT链 – 处理来自外部的数据。
    • OUTPUT链 – 处理向外发送的数据。
    • FORWARD链 – 将数据转发到本机的其他网卡设备上。

    1.2 NAT表

    NAT是 Network Address Translation 的缩写, 这个表格主要在进行来源与目的之 IP 或 port 的转换,与 Linux 本机较无关,主要与 Linux 主机后的局域网络内计算机较有相关。

    • PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
      类似与路由器向lan发送数据
    • POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
      把lan的数据发到公网上去
    • OUTPUT链 – 处理本机产生的数据包

    1.3 Mangle表

    Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:

    • PREROUTING
    • OUTPUT
    • FORWARD
    • INPUT
    • POSTROUTING

    1.4 Raw表

    Raw表用于处理异常,它具有2个内建链:

    • PREROUTING chain
    • OUTPUT chain

    2. Rules规则

    参见iptables语法

    iptables语法

    iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 操作]

    -t 表名 不写默认为Filter

    1. 命令选项

    命令选项

    2. 规则

    2.1 添加iptables规则

    可以使用iptables -A命令追加新规则,新的规则将追加到链尾。
    如果,最后一条规则用于丢弃(DROP)所有数据包,则使用-A参数添加新规则,无效,可以使用-I在指定位置或开头加

    语法

    ptables [-t 表名] -A 链名 条件匹配 -j 操作
    

    条件匹配的基本参数

    • -p 协议(protocol)
      指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。
      如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。
      可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols
      还可以使用–protocol参数代替-p参数

    • -s 源地址(source)
      指定数据包的源地址
      参数可以使IP地址、网络地址、主机名
      例如:-s 192.168.1.101指定IP地址
      例如:-s 192.168.1.10/24指定网络地址
      如果不指定-s参数,就代表所有地址
      还可以使用–src或者–source

    • -d 目的地址(destination)
      指定目的地址
      参数和-s相同
      还可以使用–dst或者–destination

    • -i 输入接口/网卡(input interface)
      例如:-i eth0指定了要处理经由eth0进入的数据包
      如果不指定-i参数,那么将处理进入所有接口的数据包
      如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
      如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包
      还可以使用–in-interface参数

    • -o 输出(out interface)
      指定了数据包由哪个接口输出
      如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
      如果出现! -o eth0,那么将从eth0以外的接口输出
      如果出现-i eth+,那么将仅从eth开头的接口输出
      还可以使用–out-interface参数

    条件匹配的扩展参数,注意是两个--
    对规则有了一个基本描述之后,有时候我们还希望指定端口、TCP标志、ICMP类型等内容。

    • --sport 源端口(source port)
      针对 -p tcp 或者 -p udp
      缺省情况下,将匹配所有端口
      可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。
      /etc/services文件描述了上述映射关系。
      从性能上讲,使用端口号更好
      使用冒号可以匹配端口范围,如”–sport 22:100″
      还可以使用”–source-port”
    • --dport 目的端口(destination port)
      针对-p tcp 或者 -p udp
      参数和-sport类似
      还可以使用”–destination-port”
    • --tcp-flags TCP标志 针对-p tcp
      可以指定由逗号分隔的多个参数
      有效值可以是:SYN, ACK, FIN, RST, URG, PSH
      可以使用ALL或者NONE
    • --icmp-type ICMP类型 针对-p icmp
    • --icmp-type 0 表示Echo Reply
    • --icmp-type 8 表示Echo

    -j 操作
    指定了当与规则(Rule)匹配时如何处理数据包
    可能的值

    • ACCEPT:允许数据包通过。
    • DROP:直接丢弃数据包,不给出任何回应信息。
    • REJECT:拒绝数据包通过,必须时会给数据发送端一个响应信息。
    • LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
    • QUEUE:防火墙将数据包移交到用户空间
    • RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)

    2.2 删除iptables规则

    iptables [-t 表名] -D 链名 序号
    

    示例

    #删除所有规则
    root@VM-10-194-ubuntu:/home/ubuntu#  iptables -F
    #查看规则
    root@VM-10-194-ubuntu:/home/ubuntu# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    #添加规则
    root@VM-10-194-ubuntu:/home/ubuntu# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    #查看规则,可看到已加载添加的80端口(dpt:http),在INPUT的一个位置,序号就是1,按出现的次序,序号依次为1,2,3...
    root@VM-10-194-ubuntu:/home/ubuntu# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    #删除INPUT的序号1规则
    root@VM-10-194-ubuntu:/home/ubuntu# iptables -D INPUT 1
    #再查看规则,已删除
    root@VM-10-194-ubuntu:/home/ubuntu# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination 
    

    2.3 生效&保存规则

    规则添加后就立即生效了
    添加的规则,重启之后就消失了

    永久生效方法

    把规则保存到一个文件
    开机时自动加载文件
    网上推荐的开机自动加载,不知为何在我的vps上都不好使
    手动方法
    保存# iptables-save > /etc/iptables/rules.v4
    恢复# iptables-restore < /etc/iptables/rules.v4
    利用了bash的重定向,/etc/iptables/rules.v4为自定义的文件
    ipv为ip6tables-save ip6tables-restore
    使用iptables-persistent

    # 安装
    apt-get install iptables-persistent
    # 更改配置后,保存,开机会自动加载
    service  iptables-persistent save
    

    2.4 注

    nftable

    安装

    apt install nftables
    

    先省略,需要再继续学

    相关文章

      网友评论

        本文标题:20170827Ubuntu防火墙

        本文链接:https://www.haomeiwen.com/subject/wguidxtx.html