SELINUX简介

  • SELinux:Secure Enhanced Linux,工作于Linux内核中
    • DAC:自主访问控制法则
    • MAC:强制访问控制
  • SELinux有两种工作级别:
    • strict:每个进程都受到selinux的控制
    • argeted:仅有限个进程受到selinux控制,只监控容易被入侵的进程
  • sandbox:subject operation object
    • ubject:进程
    • object:进程,文件
      • 文件:open,read,write,close,chown,chmod
  • SELinux为每个文件提供了安全标签,也为进程提供了安全标签
    • user:role:type
    • role:角色
    • type:类型
  • SELinux规则库:
    • 规则:哪种域能访问哪种或哪些种类型内文件;
    • 配置SELinux:
      • SELinux是否启用:
      • 给文件重新打标;
      • 设定某些布尔型特性;
  • SELinux的状态:
    • enforcing:强制,每个受限的进程都必然受限;
    • permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志;
    • disabled:关闭
  • 相关命令
  1. getenforcing:获取selinux当前状态
  2. setenforce 0|1
  3. 0:设置为permissive
  4. 1:设置为enforcing
  5. 此设定:重启系统后无效
  6. 配置文件: /etc/sysconfig/selinux,/etc/selinux/config
  7. SELinux=[disabled|enforcing|permissive]
  8. 给文件重新打标签:
  9. chcon命令:chcon change file SELinux security context
  10. chcon [OPTION]... [‐u USER] [‐r ROLE] [‐l RANGE] [‐t TYPE] FILE...
  11. R:递归打标
  12. 还原文件的标签:restorecon restore file(s) default SELinux security contexts.
  13. restorecon [‐R] [‐n] [‐p] [‐v] [‐e directory] pathname
  14. 布尔型规则
  15. getsebool
  16. setsebool
  17. getsebool命令:getsebool get SELinux boolean value(s)
  18. getsebool [‐a] [boolean]
  19. setsebool命令
  20. setsebool [ PNV ] boolean value | bool1=val1 bool2=val2

Iptables

  • 防火墙相关概念

    从逻辑上分类: 主机防火墙:为单个主机进行防护 网络防火墙:对网络入口进行防护,服务防火墙背后的本地局域网 主机防火墙(个人)和网络防火墙(集体)相辅相成![]( 从物理上分类: 硬件防火墙:硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。 软件防火墙:应用软件处理逻辑运行于通用硬件平台上的防火墙,性能低,成本低 IPTABLES:一个客户端代理,将用户的安全设定执行到对应的“安全框架——netfilter”中。 netfilter才是防火墙真正的安全框架(framework),位于内核空间 netfilter——内核空间 iptables ———— 用户空间的客户端代理 将用户空间的安全设定通过代理执行到Netfilter当中 netfilter/iptables组成Linux平台下的包过滤防火墙(免费) Netfilter是Linux操作系统核心层的一个数据包处理模块(iptables并没有守护进程, 所以不是正真的服务,而是内核提供的功能),具有如下功能: 网络地址转换 数据包内容修改 数据包过滤的防火墙功能

  • IPTABLES基础

    IPtables根据它的rule匹配而对数据包进行:放行(accept),拒绝(reject)和丢弃(drop)等动作 rule存储在内核空间的信息过滤表中,这些规则指定:源地址、目的地址、传输协议(TCP、UDP、ICMP等)和服务 类型(Http、FTP和SMTP)等 Netfilter位于内核空间中,是真正的防火墙,设置了“关卡”在Input、Output上(链) 网卡的驱动是在内核空间当中,Netfilter也是在内核空间当中,所以Iptables+netfilter 可以在内核空间当中 设置“关卡”,当用户去访问应用服务时,数据包是通过网卡流经内核空间之后到达用户空间。 如果我们需要报文转发,则不经过Input链,Outpup链 只需要:PREROUTING(路由前),转发(forward),路由后(postrouting) 常用应用场景,报文流向: 到本地某个进程的报文:PREROUTING‐‐> INPUT‐‐>OUTPUT ‐‐>POSTROUTING 由本机转发的报文:PREROUTING ‐‐> FORWARD ‐‐> POSTROUTING 由本机的某个进程发出报文(通常为响应报文): OUTPUT ‐‐> POSTROUTING

image.png

  • 链的概念

    防火墙的作用在于对经过的报文匹配“规则”,然后执行对应的动作,如果有多个“规则”组合到一起,那么我们就叫它“链”, 每经过一条链则要把所有的规则都要匹配一遍!如果有符合条件的规则,则执行规则对应的动作 简单来说:多个规则组成链,经过的链的所有规则匹配一遍,符合条件的规则,执行相应的动作

  • 表的概念

    每个链上都放置了一串规则,但是有许多类似的规则,这些规则可能是: 对IP或端口进行过滤, 对报文进行修改, 对网络地址进行转换等等 如果把这些实现相同功能的规则放在一起,它们的集合就叫做“表” 相同规则的集合叫做“表”,多张表的规则的集合叫做“链”

iptables提供的表:

raw表:关闭nat上启用的连接追踪机制;iptable_raw

mangle表:拆解报文,做出修改,并重新封装的功能;Iptables_mangle

nat表:网络地址转换;内核模块:Iptables_nat

filter表:负责过滤功能,防火墙;内核模块:iptable_filter

优先级也是这样:raw ‐‐> mangle ‐‐> nat ‐‐‐> filter

我们所有定义的规则,都在于这4张“表”中

image.png

  • 表链关系

    是不是每种链都会有以上4张表???当然不是!!!每个链只能拥有某些规则,也就是某些表。

总结一下,每个“链”中的规则都存在于哪些“表”中

PREROUTING:raw,mangle,nat

INPUT:mangle,filter,nat(centos 7)

FORWARD:mangle,filter

OUTPUT:raw,mangle、nat、filter

POSTROUTING:mangle、nat

我们实际使用过程中,往往是通过“表”作为操作入口,对规则进行定义:iptables ‐t raw/nat/mangle/filter ‐L

表(功能)<‐‐‐‐‐‐> 链(钩子)

raw 表:PREROUTING, OUTPUT

mangle表:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

nat表:PREROUTING, OUTPUT, INPUT, POSTROUTING,

filter表:INPUT, FORWARD, OUTPUT

操作时,是通过表,查询所定义的规则,以及该表的规则所作用于的“链” 注意:当数据包经过一个“链”的时候,会将当前链的所有规则都依次匹配,而定义的规则汇聚在表中;匹配时,因

为总有优先匹配,所以表就拥有了优先级

当四张表处于同一条“链”时,执行的优先级为:raw ‐‐> mangle ‐‐‐> nat ‐‐‐> filter

注意:要想Linux主机支持转发,需要开启内核的IP_FORWARDING功能

/proc/sys/net/ipv4/ip_forward

image.png

  • 规则的概念

    规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进处

匹配条件

基本匹配条件:SIP、DIP等

扩展匹配条件:Sport,Dport等(‐m参数)

扩展条件也是Netfilter中的一部分,只是以模块的形式在,若要使用,则需要依赖对应的模块

处理动作

处理动作在iptables中称呼为target,分为基本动作和扩展动作

常用动作:

  1. ACCEPT:允许数据包通过
  2. DROP:直接丢弃数据包,无任何回应信息
  3. REJECT:拒绝数据包通过,必要时会发给数据发送端一个响应的拒绝消息
  4. SNAT:源地址转换,解决内网用户同一个公网地址上网问题
  5. MASQUERADE:是SNAT的一种特殊形式,适用动态的、临时会变的IP
  6. DNAT:目标地址转换
  7. REDIRECT:在本机做端口映射
  8. LOG:/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,不对数据包进行任何

操作,只记录,让下一条规则去匹配。

  • 规则查询

    规则查询:

以filter表进行实际操作,filter负责过滤功能,比如允许(禁止)哪些IP地址访问,允许(禁止)访问哪些端口

iptables ‐t filter ‐L

‐t : 指定表,默认是filter表

‐L : 列出表中的规则,默认所有规则

iptables ‐t filter ‐vxL INPUT

‐v : 显示详细信息

‐x : 展开数字

policy 当前链的默认策略

packets 当前链默认策略匹配到包的数量

bytes 当前链默认策略匹配到包的大小;‐x 显示精确的计数值!

pkts 对应匹配到报文的个数

bytes 对应匹配到的报文大小总和

target 规则对应的“处理动作”

prot 规则对应的协议,是否只针对某些协议应用此规则

opt 规则对应的选项

in 数据包由哪个接口(网卡)流入,设置哪块网卡流入的报文需要匹配当前规则

out 数据包由拿个接口(网卡)流出,设置哪块网卡流出的报文需要匹配当前规则

source 规则对应的源地址(IP或网段)

destination 规则对应的目标地址(IP或网段)

源地址和目标地址都是anywhere,因为iptables默认进行了名称解析,这样效率会比较低 iptables ‐‐line‐numbers ‐t filter ‐vnL INPUT

‐n 不对IP地址进行名称解析

‐‐line‐numbers 显示有序号

  • 规则操作

    iptables ‐F INPUT

‐F:清除规则

增加规则

iptables ‐t filter ‐A INPUT ‐s x.x.x.x ‐j

‐A: 追加

‐I:插入

‐s:匹配条件中的源地址

‐j:匹配条件中的所对应动作

删除规则

方法一:根据规则的编号去删除规则

方法二:根据具体的匹配条件去删除规则

iptables ‐t filter ‐D INPUT 3

iptables ‐t filter ‐D INPUT ‐s x.x.x.x ‐j

‐D:删除指定链中的规则

‐F: 删除操作,冲刷指定的链

修改规则:

iptables ‐t filter ‐R INPUT ‐s x.x.x.x ‐j

iptables ‐t filter ‐P FORWARD DROP

‐R:修改规则

‐P:修改链的默认规则

保存规则:

iptables‐save > /etc/sysconfig/iptables-config

导入规则:

iptables ‐restore < /etc/sysconfig/iptables-config

  • 匹配条件

    匹配条件:

‐s: 指定源地址

‐d :指定目标地址

‐p :指定协议类型

‐i / ‐o : 指定网卡流入和流出

   -i:用于网卡流入,PREROUTING,INPUT,forward![    -o:用于网卡流出,OUPTUT, FORWARD,

POSTROUTING

扩展条件:

‐m [扩展模块]

tcp/udp扩展模块

   ‐‐dport  

   ‐‐sport

iprange扩展模块:匹配报文的源/目的地址所在范围

   ‐‐src—range

   ‐‐dst‐range

string扩展模块:指定匹配报文中的字符串

   ‐‐algo:指定匹配算法,可选算法bm和kmp

   ‐‐string:执指定需要匹配的字符串

time模块:时间段匹配,如果报文在到达时间范围内,则符合匹配条件

‐m time ‐‐timestart [起始时间] ‐‐timestop [结束时间]

   ‐‐weekdays

   ‐‐mouthdays

   ‐‐datestart[其实日期] ‐‐datestop[结束日期]

connlimit模块:限制每个IP地址同时连接到server端的连接数量,不需要指定IP,默认就是针对每个客户IP

地址

‐m connlimit ‐‐connlimit‐above 2 ‐j REJECT

   限制每个客户端IP的ssh并发链接数量高于2都被拒绝

‐p tcp ‐‐dport 22 ‐m connlimit ‐‐connlimit‐upto 2 ‐j ACCEPT

每个客户端IP的ssh并发链接数量只要不高于2都被接收

‐p tcp ‐‐dport 22 ‐m connlimit‐‐connlimit‐above 2 ‐‐connlimit‐mask 24 ‐j REJECT

限制24网段的链接数量为2,配合后更加的灵活

limit扩展模块:对“报文到达速率”进行限制的,就是限制单位时间内流入的包的数量

   ‐p icmp ‐m limit ‐‐limit 10/minute ‐j ACCEPT

   每6秒放行一个包

           /second

           /minute

           /hour

           /day

   ‐‐limit‐burst 空闲时可放行的包的数量,默认为5;而默认生成令牌的速度为每6s一个!

state扩展模块:

   当我们去访问服务端的时候,发送请求,服务端响应我们的请求,于是,作为客户端是不是应该放行该端

口?!

   如果我们没有主动去发送请求,服务端发送了请求,我们是不是也能够接收到?!当然是可以的。那么安

全性??

   方案一:我们只为特定IP放行端口,如果主机量非常的多,工作量也就会增加!!

   方案二:利用‐‐tcp‐flags去匹配tcp报文的标志位,把外来的“第一次握手”的请求拒绝掉,是不是就ok

了??如果他人利用UDP或ICMP协议呢??

   方法三:我们通过判断报文的连接状态是请求还是回应,进行接收和拒绝,是不是就ok了??

   对于state模块的连接报文中的状态可以分为:NET, ESTABLISHED, RELATED, INVALID, UNTARCKED

       NEW:连接中的第一个包,状态就是NEW

       ESTABLISHED:把NEW状态包后面的包的状态理解为ESTABLISHED,表示已经建立连接

       RELATED:与“命令连接”中的报文有关系的,比如FTP服务,有两个进程,一个命令进程,一个数据

进程

       INVALID:如果一个包没有办法被识别,或者这个包没有任何状态,我们是能够主动屏蔽状态为

INVALID的报文

       UNTRACKED:表示报文未被追踪时的状态,当报文的状态为UNTRACKED时通常表示无法找到相关连接

       iptables ‐t filter ‐I INPUT ‐m state ‐‐state ESTABLISHED,RELATED ‐j ACCEPT

       iptables ‐t filter ‐I INPUT ‐m state ‐j REJECT  

       表示只有回应我们的报文能够通过防火墙,如果是别人主动发送过来的新报文,则无法通过防火墙。
  • 自定义链

    当默认链的规则非常多的时候,不方便我们管理;如果INPUT链中存放几百条规则,有针对httpd服务的,有针对

sshd服务的,有针对私网IP的等等,当我们想去修改httpd规则时候,为了方便管理

iptables ‐t filter ‐N my_chain

‐N : 创建自定义链

增删改查同模式链的方法

iptables ‐t filter ‐I my_chain ‐s 192.168.139.1 ‐j REJECT

iptables ‐I INPUT ‐p icmp ‐j my_chain 表示引用链,禁ping!!

删除自定义链:

iptables ‐F my_chain

iptables ‐t filter ‐‐line ‐L INPUT

iptables ‐t filter ‐D input [num]

iptables ‐F INPUT

iptables ‐X my_chain

X:删除自定义链

但是删除自定义链的时候需要满足的条件:

  1. 自定义链中没有任何默认链引用,即自定义链的引用数为0

  2. 自定义链中没有任何规则,即自定义链为空

iptabels实例

1. 删除已有规则
在开始创建iptables规则之前,你也许需要删除已有规则。命令如下:

iptables -F
(or)
iptables –flush

2.设置链的默认策略
链的默认政策设置为”ACCEPT”(接受),若要将INPUT,FORWARD,OUTPUT链设置成”DROP”(拒绝),命令如下:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

当INPUT链和OUTPUT链都设置成DROP时,对于每一个防火墙规则,我们都应该定义两个规则。例如:一个传入另一个传出。在下面所有的例子中,由于我们已将DROP设置成INPUT链和OUTPUT链的默认策略,每种情况我们都将制定两条规则。当然,如果你相信你的内部用户,则可以省略上面的最后一行。例如:默认不丢弃所有出站的数据包。在这种情况下,对于每一个防火墙规则要求,你只需要制定一个规则——只对进站的数据包制定规则。
3. 阻止指定IP地址
例:丢弃来自IP地址x.x.x.x的包

BLOCK_THIS_IP=”x.x.x.x”
iptables -A INPUT -s “$BLOCK_THIS_IP” -j DROP

注:当你在log里发现来自某ip地址的异常记录,可以通过此命令暂时阻止该地址的访问以做更深入分析
例:阻止来自IP地址x.x.x.x eth0 tcp的包

iptables -A INPUT -i eth0 -s “$BLOCK_THIS_IP” -j DROP
iptables -A INPUT -i eth0 -p tcp -s “$BLOCK_THIS_IP” -j DROP

4. 允许所有SSH的连接请求
例:允许所有来自外部的SSH连接请求,即只允许进入eth0接口,并且目标端口为22的数据包

iptables -A INPUT -i eth0 -p tcp —dport 22 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 22 -m state —state ESTABLISHED -j ACCEPT

5. 仅允许来自指定网络的SSH连接请求
例:仅允许来自于192.168.100.0/24域的用户的ssh连接请求

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 —dport 22 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 22 -m state —state ESTABLISHED -j ACCEPT

6.允许http和https的连接请求
例:允许所有来自web - http的连接请求

iptables -A INPUT -i eth0 -p tcp —dport 80 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 80 -m state —state ESTABLISHED -j ACCEPT

例:允许所有来自web - https的连接请求

iptables -A INPUT -i eth0 -p tcp —dport 443 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 443 -m state —state ESTABLISHED -j ACCEPT

7. 使用multiport 将多个规则结合在一起
允许多个端口从外界连入,除了为每个端口都写一条独立的规则外,我们可以用multiport将其组合成一条规则。如下所示:
例:允许所有ssh,http,https的流量访问

iptables -A INPUT -i eth0 -p tcp -m multiport —dports 22,80,443 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport —sports 22,80,443 -m state —state ESTABLISHED -j ACCEPT

8. 允许从本地发起的SSH

iptables -A OUTPUT -o eth0 -p tcp —dport 22 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp —sport 22 -m state —state ESTABLISHED -j ACCEPT

请注意,这与允许ssh连入的规则略有不同。本例在OUTPUT链上,我们允许NEW和ESTABLISHED状态。在INPUT链上,我们只允许ESTABLISHED状态。ssh连入的规则与之相反。
9. 仅允许从本地发起到一个指定的网络域的SSH请求
例:仅允许从内部连接到网域192.168.100.0/24

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 —dport 22 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp —sport 22 -m state —state ESTABLISHED -j ACCEPT

10. 允许从本地发起的HTTPS连接请求
下面的规则允许输出安全的网络流量。如果你想允许用户访问互联网,这是非常有必要的。在服务器上,这些规则能让你使用wget从外部下载一些文件

iptables -A OUTPUT -o eth0 -p tcp —dport 443 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp —sport 443 -m state —state ESTABLISHED -j ACCEPT

注:对于HTTP web流量的外联请求,只需要将上述命令中的端口从443改成80即可。
11. 负载平衡传入的网络流量
使用iptables可以实现传入web流量的负载均衡,我们可以传入web流量负载平衡使用iptables防火墙规则。
例:使用iptables nth将HTTPS流量负载平衡至三个不同的ip地址。

iptables -A PREROUTING -i eth0 -p tcp —dport 443 -m state —state NEW -m nth —counter 0 —every 3 —packet 0 -j DNAT —to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp —dport 443 -m state —state NEW -m nth —counter 0 —every 3 —packet 1 -j DNAT —to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp —dport 443 -m state —state NEW -m nth —counter 0 —every 3 —packet 2 -j DNAT —to-destination 192.168.1.103:443

12. 允许外部主机ping内部主机

iptables -A INPUT -p icmp —icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp —icmp-type echo-reply -j ACCEPT

13. 允许内部主机ping外部主机

iptables -A OUTPUT -p icmp —icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp —icmp-type echo-reply -j ACCEPT

14. 允许回环访问
例:在服务器上允许127.0.0.1回环访问。

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

15. 允许内部网络域外部网络的通信
防火墙服务器上的其中一个网卡连接到外部,另一个网卡连接到内部服务器,使用以下规则允许内部网络与外部网络的通信。此例中,eth1连接到外部网络(互联网),eth0连接到内部网络(例如:192.168.1.x)。

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16. 允许出站的DNS连接

iptables -A OUTPUT -p udp -o eth0 —dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 —sport 53 -j ACCEPT

17. 允许NIS连接
如果你使用NIS管理用户帐户,你需要允许NIS连接。如果你不允许NIS相关的ypbind连接请求,即使SSH连接请求已被允许,用户仍然无法登录。NIS的端口是动态的,先使用命令rpcinfo –p来知道端口号,此例中为853和850端口。

rpcinfo -p | grep ypbind

例:允许来自111端口以及ypbind使用端口的连接请求

iptables -A INPUT -p tcp —dport 111 -j ACCEPT
iptables -A INPUT -p udp —dport 111 -j ACCEPT
iptables -A INPUT -p tcp —dport 853 -j ACCEPT
iptables -A INPUT -p udp —dport 853 -j ACCEPT
iptables -A INPUT -p tcp —dport 850 -j ACCEPT
iptables -A INPUT -p udp —dport 850 -j ACCEPT

注:当你重启ypbind之后端口将不同,上述命令将无效。有两种解决方案:1)使用你NIS的静态IP 2)编写shell脚本通过“rpcinfo - p”命令自动获取动态端口号,并在上述iptables规则中使用。
18. 允许来自指定网络的rsync连接请求
例:允许来自网络192.168.101.0/24的rsync连接请求

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 —dport 873 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 873 -m state —state ESTABLISHED -j ACCEPT

19. 允许来自指定网络的MySQL连接请求
很多情况下,MySQL数据库与web服务跑在同一台服务器上。有时候我们仅希望DBA和开发人员从内部网络(192.168.100.0/24)直接登录数据库,可尝试以下命令:

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 —dport 3306 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 3306 -m state —state ESTABLISHED -j ACCEPT

20. 允许Sendmail, Postfix邮件服务
Sendmail和postfix都使用了25端口,因此我们只需要允许来自25端口的连接请求即可。

iptables -A INPUT -i eth0 -p tcp —dport 25 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 25 -m state —state ESTABLISHED -j ACCEPT

21. 允许IMAP和IMAPS
例:允许IMAP/IMAP2流量,端口为143

iptables -A INPUT -i eth0 -p tcp —dport 143 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 143 -m state —state ESTABLISHED -j ACCEPT

例:允许IMAPS流量,端口为993

iptables -A INPUT -i eth0 -p tcp —dport 993 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 993 -m state —state ESTABLISHED -j ACCEPT

22. 允许POP3和POP3S
例:允许POP3访问

iptables -A INPUT -i eth0 -p tcp —dport 110 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 110 -m state —state ESTABLISHED -j ACCEPT

例:允许POP3S访问

iptables -A INPUT -i eth0 -p tcp —dport 995 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 995 -m state —state ESTABLISHED -j ACCEPT

23. 防止DoS攻击

iptables -A INPUT -p tcp —dport 80 -m limit —limit 25/minute —limit-burst 100 -j ACCEPT

上述例子中:
-m limit: 启用limit扩展
–limit 25/minute: 允许最多每分钟25个连接(根据需求更改)。
–limit-burst 100: 只有当连接达到limit-burst水平(此例为100)时才启用上述limit/minute限制。
24. 端口转发
例:将来自422端口的流量全部转到22端口。
这意味着我们既能通过422端口又能通过22端口进行ssh连接。启用DNAT转发。

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 —dport 422 -j DNAT —to 192.168.102.37:22

除此之外,还需要允许连接到422端口的请求

iptables -A INPUT -i eth0 -p tcp —dport 422 -m state —state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp —sport 422 -m state —state ESTABLISHED -j ACCEPT

25. 记录丢弃的数据表
第一步:新建名为LOGGING的链

iptables -N LOGGING

第二步:将所有来自INPUT链中的数据包跳转到LOGGING链中

iptables -A INPUT -j LOGGING

第三步:为这些包自定义个前缀,命名为”IPTables Packet Dropped”

iptables -A LOGGING -m limit —limit 2/min -j LOG —log-prefix “IPTables Packet Dropped: “ —log-level 7

第四步:丢弃这些数据包

iptables -A LOGGING -j DROP

Firewalld

  • Firewalld概述

    动态防火墙后台程序firewalld提供了一个动态管理的防火墙,用以支持网络“zones”,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对IPv4和IPv6防火墙设置的支持。

它支持以太网桥,并有分离运行时间和永久性配置选项。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。

图形化的配置工具:firewall‐config

命令行客户端:firewall‐cmd

用于配置firewalld永久性或非永久性运行时间的改变:它依次用iptables工具与执行数据包筛选的内核中的

Netfilter通信

Firewalld和iptables的关系:

Firewalld和Iptables一样本身并不具备防火墙功能

而是将用户将安全设定执行到内核空间的“安全框架——Netfilter”之中。

firewalld和iptables service之间本质的不同是

1. iptables service在/etc/sysconfig/iptables中存配置,firewalld将配置存储在/usr/lib/firewalld/

(系统配置)和/etc/firewalld/(用户配置地址)中的各种XML文件

2. 使用iptables service 每一个单独更改意味这清除旧的规则和从/etc/sysconfig/iptables里读取新的规则

3.而firewalld却不再创建任何新的规则;仅仅运行规则中的不同之处,因此,firewalld可以在运行时间内,改

变设置而不丢失现行的连接。

NetworkManager通知firewalld一个接口归属某个区域,新加入的接口被分配到默认区域

  • Zone区域
    • trusted(信任):可接受所有的网络链接
    • home(家庭): 用户家庭网络,可以基本信任网络内的其他计算机不会危害你的计算机,仅接受经过选择的
    • 连接
    • internal(内部):用于内部网络,可以基本信任网络内的其他计算机不会危害你的计算机,仅接受经过选择的连接
    • worker(工作):用于工作区,可以基本信任网络内的其他计算机不会危害你的计算机,仅接受经过选择的连接
    • public(公共):在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收经过选取的连接(firewalld默认区域)
    • external(外部):出去的IPv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
    • dmz(非军事区):用于你的非军事区域内的电脑,仅接受ssh服务连接
    • block(限制):拒绝所有网络连接
    • drop(丢弃): 任何接受的网络数据包都被丢弃,没有回复
  • 管理防火墙

    其实每个zone就是一套规则集,对于一个接收到的请求具体使用哪个zone,firewalld通过三种方法来判断:

   1. source,源地址优先级最高

   2. Interface,接收请求的网卡

   3. firewall.conf中配置的默认zone

[root@localhost ~]# cat /etc/firewalld/firewalld.conf

   # default zone

   # The default zone used if an empty zone string is used.

   # Default: public

   DefaultZone=public

查看默认zone:[root@localhost ~]# firewall‐cmd ‐‐get‐default‐zone

查看firewall的状态:[root@localhost ~]# firewall‐cmd ‐‐state

查看当前活动的区域:[root@localhost ~]# firewall‐cmd ‐‐get‐active‐zones

查看所有可用域:[root@localhost ~]# firewall‐cmd ‐‐get‐zones

列出public域的所有设置:[root@localhost ~]# firewall‐cmd ‐‐zone=public ‐‐list‐all

列出所有区域的设置:[root@localhost ~]# firewall‐cmd ‐‐list‐all

列出所有预定服务:[root@localhost ~]# firewall‐cmd ‐‐get‐services

设置默认域:‐‐set‐default‐zone=

设置网络地址到指定的域:‐‐zone= ‐‐add‐source=[/]||ipset:

删除指定区域中的网络地址:‐‐zone= ‐‐remove‐source=[/]||ipset:

添加,改变,删除网络接口:

   ‐‐add‐interface=<interface>

   ‐‐change‐interface=<interface>

    ‐‐remove‐interface=<interface>

添加、删除服务:

   ‐‐add‐service=<service>

   ‐‐remove‐service=<service>

   ‐‐permanent 表示是否永久生效!

列出、添加、删除端口:

   ‐‐list‐ports

   ‐‐add‐port=<portid>[‐<portid>]/<protocol>

   ‐‐remove‐port=<portid>[‐<portid>]/<protocol>

重载防火墙:‐‐reload