Linux初学者学习笔记

20171018 Linux防火墙

2017-10-23  本文已影响105人  哈喽别样
  • 防火墙的概念
  • iptables的简介
  • iptables命令
  • 网络防火墙
  • NAT
  • firewalld服务

一、防火墙的概念

(一)安全技术简介

(1)入侵检测与管理系统(Intrusion Detection System)
(2)入侵防御系统(Intrusion Prevention System)
(3)防火墙(Firewall)

(二)防火墙的分类

(1)按照服务范围分
(2)按照实现方式分
(3)按照工作的网络层次分

(三)网络层防火墙

(四)应用层防火墙/代理服务型防火墙

二、iptables的简介

(一)Netfilter组件

(二)防火墙工具

(三)iptables的组成

(四)内核中数据包的传输过程

(五)iptables规则

(六)iptables添加要点

三、iptables命令

// CentOS 7关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld
// CentOS 6关闭系统默认iptables策略
service iptables stop
chkconfig iptables off

(一)规则格式

iptables [-t table] SUBCOMMAND chain rule-specification
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]

(二)SUBCOMMAND

(1)查看
(2)规则管理

(三)匹配条件

(1)基本匹配条件:无需加载模块,由iptables/netfilter自行提供
// 设置策略(IP: 192.168.136.230)
iptables -A INPUT -s 192.168.136.0/24 -p icmp -j REJECT
// 在其他主机测试(IP: 192.168.136.130)
ping -c 5 192.168.136.230
curl 192.168.136.230
(2) 扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效
1)隐式扩展:
  1. tcp协议的扩展选项
    --source-port, --sport port[:port]
    匹配报文源端口,可为端口范围
    --destination-port, --dport port[:port]
    匹配报文目标端口,可为端口范围
    --tcp-flags mask comp
    mask:需检查的标志位列表(例如SYN,ACK,FIN,RST),用","分隔
    comp:在mask列表中必须为1的标志位列表,无指定则必须为0,用","分隔
// 设置策略(IP: 192.168.136.230),以下两条命令等价
iptables -A INPUT -p tcp --dport 22:23 --tcp-flags SYN,ACK,FIN,RST SYN -j REJECT
iptables -A INPUT -p tcp --dport 22:23 --syn -j REJECT
// 在其他主机测试(IP: 192.168.136.130)
ssh 192.168.136.230
telnet 192.168.136.230
  1. udp协议的扩展选项
    --source-port, --sport port[:port]
    匹配报文的源端口,可以是端口范围
    --destination-port, --dport port[:port]
    匹配报文的目标端口,可以是端口范围

  2. icmp协议的扩展选项
    --icmp-type {type[/code]|typename}
    type/code
    0/0 echo-reply:icmp应答
    8/0 echo-request:icmp请求

设定策略前ping本机ip正常,设定策略后ping本机ip全部失败

2)显式扩展:
  1. multiport扩展:以离散方式定义多端口匹配,最多指定15个端口
    --source-ports, --sports port[,port|,port:port]...
    指定多个源端口
    --destination-ports, --dports port[,port|,port:port]...
    指定多个目标端口
    --ports port[,port|,port:port]...多个源或目标端口
// 设置策略(IP: 192.168.136.230)
iptables -A INPUT -s 192.168.136.0/24 -p tcp -m multiport -dports 20:25,80 -j REJECT
// 在其他主机测试(IP: 192.168.136.130)
ftp 192.168.136.230
ssh 192.168.136.230
telnet 192.168.136.230
curl 192.168.136.230

设置策略前

设置策略后

  1. iprange扩展:指明连续的(但一般不是整个网络)ip地址范围
    --src-range from [-to] 源IP地址范围
    --dst-range from [-to] 目标IP地址范围
  1. mac扩展:指明源MAC地址
    适用于:PREROUTING, FORWARD, INPUT chains
    --mac-source XX:XX:XX:XX:XX:XX
  1. string扩展:对报文中的应用层数据做字符串模式匹配检测
    --algo {bm|kmp}:字符串匹配检测算法
    bm:Boyer-Moore
    kmp:Knuth-Pratt-Morris
    --from offset:开始偏移
    --to offset:结束偏移
    --string pattern:要检测的字符串模式
    --hex-string pattern:要检测字符串模式,16进制格式
// 设置策略(IP: 192.168.136.230)
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --string "google" -j REJECT
// 在其他主机测试(IP: 192.168.136.130)
curl 192.168.136.230
curl 192.168.136.230/index2.html

前两行为设置策略前,后两行为设置策略后

  1. time扩展:根据将报文到达的时间与指定的时间范围进行匹配
    --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:日期
    --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
    --timestart hh:mm[:ss]:时间
    --timestop hh:mm[:ss]
    --monthdays day[,day...]:每个月的几号
    --weekdays day[,day...]:星期几
    CentOS 7使用UTC时间,CentOS 6使用本地时区时间
// 当前策略设置的时间段为UTC 01:00-10:00,当前时间不在范围中,故可以访问http服务
iptables -A INPUT -p tcp --dport 80 -m time --timestart 01:00 --timestop 10:00 ! --weekdays Sat,Sun -j REJECT
// 更新策略后,时间范围改为UTC 01:00-14:00,当前时间在范围中,故访问被拒绝
iptables -R INPUT 1 -p tcp --dport 80 -m time --timestart 01:00 --timestop 14:00 ! --weekdays Sat,Sun -j REJECT
  1. connlimit扩展:根据每客户端IP做并发连接数数量匹配
    可防止CC(Challenge Collapsar挑战黑洞)攻击
    --connlimit-upto n:连接的数量小于等于n时匹配,与默认的拒绝策略配合使用
    --connlimit-above n:连接的数量大于n时匹配,与默认的允许策略配合使用
  1. limit扩展:基于收发报文的速率做匹配
    令牌桶过滤器
    --limit rate [/second|/minute|/hour|/day]:限速
    --limit-burst number:前多少个报文不做限速
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 6/minute --limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
  1. state扩展:根据连接追踪机制去检查连接的状态,较耗资源
modprobe nf_conntrack_ftp      // 装载ftp连接追踪模块
iptables -F
// 放行已经建立的命令连接、数据连接以及新发起的数据连接
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
// 放行新发起的命令连接
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
// 阻止其他无关连接
iptables -A INPUT -j REJECT

(四)Target:处理动作

(五)链管理

// 新建自定义链
iptables -N deny_icmp_ssh
iptables -A deny_icmp_ssh -p icmp -j REJECT
iptables -A deny_icmp_ssh -p tcp --dport 22 -j REJECT
// 关联自定义链至INPUT链
iptables -A INPUT -m iprange --src-range 192.168.136.100-192.168.136.200 -j deny_icmp_ssh
// 其他主机上测试
ping -c 5 192.168.136.230
ssh 192.168.136.230
// 清除自定义链
iptables -F deny_icmp_ssh     // 清除deny_icmp_ssh链的策略
iptables -F                   //清除INPUT关联deny_icmp_ssh链的策略
iptables -X deny_icmp_ssh     //删除策略为空的deny_icmp_ssh链

设置完毕的策略:自定义链下两条策略,INPUT链的策略关联了自定义链

在IP: 192.168.136.130主机测试ping和ssh登录,均失败

在IP: 192.168.136.229主机测试ping和ssh登录,均成功

(六)iptables规则安排的基本原则

(七)iptables规则的保存和生效

四、网络防火墙

五、NAT

(一)NAT基本概念

(二)SNAT配置:通过net表的target配置

(三)DNAT配置:通过net表的target配置

(四)转发:通过改变目标IP和端口,将接受的包转发至不同地址

六、firewalld服务

(一)基本概念

(1)简介
(2)zone:区域
zone名称 默认配置
trusted 允许所有流量
home 拒绝除和传出流量相关的,以及ssh,mdsn,ipp-client,samba-client,dhcpv6-client预定义服务之外其它所有传入流量
internal 和home相同
work 拒绝除和传出流量相关的,以及ssh,ipp-client,dhcpv6-client预定义服务之外的其它所有传入流量
public 拒绝除和传出流量相关的,以及ssh,dhcpv6-client预定义服务之外的其它所有传入流量,新加的网卡默认属于publiczone
external 拒绝除和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量,属于external zone的传出ipv4流量的源地址将被伪装为传出网卡的地址。
dmz 拒绝除和传出流量相关的,以及ssh预定义服务之外的其它所有传入流量
block 拒绝除和传出流量相关的所有传入流量
drop 拒绝除和传出流量相关的所有传入流量(甚至不以ICMP错误进行回应)

(二)firewalld配置

(1)三种配置方法
(2)firewall-cmd 命令选项
// 查看默认zone
firewall-cmd --get-default-zone
// 默认zone设为dmz
firewall-cmd --set-default-zone=dmz
// 在internalzone中增加源地址192.168.0.0/24的永久规则
firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
// 在internalzone中增加协议mysql的永久规则
firewall-cmd --permanent --zone=internal --add-service=mysql
// 加载新规则以生效
firewall-cmd --reload

(三)rich规则

(1)rich规则简介
rule
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop]
(2)rich规则生效顺序
(3)rich规则选项
// 拒绝从192.168.0.11的所有流量,当address选项使用source或destination时,必须用family=ipv4|ipv6.
firewall-cmd --zone=classroom --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'
// 限制每分钟只有两个连接到ftp服务
firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'
// 抛弃esp(IPsec 体系中的一种主要协议)协议的所有数据包
firewall-cmd --add-rich-rule='rule protocol value=esp drop'
// 接受所有192.168.1.0/24子网端口范围7900-7905的TCP流量
firewall-cmd --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'
(4)rich日志规则
(5)伪造和端口转发
上一篇下一篇

猜你喜欢

热点阅读