本篇内容介绍了“ubuntu怎么使用iptables防火墙”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
iptables是整合在Linux操作系统中的防火墙软件,绝大部分Ubuntu发行版都预装了iptables。在一些非默认安装的Ubuntu系统或者容器环境中,可能没有预装iptables,我们可以通过下面的命令来安装。
sudo apt-get install iptables iptables-persistent
安装iptables之后,系统会提示我们是否保存当前防火墙规则。如果我们要设置自己的防火墙规则,这时可以不用保存。
扩展:
1、端口测试工具
我们可以使用以下工具来检测端口是否开启或关闭,用来测试iptables是否生效。
客户端测试工具(Windows环境):
telnet [服务器IP] [端口号]
服务端测试工具(Linux系统):
sudo netstat -tulpn
2、iptables的语法规则
sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
-A INPUT:添加一个INPUT类型的规则。最常见的规则类型有三种,分别是INPUT、OUTPUT和PREROUTING。
-p tcp:设置这条规则的协议为TCP协议。其他支持的协议还有udp、icmp和all。
-m tcp:使用tcp模块。iptables通过模块来扩展功能特性,有些常用模块是iptables预装的,比如geoip模块。
--dport 22:双横线--表示为前面使用的模块的更多选项。在这个示例里,我们设置tcp模块只应用于22端口。
-m geoip:使用geoip模块。这个模块可以控制来自某个国家的网络请求。
--src-cc PE:这个选项是让geoip模块限制从秘鲁的网络请求。PE是秘鲁的国家编码,这里可以替换成其他国家编码。
-j ACCEPT:告诉iptables对满足上述条件的请求如何处理。ACCEPT(接受)、ERJECT(拒绝)和DROP(丢弃)是三种常用的处理方式。
3、iptables的基本命令
查看当前规则:
sudo iptables -L
删除某条规则(-D表示删除):
sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT
清空当前规则
sudo iptables -F
只清空OUTPUT类型的规则:
sudo iptables -F OUTPUT
创建iptables规则
在eth0接口允许SSH连接:
sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
注:如果要应用于所有网络接口,请删除-i eth0指令。
允许特定IP进行SSH连接(以10.0.3.1为例):
sudo iptables -A INPUT -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
设置默认规则:
sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT
说明:
-P INPUT DROP:表示丢弃所有流入请求,即无法访问云服务器上的任何服务,如Apache、SQL等。
-P FORWARD DROP:表示丢弃所有转发请求。
-P OUTPUT ACCEPT:表示接受所有流出请求。
接受所有的回环流量(推荐设置):
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT
保存iptables规则
使用以下命令保存并加载iptables规则:
sudo netfilter-persistent save sudo netfilter-persistent reload
在容器环境中,上面的netfilter-persistent很可能无法生效,需要重新设置一下iptables。请执行以下命令重新配置iptables安装包:
sudo dpkg-reconfigure iptables-persistent
设置流出请求
允许DNS查询:
sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
使用state模块接受相关的和已建立的请求:
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
接受端口请求(如80端口):
sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
其他常见服务和端口:
服务 | 协议 | 端口 |
---|---|---|
FTP | TCP | 20 & 21 |
HTTPS | TCP | 443 |
DHCP | TCP | 67 |
NTP | TCP | 123 |
更多有用的规则
允许Ping:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
端口转发(把来自2200端口的请求转发给10.0.3.21:22 ,多用于容器场景):
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22
创建SSH永久连接,阻止未经允许的SSH登录请求:
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP