iptables 的语法

1
2
3
4
5
6
7
8
iptables -t 表名  -nL|-S  [链名]                             # 查看规则
iptables -t 表名  -F [链名]                                  # 清空规则
iptables -t 表名  -A  链名  匹配条件   -j  动作                 # 追加规则
iptables -t 表名  -I  链名 [数字]  匹配条件   -j  动作          # 插入规则,默认插入到第一条
iptables -t 表名  -D  链名 数字N                              # 删除指定链的第N条规则
iptables -t 表名  -D  链名  匹配条件  -j  动作                  # 删除符合条件的规则
iptables -t 表名  -R  链名 数字  匹配条件   -j  动作            # 替换规则
iptables -t 表名  -P  链名 动作                                  # 设置默认策略

操作选项: -L 显示所指定链所有规则,如果没有指定链,所有链将被显示, 前面-n表示以数字的形式显示,不解析 -F 清空所指定链所有规则,如果没有指定链,所有链将被清空 -S 详细打印出指定表中所有的规则 -D 删除链中某条规则,可以接序号,也可以接具体的规则动作 -P 设置指定链的默认策略 -A 向指定链中追加一条规则 -I 向指定链中插入一条规则,默认插入到第一条, 链名后接序号表示插入到第几条 -R 替换所指定链中的一条规则,链名后接序号 -N 自定义链 -X 删除自定义链

  • 注意: 所有链名必须大写,所有动作必须大写

匹配条件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[!] -p  协议    tcp   udp  icmp      # ***
[!] -s  源ip地址,三层封包中的源地址   # ***
    -d  目标ip地址
    -i  网卡名称                       # 从哪个网卡进来的 **
    -o  网卡名称                       # 从哪个网卡出去的 **
    -m  扩展匹配
        tcp  
            --sport 源端口            # 可以使用80:90表示匹配一段范围内所有的端口
            --dport 目标端口          # 可以使用80:90表示匹配一段范围内所有的端口  ***
            --tcp-flags  mark标记
        udp
            --sport 源端口
            --dport 目标端口
        icmp
            --icmp-type              # 指定匹配ICMP类型    0 应答   8 请求
        mac
            --mac-source             # 匹配源MAC地址
        multiport
            --sports                 # 匹配多个源端口  
            --dports                 # 匹配多个目标端口   22,69,123,80:90
            --ports                  # 匹配多个端口
        state
            --state                  # INVALID  ESTABLISHED  NEW  RELATED
        mark
            --mark                   # 匹配防火墙标记

动作:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
filter表:
    REJECT          # 拒绝
    ACCEPT          # 允许
    DROP            # 丢弃

nat表
    DNAT            # 目标地址转换,一般用于对外发布服务         
    SNAT            # 源地址转换,一般用于实现内网机器上网      --- 静态
    MASQUERADE      # 地址伪装   ---动态的 NAT
    REDIRECT        # 重定向     ---仅修改端口

  1. iptables使用的表有哪些?请简要的描述iptables使用的表以及它们所支持的链。

    • NAT 表

    • Mangle 表

    • Filter 表(默认)

    • Raw 表

    Nat表 : Nat表主要用于网络地址转换。根据表中的每一条规则修改网络包的IP地址。流中的包仅遍历一遍Nat表。例如,如果一个通过某个接口的包被修饰(修改了IP地址),该流中其余的包将不再遍历这个表。通常不建议在这个表中进行过滤,由NAT表支持的链称为PREROUTING 链,POSTROUTING 链和OUTPUT 链。

    Filter表 : Filter表是iptables中使用的默认表,它用来过滤网络包。如果没有定义任何规则,Filter表则被当作默认的表,并且基于它来过滤。支持的链有INPUT 链,OUTPUT 链,FORWARD 链。

    Mangle表 : 数据包标记。

    Raw表 : 数据追踪。它支持PREROUTING 链和OUTPUT 链。

  2. 检查 iptables 当前定义的规则

    iptables -L

  3. 请在 iptables 中添加一条规则,接受所有从一个信任的 IP 地址(例如:192.168.0.7)过来的包。

    1
    
    iptables -A INPUT -s 192.168.0.7 -j ACCEPT
    
  4. 怎样在iptables中添加规则以ACCEPT,REJECT,DENY和DROP ssh的服务?

    ssh运行在22端口,那也是ssh的默认端口,我们可以在iptables中添加规则来ACCEPT ssh的tcp包(在22号端口上)。

    1
    
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    

    REJECT ssh服务(22号端口)的tcp包。

    1
    
    iptables -A INPUT -p tcp --dport 22 -j REJECT
    

    DENY ssh 服务

    1
    
    iptables -A INPUT -p tcp --dport 22 -j DENY
    

    DROP ssh 服务

    1
    
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
  5. 有一台电脑的本地IP地址是192.168.0.6。你需要封锁在21、22、23和80号端口上的连接,你会怎么做?

    multiport 选项

    1
    
    iptables -A INPUT -s 192.168.0.6 -p tcp -m multiport --dport 21,22,23,80 -j DROP
    
  6. 请写出查看iptables当前所有规则的命令

    1
    
    iptables -L -n --line-numbers
    
  7. 如何使在命令行执行的iptables规则永久生效?

    1
    2
    3
    
    /etc/init.d/iptables save
    
    iptables save >>/etc/sysconfig/iptables
    
  8. 实现把访问10.0.0.3:80的请求转到172.16.1.17:80

    1
    
    iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80
    
  9. 实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网

    1
    
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26
    
  10. 描述tcp 3次握手及四次断开过程?

    img

img

  1. 详细描述HTTP工作原理?

    1 ) 地址解析

    2)封装HTTP请求数据包

    3)封装成TCP包,建立TCP连接(TCP的三次握手)

    4)客户机发送请求命令

    5)服务器响应

    6)服务器关闭TCP连接

  2. 请描述iptables的常见生产应用场景。

    端口映射

  3. 写一个防火墙配置脚本,只允许远程主机访问本机的80端口

    1
    2
    
    iptables -A INPUT -p tcp --dport 80 -j accept
    iptables -A INPUT -p tcp -j DROP
    
  4. 如何配置一个 linux 上网网关?

    1
    
    route add -net 192.168.0.0/24 gw 10.0.0.253 dev eth1
    
  5. 请描述如何配置一个专业的安全的WEB服务器主机防火墙?

    先将默认的INPUT链和Forward链关闭,只开放允许进入的端口

    1
    2
    3
    
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP
    iptables -P INPUT DROP
    

企业应用场景:

1) 把访问外网IP及端口的请求映射到内网某个服务器及端口(企业内部);

2) 硬件防火墙,把访问LVS/nginx外网VIP及80端口的请求映射到IDC 负载均衡服务器内部IP及端口上(IDC机房的操作) ;