25个有用的IPtable防火墙规则每个Linux管理员应该知道

在本文中,我们将向您展示大约25个有用的iptable防火墙规则,这些规则将帮助您通过iptables轻松地管理和控制Linux防火墙。

管理网络流量是一个系统管理员必须处理最棘手的工作之一。 他必须配置防火墙以这样的方式,这将满足传入和传出连接的系统和用户的要求,不离开系统容易受到攻击。
25 IPtables适用于Linux的防火墙规则

25 IPtables适用于Linux的防火墙规则

这是iptables派上用场。iptables的是一个Linux命令行的防火墙,允许系统管理员通过一组可配置表规则管理传入和传出的流量。 使用iptables的一组有包含设置的内置或用户定义的规则链表。由于他们,系统管理员可以正确过滤他的系统的网络流量。 根据iptables手册,目前有3种类型的表:
    1. FILTER -这是默认的表,它包含了内建的链为:
      1. INPUT -运往当地socket包
      2. FORWARD -通过系统路由数据包
      3. 本地生成的包- 输出
    2. NAT -当一个数据包试图创建一个新的连接被征询表。 它有以下内置:
      1. PREROUTING -用于只要它接受改变的数据包
      2. 输出 -用于转换的本地产生的数据包
      3. POSTROUTING -用于改变数据包,他们即将走出去
    3. MANGLE -这个表用于分组改变。 直到内核版本2.4本表中只有两条链,但他们现在5:
      1. PREROUTING -为改变传入连接
      2. 输出 -为改变本地生成的包
      3. 输入 -接收报文
      4. POSTROUTING -为改变数据包,他们即将走出去
      5. FORWARD -数据包路由到本机
在本文中,您将看到一些有用的命令,将帮助您通过iptables管理您的Linux Box防火墙。对于本文的目的,我将从更简单的命令开始,到更复杂的结束。

1.启动/停止/重新启动Iptables防火墙

首先,您应该知道如何在不同的Linux发行版中管理iptables服务。这是相当容易:

在基于SystemD的Linux分发

------------ On Cent/RHEL 7 and Fedora 22+ ------------
# systemctl start iptables
# systemctl stop iptables
# systemctl restart iptables

在基于SysVinit的Linux分发

------------ On Cent/RHEL 6/5 and Fedora ------------
# /etc/init.d/iptables start 
# /etc/init.d/iptables stop
# /etc/init.d/iptables restart

2.检查所有IPtables防火墙规则

如果要检查现有规则,请使用以下命令:
# iptables -L -n -v
这应该返回类似下面的输出:
Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
pkts bytes target prot opt in out source destination 
0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
pkts bytes target prot opt in out source destination
如果你喜欢检查规则特定的表,你可以用-t选项,其次是要检查表。 例如,要检查在规则NAT表,你可以使用:
# iptables -t nat -L -v -n

3.阻止IPtables防火墙中的特定IP地址

如果您发现来自IP地址的异常或滥用行为,您可以使用以下规则阻止该IP地址:
# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
在这里你需要改变"xxx.xxx.xxx.xxx"与实际的IP地址。 运行此命令时要非常小心,因为您可能会意外阻止自己的IP地址。 该-A选项附加在所选链的末端规则。 如果你只希望来自该IP地址阻止TCP流量,可以使用-p指定协议选项。这样命令将如下所示:
# iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4.在IPtables防火墙中取消阻止IP地址

如果您决定不再希望阻止来自特定IP地址的请求,可以使用以下命令删除阻止规则:
# iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
-D选项删除从所选链中的一个或多个规则。 如果你喜欢使用较长的选项,你可以使用--delete

5.阻止IPtables防火墙的特定端口

有时您可能想要阻止在特定端口上的传入或传出连接。这是一个很好的安全措施,你应该真正考虑这一点,当设置您的防火墙。 要阻止特定端口上的出站连接,请使用:
# iptables -A OUTPUT -p tcp --dport xxx -j DROP
要允许传入连接使用:
# iptables -A INPUT -p tcp --dport xxx -j ACCEPT
在这两个例子改变"xxx"你希望允许实际端口。 如果你想阻止UDP流量,而不是TCP,只需更改"tcp""udp"在上面的iptables规则。

6.使用多端口在IPtables上允许多个端口

您可以允许多个端口同时,通过使用多端口 ,下面你可以找到传入和传出连接这样的规则:
# iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7.在IPtables的特定端口上允许特定网络范围

您可能想要限制特定端口上的某些连接到给定的网络。比方说,你要允许端口传出连接22到网络192.168.100.0/24 。 您可以使用此命令:
# iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8.在IPtables防火墙上阻止Facebook

有些雇主要阻止他们的员工访问Facebook。以下是如何阻止流量到Facebook的示例。 注意 :如果你是系统管理员,需要应用这些规则,请记住,你的同事可能会停止跟你说话:) 首先找到Facebook使用的IP地址:
# host facebook.com 
facebook.com has address 66.220.156.68
# whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20
然后,您可以阻止该Facebook网络:
# iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP
请记住,Facebook使用的IP地址范围可能因您的国家而异。

9.在IPtables中设置端口转发

有时您可能想要将一个服务的流量转发到另一个端口。您可以使用以下命令实现此目的:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
上述命令转发所有传入的通信网络接口eth0 ,从端口25到端口2525 。您可以更改所需的端口。

10.使用IPtables阻止Apache端口上的网络泛滥

有时IP地址可能请求与您的网站上的Web端口的连接太多。这可能会导致许多问题,并防止此类问题,您可以使用以下规则:
# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
上述命令每分钟限制传入连接到100 ,并设置爆到了一个极限200 。您可以根据自己的特定要求编辑限制和限制突发。

11.阻止IPtables上的传入Ping请求

一些系统管理员喜欢阻止传入的ping请求由于安全问题。虽然威胁不是那么大,知道如何阻止这样的请求是很好的:
# iptables -A INPUT -p icmp -i eth0 -j DROP

12.允许环回访问

环回访问(访问127.0.0.1 )是重要的,你应该总是把它激活:
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT

13.在IPtables上保留丢弃的网络数据包的日志

如果你想登录网络接口丢包eth0 ,可以使用下面的命令:
# iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
您可以更改后的值"--log-prefix"与您所选择的东西。 该消息记录在/var/log/messages ,你可以搜索它们:
# grep "IPtables dropped packets:" /var/log/messages

14.阻止访问IPtables上的特定MAC地址

您可以使用以下方法阻止从特定MAC地址访问您的系统:
# iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
当然,你需要改变"00:00:00:00:00:00"与要阻止实际的MAC地址。

15.限制每个IP地址的并发连接数

如果您不想在给定端口上从单个IP地址建立太多并发连接,可以使用以下命令:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
以上命令允许不超过3每个客户端连接。 当然,您可以更改端口号以匹配不同的服务。 另外, --connlimit-above应该改变,以符合您的要求。

16.在IPtables规则中搜索

一旦你定义了iptables规则,你将不时地搜索,可能需要改变它们。在您的规则中搜索的一种简单方法是使用:
# iptables -L $table -v -n | grep $string
在上面的例子中,你将需要改变$table与其中要搜索和实际的表$string与您正在寻找的实际字符串。 这里是一个例子:
# iptables -L INPUT -v -n | grep 192.168.0.100

17.定义新的IPTables链

使用iptables,您可以定义自己的链并存储自定义规则。要定义链,请使用:
# iptables -N custom-filter
现在你可以检查你的新过滤器是否有:
# iptables -L
示例输出
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
Chain custom-filter (0 references)
target prot opt source destination

18.刷新IPtables防火墙链或规则

如果要刷新防火墙链,可以使用:
# iptables -F
您可以从以下位置清除特定表中的链:
# iptables -t nat -F
你可以改变"nat"你想清除的那些链实际的表。

19.将IPtables规则保存到文件

如果你想保存你的防火墙规则,可以使用iptables-save命令。您可以使用以下命令将规则保存并存储在文件中:
# iptables-save > ~/iptables.rules
这取决于你在哪里存储文件和如何命名它。

20.从文件恢复IPtables规则

如果你想恢复的iptables规则列表,你可以使用iptables-restore 。命令如下所示:
# iptables-restore < ~/iptables.rules
当然,您的规则文件的路径可能不同。

21.为PCI合规性设置IPtables规则

可能需要某些系统管理员将其服务器配置为PCI compiliant。不同的PCI合规性供应商有很多要求,但是有很少的常见要求。 在许多情况下,您将需要有多个IP地址。您需要对网站的IP地址应用以下规则。在使用以下规则时要格外小心,只有在确定您正在做什么时才使用它们:
# iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP
如果你使用cPanel或类似的控制面板,你可能需要阻塞它的端口。这里是一个例子:
# iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP
:为了确保您满足PCI供应商的要求,仔细检查他们的报告,并应用所需的规则。在某些情况下,您可能需要在某些端口上阻止UDP流量。

22.允许建立和相关连接

由于网络流量在传入和传出时是分开的,您将需要允许已建立的和相关的传入流量。对于传入连接,请执行以下操作:
# iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
外出使用:
# iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23.在IPtables中删除无效的数据包

可能有一些网络数据包被标记为无效。有些人可能更喜欢记录这些包,但其他人喜欢丢弃它们。要丢弃无效的数据包,您可以使用:
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24.网络接口上的块连接

一些系统可以具有多于一个的网络接口。您可以限制对该网络接口的访问或阻止来自特定IP地址的连接。 例如:
# iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
改变“xxx.xxx.xxx.xxx”与您要阻止的实际IP地址(或网络)。

25.通过IPTables禁用传出邮件

如果您的系统不应发送任何电子邮件,您可以阻止SMTP端口上的输出端口。例如你可以使用:
# iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

结论

iptables的是一个功能强大的防火墙,你可以轻松地从中受益。 至关重要的是,对于系统管理员学习至少iptables的基础知识 。如果你想找到更多关于iptables及其选项的详细信息,强烈建议阅读它的手册:
# man iptables
如果您认为我们应该向此列表中添加更多命令,请与我们分享,方法是在下面的评论部分提交。