美文网首页
Linux 之 Iptables

Linux 之 Iptables

作者: G木头人 | 来源:发表于2017-09-16 22:45 被阅读0次

    iptables命令术语中是ACCEPT(允许流量通过)、LOG(记录日志信息)、REJECT(拒绝流量通过)、DROP(拒绝流量通过)。

    • 基本的命令参数

    iptables是一款基于命令行的防火墙策略管理工具,由于该命令是基于终端执行且存在有大量参数的,学习起来难度还是较大的,好在对于日常控制防火墙策略来讲,您无需深入的了解诸如“四表五链”的理论概念,只需要掌握常用的参数并做到灵活搭配即可,以便于能够更顺畅的胜任工作所需。

    参数 作用
    -P 设置默认策略:iptables -P INPUT (DROP|ACCEPT)
    -F 清空规则链
    -L 查看规则链
    -A 在规则链的末尾加入新规则
    -I num 在规则链的头部加入新规则
    -D num 删除某一条规则
    -s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
    -d 匹配目标地址
    -i 网卡名称 匹配从这块网卡流入的数据
    -o 网卡名称 匹配从这块网卡流出的数据
    -p 匹配协议,如tcp,udp,icmp
    --dport num 匹配目标端口号
    --sport num 匹配来源端口号
    • 例子

    1. 使用iptables命令-L参数查看已有的防火墙策略:
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
    ACCEPT     all  --  anywhere             anywhere            
    INPUT_direct  all  --  anywhere             anywhere            
    INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
    INPUT_ZONES  all  --  anywhere             anywhere            
    ACCEPT     icmp --  anywhere             anywhere            
    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
    ………………省略部分输出信息………………
    
    2. 使用iptables命令-F参数清空已有的防火墙策略:
    [root@MyLinux ~]# iptables -F
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ………………省略部分输出信息………………
    
    3. 把INPUT链的默认策略设置为拒绝:
    [root@MyLinux ~]# iptables -P INPUT DROP
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy DROP)
    target     prot opt source               destination  
    ………………省略部分输出信息………………
    
    4. 向INPUT链中添加允许icmp数据包流入的允许策略:
    [root@MyLinux ~]# iptables -A INPUT -p icmp -j ACCEPT
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     icmp --  anywhere             anywhere    
    ………………省略部分输出信息………………
    
    5. 删除INPUT链中的那条策略,并把默认策略还原为允许:
    [root@MyLinux ~]# iptables -D INPUT 1 
    [root@MyLinux ~]# iptables -P INPUT ACCEPT
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination 
    ………………省略部分输出信息………………
    
    6. 设置INPUT链只允许指定网段访问本机的22端口,拒绝其他所有主机的数据请求流量:
    [root@MyLinux ~]# iptables -I INPUT -s 192.168.244.0/24 -p tcp --dport 22 -j ACCEPT
    [root@MyLinux ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     tcp  --  192.168.244.0/24     anywhere             tcp dpt:ssh
    DROP       tcp  --  anywhere             anywhere             tcp dpt:ssh
    ………………省略部分输出信息………………
    
    7. 向INPUT链中添加拒绝所有人访问本机12345端口的防火墙策略:
    [root@MyLinux ~]# iptables -I INPUT -p tcp --dport 1234 -j REJECT
    [root@MyLinux ~]# iptables -I INPUT -p udp --dport 1234 -j REJECT
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination       
    REJECT     udp  --  anywhere             anywhere             tcp dpt:search-agent reject-with icmp-port-unreachable  
    REJECT     tcp  --  anywhere             anywhere             tcp dpt:search-agent reject-with icmp-port-unreachable
    ACCEPT     tcp  --  192.168.244.0/24     anywhere             tcp dpt:ssh
    DROP       tcp  --  anywhere             anywhere             tcp dpt:ssh
    ………………省略部分输出信息………………
    
    8. 向INPUT链中添加拒绝来自于指定192.168.10.5主机访问本机80端口(web服务)的防火墙策略:
    [root@MyLinux ~]# iptables -I INPUT -s 192.168.10.5 -p tcp --dport 80 -j REJECT
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    REJECT     tcp  --  192.168.10.5         anywhere             tcp dpt:http reject-with icmp-port-unreachable
    REJECT     tcp  --  anywhere             anywhere             tcp dpt:search-agent reject-with icmp-port-unreachable
    ACCEPT     tcp  --  192.168.244.0/24     anywhere             tcp dpt:ssh
    DROP       tcp  --  anywhere             anywhere             tcp dpt:ssh
    ………………省略部分输出信息………………
    
    9. 向INPUT链中添加拒绝所有主机不能访问本机1000至1024端口的防火墙策略:
    [root@MyLinux ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
    [root@MyLinux ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT  
    [root@MyLinux ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    REJECT     tcp  --  192.168.10.5         anywhere             tcp dpt:http reject-with icmp-port-unreachable
    REJECT     tcp  --  anywhere             anywhere             tcp dpt:search-agent reject-with icmp-port-unreachable
    ACCEPT     tcp  --  192.168.244.0/24     anywhere             tcp dpt:ssh
    DROP       tcp  --  anywhere             anywhere             tcp dpt:ssh
    REJECT     tcp  --  anywhere             anywhere             tcp dpts:cadlock2:1024 reject-with icmp-port-unreachable
    REJECT     udp  --  anywhere             anywhere             udp dpts:cadlock2:1024 reject-with icmp-port-unreachable
    ………………省略部分输出信息………………
    
    10. 用iptables做本机端口转发

    代码如下:
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
    估计适当增加其它的参数也可以做不同IP的端口转发。
    如果需要本机也可以访问,则需要配置OUTPUT链(********特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问yown.com,实际上是访问到本地,建议不做80端口的转发或者指定目的 -d localhost):
    iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080
    原因:
    外网访问需要经过PREROUTING链,但是localhost不经过该链,因此需要用OUTPUT。

    相关文章

      网友评论

          本文标题:Linux 之 Iptables

          本文链接:https://www.haomeiwen.com/subject/lkiusxtx.html