• iptables防火墙


    iptables防火墙

    硬件防火墙
    软件防火墙
    	netfilter 网络过滤器   (模块)
    		iptables, rhel6/centos6 
    		iptables/firewalld,   rhel7/centos7
    

    网络基础:

    TCP/IP模型:

    	应用层   传输层    网络层    数据链路层     物理层 
    
    数据封装:
    	MAC帧头+IP报头+TCP/UDP报头+HTTP请求
    
    	数据帧
    	
    	TCP/UDP报头:
    		源端口号: >1024随机端口    5689
    		目的端口号: 80
    
    	IP报头:
    		源IP地址
    		目的IP地址
    
    	MAC帧头:
    		源MAC地址
    		目的MAC地址
    

    端口号Port:

    作用: 标识不同的应用程序 
    数字: 0-----65535,  小于1024称为著名端口
    
    常用端口:
    
    	http		tcp/80
    	https		tcp/443
    	SSH			TCP/22
    	TELNET		TCP/23
    	FTP			TCP/21(命令连接), 数据连接(TCP/20)
    	TFTP		UDP/69
    	MYSQL		TCP/3306
    	SMTP		TCP/25
    	POP3		TCP/110
    	IMAP4		TCP/143
    	DNS			TCP/53, UDP/53
    	DHCP		UDP/67(服务端), UDP/68(客户端)
    	SAMBA		TCP/139, TCP/445, UDP/137, UDP/138 
    	NTP			UDP/123 
    	iSCSI		tcp/3260
    

    ARP-----Address Resolution Protocol 地址解析协议

    作用:根据已知的IP地址获取对应的MAC地址 
    

    Linux iptables防火墙

    作用:
    	进行数据过滤	(IP报头, TCP/UDP报头)
    	为数据打标记 	(LVS负载均衡集群)
    	网络地址转换	(NAT)
    
    
    Linux防火墙
    	内核集成的模块netfilter 
    	iptables工具
    		实现添加, 删除, 修改, 查看防火墙规则 
    
    
    
    iptables四表五链:
    	
    	filter(数据过滤)	三层、四层报头
    		INPUT
    		OUTPUT
    		FORWARD
    	nat(网络地址转换)
    		PREROUTING
    		OUTPUT
    		POSTROUTING
    	mangle(数据打标记)
    		INPUT 
    		FORWARD
    		OUTPUT
    		PREROUTING
    		POSTROUTING
    	raw
    		PREROUTING
    		OUTPUT
    

    iptables工具的使用:

    iptales

    命令command

    查看类:
    -L:显示指定表中的规则
    -n:以数字的格式显示IP及端口号
    -v:显示规则相关的详细信息(显示规则的计数器)
    -x:显示计数器时显示精确的数字
    --line-numbers:显示规则的号码
    -t :指定表名,默认为filter表

    iptables -nL --line-numbers -v

    管理规则

    1. 添加规则

      -A:追加一条规则,添加到链的尾部
      -I CHAIN [number]:插入一条规则,插入为CHAIN的第number条;number不写表示插入到第一条 -I INPUT

    2. 删除规则
      -D CHAIN [number]:删除指定链中的第number条规则

    3. 修改规则
      -R CHAIN [number]:替换指定的规则

    4. 清空所有规则
      -F [chain]

    5. 修改链的默认规则

      -P CHAIN <处理办法>

    规则的匹配标准:

    1. 源IP地址

      -s address[/mask]

       ! -s 192.168.1.1
       -s 192.168.1.0/24
      
    2. 目的IP地址

      -d address[/mask]

       ! -d 10.1.1.1
       -d 10.1.1.0/24
      
    3. 协议

      -p tcp
      -sport port1[:port2] -p tcp --dport 22 -p tcp --dport 80:443
      -dport port1[:port2]

      -p udp
      -sport port1[:port2]
      -pport port1[:port2]

      -p icmp

       --icmp-type 8			echo-request 
       --icmp-type 0			echo-reply 
      
    4. 匹配数据包进行的网卡接口

      -i eth0

    5. 匹配数据包流出的网卡接口

      -o eth1

    数据包的处理行为 -j target

    ACCEPT	允许 
    REJECT	拒绝
    DROP	丢弃
    LOG		记录日志
    

    先堵后通

    示例1: 允许客户端访问SSH服务

    [root@node1 ~]# iptables -A INPUT -s 10.1.2.101 -d 10.1.2.1 -p tcp --dport 22 -j ACCEPT
    [root@node1 ~]# iptables -A OUTPUT -s 10.1.2.1 -d 10.1.2.101 -p tcp --sport 22 -j ACCEPT

    [root@node1 ~]# iptables -P INPUT DROP
    [root@node1 ~]# iptables -P OUTPUT DROP
    [root@node1 ~]# iptables -P FORWARD DROP

    示例2:允许所有客户端访问WEB服务 

    [root@node1 ~]# iptables -I INPUT -d 10.1.2.1 -p tcp --dport 80 -j ACCEPT
    [root@node1 ~]# iptables -I OUTPUT -s 10.1.2.1 -p tcp --sport 80 -j ACCEPT

    示例3: 允许客户端10.1.2.101 ping服务器 

    [root@node1 ~]# iptables -A INPUT -s 10.1.2.101 -d 10.1.2.1 -p icmp --icmp-type 8 -j ACCEPT
    [root@node1 ~]# iptables -A OUTPUT -s 10.1.2.1 -d 10.1.2.101 -p icmp --icmp-type 0 -j ACCEPT

    示例4: 允许服务器ping其他主机

    [root@node1 ~]# iptables -A OUTPUT -s 10.1.2.1 -p icmp --icmp-type 8 -j ACCEPT
    [root@node1 ~]# iptables -A INPUT -d 10.1.2.1 -p icmp --icmp-type 0 -j ACCEPT

    示例5: 允许服务器ping本机

    [root@node01 ~]# iptables -A INPUT -i lo -j ACCEPT
    [root@node01 ~]# iptables -A OUTPUT -o lo -j ACCEPT

    示例6: 允许DNS服务器解析所有主机名 

    [root@node1 ~]# iptables -A INPUT -d 10.1.2.1 -p udp --dport 53 -j ACCEPT
    [root@node1 ~]# iptables -A OUTPUT -s 10.1.2.1 -p udp --sport 53 -j ACCEPT

    [root@node1 ~]# iptables -A OUTPUT -s 10.1.2.1 -p udp --dport 53 -j ACCEPT
    [root@node1 ~]# iptables -A INPUT -d 10.1.2.1 -p udp --sport 53 -j ACCEPT

    [root@node1 ~]# iptables -A INPUT -d 10.1.2.1 -p tcp --dport 53 -j ACCEPT
    [root@node1 ~]# iptables -A OUTPUT -s 10.1.2.1 -p tcp --sport 53 -j ACCEPT

    [root@node1 ~]# iptables -A OUTPUT -s 10.1.2.1 -p tcp --dport 53 -j ACCEPT
    [root@node1 ~]# iptables -A INPUT -d 10.1.2.1 -p tcp --sport 53 -j ACCEPT

    保存防火墙规则 

    Centos 6:

    [root@node1 ~]# service iptables save
    iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]

    CentOS 7:

    [root@node01 ~]# iptables-save > /iptables.rule

    恢复规则:

    [root@node01 ~]# iptables-restore < /iptables.rule

    示例7: 删除规则

    [root@node1 ~]# iptables -D INPUT 3

    示例8:修改规则 

    [root@node01 ~]# iptables -R INPUT 7 -d 192.168.122.101 -p icmp --icmp-type 0 -j ACCEPT

    iptables模块

    1、multiport 离散多端口

    -m multiport 
    
    	--sports port1,port2,port3
    	--dports port1,port2,port3 
    

    [root@node01 ~]# iptables -I INPUT -s 192.168.122.1 -d 192.168.122.101 -p tcp -m multiport --dports 80,139,445,22 -j ACCEPT

    2、iprange

    -m iprange 
    
    	--src-range IP1[-IP2]
    	--dst-range IP2[-IP2]
    

    [root@node01 ~]# iptables -A INPUT -m iprange --src-range 192.168.1.1-192.168.1.10 -d 192.168.122.101 -p tcp --dport 80 -j ACCEPT

    3、state 状态模块 (根据连接状态进行数据的过滤)

    -m state --state 
    
    state状态:
    	NEW      首次访问
    	ESTABLISHED
    		后续的访问请求
    		服务器的响应数据 
    	RELATED(ftp)
    	INVALID  无效的链接(假设就是我服务器没有收到任何的请求,但是服务器往外直接发送了一个响应数据,被称之为无效的链接)
    

    ftp的工作方式有两种
    1:主动链接
    2:被动链接

    当客户端访问我ftp的时候,首先客户端向服务器的21号端口,发起请求建立命令链接,通过服务器的验证,这个时候在服务器本地产生一个大于1024的随机端口,
    而且这个端口产生之后,ftp服务器通过刚才建立的命令链接告诉客户端这个随机的端口以及来当我的数据连接,客户端收到这个端口信息后,再次向ftp的这个随机端口,发送请求,建立数据连接,
    传输数据;
    其中这个随机端口值得是,当建立命令连接之后,每次输入不同的命令就会产生一个随机的端口,

    [root@node01 ~]# iptables -I OUTPUT -s 192.168.122.166 -m state --state ESTABLISHED -j ACCEPT

    [root@node01 ~]# iptables -I INPUT -d 192.168.122.166 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
    [root@node01 ~]# iptables -I INPUT -d 192.168.122.166 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

    示例:允许ftp服务的访问

    首先需要装载ip_nat_ftp和ip_conntrack_ftp模块

    [root@node01 ~]# yum install -y iptables-services

    vim /etc/sysconfig/iptables-config

    IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
    

    systemctl restart iptables

    [root@node01 ~]# iptables -I INPUT -d 192.168.122.166 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    [root@node01 ~]# iptables -I INPUT 2 -d 192.168.122.166 -m state --state RELATED,ESTABLISHED -j ACCEPT

    FORWARD链的使用

    [root@nat-device ~]# iptables -A FORWARD -p icmp -j DROP

    nat表的使用 (IP地址转换) 

    NAT 网络地址转换 
    
    	PREROUTING		路由前的操作
    	POSTROUTING		路由后的操作 
    
    动作:
    
    	-j SNAT 
    	-j MASQUERADE 		转换数据包中的源IP地址
    	
    	-j DNAT 			转换数据包中的目的IP地址 
    

    示例1:SNAT

    [root@NAT-device ~]# iptables -t nat -A POSTROUTING -s 192.168.87.0/24 -j SNAT --to-source 20.1.1.254

    示例2: MASQUERADE

    [root@NAT-device ~]# iptables -t nat -A POSTROUTING -s 192.168.87.0/24 -j MASQUERADE

    示例3: DNAT

    [root@NAT-device ~]# iptables -t nat -A PREROUTING -d 20.1.1.254 -j DNAT --to-destination 192.168.87.101

    [root@NAT-device ~]# iptables -t nat -A PREROUTING -d 20.1.1.254 -p tcp --dport 8888 -j DNAT --to-destination 192.168.87.101:80
    端口映射/重定向

    TCP报头

    1. 源端口

    2. 目的端口

    3. 序列号, sequence

    4. 确认号, ack

    5. 首部长度, TCP报头的大小

    6. TCP协议的标志位

      SYN:请求建立连接
      ACK:确认
      FIN:请求断开连接
      RST:重置连接
      PSH:推送
      URG:紧急

    7. 窗口大小 windows size

    8. TCP校验和

    9. 紧急指针

    UDP报头

    1. 源端口
    2. 目的端口
    3. UDP长度
    4. UDP校验和

    网络层IP报头

    1. 版本 4 ipv4

    2. 首部长度 20Bytes

    3. 服务类型 TOS

    4. 总长度

    5. 标识符、标志、段偏移量

    6. TTL Time To Live 生存时间

      64 Linux/Unix
      128 Windows
      255 网络设备

    7. 协议,标识上层协议

      6 TCP
      17 UDP

    8. 首部校验和 checksum

    9. 源IP地址

    10. 目的IP地址

    iptables模块

    1、-m tos 根据IP报头TOS字段实现数据过滤

    -m tos --tos value
    

    [root@node01 ~]# iptables -A INPUT -s 192.168.122.102 -d 192.168.122.101 -m tos --tos 0x8 -j DROP

    通过抓包工具查看tos值

    [root@node01 ~]# tcpdump -i eth0 -nn port 22 -vvv

    2、-m tcp 根据TCP报头的标志位进行数据过滤

    --tcp-flags mask comp
    
    	--tcp-flags SYN,ACK,FIN SYN
    

    [root@node01 ~]# iptables -A INPUT -s 192.168.122.102 -d 192.168.122.101 -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT

    [root@node01 ~]# iptables -A INPUT -s 192.168.122.102 -d 192.168.122.101 -p tcp -m tcp --syn -j ACCEPT

    3、-m limit 限速

    -m limit --limit avg
    
    单位:/sec /minute /hour /day
    

    [root@node01 ~]# iptables -A INPUT -s 192.168.122.102 -p icmp -m limit --limit 5/minute -j ACCEPT
    [root@node01 ~]# iptables -A INPUT -s 192.168.122.102 -p icmp -j DROP

    4、-m connlimit 限制同一个客户端的最大连接数

    --connlimit-above n
    

    [root@node01 ~]# iptables -A INPUT -s 192.168.122.1 -d 192.168.122.101 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP

    5、-m time 根据时间限制访问

    [root@node01 ~]# iptables -A INPUT -s 192.168.122.102 -d 192.168.122.101 -p icmp -m time --timestart 11:30:00 --timestop 11:50:00 -j DROP

    6、-m comment 为规则添加描述信息

    -m comment --comment "描述信息"
    

    [root@node01 ~]# iptables -A INPUT -s 192.168.122.102 -d 192.168.122.101 -p icmp -m limit --limit 5/minute -m comment --comment "limit ping" -j ACCEPT

    7、-m mark 根据数据的mark值进行过滤

    -m mark --mark <mark>
    

    [root@node01 ~]# iptables -t mangle -A PREROUTING -s 192.168.122.102 -d 192.168.122.101 -p icmp -j MARK --set-mark 9
    [root@node01 ~]# iptables -A INPUT -m mark --mark 9 -j DROP

    =-j LOG 记录日志===

    --log-prefix prefix

    [root@node01 ~]# iptables -A INPUT -s 192.168.122.102 -d 192.168.122.101 -p icmp -j LOG --log-prefix "192.168.122.102_ping"

    启动kernel日志

    [root@node01 ~]# vim /etc/rsyslog.conf

    kern.*     /var/log/kernel.log
    

    [root@node01 ~]# systemctl restart rsyslog.service

    验证结果:

    [root@node01 log]# tail -f kernel.log

    Aug 29 12:10:20 node01 kernel: 192.168.122.102_pingIN=eth0 OUT= MAC=52:54:00:71:3b:1c:52:54:00:71:3b:2c:08:00 SRC=192.168.122.102 DST=192.168.122.101 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=64707 DF PROTO=ICMP TYPE=8 CODE=0 ID=2734 SEQ=1 MARK=0x9

    ===============================================

    centos7 firewalld 防火墙

    依赖于firewalld服务 
    
    配置工具:
    	firewall-config 	图形化工具
    	firewall-cmd		命令行工具
    

    1、查看所有区域名称

    [root@node01 ~]# firewall-cmd --get-zones
    block dmz drop external home internal public trusted work
    [root@node01 ~]#

    2、查看默认区域

    [root@node01 ~]# firewall-cmd --get-default-zone
    public

    3、查看某区域规则的设置

    [root@node01 ~]# firewall-cmd --list-all --zone=public
    public (default, active)
    interfaces: eth0
    sources:
    services: dhcpv6-client ssh
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

    4、更改默认区域

    [root@node01 ~]# firewall-cmd --set-default-zone=work
    success
    [root@node01 ~]# firewall-cmd --reload
    success
    [root@node01 ~]# firewall-cmd --get-default-zone
    work

    示例01:配置public区域允许http访问

    方法1)

    [root@node01 ~]# firewall-cmd --permanent --add-service=http --zone=public
    success
    [root@node01 ~]# firewall-cmd --reload
    success

    方法2)

    [root@node01 ~]# firewall-cmd --permanent --add-port=80/tcp --zone=public
    fsuccess
    [root@node01 ~]# firewall-cmd --reload
    success
    [root@node01 ~]# firewall-cmd --list-all --zone=public
    public (default, active)
    interfaces: eth0
    sources:
    services: dhcpv6-client ssh
    ports: 80/tcp
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

    [root@node01 ~]#

    示例02:配置192.168.122.102访问请求进入work区域,并允许其访问http服务

    [root@node01 ~]# firewall-cmd --permanent --add-source=192.168.122.1 --zone=work
    success
    [root@node01 ~]# firewall-cmd --permanent --add-service=http --zone=public --zone=work

    [root@node01 ~]# firewall-cmd --reload
    success

    示例03:在work区域禁止ping

    [root@node01 ~]# firewall-cmd --permanent --add-icmp-block=echo-request --zone=work
    success
    [root@node01 ~]# firewall-cmd --reload
    success
    [root@node01 ~]# firewall-cmd --list-all --zone=work
    work
    interfaces:
    sources: 192.168.122.102
    services: dhcpv6-client http ipp-client ssh
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks: echo-request
    rich rules:

    示例04:配置端口转发规则,192.168.122.102访问192.168.122.101的8888端口时,转发到本地的22端口

    [root@node01 ~]# firewall-cmd --permanent --add-forward-port=port=8888:proto=tcp:toport=22 --zone=work
    success
    [root@node01 ~]# firewall-cmd --reload
    success
    [root@node01 ~]# firewall-cmd --list-all --zone=work
    work
    interfaces:
    sources: 192.168.122.102
    services: dhcpv6-client http ipp-client ssh
    ports:
    masquerade: no
    forward-ports: port=8888:proto=tcp:toport=22:toaddr=
    icmp-blocks: echo-request
    rich rules:

    [root@node01 ~]#

    示例05:验证block/drop区域

    [root@node01 ~]# firewall-cmd --permanent --add-source=192.168.122.102 --zone=block
    success
    [root@node01 ~]# firewall-cmd --reload
    success
    [root@node01 ~]# firewall-cmd --list-all --zone=block
    block
    interfaces:
    sources: 192.168.122.102
    services:
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

    示例06:验证trusted区域

    [root@node01 ~]# firewall-cmd --permanent --add-source=192.168.122.102 --zone=trusted
    success
    [root@node01 ~]# firewall-cmd --reload
    success
    [root@node01 ~]# firewall-cmd --list-all --zone=trusted
    trusted
    interfaces:
    sources: 192.168.122.102
    services:
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

    TCPWrapper 防火墙

    /etc/hosts.allow 
    /etc/hosts.deny
    

    注意:只有加载了tcpwrapper库文件的应用程序才可以使用tcpwrapper进行访问控制

    [root@node01 ~]# ldd /usr/sbin/vsftpd | grep wrap
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f064d366000)

    示例01: 禁止192.168.122.102访问ftp服务

    [root@node01 ~]# vim /etc/hosts.deny

    vsftpd:192.168.122.102
    

    示例02:禁止192.168.122.0网段主机访问ftp服务

    [root@node01 ~]# vim /etc/hosts.deny

    vsftpd:192.168.122.0/255.255.255.0
    
    vsftpd:192.168.122.0/255.255.255.0 except 192.168.122.1

    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。 想到与得到中间还有两个字——做到。
  • 相关阅读:
    Silverlight 页面导航
    SqlServer中的扩展属性[转]
    一个你不一定知道的CMD命令: start
    手动将Notepad2加入到右键
    ExcelHelper:使用Oledb接口操作Excel的帮助类[原]
    Excel学习笔记 – 区域选择
    SqlMetal自动代码生成
    与System.Diagnostics.Process相关的几个方法
    在Sql Server中附加数据库文件时寻找日志文件的规则
    获取SQL SERVER服务状态及启用的协议
  • 原文地址:https://www.cnblogs.com/huoxc/p/12844930.html
Copyright © 2020-2023  润新知