iptables系列二

时间:2022-05-11
本文章向大家介绍iptables系列二,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

iptables系列之基本应用及显式扩展

netfilter:Framework,TCP,内核中

iptables语法

  iptables [-t table] command CHAIN [num] 匹配条件 -j 处理动作

匹配条件:
    通用匹配
     -s
     -d 
     -p {tcp|udp|icmp}
     扩展匹配
        隐含匹配
        显式匹配
命令:
   管理规则:
      -A:附加一条规则,添加在链的尾部
      -I CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条,不加num,默认第一条
      -D CHAIN [num]:删除指定链中的第mun条规则
      -R CHAIN [num]:替换指定的规则;
      
    管理链:
       -F [CHAIN]: flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
       -P CHAIN:设定指定链的默认策略
       -N:自定义一条新的空链
       -X:删除一个自定义的空链,如若非空,可以先-F 清空,再删除。
       -Z:置零指定链中所有规则的计数器
       -E:重命名自定义的链。
    查看类:
       -L:显示指定表中的规则;
             -n:以数字格式显示主机地址和端口号
            -v:显示详细信息
            -vv:更详细
            -x:显示计数器精确值
            --line-numbers:显示规则号码
iptables -L -n 
iptables -t filter -L -n 
iptables -t nat -L -n 
iptables -t filter -A INPUT -s 172.16.0.0/16 -j DROP 

动作(target):

    ACCECT :放行
    DROP   :丢弃
    REJECT  :拒绝
    DNAT   :目标地址转换
    SNAT  :源地址转换
    REDIRECT  :端口重定向
    MASQUERADE:地址伪装
    LOG  :日志
    MARK :打标记
    NOTRACK 
    SET

扩展匹配

  隐含匹配:
       -p tcp 
            --sport PORT[-PORT]:源端口
            --dport PORT[-PORT]:目标端口(可以连续的端口)
            --tcp-flags  msak comp :只检查mask指定的标志位,是用逗号分隔的标志列表;comp:此列表中出现的标记位必须为1,comp中没出现的,而mask中出现的,必须为0。
            --syn:三次握手的第一次

       -p icmp 
             --icmp-type 
                0:echo-reply
                8:echo-request 
       -p udp 
            --sport 
            --dport 
    -p tcp -m tcp --dport   
    显式扩展:  明确指定的扩展,使用额外的匹配机制
     -m EXTESTION   --spe-opt 
         state:状态扩展
             结合nf_conntrack追踪会话的状态
                  NEW:新连接请求
                  ESTABLISH:已建立的连接 
                  INVALID:非法连接 
                  RELATED:相关联的。
                  
    -m state --state NEW -j ACCEPT 
    -m state --state NEW,ESTABLISHED  -j ACCEPT 放行两个。
    -m     multiport 离散多端口匹配扩展
          --source-ports
          --destination-ports 
          --ports 

注意:iptables不是服务,但是有服务脚本,服务脚本的主要作用在于管理保存的规则, 由于iptables是工作在内核中的,需要载入内存的,防止所定义的规则重启后消失,所以要保存这些规则,以及下一次生效,删除等。 装载及移除iptables/netfilter相关的内核模块

--tcp-flags SYN,FIN,ACK,RST SYN,ACK   --syn 
 (检查TCP的SYN,FIN,ACK,RST4个标志位其中只能SYN,ACK为1)   
 iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp  --dport 22 -j ACCEPT 
 iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j  ACCEPT
 
 
 lsmod:用于查看相关模块是否载入。
 lsmod - program to show the status of modules in the Linux Kernel
 
 lsmod |grep ip 
 
ip_conntrack:做ip追踪的 
 
serrvice  iptables stop
lsmod |grep ip 
关闭iptables的服务脚本,就是将iptables的内核模块移除。
 
vim /etc/init.d/iptables 
/sbin/modprobe 
/sbin/rmmod 
modprobe(8), rmmod(8), lsmod(8)
insmod 
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.1.3 -p tcp --dport 22 -j ACCEPT 
iptables -t filter -A  OUTPUT -s 172.16.1.3 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT 
iptables -P INPUT DROP 
iptables -P OUTPUT DROP 
iptables  -P FORWARD DROP 

iptables -t filter -I INPUT -d 172.16.1.3 -p tcp --dport 80 -j ACCEPT 
iptables -t filter -I INPUT -s 172.16.1.3 -p tcp --sport 80 -j ACCEPT 

iptables -t filter -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT 
iptables -t filter -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT 

icmp-type
http://www.cnitblog.com/yang55xiaoguang/articles/59581.html 
TYPE    CODE    Description
0   0   Echo Reply——回显应答(Ping应答)
8   0   Echo request——回显请求(Ping请求)

可以实现自己可以ping通任何人,其他人不可以ping本机:

iptables -t filter -A OUTPUT -s 172.16.1.3 -p icmp --icmp-type 8  -j ACCEPT 
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 0 -j ACCEPT  

允许dns的请求:

iptables -t filter -A INPUT -d 172.16.1.3 -p udp --dport 53 -j ACCEPT 
iptables -t filter -A OUTPUT -s  172.16.1.3 -p udp --sport 53 -j ACCEPT

dns服务器的迭代:

iptables -t filter -A OUTPUT -s 172.16.1.3 -p udp --dport 53 -j ACCEPT 
iptables -t filter -A INPUT -d 172.16.1.3 -p udp --sport 53 -j ACCEPT 

反弹式木马:

反弹木马,是驻留在用户计算机里的一段服务程序,而攻击者控制的则是相应的客户端程序。服务程序通过特定的端口,打开用户计算机的连接资源。一旦攻击者所掌握的客户端程序发出请求,反弹木马便和他连接起来,将用户的信息窃取出去。

连接追踪:
 ip_conntrack 
 可以追踪tcp和udp
 
 A--->B  
 连接跟踪(CONNTRACK),顾名思义,就是跟踪并且记录连接状态。Linux为每一个经过网络堆栈的数据包,生成一个新的连接记录项 (Connection entry)。
 
    /proc/net/ip_conntrack
    /proc/net/nf_conntrack el6 
    保存当前系统上每一个客户端和主机的所建立的连接状态。
iptstate 
iptstate - A top-like display of IP Tables state table entries
  -t  显示连接个数 
 
 /proc/net/nf_conntrack保留ip的连接状态,进行追踪。
 
 modprobe -r ip_conntrack 移除模块 
 modprobe -r nfnetlink
 
 service iptables stop 
 modprobe ip_conntrack 
 多少个连接就会有多少个条目
 /proc/sys/net/ipv4/ip_conntrack_max 
 /proc/sys/net/filter/nf_conntrack_max 
 /proc/sys/net/filter/nf_conntrack_max   定义nf_conntrack存储多少个条目,最多可以建立多少连接。若连接超过定义的值就会丢弃,导致大量的超时。
 
 注意:在业务繁忙的网站,此模块一定不要开启。
 iptables -t nat -L  会触发nf_conntrack模块。
可以修改:
  vim /etc/sysctl.conf 
net.netfilter.nf_conntrack_max = 655360
net.nf_conntrack_max = 655360   
 
iptables启动时会读取/etc/sysconfig/iptables 
service iptables save  保存iptables的规则

iptables-save > /etc/sysconfig/iptables.20150818
iptables-restore < /etc/sysconfig/iptables.20150818 
手动保存规则以及手动载入规则。

允许ssh和http的服务,并且还要追踪(以及默认策略):

iptables -F 
iptables -t filter -A INPUT -d 172.16.1.3 -p tcp --dport 22 -m state --state  NEW,ESTABLISHED -j ACCEPT 
iptables -t filter -A OUTPUT -s 172.16.1.3 -P tcp --sport 22 -m state --state  ESTABLISHED -j ACCEPT  

iptables -P INPUT DROP 
iptables -P OUTPUT DROP 
iptables -P FORWARD DROP 

iptables -t filter -A INPUT -d 172.16.1.3 -p tcp --dport 80 -m --state NEW,ESTABLISHED -j ACCEPT 
iptables -t filter -A OUTPUT -s 172.16.1.3 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT 

sysctl -w net.netfilter.nf_conntrack_max=65536 



sysctl - configure kernel parameters at runtime
EXAMPLES
       /sbin/sysctl -a

       /sbin/sysctl -n kernel.hostname

       /sbin/sysctl -w kernel.domainname="example.com"

       /sbin/sysctl -p /etc/sysctl.conf

在/proc/sys/net/netfilter/目录下参数进行配置以及超时时间。

若要永久有效将参数写在/etc/sysctl.conf 
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT 


ping 172.16.1.3
iptstate -t 

iptables -L -n --line-numbers 



iptables -t filter -I OUTPUT -s 172.16.1.3 -m state --state ESTABLISHED -j ACCEPT 
iptables -t filter -I INPUT -d 172.16.1.3 -m state --state NEW,ESTABLISHED -j ACCEPT 

iptables -D OUTPUT 2 

vim /etc/vsftpd/vsftpd.conf 
pasv_enable=NO 
servicevsftpd restart 


允许ftp主动模式通过:
iptables -t filter 


iptables -R OUTPUT 1 -s 172.16.1.3 -m state ESTABLISHED,RELATED -j ACCEPT 
 
iptables -R OUTPUT 1 -d  172.16.1.3 -m state NEW,ESTABLISHED,RELATED -j ACCEPT 


注意:要装载nf_

vim /etc/sysconfig/iptables-config 
IPTABLES_MODULES="nf_nat_ftp nf_conntrack_ftp"

service iptables reload 

iptables -I INPUT 2 -d 172.16.1.3 -p tcp -m mutiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT 


注意: !  表示条件取反