iptables

作者: 吃可爱长大鸭 | 来源:发表于2019-10-16 11:54 被阅读0次

    iptables工作流程

    1.规则匹配顺序是从上往下依次执行
    2.只要匹配上,就不再往下执行
    3.防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
    4.默认情况下,默认规则是放开所有
    

    第2章 iptables四表五链

    表 tables
    链 chains
    

    四表

    - Filter表
    - NAT表
    - Managle表
    - Raw表
    

    五链

    - INPUt
    - FORWARD
    - OUTPUT
    - PREROUTING 
    - POSTROUTING
    

    第3章

    源端口
    目的端口
    源IP
    目的IP
    
    访问10.0.0.61的9999端口,转发到10.0.0.7的22端口
    

    数据包未改变之前:

    源端口:22
    目的端口:9999
    源IP:10.0.0.1
    目的IP:10.0.0.61 
    

    数据包改变之后:

    源端口:22
    目的端口:22
    源IP:10.0.0.1
    目的IP:10.0.0.7 
    

    第3章 iptables环境准备

    1.安装iptables

    yum install iptables-services -y
    

    2.加载防火墙模块

    modprobe ip_tables
    modprobe iptable_filter
    modprobe iptable_nat
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_state
    

    查看已加载的模块

    lsmod |egrep 'filter|nat|ipt'
    

    3.启动防火墙
    首先停止firewalld

    systemctl stop firewalld
    systemctl disable firewalld
    

    启动iptables

    systemctl start iptables.service
    systemctl enable iptables.service
    

    查看防火墙规则

    iptables -nL
    

    第4章 iptables基本操作命令
    1.查看防火墙规则,默认查看的是filter表

    iptables -nL
    

    2.查看nat表

    iptables -nL -t nat
    

    3.清除防火墙规则

    iptables -F <- 清除所有规则,不会处理默认的规则
    iptables -X <- 删除用户自定义的链
    iptables -Z <- 链的计数器清零(数据包计数器与数据包字节计数器)
    

    4.删除指定链的指定规则

    iptables -nL --line-numbers 
    iptables -D INPUT 7 
    

    第5章 iptables实战

    访问的数据包
    源端口:22
    目的端口:22
    源IP:10.0.0.1
    目的IP:10.0.0.61
    

    1.禁止某个端口访问

    iptables -A INPUT  -p tcp --dport 22 -j DROP
    

    命令解释

    iptables -A INPUT   #在filter表的INPUT链上添加规则
    -p tcp              #协议是tcp
    --dport 22          #目标端口是22
    -j DROP             #执行的动作,如果匹配上,丢弃这个包
    

    2.禁止某个IP访问

    iptables -A INPUT -p tcp -s 10.0.0.7 -i eth0 -j DROP 
    iptables -A INPUT -p tcp -s 172.16.1.7 -i eth1 -j DROP
    

    命令解释:

    iptables -A INPUT 
    -p tcp 
    -s 10.0.0.7         #如果源地址是10.0.0.7 
    -i eth0             #如果流量来自eth0
    -j DROP             #执行拒绝操作
    

    3.禁止某个网段访问

    iptables -A INPUT -p tcp -s 10.0.0.0/24 -i eth0 -j DROP 
    

    4.只允许某个IP访问

    iptables -A INPUT -p tcp ! -s 10.0.0.7 -i eth0 -j DROP
    

    命令解释

    iptables -A INPUT 
    -p tcp 
    ! -s 10.0.0.7       #!取反,只要不是10.0.0.7的地址,执行的动作是拒绝
    -i eth0             
    -j DROP             
    

    5.匹配端口范围

    iptables -A INPUT -p tcp -s 10.0.0.7 -m multiport --dport 22,80 -j DROP
    

    命令解释:

    iptables -A INPUT -p tcp 
    -s 10.0.0.7 
    -m multiport        #匹配多个端口
    --dport 22,80       #匹配目标端口是22和80 
    -j DROP             #匹配上就拒绝
    
    
    iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22:80 -j DROP
    

    命令解释:

    -s 10.0.0.7 
    -m multiport        #匹配多个端口
    --dport 22:100      #匹配目标端口是22到100 
    -j DROP             #匹配上就拒绝
    

    6.匹配ICMP类型
    禁止所有主机ping

    iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    

    禁止10.0.0.7ping

    iptables -A INPUT -p icmp --icmp-type 8 -s 10.0.0.7 -j DROP
    

    除了10.0.0.7以外,所有的主机都禁止ping

    iptables -A INPUT -p icmp --icmp-type 8 ! -s 10.0.0.7 -j DROP
    

    第6章 iptables企业案例

    如何配置lb服务器的防火墙
    1.运行了哪些服务

    nginx
    keepalived
    

    2.启动了哪些端口

    80
    443 
    22
    

    3.哪些IP和端口需要对外开放

    VIP
    80
    443
    

    4.默认规则修改为禁止

    5.编写防火墙规则

    iptables -F
    iptables -X
    iptables -Z 
    iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
    iptables -A INPUT -p tcp -s 172.16.1.61 --dport 22 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type 8 -s 172.16.1.0/24 -j ACCEPT 
    iptables -A INPUT -i lo -j ACCEPT
    iptables -P INPUT  DROP 
    

    6.测试命令

    ping 10.0.0.7       #不通
    ping 172.16.1.7     #通
    
    ssh 10.0.0.7        #不通
    ssh 172.16.1.7      #通
    
    curl 10.0.0.7       #通
    curl 172.16.1.7     #通
    

    第7章 防火墙备份与恢复

    备份方法

    iptables-save > iptables_m01_20191010
    

    恢复方法

    iptables-restore < iptables_m01_20191010
    

    将修改写入配置文件,下次重启依然生效

    iptables-save > /etc/sysconfig/iptables
    

    第8章 内网共享上网
    实验环境:

    m01: 共享上网网关出口
    web01: 只有内网地址,网关指向m01
    

    实验步骤:
    m01操作

    echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
    sysctl -p
    
    iptables -F
    iptables -X
    iptables -Z
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
    iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT
    iptables -A INPUT -i lo -j ACCEPT
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.61
    

    web01操作

    [root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    NAME=eth1
    DEVICE=eth1
    ONBOOT=yes
    IPADDR=172.16.1.7
    GATEWAY=172.16.1.61
    PREFIX=24
    DNS1=223.5.5.5
    
    [root@web01 ~]# systemctl restart network 
    [root@web01 ~]# ifdown eth0 
    [root@web01 ~]# ping www.baidu.com 
    

    第9章 端口映射
    m01操作

    iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
    iptables -t nat -A PREROUTING -d 10.0.0.61 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
    

    命令解释

    表:nat
    链:PREROUTING
    目标IP:10.0.1.61
    目标端口:9000
    协议:tcp
    动作:DNAT
    目标IP:172.16.1.7
    目标端口:22
    

    连接测试

    ssh 10.0.0.61 -p 9000
    

    第10章 IP映射

    ip a add 10.0.0.62/24 dev eth0 label eth0:0
    iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
    iptables -t nat -I PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.7
    

    第x章 陨石坑

    假如配置安全规则的时候配置了默认拒绝所有规则
    那么此时如果手欠,又输入了iptable -F 
    不好意思,这台服务器就谁都连不上了
    

    临时此时解决方法:

    1.告诉机房服务器账号密码,让机房人员登录进去执行恢复命令
    - systemctl restart iptables 
    - iptables -P INPUT ACCEPT
    

    2.直接让机房人员硬重启服务器

    风险:如果运行的是数据库,那么硬重启可能会导致数据丢失或者数据库损坏,启动失败
    

    如何规避这样的风险:

    1.配置防火墙的时候,添加一条定时任务,定时恢复默认规则为ACCPET

    */1 * * * * /usr/sbin/iptables -P INPUT ACCEPT
    

    2.先在测试环境充分测试充足了,确定没有问题了再在生产环境部署

    3.建议先保存当前防火墙的配置,基于配置文件去修改防火墙规则,然后将修改后的规则恢复进去

    第x章 防火墙两种模式

    白名单:广场巡逻
    黑名单:火车站
    

    相关文章

      网友评论

        本文标题:iptables

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