Linux防火墙
- 硬件防火墙
- 由厂商设计好的主机硬件, 这部硬件防火墙内的操作系统主要以提供封包数据的过滤机制为主,并将其他不必要的功能拿掉。因为单纯作为防火墙功能而已, 因此封包过滤的效率较佳
- 软件防火墙
- 软件防火墙本身就是在保护系统网络安全的一套软件(或称为机制),例如 Netfilter 与 TCP Wrappers 都可以称为软件防火墙。
- 你可以限制文件传输服务 (FTP) 只在子域内的主机才能够使用,而不对整个 Internet 开放;
- 你可以限制整部 Linux 主机仅可以接受客户端的 WWW 要求,其他的服务都关闭;
- 你还可以限制整部主机仅能主动对外联机。
- 切割被信任(如子域)与不被信任(如 Internet)的网段;
- 划分出可提供 Internet 的服务与必须受保护的服务;
- 分析出可接受与不可接受的封包状态;
- Netfilter (封包过滤机制)
- 分析进入主机的网络封包,将封包的表头数据捉出来进行分析,以决定该联机为放行或抵挡的机制
- 由于这种方式可以直接分析封包表头数据,所以包括硬件地址(MAC), 软件地址 (IP), TCP, UDP, ICMP 等封包的信息都可以进行过滤分析的功能,因此用途非常的广泛
- TCP Wrappers (程序控管)
- 这种机制主要是分析谁对某程序进行存取,然后透过规则去分析该服务器程序谁能够联机、谁不能联机。
- 举例来说,我们知道 FTP可以启动在非正规的 port 21 进行监听,当你透过 Linux 内建的 TCP wrappers限制 FTP 时, 那么你只要知道 FTP 的软件名称 (vsftpd) ,然后对他作限制,则不管 FTP 启动在哪个端口,都会被该规则管理的
- Proxy (代理服务器)
- 其实代理服务器是一种网络服务,它可以『代理』用户的需求,而代为前往服务器取得相关的资料。

.png)

- 因为内外网域已经分开,所以安全维护在内部可以开放的权限较大!
- 安全机制的设定可以针对 Linux 防火墙主机来维护即可!
- 对外只看的到 Linux 防火墙主机,所以对于内部可以达到有效的安全防护!
.png)

.png)

- 拒绝让 Internet 的封包进入主机的某些端口号
- 例如:你的 port 21 这个 FTP 相关的端口,若只想要开放给内部网络的话,那么当 Internet 来的封包想要进入你的 port 21 时,就可以将该数据封包丢掉!因为我们可以分析的到该封包表头的端口口号码
- 拒绝让某些来源 IP 的封包进入
- 例如你已经发现某个 IP 主要都是来自攻击行为的主机,那么只要来自该 IP 的数据封包,就将他丢弃!这样也可以达到基础的安全呦
- 拒绝让带有某些特殊旗标 (flag) 的封包进入
- 最常拒绝的就是带有 SYN 的主动联机的旗标了!只要一经发现,嘿嘿!你就可以将该封包丢弃呀
- 分析硬件地址 (MAC) 来决定联机与否
- MAC 是焊在网络卡上面的,所以你只要分析到该使用者所使用的 MAC 之后,可以利用防火墙将该 MAC 锁住
- 防火墙并不能很有效的抵挡病毒或木马程序
- www服务主机,必须要允许www封包通过,若此时www服务器软件有漏洞,或者本身向你要求www服务的该封包就是病毒在侦测你的系统。这时防火墙可是一点办法也没有
- 防火墙对于来自内部LAN的攻击较无承受力
- 防火墙对于内部的规则设定通常比较少,所以容易造成内部员工对于网路误用;
- 关闭几个不安全的服务
- 升级几个可能有问题的套件
- 架设好最起码的安全防护---防火墙
- 由 super daemon (xinetd) 所管理的服务;
- 经由 xinetd 管理的服务还好理解,就是配置文件在 /etc/xinetd.d/ 里面的服务就是 xinetd 所管理的啊!
- 有支援 libwrap.so 模块的服务。
[root@www ~]# yum install xinetd
Setting up Install Process
Package :xinetd-2.3.-.el6.x86_64 already installed and latest version Nothing to do
# 画面中显示,已经是最新的 xinetd !所以,已经有安装啰!
# 接下来找出 xinetd 所管理的服务群!
[root@www ~]# chkconfig xinetd on <==要先让 xinetd on 后才能看到底 下的
[root@www ~]# chkconfig --list
....(前面省略)....
xinetd based services:
chargen-dgram: off
chargen-stream: off
....(中间省略)....
rsync: off <==下一小节的范例就用这玩意儿来解释
tcpmux-server: off
telnet: on
上述结果最终输出的部分就是 xinetd 所管理的服务群啰!上述的服务之防火墙简
易设定,都可以透过 TCP wrappers 来管理的
答:由于支持 tcp wrappers 的服务必定包含 libwrap 这一个动态函式库,因此可以使用 ldd 来观察该服务即可。简单的使用方式为:
[root@www ~]# ldd $(which rsyslogd sshd xinetd httpd)
# 这个方式可以将所有的动态函式库取出来查阅,不过需要眼睛搜寻。
# 可以透过底下的方式来处理更快!
[root@www ~]# for name in rsyslogd sshd xinetd httpd; do echo $name;
\
> ldd $(which $name) | grep libwrap; done
rsyslogd
sshd
libwrap.so. => /lib64/libwrap.so. (0x00007fb41d3c9000)
xinetd
libwrap.so. => /lib64/libwrap.so. (0x00007f6314821000)
httpd上述的结果中,在该档名档下有出现 libwrap 的,代表有找到该函式库,才有支持tcp wrappers。所以, sshd, xinetd 有支持,
但是 rsyslogd, httpd 这两支程序则不支持。也就是说, httpd 与 rsyslogd 不能够使用 /etc/hosts.{allow|deny}来进行防火墙
- 先以 /etc/hosts.allow 为优先比对,该规则符合就予以放行;
- 再以 /etc/hosts.deny 比对,规则符合就予以抵挡;
- 若不在这两个档案内,亦即规则都不符合,最终则予以放行。
- Version 2.0:使用 ipfwadm 这个防火墙机制;
- Version 2.2:使用的是 ipchains 这个防火墙机制;
- Version 2.4 与 2.6 :主要是使用 iptables 这个防火墙机制,不过在某些早期的 Version 2.4 版本的 distributions 当中,亦同时支持 ipchains (编译成为模块),好让用户仍然可以使用来自 2.2 版的 ipchains 的防火墙规划。
.png)

.png)

- filter (过滤器):主要跟进入 Linux 本机的封包有关,这个是预设的table;与以下链对应
- INPUT: 主要与想要进入我们 Linux 本机的封包有关;
- OUTPUT:主要与我们 Linux 本机所要送出的封包有关;
- FORWARD:这个咚咚与 Linux 本机比较没有关系, 他可以『转递封包』到后端的计算机中,与下列 nat table 相关性较高。
- nat (地址转换): 是 Network Address Translation 的缩写, 这个table主要在进行来源与目的之 IP 或 port 的转换,与 Linux 本机较无关,主要与Linux 主机后的局域网络内计算机较有相关;与以下链对应
- PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
- POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
- OUTPUT:与发送出去的封包有关
- mangle (破坏者):这个table主要是与特殊的封包的路由旗标有关, 早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及FORWARD 链。 由于这个表格与特殊旗标相关性较高,所以像咱们这种单纯的环境当中,较少使用 mangle 这个表格。
.png)

- 封包进入 Linux 主机使用资源 (路径 A):
- 在路由判断后确定是向 Linux主机要求数据的封包,主要就会透过 filter 的 INPUT 链来进行控管;
- 封包经由 Linux 主机的转递,没有使用主机资源,而是向后端主机流动 (路径 B):
- 在路由判断之前进行封包表头的修订作业后,发现到封包主要是要透过防火墙而去后端,此时封包就会透过路径 B 来跑动。 也就是说,该封包的目标并非我们的 Linux 本机。主要经过的链是 filter 的 FORWARD 以及 nat 的POSTROUTING, PREROUTING。
- 封包由 Linux 本机发送出去 (路径 C):
- 例如响应客户端的要求,或者是Linux 本机主动送出的封包,都是透过路径 C 来跑的。先是透过路由判断, 决定了输出
.png)

- 如果你的 iptables 只是用来保护 Linux主机本身的话,那 nat 的规则根本就不需要理他,直接设定为开放即可;
- 如果你的防火墙事实上是用来管制 LAN 内的其他主机的话,那么你就必须要再针对 filter 的 FORWARD 这条链,
- 还有 nat 的 PREROUTING, POSTROUTING 以及OUTPUT 进行额外的规则订定才行。

[root@www ~]# iptables -L -n
Chain INPUT (policy ACCEPT) <==针对 INPUT 链,且预设政策为可接受
target prot opt source destination <==说明栏
ACCEPT all -- 0.0.0.0/ 0.0.0.0/ state RELATED,ESTABLISHED<==第 条规则
ACCEPT icmp -- 0.0.0.0/ 0.0.0.0/0 <==第 条规则
ACCEPT all -- 0.0.0.0/ 0.0.0.0/ <==第 条规则
ACCEPT tcp -- 0.0.0.0/ 0.0.0.0/ state NEW tcp dpt: <==第 条规则
REJECT all -- 0.0.0.0/ 0.0.0.0/ reject-with <==第 条规则
icmp-host-prohibited
Chain FORWARD (policy ACCEPT) <==针对 FORWARD 链,且预设政策为可接受
target prot opt source destination <==说明栏
REJECT all -- 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT) <==针对 OUTPUT 链,且预设政策为可接受
target prot opt source destination
[root@www ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
- target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃) 的项目!
- prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;
- opt:额外的选项说明
- source :代表此规则是针对哪个『来源 IP』进行限制?
- destination :代表此规则是针对哪个『目标 IP』进行限制?
- ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED<==第 1 条规则
- 只要是封包状态为 RELATED,ESTABLISHED 就予以接受
- ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 <==第 2 条规则
- 只要封包协议是 icmp 类型的,就予以放行
- ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 <==第 3 条规则
- 无论任何来源 (0.0.0.0/0) 且要去任何目标的封包,不论任何封包格式(prot 为 all),通通都接受
- ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 <==第 4 条规则
- 只要是传给 port 22 的主动式联机 tcp 封包就接受
- REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with <==第 5 条规则
- 全部的封包信息通通拒绝
[root@www ~]# iptables-save
# Generated by iptables-save v1.4.7 on Fri Jul ::
*filter <==星号开头的指的是表格,这里为 filter
:INPUT ACCEPT [:] <==冒号开头的指的是链,三条内建的链
:FORWARD ACCEPT [:] <==三条内建链的政策都是 ACCEPT 啰!
:OUTPUT ACCEPT [:]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT <==针对 INPUT的规则
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT <==这条很重要!针对本机内部接口开放!
-A INPUT -p tcp -m state --state NEW -m tcp --dport -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited <==针对FORWARD 的规则
COMMIT
# Completed on Fri Jul ::
[root@www ~]# iptables -F
[root@www ~]# iptables -X
[root@www ~]# iptables -Z
[root@www ~]# iptables -P INPUT DROP
[root@www ~]# iptables -P OUTPUT ACCEPT
[root@www ~]# iptables -P FORWARD ACCEPT
[root@www ~]# iptables-save
# Generated by iptables-save v1.4.7 on Fri Jul ::
*filter
:INPUT DROP [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
COMMIT
# Completed on Fri Jul ::
# 由于 INPUT 设定为 DROP 而又尚未有任何规则,所以上面的输出结果显示:
# 所有的封包都无法进入你的主机!是不通的防火墙设定! (网络联机是双向 的)
[root@www ~]# iptables -A INPUT -i lo -j ACCEPT
[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.0/ -j ACCEPT
# 由于是内网就接受,因此也可以称之为『信任网域』啰。
[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT
[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP
# 针对单一 IP 来源,可视为信任主机或者是不信任的恶意来源喔
[root@www ~]# iptables-save
# Generated by iptables-save v1.4.7 on Fri Jul ::
*filter
:INPUT DROP [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.100.0/ -i eth1 -j ACCEPT
-A INPUT -s 192.168.100.10/ -i eth1 -j ACCEPT
-A INPUT -s 192.168.100.230/ -i eth1 -j DROP
COMMIT
# Completed on Fri Jul ::
[root@www ~]# iptables -A INPUT -s 192.168.2.200 -j LOG
[root@www ~]# iptables -L -n
target prot opt source destination
LOG all -- 192.168.2.200 0.0.0.0/ LOG flags level
只要有封包来自 192.168.2.200 这个 IP时, 那么该封包的相关信息就会被写入到核心讯息,亦即是 /var/log/messages 这个档案当中
[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport -j DROP
[root@www ~]# iptables -A INPUT -i eth0 -p udp --dport : -j ACCEPT
[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport -j ACCEPT
[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport -j ACCEPT
[root@www ~]# iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/ --sport : --dport ssh -j DROP
[root@www ~]# iptables -A INPUT -i eth0 --dport -j DROP
iptables v1.4.7: unknown option `--dport'
Try `iptables -h' or 'iptables --help' for more information
[root@www ~]# iptables -A INPUT -i eth0 -p tcp --sport : --dport : --syn -j DROP
[root@www ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@www ~]# iptables -A INPUT -m state --state INVALID -j DROP
如此一来,我们的 iptables 就会主动分析出该封包是否为响应状态,若是的话,就直接予以接受
呵呵! 这样一来你就不需要针对响应的封包来撰写个别的防火墙规则了!这真是太棒了
[root@www ~]# iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
选项与参数:
--mac-source :就是来源主机的 MAC 啦!
[root@www ~]# vi somefile
#!/bin/bash
icmp_type="0 3 4 11 12 14 16 18"
for typeicmp in $icmp_type
do
iptables -A INPUT -i eth0 -p icmp --icmp-type $typeicmp -j ACCEPT
done [root@www ~]# sh somefile
- 规则归零:清除所有已经存在的规则 (iptables -F...)
- 预设政策:除了 INPUT 这个自定义链设为 DROP 外,其他为预设 ACCEPT;
- 信任本机:由于 lo 对本机来说是相当重要的,因此 lo 必须设定为信任装置;
- 回应封包:让本机主动向外要求而响应的封包可以进入本机(ESTABLISHED,RELATED)
- 信任用户:这是非必要的,如果你想要让区网的来源可用你的主机资源时
Linux防火墙的更多相关文章
- Linux防火墙:iptables禁IP与解封IP常用命令
在Linux服务器被攻击的时候,有的时候会有几个主力IP.如果能拒绝掉这几个IP的攻击的话,会大大减轻服务器的压力,说不定服务器就能恢复正常了. 在Linux下封停IP,有封杀网段和封杀单个IP两种形 ...
- Linux防火墙(Iptables)的开启与关闭
Linux防火墙(iptables)的开启与关闭 Linux中的防火墙主要是对iptables的设置和管理. 1. Linux防火墙(Iptables)重启系统生效 开启: chkconfig ipt ...
- linux 防火墙iptables简明教程
前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...
- Linux防火墙iptables简明教程
前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
- 要想重启后也生效LINUX防火墙配置
新配置的一台服务器,安装的是CentOS6.3系统,在安装完LNMP之后,发现nginx进程存在,且php解析正常,但是用分配的独立IP去访问的时候发现无法访问. 查了下网上的资料,发现可能是Linu ...
- linux防火墙 基础知识
转 http://drops.wooyun.org/tips/1424 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. ...
- Linux防火墙配置—SNAT2
1.实验目标 以实验"Linux防火墙配置-SNAT1"为基础,为网关增加外网IP地址,为eth1创建虚拟接口,使外网测试主机在Wireshark中捕获到的地址为eth1虚拟接口的 ...
- linux 防火墙 iptables 目录
linux iptables 防火墙简介 Linux 防火墙:Netfilter iptables 自动化部署iptables防火墙脚本
随机推荐
- Java和C/C++进行DES/AES密文传输(借鉴)
Java和C/C++进行DES/AES密文传输 声明:对于新手来说很难解决的一个问题,终于在非常煎熬之后找到这篇文章,所以借鉴过来.原文地址http://blog.sina.com.cn/s/blog ...
- Linux TC流量控制HOWTO中文版
<本文摘自Linux的高级路由和流量控制HOWTO中文版 第9章节>网人郭工进行再次编译: 利用队列,我们可以控制数据发送的方式.记住我们只能对发送数据进行控制(或称为整形).其实,我们无 ...
- 帝国CMS【操作类型】说明详解
看标签的参数时候,一般最后一个参数是操作类型说明,可是后面写的是:"操作类型说明 具体看操作类型说明", 这个操作类型说明在什么地方看啊 操作类型 说明 操作类型 说明 0 各栏目 ...
- 【转】Android M(6.0) 权限爬坑之旅
原文网址:https://yanlu.me/android-m6-0-permission-chasm/ 有一篇全面介绍Android M 运行时权限文章写的非常全面:Android M 新的运行时权 ...
- pelican-python install
参考: http://www.cnblogs.com/ballwql/p/pelican.html 写的原因是,我的安装环境与原作者的安装过程有不一样的地方,所有总结一下. 本文将从以下几个方面进行描 ...
- PHP、JAVA、C#、Object-C 通用的DES加密
PHP.JAVA.C#.Object-C 通用的DES加密 PHP: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- docker swarm
1.docker pull swarm 2.docker run --rm swarm create #创建cluster id b1442105f281c7eaa31f8e5d815fe0e2 3. ...
- @ResponseBody 返回中文乱码问题解决 spingmvc
<!-- UTF8解决乱码问题 --> <bean class="org.springframework.web.servlet.mvc.method.annotation ...
- HTML 事件属性_03
全局事件属性 HTML 4 的新特性之一是可以使 HTML 事件触发浏览器中的行为,比方说当用户点击某个 HTML 元素时启动一段 JavaScript. 如果你想学习更多关于事件属性,请访问 Jav ...
- Nuget 管理entity framework
安装,带版本号 PM> Install-Package EntityFramework -Version 5.0.0 更新数据库 PM> Enable-Migrations -Contex ...