zoukankan      html  css  js  c++  java
  • iptables基础命令详解

    TCP/IP基本概念:
    TCP/IP将网络分为四层:应用层,传输层,网络层,链路层。

    传输层:定义了两种通信协议,分别为TCP协议和UDP协议。
    	TCP协议:TCP协议在传输 数据过程中会检查数据的完整性,因此传输的数据是不会丢失的。
    	UDP协议:当选择UDP协议作为数据传输方法时,其目的通常在于满足效率方面的要求,而非数据正确性方面的要求。
    

    防火墙的分类:数据包过滤防火墙&应用层防火墙

    NETfilter的四个表:
    filter:filter是NETfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用
    nat:比较通俗的 方式说,其功能就是IP分享器,只不过其所能执行的 功能,比一般市场上的IP分享器功能强大得多
    mangle:可以通过mangle机制来修改经过防火墙内数据包的内容
    raw:负责加快数据包穿过防火墙机制的速度,由此提高防火墙的性能

    	iptables中所有链的默认规则有DROP和ACCEPT两个值,默认的值为ACCEPT.
    
    	1.修改FORWARD链的默认策略设置为DROP:
    	#iptables -t filter -p FORWARD DROP   #-t指定所要操作的表,如果没有指定,则默认的表为filter.
    
    	iptables的-F参数不会影响到默认的策略状态,要改变默认策略的状态,一定要使用-P的参数来设置。
    
    	2.将规则添加到filter表的INPUT链:
    	#iptables -t filter -A INPUT -p icmp -j ACCEPT
    
    	3.在INPUT链中插入新的规则:
    	#iptables -t filter -I INPUT 2 -p tcp -j ACCEPT  #插入到第二条规则的位置,iptables规则的优先级别为:由上而下.
    
    	4.取代INPUT链内已经存在的规则:
    	#iptables -t filter -R INPUT -p tcp -j ACCEPT
    
    	5.删除INPUT链中已经存在的规则:
    	#iptables -t filter -D INPUT 2   #删除原来的第二条规则
    
    iptables规则语法:
    	 基本语法:iptables -t filter -A INPUT -p icmp -j DROP
    	 高级语法:iptables -t filter -A INPUT -m mac --mac-source 00:E0:18:00:7C:A4  -j DROP
    
    	1.将192.168.0.83进入本机的icmp协议包都丢弃
    	#iptables -t filter -A INPUT -p icmp -s 192.168.0.83 -j DROP
    	
    	2.不允许192.168.0.83主机通过本机的DNS服务来执行名称解析
    	#iptables -A INPUT -p udp -s 192.168.0.83 --dport 53 -j REJECT
    
    	3.允许192.168.0.83主机连接到本机的TELNET服务
    	#iptables -A INPUT -p tcp -s 192.168.0.83 --dport 23 -j ACCEPT
    
    	4.允许192.168.1.0/24网段的主机向本机192.168.0.1提出任何服务请求
    	#iptables -A INPUT -p all -s 192.168.1.0/24 -d 192.168.0.1 -j ACCEPTT
    
    	5.只允许客户端主机从eth1这个接口访问本机的SSH服务
    	#iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT
    
    	6.不允许本机的应用程序从eth0接口发送数据包去访问edu.uuu.com.tw以外的网站
    	#iptables -A OUTPUT -o eth0 -p tcp -d !edu.uuu.com.tw --dport 80 -j REJECT
    
    	7.不允许本企业内部的主机访问企业以外的任何网站
    	#iptables -A FORWARD -i eht1 -o eth0 -p tcp  --dport 80 -j DROP
    

    简单的单机防火墙:

    1.网络上的任何主机都能正常访问192.168.0.1主机上的SSH和TENNET服务
    2.网络上只有192.168.0.200这台主机可正常访问192.168.0.1上的所有服务

    iptables -P INPUT DROP
    iptables -A INPUT -p tcp -d 192.168.0.1 --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp -d 192.168.0.1 --dport 23 -j ACCEPT
    iptables -A INPUT -p tcp -s 192.168.0.200 -d 192.168.0.1 --dport 25 -j ACCEPT
    iptables -A INPUT -p tcp -s 192.168.0.200 -d 192.168.0.1 --dport 80 -j ACCEPT

    解决应用程序无法从防火墙主机上对外建立新连接的问题:
    iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
    本规则使用state模块--ESTABLISHED、NEW、RELATED、INVALID
    iptables -A INPUT -p all -m state --state INVALID -j DROP

    管理防火墙规则数据库的方法:
    1.在修改完netfilter的会泽之后,可以使用service iptables save将所有的命令存储到/etc/sysconfig/iptables文件中,接着使用chkconfig iptables on,设置iptables开机自动启动.但是在修改的时候并不方便.
    2.使用shell脚本管理规则数据库
    优点:提升管理防火墙规则的简便性
    可以在shell脚本中使用变量
    防火墙规则容易阅读
    备份防火墙规则数据库极为方便
    缺点:无法在开机后自动载入规则数据库
    该shell文件的属主和属组,需要修改为root,权限为700.

    使用filter构建网关式防火墙:

    1.192.168.0.200这台主机只能访问10.0.1.100主机的SMTP和POP3服务
    2.192.168.0.0/24网段上的其他主机只可以访问因特网上的DNS、SMTP、HTTP、HTTPS服务
    3.因特网上的主机不得访问企业内任何的主机

    iptables -t filter -P INPUT DROP
    iptables -t filter -P FORWARD DROP
    iptables -A INPUT -p tcp -m state --state INVALID -j DROP
    iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -i eth0 -o eth1 -m state --state INVALID -j DROP
    iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -i eth1 -o eth0 -p tcp -s 192.168.0.200 -d 10.0.1.100 --dport 25:110 -j ACCEPT
    iptables -A FORWARD -i eth1 -o eth0 -p all -d 192.168.0.200 -j DROP
    iptables -A FORWARD -i eth1 -o eth1 -p tcp --dport 25,110 -j ACCEPT
    iptables -A FORWARD -i eth1 -o eth1 -p tcp --dport 80,443 -j ACCEPT
    iptables -A FORWARD -i eth1 -o eth1 -p udp --dport 53 -j ACCEPT

    netfilter的NAT机制:
    PREROUTING:当我们下发规则要去修改数据包的”Destination IP”时,该规则放在PREROUTING链中.
    POSTROUTING:修改数据包内的来源IP.
    OUTPUT:

    iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 10.0.1.200
    内网的ip访问因特网时,将其数据包的sourceIP转换为其公网IP,即可实现内网对因特网的访问.
    接口名称的问题:-o后面的“接口名称”务必设置为当前所使用的公网IP的地址.
    如果公网IP不是固定的:#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

    netfilter的mangle机制:
    修改IP包头的TTL值:可以修改Linux主机所发送的数据包,将这些数据包的TTL值改为128,让黑客误以为是Windows操作系统,也可以将所有Windows操作系统所发送的数据包的TTL值改为64,让黑客误以为是Linux系统.
    修改IP包头的DSCP值或对特定的数据包设置特征:
    通过IP包内的DSCP值来分类:
    我们可以通过mangle机制来修改IP包内的DSCP值,例如:把DSCP值改为0000-01,接着在“带宽分配器”上设置,如果数据包内的DSCP值为0000-01,就给予64KB/s的带宽
    使用mangle机制为数据包标示识别码;
    mangle机制可以为特定的数据包来标示不同的识别码,例如:如果数据包内的source port为80,就标示该数据包的识别码为80,接着在“带宽分配器”上设置,如果数据包的识别码为80,就给予512KB/s的带宽
    iptables -t mangle -A OUTPUT -p tcp --dport 22 -j DSCP --set-dscp 43

    netfilter的raw机制:

    Netfilter/iptables的高级技巧:
    防火墙性能的最优化:
    1.调整防火墙规则顺序:匹配命中次数越高者越靠前(设置防火墙一段时间后执行iptables -L -n -v来查看匹配的次数)
    2.巧妙地使用multiport和iprange模块
    iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 22,23,25,80,110 -j ACCEPT #这样不管哪个服务器所需的匹配次数都会是一样的
    iptables -A INPUT -m iprange --src-range 192.168.1.12-192.168.1.16 -j ACCEPT
    3.巧妙使用用户自定义的链

    Netfilter连接处理能力与内存消耗:
    1.计算最大连接数:(nf_conntrack: table full, dropping packet)
    2.调整连接跟踪器:
    3.连接跟踪数量与内存消耗:

        使用raw表:
        nf_conntrack模块默认会自动跟踪所有链接,在raw表加入以下规则,即可不被nf_conntrack跟踪:
        iptables -t raw -A PREROUTING -i eth2 -o eth1 -p tcp --dport 25 -j NOTRACK
        iptables -t raw -A PREROUTING -i eth1 -o eht2 -p tcp --sport 25 -j NOTRACK
        raw表的好处在于“加速”以及增加可跟踪的连接数量,因为raw表所定义的连接不会被跟踪,也就不会算作连接跟踪数量。
        PREROUTING:如果是网关式防火墙,PREROUTING链可以用来处理防火墙两侧网络之间所建立的连接,另外,PREROUTING链也可以处理任何主动连接到防火墙本机的连接。
        OUTPUT:用来处理本机对外建立的连接。
    
        简单及复杂通信协议的处理:
        1.简单通信协议:
        2.复杂通信协议:
            客户端与服务器端之间,需要多条连接才能完成应用的协议,就属于复杂通信协议。
            FTP通信协议的两种工作模式:被动模式&主动模式
            
        常见的网络攻击手段及防御方法:
            1.PortScan攻击:PortScan是一种极常见的攻击行为,其目的是在探测特定主机上有哪些服务是开启的,接着,再从这些信息来分析可能有机会入侵的通道在哪里。因此,PortScan的攻击通常只是真正入侵之前的准备,而真正的攻击行动可能随之展开。
            使用netfilter来防御portscan的攻击:
            iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT 
            iptables -A INPUT -P all -m state --state NEW -m recent --name port_scan --update --seconds 1800 --hitcount 10 -j DROP
            itables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 22,25,80,110 -j ACCEPT
            iptables -A INPUT -p all -m recent --name port_scan --set
            半个小时内客户端访问22,25,80,110端口的次数超过10次,就判定为portscan攻击
    
            2.密码攻击:
            a.未加密通信协议下的密码攻击防御:
            iptables -A OUTPUT -p tcp --sport 110 -m string --algo bm --string “ERR Authentication failed” -m recent --name pop3 --ipdate --seconds 600 --hitcount 6 -j REJECT
            iptables -A OUTPUT -p tcp --sport 110 -m string --algo bm --string “ERR Authentication failed” -m reecent --name pop3 --set
            认证失败次数超过6次,则认为是密码攻击
            b.加密通信协议下的密码攻击防御
            a.改变SSH服务器所能接受的最大密码错误次数:
            vi /etc/ssh/sshd_config 
            修改MaxAuthTries参数的值
            b.将送至SSH服务器的SYN数据包数量作为匹配依据:
            iptables -A INPUT -p tcp --syn --dport 22 -m recent --name ssh --update --seconds 600 --hitcount 4 -j DROP
            iptables -A INPUT -p tcp --syn --dport 22 -m recent --name ssh --set
     
            3.DOS和DDOS网络攻击:
            DOS:严重消耗被攻击者的系统或网络资源,由此达到干扰需要访问该服务的正常使用者.
    

            DDOS:
    

            4.URL攻击防御:
            
            5.管理病毒感染时的连接消耗:
  • 相关阅读:
    python——集合
    python——字典
    python——用递归的方法求x的y次幂
    python——全局变量&局部变量
    python——组织列表
    Linux显示网络相关信息
    Linux里的发消息
    Linux中各种压缩文件
    Linux中的man
    Linux的find命令
  • 原文地址:https://www.cnblogs.com/kasumi/p/6126629.html
Copyright © 2011-2022 走看看