25 IPtables适用于Linux的防火墙规则
iptables
派上用场
。iptables的是一个Linux命令行的防火墙,允许系统管理员通过一组可配置表规则管理传入和传出的流量。 使用
iptables的一组有包含设置的内置或用户定义的规则链表。由于他们,系统管理员可以正确过滤他的系统的网络流量。 根据iptables手册,目前有3种类型的表:
FILTER
-这是默认的表,它包含了内建的链为:- INPUT -运往当地socket包
- FORWARD -通过系统路由数据包
- 本地生成的包- 输出
NAT
-当一个数据包试图创建一个新的连接被征询表。 它有以下内置:- PREROUTING -用于只要它接受改变的数据包
- 输出 -用于转换的本地产生的数据包
- POSTROUTING -用于改变数据包,他们即将走出去
MANGLE
-这个表用于分组改变。 直到内核版本2.4本表中只有两条链,但他们现在5:- PREROUTING -为改变传入连接
- 输出 -为改变本地生成的包
- 输入 -接收报文
- POSTROUTING -为改变数据包,他们即将走出去
- FORWARD -数据包路由到本机
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如果您认为我们应该向此列表中添加更多命令,请与我们分享,方法是在下面的评论部分提交。