Ubuntu 防火墙与端口控制详细解说

摘要:用ubuntu自带的网络工具中的端口扫描不够强大,扫描结果可能不全,推荐用nmap,黑客常用的端口扫描利器!安装方法:sudo apt-get install nmap ,想扫描端口nmap后加上域名或者ip即可。...

作者:LoveCode标签:Ubuntu,ufw,nmap,防火墙,端口控制

Ubuntu 防火墙与端口控制详解

1.扫描端口 用ubuntu自带的网络工具中的端口扫描不够强大,扫描结果可能不全,推荐用nmap,黑客常用的端口扫描利器!安装方法:

sudo apt-get install nmap

想扫描端口nmap后加上域名或者ip即可。下面扫描本地端口:

nmap  localhost

2.查看端口进程 命令:

sudo lsof -i :port

(port改为你要查询的端口); 命令:

sudo netstat -nap|grep port

(最后一行显示进程号)

3.启动|停止|重启端口 大体有三种方式:

(1)像apache2 ,mysql这样的端口,直接

sudo service apache2 stop(|start|restart)

即可 

(2)有些端口无法用服务关闭,可以考虑

sudo /etc/init.d/service start|stop|restart

(3)如果还无法关闭,再试试杀死进程:

sudo kill PID

PID为端口服务进程号,上面已经介绍了查看进程号的命令。


ubuntu中使用ufw 看是否安装和启用:

sudo dpkg --get-selections | grep ufw
sudo apt-get install ufw

你应该检查下 UFW 是否已经在运行

sudo ufw status

如果你发现状态是: inactive , 意思是没有被激活或不起作用。 

sudo ufw enable #启用
sudo ufw disable #禁用

在防火墙被激活后,你可以向里面添加你自己的规则。如果你想看看默认的规则,可以输入

sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
$

默认是不允许所有外部访问连接的。如果你想远程连接你的机器,就得开放相应的端口。例如,你想用 ssh 来连接,下面是添加的命令

sudo ufw allow ssh

或者看尼ssh配置的是哪个端口,直接 sudo ufw allow 22 (一般默认的是22,路径 看:http://blog.csdn.net/wang794686714/article/details/39100157,最后部分)

sudo  ufw status
To      Action          From
--      -----------         ------
22      ALLOW           Anywhere
22      ALLOW           Anywhere (v6)

如果你有很多条规则,想快速的在每条规则上加个序号数字的话,请使用 numbered 参数。

sudo ufw status numbered

第一条规则的意思是所有通过22端口访问机器的 tcp 或 udp 数据包都是允许的。如果你希望仅允许 tcp 数据包访问应该怎么办?可以在服务端口后加个 tcp 参数。下面的示例及相应的输出。

sudo ufw allow ssh/tcp 或 ufw allow 22/tcp

添加拒绝规则也是同样的招数。我们假设你想拒绝 ftp 访问, 你只需输入

sudo ufw deny ftp


添加特定端口

有时候,我们会自定义一个端口而不是使用标准提供的。让我们试着把机器上 ssh 的 22 端口换成 2290 端口,然后允许从 2290 端口访问,我们像这样添加:

sudo ufw allow 2290

你也可以把端口范围添加进规则。如果我们想打开从 2290到2300 的端口以供 tcp 协议使用,命令如下示:

sudo ufw allow 2290:2300/tcp

样你想使用 udp 的话,如下操作。

sudo ufw allow 2290:2300/udp

请注意你得明确的指定是 ‘tcp’ 或 ‘udp’,否则会出现跟下面类似的错误信息。

ERROR: Must specify ‘tcp’ or ‘udp’ with multiple ports


添加特定 IP

前面我们添加的规则都是基于 服务程序 或 端口 的,UFW 也可以添加基于 IP 地址的规则。下面是命令样例。

sudo ufw allow from 192.168.0.104

你也可以使用子网掩码来扩宽范围。

sudo ufw allow form 192.168.0.0/24

你也可以使用子网掩码来扩宽范围。

sudo ufw allow form 192.168.0.0/24
To      Action          From
--      -----------         ------
Anywhere    ALLOW           192.168.0.104
Anywhere    ALLOW           192.168.0.0 /24

如你所见, from 参数仅仅限制连接的来源,而目的(用 To 列表示)是所有地方

sudo ufw allow to any port 22

上面的命令会允许从任何地方以及任何协议都可以访问22端口。


组合参数

对于更具体的规则,你也可以把 IP 地址、协议和端口这些组合在一起用。我们想创建一条规则,限制仅仅来自于 192.168.0.104 的 IP ,而且只能使用 tcp 协议和通过 22端口 来访问本地资源。我们可以用如下所示的命令。

sudo ufw allow from 192.168.0.104 proto tcp to any port 22

创建拒绝规则的命令和允许的规则类似,仅需要把 allow 参数换成 deny 参数就可以。


删除规则

sudo ufw delete allow ftp

方法二:

sudo  ufw delete allow  ssh

或者

sudo  ufw delete allow 22 /tcp

会出现如下所示的一些错误:

Could not delete non-existent rule
Could not delete non-existent rule (v6)

我们还有一招。上面已经提到过,可以序列数字来代替你想删除的规则。让我们试试。

sudo ufw status numbered

然后我们删除正在使用的第一条规则。按 “ y ” 就会永久的删除这条规则。

sudo  ufw delete 1

Deleting : Allow from 192.168.0.104 to any port 22 proto tcp Proceed with operation (y|n)? y 从这些用法中你就可以发现它们的不同。 方法2 在删除前需要 用户确认 ,而 方法1 不需要。


重置所有规则

sudo  ufw reset

Resetting all rules to installed defaults. Proceed with operation (y|n)? y 如果你输入“ y ”, UFW 在重置你的 ufw 前会备份所有已经存在规则,然后重置。重置操作也会使你的防火墙处于不可用状态,如果你想使用得再一次启用它。


高级功能

正如我上面所说,UFW防火墙能够做到iptables可以做到的一切。这是通过一些规则文件来完成的,他们只不过是iptables-restore 所对应的文本文件而已。是否可以通过 ufw 命令微调 UFW 的与/或逻辑来增加 iptables 命令其实就是编辑几个文本文件的事。

/etc/default/ufw: 默认策略的主配置文件,支持 IPv6 和 内核模块。
/etc/ufw/before[6].rules: 通过 ufw 命令添加进规则之前里面存在的规则会首先计算。
/etc/ufw/after[6].rules: 通过 ufw 命令添加进规则之后里面存在的规则会进行计算。
/etc/ufw/sysctl.conf: 内核网络可调参数。
/etc/ufw/ufw.conf: 设置系统启动时 UFW 是否可用,和设置日志级别。


结论 UFW 作为 iptables 的前端应用,给用户提供了简单的接口界面。使用着不需要去记非常复杂的 iptables 语法。UFW 也使用了‘ 简单英语 ’作为它的参数。 像 Allow、deny、reset 就是他们当中的一部分。我相信有很多很多 iptables 前端应用,但 UFW 绝对是那些想要快速、简单的就建立自己的防火墙,而且还很安全的用户的最佳替代品之一。请输入 man ufw 查看 ufw 用户手册,来了解更多详情。

root@qustdjx-K42JZ:/home/qustdjx# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination   

    


=====================ubuntu中启动及关闭iptables( vsftpd 已登录 读取目录失败, 开放ftp相关端口)


在ubuntu中由于不存在 /etc/init.d/iptales文件,所以无法使用service等命令来启动iptables,需要用modprobe命令。 

#启动iptables  
modprobe ip_tables
  
#关闭iptables(关闭命令要比启动复杂)  
iptalbes -F  
iptables -X  
iptables -Z  
iptables -P INPUT ACCEPT  
iptables -P OUTPUT ACCEPT  
iptables -P FORWARD ACCEPT  
modprobe -r ip_tables  

依次执行以上命令即可关闭iptables,否则在执行modproble -r ip_tables时将会提示 FATAL: Module ip_tables is in use.


对于防火墙的设置,有两种策略:一种是全部通讯口都允许使用,只是阻止一些我们知道的不安全的或者容易被利用的口;另外一种,则是先屏蔽所有的通讯口,而只是允许我们需要使用的通讯端口。这里使用的是第二种原则,如果你需要开启其他端口,请先参考计算机通讯口说明,然后自己添加。


#删除原来 iptables 里面已经有的规则

iptables -F
iptables -X

#抛弃所有不符合三种链规则的数据包

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

#设置:本地进程 lo 的 INPUT 和 OUTPUT 链接 ; eth1的INPUT链

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -jACCEPT
iptables -A INPUT -i eth1 -m state --state NEW,INVALID -j LOG
iptables -A OUTPUT -o lo -j ACCEPT

#对其他主要允许的端口的 OUTPUT设置:

# DNS
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 53 -jACCEPT
iptables -A OUTPUT -o eth1 -p UDP --sport 1024:65535 --dport 53 -jACCEPT

#HTTP
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 80 -jACCEPT

#HTTPS
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 443 -jACCEPT

#Email 接受 和发送
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 110 -jACCEPT
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 25 -jACCEPT

# FTP 数据和控制
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 20 -jACCEPT
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 21 -jACCEPT

#DHCP
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 68 -jACCEPT
iptables -A OUTPUT -o eth1 -p UDP --sport 1024:65535 --dport 68 -jACCEPT

#POP3S Email安全接收
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 995 -jACCEPT

#时间同步服务器 NTP
iptables -A OUTPUT -o eth1 -p TCP --sport 1024:65535 --dport 123 -jACCEPT

#拒绝 eth1 其他剩下的
iptables -A OUTPUT -o eth1 --match state --state NEW,INVALID -jLOG

最后是有关于iptables存储的命令:

iptables-save >/etc/iptables.up.rule # 存在你想存的地方
iptables-restore </etc/iptables.up.rules #调用


因为iptables 在每次机器重新启动以后,需要再次输入或者调用,为了方便操作,使用

sudo gedit /etc/network/interfaces
在
auto ath0
    iface ath0 inet dhcp
后面加上
pre-up iptables-restore </etc/iptables.up.rules #启动自动调用已存储的iptables
post-down iptables-save >/etc/iptables.up.rule #关机时,把当前iptables 储存

CopyRight © 2017 荒山本的官方网站 粤ICP备16049175号 All Right Service 网站地图(xml) 网站地图(html)