Ubuntu iptables

发布于 2017-08-15  0 次阅读


在ubuntu环境下使用iptables防火墙

 

什么是iptables

iptables是一款集成于linux内核中的IP信息包过滤系统。也就是常说的防火墙。iptables为早期时代的产物,目前的CentOS7默认已经是安装firewalld。但firewalld并不是一个全新的iptables的替代品,它只是一个基于python语言的iptables封装,并提供图形化的界面。所以,iptables还是同样的可靠。

 

工作机制

内核空间的五个位置

1.内核空间中:从一个网络接口进来,到另一个网络接口去的

2.数据包从内核流入用户空间的

3.数据包从用户空间流出的

4.进入/离开本机的外网接口

5.进入/离开本机的内网接口

这五个位置也叫做钩子函数,任何一个进过内核的数据包都要经过这五个钩子函数

1.PREROUTING(路由前)

2.INPUT(数据包流入口)

3.FORWORD(转发链)

4.OUTPUT(数据包出口)

5.POSTROUTING(路由后)

 

通常我们会用到 INPUT(数据包流入口) FORWORD(转发链) OUTPUT(数据包出口)”这三个数据链路

设定预设规则

[root@tp ~]# iptables -P INPUT DROP

[root@tp ~]# iptables -P OUTPUT ACCEPT

[root@tp ~]# iptables -P FORWARD DROP

(大写P)

上面的意思是,当超出了IPTABLESfilter表里的两个链规则(INPUT,FORWARD),不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包

而对于OUTPUT,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.

可以看出INPUT,FORWARD两个链采用的是允许什么包通过,OUTPUT链采用的是不允许什么包通过.

这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.

:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.

怎么办,去本机操作呗!

来自 <http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html>

 

Ubuntu

CentOS的环境下,可以安装iptables-service启动iptables的服务,但是在ubuntu环境下呢,没有这种操作(≖ )

所以在ubuntu环境下的iptables的管理不同与CentOS。

安装

目前大多数情况下都是默认安装过iptables的,如果没有安装使用直接使用apt安装即可

apt install iptables

1.png/

 

也可是使用whereis iptables 寻找iptables,查看是否安装在机器上。

2.png/

如上情况即为已经安装iptables

 

编辑规则

虽然ubunt没有iptables-service,可iptables命令还是能够照常使用的

使用iptable -nL查看当前防火墙规则

*'n'为小写,'L'为大写

iptables -nL

3.png/

 

此处我们将所需要的防火墙配置规则写入一个文件,并导入防火墙。

*也可以使用iptables命令逐一增加规则

vim /etc/iptables.rules

4.png/

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood - [0:0]
#-A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 29666 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 29888 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 29777 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 29666 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5900 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5902 -j ACCEPT
#-A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j DROP
#-A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m comment --comment "禁止向本机发送Ping包" -j REJECT --reject-with icmp-port-unreachable
#-A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable
COMMIT

 

禁止Ping

禁止ping命令,也就是禁止其他人向我们的服务器发送icmp包。在某些情况下可以防止ping攻击。使用“--reject-with icmp-port-unreachable”ping命令将会回显”端口不可达“,一定程度下证明了服务器的存在。

-A INPUT -p icmp -m icmp --icmp-type 8 -m comment --comment "禁止向本机发送Ping包" -j REJECT --reject-with icmp-port-unreachable

7.png/

或者是简单的丢弃icmp包

-A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

 

使规则生效

iptables-restore < /etc/iptables.rules

5.png/

 

开机启动

创建文件,并添加以下内容

*因为没有serivces的关系,开机启动需要创建一个脚本,每次开机时执行生效规则命令。

vim /etc/network/if-pre-up.d/iptables

6.png/

#!/bin/bash
iptables-restore < /etc/iptables.rules

 

并添加执行权限

chmod +x /etc/network/if-pre-up.d/iptables

 

至此,Ubuntu环境下的iptables就配置完成了,其他规则可根据需要在文件中添加。

完。(≖ )

 

注:部分参考于:https://yq.aliyun.com/articles/44619 (感谢阿里云的小伙伴们(≖ )

Comments


JustDefectink~