Linux教程

Linux 防火墙iptables

本文主要是介绍Linux 防火墙iptables,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

内容概要

  • Iptables

内容详细

防火墙

        什么是防火墙 
            防止别人恶意访问。

        防火墙种类
            硬件防火墙
                F5
            软件防火墙
                iptables
                firewalld

iptables基本介绍

image

​ 用户 ---> 调用iptables ---> ip_tables内核模块 ---> Netfilter(系统安全框架) ---> 过滤请求

什么是包过滤防火墙

        什么是包
            在数据传输过程,并不是一次性传输完成的;而是将数据分成若干个数据包,一点一点的传输。

        什么是包过滤防火墙
            过滤数据包的防火墙。

        包过滤防火墙如何实现
            通过系统安全框架,过滤数据包。

Iptables链的概念

        # 四表五链

        1、那四个表,有哪些作用
            具备某种功能的集合叫做表。

            filter:     负责做过滤功能呢	   INPUT、OUTPUT、FORWARD
            nat:	 网络地址转换	     	   PREROUTING、INPUT、OUTPUT、POSTROUTING
            mangle:	 负责修改数据包内容	   PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
            raw:	 负责数据包跟踪            PREROUTING、OUTPUT

        2、那五条链,运行在那些地方

            PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING

            1) PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
            2) INPUT:报文进入本机用户空间位置,允许的表filter, mangle
            3) OUTPUT:报文从本机用户空间出去的位置,允许filter, mangle, nat
            4) FOWARD:报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle
            5) POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主机出口网卡地址)

            流入本机:PREROUTING  -->  INPUT  --> PROCESS(进程)
            经过本机:PREROUTING  --> FORWARD --> POSTROUTING
            从本机流出:PROCESS(进程) -->  OUTPUT --> POSTROUTING


image

Iptables流程图

        流入本机: A  --->  PREROUTING  --->  INPUT ---> B
        流出本机:OUTPUT  --->  POSTROUTING  ---> B
        经过本机: A ---> OUTPUT ---> POSTROUTING | ---> PREROUTING ---> FORWARD  ---> POSTROUTING ---> C ---> PREROUTING  ---> INPUT ---> B

        filter :  INPUT 、FORWARD、 OUTPUT 
        nat : PREROUTING 、 INPUT、 OUTPUT、 POSTROUTING
        raw : PREROUTING、 OUTPUT
        mangle : PREROUTING INPUT FORWARD OUTPUT POSTROUTING

image

Iptables的使用

        1、安装Iptables
            [root@m01 ~]# yum install iptables*

        2、启动Iptables
            [root@m01 ~]# systemctl start iptables

        3、关闭firewalld
            [root@m01 ~]# systemctl disable --now firewalld


        格式:iptables -t 表名 选项 链名称 条件  动作

        -t				   	指定操作的表
        -L		--list			列出当前的规则
        -v				    	显示数据包和数据包大小
        -n                   	 		不反解地址
        -A		--append		追加一条规则到链中
        -I		--insert		插入一条规则,插入到顶部
        -F		--flush			清空
        -Z		--zero			清空计数器(  包数量 、包大小)
        -D		--delete		删除链中的规则
        -R		--replace		修改
        -S		--list-rules		列出所有的规则
        -N		--new-chain		创建一个自定义 链
        -X		--delete-chain		删除一个自定义链
        -P	 	--policy		指定链的默认策略  

iptables动作

        ACCEPT		将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
        REJECT 		拦阻该数据包,并传送数据包通知对方。
        DROP 		丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
        REDIRECT	将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。

Iptables基本的条件匹配

        TCP(http)
        UDP
        ICMP(ping)
        ALL

-s、-d 源地址、目标地址

        源地址:	  	发送请求的地址	

        目标地址:	 访问的地址		

--sport源端口、--dport 目标端口

        源端口	:	发送请求的端口

        目标端口:	访问的端口

-i、-o、-m、-j 动作

        -i : 进来的网卡
        -o : 出去的网卡
        -m : 指定模块
        -j : 转发动作
        -p :指定协议

案例

        案例1:只允许22端口可以访问,其他端口全部无法访问。 
        iptables -t filter -A INPUT -p TCP --dport 22  -j ACCEPT
        iptables -t filter -A INPUT -p TCP -j DROP

        案例2:只允许22,80,443端口可以访问,其他端口全部无法访问。 
        iptables -t filter -A INPUT -p TCP --dport 22  -j ACCEPT
        iptables -t filter -A INPUT -p TCP --dport 80  -j ACCEPT
        iptables -t filter -A INPUT -p TCP --dport 443  -j ACCEPT
        iptables -t filter -A INPUT -p TCP -j DROP

        案例3:只允许22,80,443端口可以访问,其他端口全部无法访问,但是本机可以访问百度。 

        案例4:要求使用192.168.15.81能够通过22端口链接,但是其他的不行
        iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22  -j ACCEPT
        iptables -t filter -A INPUT -p TCP -j DROP

        案例5:只允许192.168.15.71能够通过22端口链接,其他的不行。
        iptables -t filter -A INPUT -p  TCP -s 192.168.15.71  -d 192.168.15.81 --dport 22 -j ACCEPT
        iptables -t filter -A INPUT -p TCP -j DROP

        案例6:要求192.168.15.71对外部不可见
        iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP

        案例7:要求使用eth0网卡的所有请求全部拒绝
        iptables -t filter -A INPUT -p TCP -i etho -j DROP

        使用172.16.1.71登录进来的窗口,不允许访问百度。
        iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP

        案例8:要求访问服务器的8080端口转发至80端口
        iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80

        案例9:要求只允许windows通过ssh连接192.168.15.81,其他的拒绝
        iptables -t filter -I INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
        iptables -t filter -I INPUT -p TCP --dport 22 -j DROP

        知识储备:
            查看本机端口占用的命令:	
                netstat -nutlp

模块

        拓展iptables的功能的。

     	   -m : 指定模块

        1、连续匹配多个端口(multiport)

            --dports  : 指定多个端口(不同端口之间以逗号分割,连续的端口使用冒号分割)。

        2、指定一段连续的ip地址范围(iprange)
            --src-range from[-to]:	源地址范围
            --dst-range from[-to]	目标地址范围

        3、匹配指定字符串(string)
            --string pattern		# 指定要匹配的字符串
            --algo {bm|kmp}		# 匹配的查询算法

        4、根据时间段匹配报文(time)
            --timestart hh:mm[:ss]		# 开始时间
            --timestop hh:mm[:ss]		# 结束时间
            --monthdays day[,day...]		# 指定一个月的某一天
            --weekdays day[,day...]		# 指定周 还是  周天 

        5、禁ping, 默认本机无法ping别人 、别人无法ping自己
            --icmp-type {type[/code]|typename}
                echo-request  (8) 请求 
                echo-reply    (0) 回应

        6、限制链接数,并发连接数(connlimit)
            --connlimit-upto n		#  如果现有连接数小于或等于  n  则 匹配
            --connlimit-above n		#  如果现有连接数大于n 则匹配

        7、针对 报文速率 进行限制。 秒、分钟、小时、天。

            --limit rate[/second|/minute|/hour|/day] # 报文数量 
            --limit-burst number  # 报文数量(默认:5)

案例

        1、要求将22,80,443以及30000-50000之间所有的端口向外暴露,其他端口拒绝

            iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
            iptables -f filter -A INPUT -p TCP -j DROP

        2、要求访问数据包中包含HelloWorld的数据不允许通过。
            iptables -t filter -A INPUT -p TCP -m string --string "Hello World" --algo kmp -j DROP

        3、要求192.168.15.1 - 192.168.15.10之间的所有IP能够连接192.168.15.81,其他拒绝
            iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT 
            iptables -f filter -A INPUT -p TCP -j DROP

        4、要求每天的12到13之间,不允许访问
            iptables -t filter -A INPUT -p TCP -m time  --timestart 12:00   --timestop 13:00 -j DROP

            必须使用UTC时间

        5、要求别人不能ping本机,但是本机可以ping别人
            iptables -t filter -A INPUT -p TCP -m icmp --icmp-type "echo-request" -j DROP

        6、要求主机连接最多有2个
            iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP

        7、要求限制速率在500k/s左右
            iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT
            iptables -t filter -A INPUT -p TCP -j DROP

这篇关于Linux 防火墙iptables的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!