链:链上的规则次序,即为检查的次序:因此,隐含一定的应用法则:
    1.同类规则(访问同一应用),匹配范围小的放上面:
    2.不同类的规则(访问不同应用),匹配到报文频率较大的放在上面:
    3.将那些可由一条规则描述的多个规则合并起来:
    4.设置默认策略:


简单应用:

iptables -t filter -P INPUT DROP //设置INPUT链的默认规则为DROP

iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT //放行对本机22端口的访问

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT //放行对本机80端口的访问

iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT //放行对本机443端口的访问

iptables -t filter -A INPUT -p icmp --icmp-type 8 -j ACCEPT //放行ping请求,允许别人ping本机

iptables -t filter -P OUPUT DROP //设置OUTPUT链默认策略为DROP

iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT //放行22端口出站流量

iptables -t filter -A OUTPUT -p tcp --sport 80 -j ACCEPT //放行80端口的出站流量

iptables -t filter -A OUTPUT -p tcp --sport 443 -j ACCEPT //放行443端口的出站流量

iptables -t filter -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT //放行ping应答,允许本机回应ping请求



扩展应用:

1.以离散方式定义多端口匹配:最多指定15个端口-m multiport:

    --sports 指定多个源端口

    --dports 指定多个目标端口

    --ports 指定多个端口

iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT //放行22和80端口


   


2.指明连续的(但一般不脑整个网络)ip地址范围-m iprange:

    --src-range 源ip地址

    --dst-range 目标ip地址

iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 172.25.100.5-172.25.100.10 -j DROP //.5~.10不允许访问80端口


   


3.对报文中的应用层数据做字符串模式匹配检测-m string:

    --algo {bm|kmp}:字符串匹配检测算法:
    --string pattern:要检测的字符串
     --hex-string pattern:要检测的字符串,16进制格式

iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string 'GET /index.html' -j LOG //记录对index.html文件的请求


   

    

4.根据指定的时间范围进行匹配-m time:

    --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期,中间要加个T
    --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期,中间要加个T

    --timestart hh:mm[:ss]:起始时间
    --timestop hh:mm[:ss]:结束时间

    --monthdays day[,day...]:每个月只在哪一号检查
    --weekdays day[,day...]:周几检查
        Sa:周六
        Su:周日
        Fr:周五
        Th:周四
        We:周三
        Tu:周二
        Mo:周一

    --kerneltz:使用内核上的时区,而非默认的UTC:

iptables -A INPUT -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sa,Su --kerneltz -j DROP //星球6星期天14:30到18:30不允许访问80端口

   


5.根据每客户端IP做并发连接数数量匹配-m connlimit:

    --connlimit-upto n:连接的数量小于等于n时匹配:
    --connlimit-above n:连接的数量大于n时匹配:

iptables -A INPUT -p tcp --dport 21 -m connlimit --connlimit-above 2 -j REJECT //每个ip并发连接数不能大于2

   


6.根据”连接追踪机制“去检查连接的状态-m state:
    conntrack机制:追踪本机上的请求和响应之间的关系:状态有如下几种:
    NEW:新发出请求:连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
    ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态
    RELATED:相关联的连接:如ftp协议中的数据连接与命令连接之间的关系
    INVALID:无效的连接
    UNTRACKED:未进行追踪的连接

    --state conntrack

iptables -A INPUT -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT


   


放行FTP的方法:

放行命令连接(假设Server地址为172.25.100.131):

iptables -A INPUT -d 172.25.100.131 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.25.100.131 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

   

   

放行数据连接(假设Server地址为172.25.100.131):

iptables -A INPUT -d 172.25.100.131 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -s 172.25.100.131 -m state --state ESTABLISHED -j ACCEPT


   


   
7.保存规则

iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables


   


CentOS7引入了新的iptables前端管理工具firewalld,建议再CentOS7下还是使用和CentOS6的方法

systemctl stop firwalld.service    
systemctl disable firwalld
yum remove firewalld
yum remove firewalld-filesystem
yum install iptables-services
systemctl start iptables.service
systemctl enable iptables


   


更多精彩,尽在主机猫 http://hostmaoo.com

虚拟主机半价优惠活动进行中....