zoukankan      html  css  js  c++  java
  • Linux—系统网络防火墙(三)---iptables

    一、安装iptables服务

    1、查看系统是否安装了iptables防火墙

    [root@localhost ~]# iptables -V
    

    2、安装 iptables 防火墙

    3、查看防火墙规则列表

    [root@localhost ~]# iptables --list
    [root@localhost ~]# iptables --list-rules
    

    二、开启、关闭、重启 iptables 服务

    1、通过 service 操作防火墙

    [root@localhost ~]# service iptables stop         # 关闭防火墙(清空规则)
    [root@localhost ~]# service iptables start        # 启动防火墙(读取配置文件里的规则)
    [root@localhost ~]# service iptables restart      # 重启防火墙(清空规则读取配置文件里规则)
    [root@localhost ~]# service iptables save         # 保存防火墙(规则保存到配置文件中)
    [root@localhost ~]# service iptables status       # 查看防火墙启动状态(查看当前使用的规则)
    [root@localhost ~]# service iptables reload       # 重新加载相关配置,效果和restart一样,很多新的系统中一般不用了。

    三、规则设定

    1、开放端口(这种情况下所有ip均能访问3120端口,即对外暴露3120端口了)

    [root@localhost ~] iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT   # 开启防火墙 3120 端口,方式一
    [root@localhost ~] iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT   # 开启防火墙 3120 端口,方式二
    

    2、关闭端口

    [root@localhost ~] iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport 3120 -j ACCEPT   # 删除防火墙 3120 端口。方式一
    [root@localhost ~] iptables -nv --line-number

    3、屏蔽指定IP:拒绝指定IP,所有端口都不能访问

    [root@localhost ~]# iptables -I INPUT -s 1.1.1.1 -j DROP      # 添加屏蔽IP,方式一
    [root@localhost ~]# iptables -A INPUT -s 1.1.1.1 -j DROP      # 添加屏蔽IP,方式二
    [root@localhost ~]# iptables -D INPUT -s 1.1.1.1 -j DROP      # 删除屏蔽IP

    4、放行指定IP:允许指定IP,所有端口都可以访问

    [root@localhost ~]# iptables -I INPUT -s 1.1.1.1 -j ACCEPT      # 添加放行IP,方式一
    [root@localhost ~]# iptables -A INPUT -s 1.1.1.1 -j ACCEPT      # 添加放行IP,方式二
    [root@localhost ~]# iptables -D INPUT -s 1.1.1.1 -j ACCEPT      # 删除放行IP
    

    5、允许指定 IP 访问指定端口

    iptables -I INPUT -s 1.1.1.1 -p tcp --dport 3120 -j ACCEPT
    iptables -D INPUT -s 1.1.1.1 -p tcp --dport 3120 -j ACCEPT

    6、拒绝指定 IP 访问指定端口

    iptables -I INPUT -s 1.1.1.1 -p tcp --dport 3120 -j DROP
    iptables -D INPUT -s 1.1.1.1 -p tcp --dport 3120 -j DROP

    7、重启后生效

    [root@localhost ~]# chkconfig iptables off   # 永久关闭防火墙
    [root@localhost ~]# chkconfig iptables on    # 永久关闭后重启

    8、ping设置

    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT    # 允许PING设置 
    [root@localhost ~]# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
    
    [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP          # 禁止PING设置

    四、端口转发

    1、开启系统的转发功能,开启内核 ip_forward 转发。sysctl配置ipv4转发

    [root@localhost ~]# sysctl -w net.ipv4.ip_forward=1          # 方式一:临时生效
    
    [root@localhost ~]# vim /etc/sysctl.conf                     # 方式二:永久生效,更改net.ipv4.ip_forward的值为1:net.ipv4.ip_forward = 1。默认值为0
    [root@localhost ~]# sysctl -p                                # 使用命令让配置马上生效
    [root@localhost ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    [root@localhost ~]# sysctl -p /etc/sysctl.conf
    
    [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward   # 方式三

    2、将本机的端口转发到本机端口,这种情况不需要第一步

    [root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 88 -j REDIRECT --to-port 3120      # 添加端口转发
    [root@localhost ~]# iptables -t nat -D PREROUTING -p tcp --dport 88 -j REDIRECT --to-port 3120      # 删除端口转发
    

    3、将本机的端口转发到其他机器,这种情况就需要第一步

    [root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport This_Server_Port -j DNAT --to-destination Remote_Server_IP:Remote_Server_Port
    [root@localhost ~]# iptables -t nat -A POSTROUTING -p tcp -d Remote_Server_IP --dport Remote_Server_Port -j SNAT --to-source This_Server_IP
    
    [root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 8006 -j DNAT --to-destination 32.23.56.69:3120           # 第一步:访问8006端口的数据包转发到32.23.56.69上的3120端口
    [root@localhost ~]# iptables -t nat -A POSTROUTING -j MASQUERADE                                                           # 第二步:任选其一,一般选这个就行
    [root@localhost ~]# iptables -t nat -A POSTROUTING -p tcp -d 32.23.56.69 --dport 3120 -j SNAT --to-source 172.16.16.10    # 第二步:任选其一

    4、如果上面操作完还不行的话,就放行转发命令。这一步一般不需要。

    [root@localhost ~]# iptables -I FORWARD -i eth0 -j ACCEPT                     # 放行Forward的数据包,其中eth0改为实际使用网卡(一般是eth0)
    [root@localhost ~]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE      # 开启网卡混杂模式(允许任意流向的数据包)
    
    [root@localhost ~]# iptables -D FORWARD -i eth0 -j ACCEPT                     # 删除第一条
    [root@localhost ~]# iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE      # 删除第二条

    5、抓包测试

    # 方式一
    [root@localhost ~]# tcpdump -S -s0 -nn -i any port 8006               # 本地端抓包,可以不用管这条命令
    [root@localhost ~]# tcpdump -S -nn -i any port 8006 or port 3120      # 在中间服务器上执行这条命令
    [root@localhost ~]# tcpdump -S -nn -i any port 3120                   # 在目的服务器上执行这条命令
    
    # 方式二:-i 选项指定网卡,-w 选项保存结果到文件当中。
    [root@localhost ~]# tcpdump -i eth0 port 3120 or 8006 -w result.cap 

    6、名词解释

    • DNAT是destination networkaddress translation的缩写,即目标网络地址转换。
    • SNAT是source networkaddress translation的缩写,即源地址目标转换。
    • MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。

    五、配置文件:/etc/sysconfig/iptables

    *filter
    :INPUT DROP [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    
    # 开启防火墙端口80、443、3306
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 39000:40000 -j ACCEPT
    
    # 允许PING设置  
    -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
    
    -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
    -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
    -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
    -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    COMMIT
    

    六、链的基本操作

    # 清除预设表filter中所有规则链中的规则。
    [root@localhost ~]# iptables -F
    # 清除预设表filter中使用者自定链中的规则。
    [root@localhost ~]# iptables -X
    [root@localhost ~]# iptables -Z
     
    # 设置链的默认策略。一般有两种方法。
    # 首先允许所有的包,然后再禁止有危险的包通过放火墙。
    [root@localhost ~]# iptables -P INPUT ACCEPT
    [root@localhost ~]# iptables -P OUTPUT ACCEPT
    [root@localhost ~]# iptables -P FORWARD ACCEPT
    # 首先禁止所有的包,然后根据需要的服务允许特定的包通过防火墙。
    [root@localhost ~]# iptables -P INPUT DROP
    [root@localhost ~]# iptables -P OUTPUT DROP
    [root@localhost ~]# iptables -P FORWARD DROP
     
    # 列出表/链中的所有规则。默认只列出filter表。
    [root@localhost ~]# iptables -L
    https://www.cnblogs.com/blogforly/p/5997287.html
    https://www.cnblogs.com/kevingrace/p/6265113.html

    七、通过 ipset 来封禁IP

    [root@localhost ~]# ipset list
    [root@localhost ~]# ipset create allset hash:net 
    
    [root@localhost ~]# ipset add allset 145.201.56.109
    [root@localhost ~]# ipset del allset 145.201.56.109
    
    [root@localhost ~]# iptables -I INPUT -m set --match-set allset src -p tcp -j DROP
    [root@localhost ~]# iptables -D INPUT -m set --match-set allset src -p tcp -j DROP

    https://www.cnblogs.com/zhink/articles/9171834.html:跟ufw使用ipset差不多

    https://www.moerats.com/archives/684/

    https://blog.csdn.net/wangshui898/article/details/90513792

    https://www.centos.bz/2017/07/iptables-port-redirect/

    https://blog.csdn.net/e_wsq/article/details/79933232

    https://www.cnblogs.com/carry00/p/10237723.html

    https://www.cnblogs.com/wujizhang/p/11721043.html

  • 相关阅读:
    js中两个==和三个===的区别
    软件需求工程解析
    《我们应当怎样做需求分析》阅读笔记
    需求工程阅读笔记03
    个人小软件冲刺05
    个人小软件冲刺04
    需求工程阅读笔记02
    个人小软件冲刺03
    个人小软件冲刺02
    个人小软件冲刺01
  • 原文地址:https://www.cnblogs.com/liuhaidon/p/11578361.html
Copyright © 2011-2022 走看看