iptables知识点总结

iptables: 包过滤型防火墙
Firewall: 防火墙,隔离工具:工作与主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出相应处理的组件;

主机防火墙
网络防火墙
ipfw
ipchains
iptables/netfilter
framework: netfilter
hooks function
rule utils: iptables

功能:

filtter : 过滤,防火墙;
nat : network address translation, 网络地址转换;
mangle : 拆解报文,做出修改,封装报文
raw : 关闭nat表上启用的连接追踪机制;

链(内置)

PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUNTING

流入: PREROUTING --> INPUT
流出 : OUTPUT --> POSTROUTING
转发 : PREROUTING --> FORWARD --> POSTROUTING

各功能的分别实现:

      filter : INPUT, FORWARD, OUTPUT
      nat :  PREROUTING(DNAT), OUTPUT, POSTROUTING(SNAT),
     mangle :   PREROUTING , INPUT, FORWARD, OUTPUT, POSTROUTING
       raw:   PREROUTING , OUTPUT

路由发生的时刻:
报文进入本机后
判断目标主机
报文发出之前
判断经由哪个接口送往下一跳
iptables: 四表无链
添加规则时的考量点

        (1) 要实现哪种功能,判断添加在哪张表上;
        (2)报文流经的路径,判断添加在哪个链上;

链: 链上规则的次序,即为检查的次序,因此隐含一定的法则

(1) 同类规则(访问同一应用),匹配范围小的放上面
(2) 不同类规则(访问不同应用),匹配到报文频率较大的放上面;
(3) 将那些可由一条规则描述的多个规则合并为一个;

设置默认策略;

功能的优先级次序: raw --> mangle --> nat --> filter

规则:

组成部分:报文的匹配条件,匹配到之后处理动作。
匹配条件: 根据协议报文特征指定
基本匹配条件
扩展匹配条件

处理动作:

内建处理机制
自定义处理机制

注意:报文不会经过自定义 链,只能在内置链上通过规则进行引用后生效;

iptables : 规则管理工具

添加、修改、删除、显示等;
规则和链有计数器:

    pkts:由规则或链所匹配到的报文的个数;
    bytes : 由规则或链匹配到的所有报文大小之和;

iptables命令

     iptables [-t table] {-A|-C|-D} chain rule-specification

     ip6tables [-t table] {-A|-C|-D} chain rule-specification

     iptables [-t table] -I chain [rulenum] rule-specification

     iptables [-t table] -R chain rulenum rule-specification

     iptables [-t table] -D chain rulenum

     iptables [-t table] -S [chain [rulenum]]

     iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

     iptables [-t table] -N chain

     iptables [-t table] -X [chain]

     iptables [-t table] -P chain target

     iptables [-t table] -E old-chain-name new-chain-name

     rule-specification = [matches...] [target]

     match = -m matchname [per-match-options]

     target = -j targetname [per-target-options]

iptables [-t table] SUBCOMMAND CHAIN CRETERIA -j TAEGWT

-t table:

filter, nat,mangle,raw

链管理:

-F: flush,清空规则链:省略链,表示清空指定表上的所有的链;
-N :  new ,创建新的自定义规则链;
-X: drop, 删除用户自定义的空的规则链;
-Z: zero,清零,置零规则计数器
-P: Policy,为指定链设置默认策略,对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT;
-E:rEname, 重命令自定义链;引用计数不为0的自定义链,无法改名,也无法删除

规则管理:

-A:  append,将新规则追加于指定链的尾部;
-I :     insert, 将新规则插入至指定链的指定位置;
-D: delete,删除指定链上的指定规则;
        有两种指定方式:
            (1) 指定匹配条件;
            (2) 指定规则编号;
-R:replace, 替换指定链上的指定规则;

查看:

 -L: list, 列出指定链上的所有规则;
    -n:  numberic, 以数字格式实现地址和端口
    -v: verbose, 显示详细信息;
            -vv ,-vvv
    --line-numbers: 显示规则编号;
   -x: exactly, 显示计数器计数结果的精确值

示例:

      iptables -t  filter -N IN_public
      iptables -L -n
      iptables -t filter -E IN_public  OUT_public
      iptables -L -n
      #重启防火墙 
      systemctl restart firevalld.service
      iptables -L -n
      #修改默认策略 
      iptables -t filter -P FORWARD DROP
      iptables -L -n
      #恢复默认策略
      iptables  -t filter -P FORWARD ACCEPT
      iptables -L -n
     #查看规则编号
      iptables -n -L --line-numbers
      # 根据规则编号2删除规则
       iptables -D FORWARD 2
      # 查看详细信息
      iptables -n -L -v         #或使用-vv -vvv
     #清除链上的所有规则
     iptables -X

匹配条件:

基本匹配:

[i]   -s,--src, --source IP|Neraddr : 检查报文中源IP地址是否符合此处指定的地址范围;
[!] -d, --dst, --destination  IP[Netaddr: 检查报文中源IP地址是否符合此处指定的地址范围;
-p,--protocol {tcp|udp|icmp}:检查报文中的协议,即ip首部中的protocols所标识的协议;
-i ,--in-interface  IFACE: 数据报文的流入接口;仅能用于PREROUTING,INPUT及FORWARD链上;
-o,--out-interface IFACE: 数据报文的流出接口,仅能用于FORWARD,OUTPUT及POSTROUTING链上;

示例:

  iptables -F
  iptables -X
  iptables -t filter -A INPUT -d 172.18.251.117 -p tcp -j ACCEPT
  iptables -L  -n
  iptables -t filter -A OUTPUT -s 172.18.251.117 -p tcp -j  ACCEPT
  iptables -L -n -v
  iptables -P INPUT DROP
  iptables -P OUTPUT DROP
  iptables -P FORWARD DROP
  iptables -n -L -v && sleep 5 && iptables -F
  # 添加icmp规则
  iptables -A iNPUT -d 172.18.251.117 -p icmp -j ACCEPT
  iptables -n -L 
  ping 172.18.251.117
  iptables -A OUTPUT -s 172.18.251.117 -p icmp -j ACCEPT
  ping 172.18.251.117
  # 删除规则
  iptables -n -L --line-numbers
  iptables -D INPUT 2
  iptables -D OUTPUT 2
  iptalbes -n -L --line-numbers
 #根据接口添加规则
 iptables -A iNPUT -d 172.18.251.117 -i ens37 -j ACCEPT
 ping 172.18.251.117
 iptables -A OUTPUT -s 172.18.251.117 -o ens37 -j  ACCEPT
 ping 172.18.251.117

扩展匹配:-m macth name --spec_options
例如: -m tcp --dport 22

隐式扩展: 对-p protocol 指明的协议进行的扩展,可省略-m

-p tcp
      --dport PORT[-PORT]: 目标端口,可以是单个端口或连续多个端口;
     --sport  PORT[-PORT]
     --tcp-flags  LIST1, LIST2: 检查LIST1所指明的所有标志位,且这其中,LIST2所表示的所有标志位必须为1,而余下的必须为0,没有LIST1中指明的,不作检查;
         SYN , ACK , FIN , RST , PSH , URG
 --tcp-flags   SYN,ACK,FIN,RST SYN
--syn:
   -p  udp
           --dport
           --sport
   -p icmp
           --icmp-type
              可用数字表示其类型:
                     0: echo-reply
                     8:  echo-request

示例:

iptables -I INPUT -d 172.18.251.117 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s 172.18.251.117 -p tcp --sport 22 -j ACCEPT
iptables  -n -L --line-numbers
systemctl start httpd.service
systemctl status httpd.service
# web端访问:172.18.251.117
iptables -D input 2
# web端访问:172.18.251.117 访问不成功
# 根据icmp-type类型设定规则
iptables -A  OUTPUT -s 172.18.251.117 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 172.18.251.117 -p icmp --icmp-type 0 -j ACCEPT
iptables -n -L -v  --line-numbers
ping 172.18.251.116

显示扩展:必须使用-m选项指定使用的扩展;

目标:
   -j  TARGET: jump至指定的TARGET
       ACCEPT:  接受
       REJECT: 拒绝
        RETURN: 返回调用链
        REDIRECT: 端口重定向
         LOG: 记录日志
         MARK: 做防火墙标记
         DNAT:目标地址转换
         SNAT::源地址转换
         MASQUERADE : 地址伪装
         ....

自定义链: 由自定义链上的规则进行匹配检查

iptables:
显式扩展:必须显式指明使用的扩展模块(rpm -ql iptables)
CentOS 6 : man iptables
CentOS 7: man iptables-extensions

1、 multiport 扩展
   已离散方式定义多端口匹配,最多指定15个端口
  [!] --source-ports,--sports port[,port|,port:port]...:  指明多个源端口;
 [!]--destination-ports,--dports port[,port|,port:port]...:指明多个离散的目标端口
[!] --ports port[,port|,port:port]...

示例:

#多端口匹配
iptables -I INPUT -s 172.18.0.0/16 -d 172.18.251.117 -p tcp -m  multiport --dports=22,80 -j ACCEPT
iptables -I OUTPUT -d 172.18.0.0/16 -s 172.18.251.117 -p tcp -m multiport --sports=22,80 -j ACCEPT
iptables -vnL --line-numbers
iptables -D INPUT 2
iptables -D OUTPUT 2
# web端访问172.18.251.117可以正常访问
2、iprange 扩展

指明连续的(但一般是不能扩展为整个网络)ip 地址范围时使用:
[!] --src-range from[-to]: 指明连续的源IP地址范围;
[!] --dst-range from[-to]: 指明连续的目标IP地址范围;

iptables -I iNPUT -d 172.18.251.117 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.18.250.50-172.18.250.120 -j ACCEPT
iptables I OUTPUT -s 172.18.251.117 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.18.250.50-172.18.250.120 -j ACCEPT
iptables -D iNPUT 2
iptables -D OUTPUT 2
# web端访问172.18.251.117
3、string扩展
  检查报文中出现的字符串
  --algo{bm|kmp}
       bm=Boy
       kmp=knuth-Pratt-Morris
[!] --string  pattern

示例:

echo "this is usa page" > test.html
iptables -I OUTPUT -m string --algo bm string 'usa' -j REJECT
#web端访问test.html 页面
4、time扩展

根据报文到达的时间与指定的时间范围进行匹配;

--datestart
--datestop
--timestart
--timestop
--monthdays
--weekdays

示例:

iptables -I INPUT -d 172.18.251.117 -p tcp --dport 80 -m time --timestart 9:00 --timestop 23:00 -j ACCEPT

5、connlimit 扩展

根据每客户端IP(也可以是地址块) 做并发连接数数量匹配;

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

示例

 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT

6、limit扩展

基于收发报文的速率做检查:

令牌桶过滤器
--limit rate[/second|/minute|/hour|/day]
--limit-burst number

示例:

iptables -A INPUT -d 172.18.251.117 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 3/minute -j ACCEPT
iptables -A OUTPUT -s 172.18.251.117 -p icmp --icmp-type 0 -j ACCEPT
ping 172.18.251.117

7、state扩展

根据连接追踪机制检查连接的状态:
调整连接追踪功能所能够容纳连接的最大连接数量:
/proc/sys/net/nf_conntrack_max
已经追踪到并记录下的连接:
/proc/net/nf_conntrack
不同协议或连接类型追踪的时长:
/proc/sys/net/netfilter/
可追踪的连接状态:

NEW: 新发出的请求,连接追踪模板中不存在此里阿杰相关的信息条目,因此,将其识别为第一次发出的请求;
ESTABLISHED: NEW状态之后,连接追踪模块中为其建立的条目失效之前期间内所进行的通信状态;
RELATED:相关的连接;如ftp协议的命令连接与数据连接之间的关系;
INVALIED: 无法识别的连接;

--state STATE1,STATE2,...

示例:

iptables -vnL --line-numbers
iptables -I iNPUT -d 172.18.
251.117 -p tcp --dport 22 -m state --state NEW,ESTABLELISHED -j ACCEPT
iptables -A OUTPUT -s 172.18.251.117 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT -d 172.18.251.117 -p tcp --dport 80 -m state --state NEW,ESTABLELISHED -j ACCEPT
iptables -A OUTPUT -s 172.18.251.117 -p tcp --sport 80 -m state ESTABLELISHED -j ACCEPT
iptables -A INPUT -d 172.18.251.117 -p icmp --icmp-type 8 -m state --state NEW,ESTABLELISHED -j ACCEPT
iptables -A OUTPUT -s 172.18.251.117 -p icmp --icmp-type 0 -m state --state ESTABLELISHED -j ACCEPT
#对以上规则作优化
iptables -I iNPUT -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
iptables -I OUPUT -m state --state ESTABLISHED -j ACCEPT

问题: 如何开放被动模式的ftp服务?
(1)装载ftp追踪时的专用的模块:
# modprobe nf_conntrak_ftp

         >( 2 ) 放行请求报文:
             #     命令连接:  NEW,ESTABLISHED
             #     数据连接:  RELATED, ESTABLISHED
           iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
           iptables -A INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
          >(3)  放行响应报文
            #      ESTABLISHED
           iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

示例:

lsmod | grep ftp
 modprobe nf_conntrak_ftp
yum install vsftpd
cp /etc/issue /var/ftp/pub
ls -l /var/ftp/pub/
systemctl start vsftpd.service
ss -tnl
systemctl status vsftpd.service
iptables-save > /root/iptables `date +%F`
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -vnL --line-numbers
iptables -F
iptables-restore < /root/iptables2017-05-01
iptables -vnL
lsmod | grep ftp
iptables -I iNPUT -d 172.18.251.117 -p tcp -m multiport --dports 21:23,80 -m state --state NEW -j ACCEPT
iptables -I INPUT -d 172.18.251.117 -p tcp -m state --state RELATED,ESTABLELISHED -j ACCEPT
iptables -vnL --line-numbers
#web端访问ftp://172.18.251.117/pub

如何保存和重载规则:
保存规则至指定文件
iptables-save > /PATH/TO/SOMEFILE

从指定文件重载规则:
iptables -restore < /PATH/FROM/SOMEFILE

CentOS 6:

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

CentOS 7:

引入了新的iptables前端管理服务工具:firewalld
firewalld-cmd
firewalld-config

关于firewalld:
firewalld文章

示例:
网络防火墙: 放行 telnet,ftp ,web服务

规划图
#192.168.16.113 内部服务器端
echo " hellow world" > /var/httpd/html/index.html
systemctl start httpd
systemctl status httpd
yum install vsftpd
cp /etc/fstab   /var/ftp/pub
systemctl start vsftpd
#网络防火墙端
lsmod | grep ftp 
modprobe nf_conntrack_ftp
iptables -vnL
iptables -A FORWARD -m state --state ESTAVLISHED,RELATED -j ACCEPT
iptables -A FORWARD -d 192.168.16.113 -p tcp -m multiport --dport 21,22,80 -m state --state NEW -j ACCEPT
iptables -vnL 
#172.18.251.117外部主机端
curl 192.168.16.113
lftp 192.168.16.113
#注意:
telnet :23/tcp
samba: 137/udp,138/dup,139/tcp/445/tcp
dns: INPUT :53/dup, OUTPUT :53/udp
#核心转发: 
                /pro/sys/net/ipv4/ip_forward
                /etc/sysct.conf
                 net.ipv4.ip_forward = 1

iptables:
nat : Network Address Translation , 安全性,网络层+传输层
proxy : 代理,应用层
nat:
SNAT : 只修改请求报文的源地址;
DNAT : 只修改请求报文的目标地址;
nat 表:
PREROUTING : DNAT
OUTPUT
POSTROUTING : SNAT
源地址转换:

iptables -t nat  -A POSTROUTING -s LocalNet ! -d LocalNet -j SANT --to-source ExtIP
iptables -t nat -A POSTROUTING -s LocalNet !  -d LocalNet -j MASQUERADE

目录地址转换:

iptables -t nat -A PREROUTING -d ExtIP -p tcp| udp --dport  PORT -j DNAT --to-destination InterServerIP

示例:

# 内部主机192.168.164.122 需要访问外部web主机172.18.250.233
iptables -t nat -A POSTROUTING -s 192.168.164.0/24 ! -d 192.168.164.0/24 -j SNAT --to source 172.18.250.222
#外部主机192.168.164.122 访问外部地址 192.168.164.144 发生地址转换
iptables -t nat -A PREROUTING -d 192.168.164.144 -p tcp --dport 80 -j  DNAT --to-destination 172.18.252.209

你可能感兴趣的:(iptables知识点总结)