参考:tcp/ip协议

1.Linux框架概念


1.1.工作流程图

netfilter/iptables_filter


1.2.功能:

  ①过滤(filter)

  ②修改源ip、目标ip(nat)

  ③拆解报文、修改报文标记、重新封装(mangle)

  ④关闭net表启用的连接追踪标记(raw)


1.3.表

  iptables/netfilter表:filter,mangle,nat


排序
功能表

raw
PREROUTING、OUTPUT
mangle
5个链全包含
nat
PREROUTING、OUTPUT、POSTROUTING
filter
INPUT、FORWARD、OUTPUT


  数据流向图(圆圈表示路由):

netfilter/iptables_防火墙_02


1.4.连接状态

  4个状态:NEW,ESTABLISHED,INVALID,RELATED

  针对3个协议:TCP,UDP,ICMP

  5个配置策略:

    ①通用的

    ②TCP

    ③UDP

    ④ICMP

    ⑤状态,所有者,访问的频率限制


  规则匹配,从上往下。高频匹配项、精确匹配项放在最上边、能合并的合并后放在中间、最后跟上默认匹配项。


1.5.监听协议

  Linux防火墙工作在规则下,规则由两部分组成:匹配标准、处理办法。

  匹配规则:

    ip :sip、dip

    tcp :sport、dport、报文(设定标志位:syn=1、ack=0、find=0、rst=0;……)

    udp :sport、dport

    icmp :icmp-type(0到15;0响应报文、3错误响应报文、8请求报文)



2.相关操作


  保存配置

# iptables-save > /etc/sysconfig/iptables

  保存配置filter表

# iptables-save -t filter > /etc/sysconfig/iptables

  检查配置文件合法性

# iptables-restore -t /etc/sysconfig/iptables
iptables-restore: COMMIT expected at line 60

  读取全部配置、filter表的配置

# iptables-restore < /etc/sysconfig/iptables
# iptables-restore -T filter < /etc/sysconfig/iptables



3.命令语法


3.1.语法

简单语法:

  iptables [table] [Command] [chain] [num] [Rule] [Action]

  指定:操作的表、操作命令、关键字chain、规则编号、匹配规则、处理办法。

语法详解:

语法:
  iptables [-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]


3.2.语法说明

  命令:

    A:添加规则

    I:插入规则

    D:删除规则

    R:替换规则

    F:清空所有规则

    P:默认规则

    N:自定义链

    X:删除自定义链

    E:重命名自定义链

    Z:清空规则计数器

    L:查看规则

      n:数字格式显示,不反解

      v:详细信息

      vv:带上计数器信息

      x:计数器的精确值

      line-numbers:显示规则序号

  匹配:

    -s, --src:源地址

    -d, --dst:目标地址

    -p {tcp|udp|icmp}:协议

    --sport:源端口

    --dport:目标端口

    -i {interface}:流入网卡接口

    -o {interface}:流出网卡接口

    -m multiport

    --source-ports [p1,p2,...]

    --destination-ports [p1,p2,...]

  处理方法:-j

    ACCEPT:接受

    DROP:丢弃

    REJECT:拒绝

    DNAT:目标地址转换

    SNAT:源地址转换

    LOG:日志记录

    MASQUERADE:地址伪装


    常用命令:

iptables -t filter -L
iptables -t filter -L -n
iptables -t filter -L -n --line-numbers
iptables -t filter -D INPUT 3
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -t filter -F
iptables -t filter -X
iptables -t filter -h
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT ACCEPT


4.配置案例


  配置前清空,设置默认丢弃。本节所有子内容均在此前提下。

[root@right tmp]# iptables -t filter -F
[root@right tmp]# iptables -t filter -P INPUT DROP

4.1.httpd服务器

  开启ssh登陆,开启web访问,关闭其他任何接入。

iptables -t filter -A INPUT -p tcp -d 213.16.200.34/224 --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -s 213.16.200.34/224 --sport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp -d 213.16.200.34/224 --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -s 213.16.200.34/224 --sport 80 -j ACCEPT
iptables -t filter -P INPUT DROP


4.2.tomcat服务器

  开启ssh登陆,开启web访问,关闭其他任何接入。

iptables -t filter -A INPUT -p tcp -d 213.16.200.34/224 --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -s 213.16.200.34/224 --sport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp -d 213.16.200.34/224 --dport 8080 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -s 213.16.200.34/224 --sport 8080 -j ACCEPT
iptables -t filter -A INPUT -p tcp -d 213.16.200.34/224 --dport 8009 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -s 213.16.200.34/224 --sport 8009 -j ACCEPT
iptables -t filter -P INPUT DROP

  合并端口在一条规则里:

# iptables -t filter -A INPUT -d 192.168.137.20 -p tcp -m multiport --destination-ports 22,8080,8009 -m state --state NEW -j ACCEPT
# iptables -t filter -A OUTPUT -s 192.168.137.20 -p tcp -m multiport --source-ports 22,8080,8009 -m state --state ESTABLISHED -j ACCEPT


4.3.允许ping命令

  允许192.168.137.1的ping操作。

[root@right tmp]# iptables -t filter -A INPUT -p icmp -s 192.168.137.1 -j ACCEPT
[root@right tmp]# iptables -t filter -A OUTPUT -p icmp -d 192.168.137.1 -j ACCEPT

要是明确禁止ping,防火墙操作,把“ACCEPT”改成“DROP”即可。


4.4.DNS主机

  接收53端口,还得转发到根的53端口。而且,DNS同时工作在TCP、UDP的53口。

iptables -t filter -A INPUT -p TCP --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p UDP --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p TCP --sport 53 -j ACCEPT
iptables -t filter -A INPUT -p UDP --sport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p TCP --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p UDP --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p TCP --sport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p UDP --sport 53 -j ACCEPT



4.5.链路状态的控制

  允许新请求、以及已经建立好的连接(本地192.168.137.20)

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


  ICMP的状态限定,允许ping出去(本地192.168.137.20)。

# iptables -A INPUT -d 192.168.137.20 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
# iptables -A INPUT -d 192.168.137.20 -p icmp --icmp-type 3 -m state --state ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -s 192.168.137.20 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT


4.6.放行127.0.0.1

  允许本地回环通讯

# iptables -t filter -A INPUT -i lo -j ACCEPT
# iptables -t filter -A OUTPUT -o lo -j ACCEPT




netfilter/iptables_filter_03