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:关闭
- 相关命令
getenforcing:获取selinux当前状态setenforce 0|10:设置为permissive1:设置为enforcing此设定:重启系统后无效配置文件: /etc/sysconfig/selinux,/etc/selinux/configSELinux=[disabled|enforcing|permissive]给文件重新打标签:chcon命令:chcon ‐ change file SELinux security contextchcon [OPTION]... [‐u USER] [‐r ROLE] [‐l RANGE] [‐t TYPE] FILE...‐R:递归打标还原文件的标签:restorecon ‐ restore file(s) default SELinux security contexts.‐ restorecon [‐R] [‐n] [‐p] [‐v] [‐e directory] pathname…布尔型规则getseboolsetseboolgetsebool命令:getsebool ‐ get SELinux boolean value(s)getsebool [‐a] [boolean]setsebool命令setsebool [ ‐PNV ] boolean value | bool1=val1 bool2=val2
Iptables
防火墙相关概念
从逻辑上分类: 主机防火墙:为单个主机进行防护 网络防火墙:对网络入口进行防护,服务防火墙背后的本地局域网 主机防火墙(个人)和网络防火墙(集体)相辅相成,位于内核空间 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

链的概念
防火墙的作用在于对经过的报文匹配“规则”,然后执行对应的动作,如果有多个“规则”组合到一起,那么我们就叫它“链”, 每经过一条链则要把所有的规则都要匹配一遍!如果有符合条件的规则,则执行规则对应的动作 简单来说:多个规则组成链,经过的链的所有规则匹配一遍,符合条件的规则,执行相应的动作
表的概念
每个链上都放置了一串规则,但是有许多类似的规则,这些规则可能是: 对IP或端口进行过滤, 对报文进行修改, 对网络地址进行转换等等 如果把这些实现相同功能的规则放在一起,它们的集合就叫做“表” 相同规则的集合叫做“表”,多张表的规则的集合叫做“链”
iptables提供的表:
raw表:关闭nat上启用的连接追踪机制;iptable_raw
mangle表:拆解报文,做出修改,并重新封装的功能;Iptables_mangle
nat表:网络地址转换;内核模块:Iptables_nat
filter表:负责过滤功能,防火墙;内核模块:iptable_filter
优先级也是这样:raw ‐‐> mangle ‐‐> nat ‐‐‐> filter
我们所有定义的规则,都在于这4张“表”中

- 表链关系
是不是每种链都会有以上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

- 规则的概念
规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进处
理
匹配条件
基本匹配条件:SIP、DIP等
扩展匹配条件:Sport,Dport等(‐m参数)
扩展条件也是Netfilter中的一部分,只是以模块的形式在,若要使用,则需要依赖对应的模块
处理动作
处理动作在iptables中称呼为target,分为基本动作和扩展动作
常用动作:
ACCEPT:允许数据包通过DROP:直接丢弃数据包,无任何回应信息REJECT:拒绝数据包通过,必要时会发给数据发送端一个响应的拒绝消息SNAT:源地址转换,解决内网用户同一个公网地址上网问题MASQUERADE:是SNAT的一种特殊形式,适用动态的、临时会变的IP上DNAT:目标地址转换REDIRECT:在本机做端口映射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 ‐‐sportiprange扩展模块:匹配报文的源/目的地址所在范围
‐‐src—range ‐‐dst‐rangestring扩展模块:指定匹配报文中的字符串
‐‐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:删除自定义链
但是删除自定义链的时候需要满足的条件:
自定义链中没有任何默认链引用,即自定义链的引用数为0
自定义链中没有任何规则,即自定义链为空
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
