iptables

一、iptables基础概念
  • 链(chain):系统包含五条链,PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD。可以自定义链
  • 表(table):系统包含5张表,raw、mangle、nat、filter、security。不能自定义表
            ~~~~~~~         raw表: iptables是有状态的,即iptables对数据包有连接追踪(connection tracking)机制,而raw是用来去除这种追踪机制的
            ~~~~~~~        mangle表:用于修改数据包头的IP信息
            ~~~~~~~        nat表:用于源、目的地址转换
            ~~~~~~~        filter表: 用于控制到达某条链上的数据包是继续放行、直接丢弃(drop)或拒绝(reject)
            ~~~~~~~        security表:不是很懂??
  • 规则(rule):具体的包处理规则,包括acl规则、nat规则等。常见处理动作包括:
             ~~~~~~~~          DROP:直接将数据包丢弃,不再进行后续的处理。应用场景是不让某个数据源意识到你的系统的存在,可以用来模拟宕机;
             ~~~~~~~~          REJECT:给客户端返回一个connection refused或destination unreachable报文。应用场景是不让某个数据源访问你的系统,善意地告诉他:我这里没有你要的服务内容;
             ~~~~~~~~         QUEUE:将数据包放入用户空间的队列,供用户空间的程序处理;
             ~~~~~~~~         RETURN:跳出当前链,该链里后续的规则不再执行;
             ~~~~~~~~          ACCEPT:同意数据包通过,当前基础链都直接通过,比如基础链FORWARD通过;
             ~~~~~~~~         JUMP:跳转到其他用户自定义的链继续执行。
             ~~~~~~~~         DNAT: 做目的地址转换,该链里的后续规则不再执行,直接跳往下一个链,例如当前在PREROUTING链中,直接跳往FORWARD
             ~~~~~~~~         SNAT: 源地址转换,完成转换后,直接跳往下一个链
             ~~~~~~~~         MARK: 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则
             ~~~~~~~~          LOG: 将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 组态档,进行完此处理动作后,将会继续比对其它规则
             ~~~~~~~~          MASQUERADE: 改写封包来源 IP 为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则链(mangle:postrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用
二、网络包经过iptables的处理路径

网络包经过iptables的处理路径
       ~~~~~~       包从网卡进来之后先通过PREROUTING链,再经过路由表判断如果是发送给本机的包则继续通过INPUT链;如果是需要转发的包则经过FORWARD链。
       ~~~~~~       每条链由不同的表组成,具体每条链上的表如上图所示。每条链上的表处理顺序为:raw、mangle、nat、filter、security。
       ~~~~~~       自定义链:表中的规则可以通过JUMP动作跳到自定义链。

三、iptables命令使用
查看iptables表:
iptables -t 表名 -L 链名 
[root@master-node ~]# iptables -t nat -L PREROUTING
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
KUBE-SERVICES  all  --  anywhere             anywhere             /* kubernetes service portals */
DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL

      ~~~~~      target表示动作, KUBE-SERVICES表示jump到KUBE-SERVICES自定义链

  • 如果缺省 -t 表名,默认为filter表
[root@master-node ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
KUBE-NODEPORTS  all  --  anywhere             anywhere             /* kubernetes health check service ports */
KUBE-EXTERNAL-SERVICES  all  --  anywhere             anywhere             ctstate NEW /* kubernetes externally-visible service portals */
KUBE-FIREWALL  all  --  anywhere             anywhere
  • 如果缺省 链名,默认显示所有链
[root@master-node ~]# iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
ANTREA-PREROUTING  all  --  anywhere             anywhere             /* Antrea: jump to Antrea prerouting rules */

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ANTREA-OUTPUT  all  --  anywhere             anywhere             /* Antrea: jump to Antrea output rules */

Chain ANTREA-OUTPUT (1 references)
target     prot opt source               destination
CT         udp  --  anywhere             anywhere             /* Antrea: do not track outgoing encapsulation packets */ udp dpt:6081 ADDRTYPE match src-type LOCAL NOTRACK

Chain ANTREA-PREROUTING (1 references)
target     prot opt source               destination
CT         udp  --  anywhere             anywhere             /* Antrea: do not track incoming encapsulation packets */ udp dpt:6081 ADDRTYPE match dst-type LOCAL NOTRACK
  • 可指定自定义链名
[root@worker-node1 ~]# iptables -L KUBE-SERVICES
Chain KUBE-SERVICES (2 references)
target     prot opt source               destination
REJECT     tcp  --  anywhere             bogon                /* default/banana-service has no endpoints */ tcp dpt:rrac reject-with icmp-port-unreachable
  • -n将端口号和IP地址以数字形式显示
[root@worker-node1 ~]# iptables -L KUBE-SERVICES -n
Chain KUBE-SERVICES (2 references)
target     prot opt source               destination
REJECT     tcp  --  0.0.0.0/0            10.103.19.32         /* default/banana-service has no endpoints */ tcp dpt:5678 reject-with icmp-port-unreachable
  • -v显示规则命中的包数目及大小
[root@worker-node1 ~]# iptables -t nat -L KUBE-FW-L6225SIXICQL5TGT   -v
Chain KUBE-FW-L6225SIXICQL5TGT (1 references)
 pkts bytes target     prot opt in     out     source               destination
    7   420 KUBE-MARK-MASQ  all  --  any    any     anywhere             anywhere             /* default/foo-service loadbalancer IP */
    7   420 KUBE-SVC-L6225SIXICQL5TGT  all  --  any    any     anywhere             anywhere             /* default/foo-service loadbalancer IP */
    0     0 KUBE-MARK-DROP  all  --  any    any     anywhere             anywhere             /* default/foo-service loadbalancer IP */
  • –line-number显示规则序号
[root@worker-node1 ~]# iptables -t nat -L KUBE-FW-L6225SIXICQL5TGT   --line-number
Chain KUBE-FW-L6225SIXICQL5TGT (1 references)
num  target     prot opt source               destination
1    KUBE-MARK-MASQ  all  --  anywhere             anywhere             /* default/foo-service loadbalancer IP */
2    KUBE-SVC-L6225SIXICQL5TGT  all  --  anywhere             anywhere             /* default/foo-service loadbalancer IP */
3    KUBE-MARK-DROP  all  --  anywhere             anywhere             /* default/foo-service loadbalancer IP */
清空规则记录的包数目

iptables -Z

[root@worker-node1 ~]# iptables -t nat -Z
[root@worker-node1 ~]# iptables -t nat -L KUBE-FW-L6225SIXICQL5TGT   -v
Chain KUBE-FW-L6225SIXICQL5TGT (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 KUBE-MARK-MASQ  all  --  any    any     anywhere             anywhere             /* default/foo-service loadbalancer IP */
    0     0 KUBE-SVC-L6225SIXICQL5TGT  all  --  any    any     anywhere             anywhere             /* default/foo-service loadbalancer IP */
    0     0 KUBE-MARK-DROP  all  --  any    any     anywhere             anywhere             /* default/foo-service loadbalancer IP */
四、iptables日志

centos7配置rsyslog

  • 编辑/etc/rsyslog.conf
    添加一行:
kern.warning                                            /var/log/iptable.log
  • 创建存放iptables日志的文件:
touch  /var/log/iptable.log
  • 重启rsyslog
systemctl restart rsyslog
  • 添加iptables日志规则
    与添加iptable规则语法一致
iptables -t nat -I KUBE-FW-L6225SIXICQL5TGT 2 -s 192.168.20.2 -j LOG --log-prefix pretest

KUBE-FW-L6225SIXICQL5TGT链nat表第2条规则前插入此条规则
包需要匹配源IP=192.168.20.2
规则动作为打日志,打出的日志添加前缀pretest
例子如下:

[root@worker-node1 ~]# iptables -t nat -L KUBE-FW-L6225SIXICQL5TGT   -n --line-number
Chain KUBE-FW-L6225SIXICQL5TGT (1 references)
num  target     prot opt source               destination
1    KUBE-MARK-MASQ  all  --  0.0.0.0/0            0.0.0.0/0            /* default/foo-service loadbalancer IP */
2    KUBE-SVC-L6225SIXICQL5TGT  all  --  0.0.0.0/0            0.0.0.0/0            /* default/foo-service loadbalancer IP */
3    KUBE-MARK-DROP  all  --  0.0.0.0/0            0.0.0.0/0            /* default/foo-service loadbalancer IP */
[root@worker-node1 ~]# iptables -t nat -I KUBE-FW-L6225SIXICQL5TGT 2 -s 192.168.20.2 -j LOG --log-prefix pretest
[root@worker-node1 ~]# iptables -t nat -L KUBE-FW-L6225SIXICQL5TGT   -n --line-number
Chain KUBE-FW-L6225SIXICQL5TGT (1 references)
num  target     prot opt source               destination
1    KUBE-MARK-MASQ  all  --  0.0.0.0/0            0.0.0.0/0            /* default/foo-service loadbalancer IP */
2    LOG        all  --  192.168.20.2         0.0.0.0/0            LOG flags 0 level 4 prefix "pretest"
3    KUBE-SVC-L6225SIXICQL5TGT  all  --  0.0.0.0/0            0.0.0.0/0            /* default/foo-service loadbalancer IP */
4    KUBE-MARK-DROP  all  --  0.0.0.0/0            0.0.0.0/0            /* default/foo-service loadbalancer IP */
  • 查看日志
    当有符合要求的包经过时,可在日志文件中通过过滤前缀查看:
 cat /var/log/iptable.log | grep pretest
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值