乍一看,IPTables规则可能看起来很神秘。
在本文中,我’给出了25条实用的IPTables规则,您可以复制/粘贴这些规则并将其用于您的eeds.
这些示例将作为基本模板,供您调整这些规则以适合您的特定要求。
为便于参考,所有这25个iptables规则均采用Shell脚本格式: iptables规则
1.删除现有规则
在开始构建新规则集之前,您可能需要清除所有默认规则和现有规则。使用 iptablesflush command 如下所示。
iptables-F (or) iptables --flush
2.设置默认链策略
默认的链策略是ACCEPT。对于所有INPUT,FORWARD和OUTPUT链,将其更改为DROP,如下所示。
iptables-P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
当您同时制作INPUT和OUTPUT链时’的默认策略为DROP,对于您拥有的每个防火墙规则要求,都应定义两个规则。即一个用于传入,另一个用于传出。
在下面的所有示例中,每种情况我们都有两个规则,因为’已将DROP设置为INPUT和OUTPUT链的默认策略。
如果您信任内部用户,则可以省略上面的最后一行。即默认情况下不要丢弃所有传出数据包。在这种情况下,对于您具有的每个防火墙规则要求,只需定义一个规则即可。即只为传入定义规则,因为对于所有数据包,传出都是ACCEPT。
注意: 如果你不这样做’不知道连锁的意思是什么,您首先应该熟悉 IPTables基础.
3.阻止特定的IP地址
在继续其他示例之前,如果要阻止特定的ip地址,应首先执行以下操作。改变“x.x.x.x”在下面的示例中,您要阻止的特定IP地址。
BLOCK_THIS_IP="x.x.x.x" iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP
当您从日志文件中的特定ip地址中发现一些奇怪的活动,并且希望在进行进一步研究时暂时阻止该ip地址时,这将很有帮助。
您也可以使用以下变体之一,该变体仅在eth0连接上阻止此IP地址的TCP通信。
iptables-A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP iptables -A输入-i eth0 -p tcp-s "$BLOCK_THIS_IP" -j DROP
4.允许所有传入的SSH
以下规则允许eth0接口上的所有传入ssh连接。
iptables-A输入-i eth0 -p tcp--dport 22 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 22 -m state --state ESTABLISHED -j接受
注意:如果您想确切地理解每个参数的含义,则应阅读 如何添加IPTables防火墙规则
5.仅允许来自特定网络的传入SSH
以下规则仅允许从192.168.100.X网络传入的ssh连接。
iptables-A输入-i eth0 -p tcp-s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 22 -m state --state ESTABLISHED -j接受
在上面的示例中,您也可以使用完整的子网掩码代替/ 24。即“192.168.100.0/255.255.255.0”.
6.允许传入的HTTP和HTTPS
以下规则允许所有传入的网络流量。即到端口80的HTTP流量。
iptables-A输入-i eth0 -p tcp--dport 80 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 80 -m state --state ESTABLISHED -j接受
以下规则允许所有传入的安全Web流量。即到端口443的HTTPS流量。
iptables-A输入-i eth0 -p tcp--dport 443 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 443 -m state --state ESTABLISHED -j接受
7.使用多端口将多个规则组合在一起
当允许从外部世界到多个端口的传入连接时,而不是为每个端口编写单独的规则,您可以使用多端口扩展将它们组合在一起,如下所示。
以下示例允许所有传入的SSH,HTTP和HTTPS通信。
iptables-A输入-i eth0 -p tcp-m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp-m multiport --sports 22,80,443 -m state --state ESTABLISHED -j接受
8.允许传出SSH
以下规则允许传出ssh连接。即当您从内部SSH到外部服务器时。
iptables-A输出-o eth0 -p tcp--dport 22 -m state --state NEW,ESTABLISHED -j接受 iptables -A输入-i eth0 -p tcp--sport 22 -m state --state ESTABLISHED -j接受
请注意,这与传入规则略有不同。即我们在OUTPUT链上同时允许NEW和ESTABLISHED状态,而在INPUT链上只允许ESTABLISHED状态。对于传入规则,反之亦然。
9.仅允许传出SSH到特定网络
以下规则仅允许传出ssh连接到特定网络。即您从内部仅到192.168.100.0/24网络的ssh。
iptables-A输出-o eth0 -p tcp-d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j接受 iptables -A输入-i eth0 -p tcp--sport 22 -m state --state ESTABLISHED -j接受
10.允许传出HTTPS
以下规则允许传出的安全Web流量。当您要允许用户的互联网流量时,这很有用。在服务器上,当您想使用wget从外部下载一些文件时,这些规则也很有用。
iptables-A输出-o eth0 -p tcp--dport 443 -m state --state NEW,ESTABLISHED -j接受 iptables -A输入-i eth0 -p tcp--sport 443 -m state --state ESTABLISHED -j接受
注意:对于传出的HTTP Web通信,请添加上述两个附加规则,并将443更改为80。
11.负载平衡传入的网络流量
您还可以使用iptables防火墙规则来负载平衡传入的Web流量。
这使用iptables nth扩展名。以下示例将HTTPS通信负载平衡到三个不同的ip地址。对于第3个数据包,它将负载平衡到适当的服务器(使用计数器0)。
iptables-A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --目的地192.168.1.101:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443
12.允许从外向内ping
以下规则允许外部用户能够ping您的服务器。
iptables-A INPUT -p icmp --icmp-type echo-request -j接受 iptables -A OUTPUT -p icmp --icmp-type echo-reply -j接受
13.允许从内向外ping
以下规则允许您从内部ping到任何外部服务器。
iptables-A OUTPUT -p icmp --icmp-type echo-request -j接受 iptables -A INPUT -p icmp --icmp-type echo-reply -j接受
14.允许环回访问
您应允许对服务器进行完全环回访问。即使用127.0.0.1访问
iptables-A INPUT -i lo -j接受 iptables -A OUTPUT -o lo -j接受
15.允许从内部网络到外部网络。
在一个以太网卡连接到外部,另一以太网卡连接到内部服务器的防火墙服务器上,使用以下规则允许内部网络与外部网络进行通信。
在此示例中,eth1连接到外部网络(互联网),而eth0连接到内部网络(例如:192.168.1.x)。
iptables-A FORWARD -i eth0 -o eth1 -j接受
16.允许出站DNS
以下规则允许传出DNS连接。
iptables-A OUTPUT -p udp -o eth0 --dport 53 -j接受 iptables -A INPUT -p udp -i eth0 --sport 53 -j接受
17.允许NIS连接
如果您正在运行NIS来管理用户帐户,则应允许NIS连接。即使允许SSH连接,如果您不这样做’如果不允许NIS相关的ypbind连接,则用户将无法登录。
NIS端口是动态的。即当ypbind启动时,它分配端口。
首先执行如下所示的rpcinfo -p并获取端口号。在此示例中,它使用的是端口853和850。
rpcinfo -p | grep ypbind
现在,允许传入连接到端口111和ypbind使用的端口。
iptables-A输入-p tcp--dport 111 -j接受 iptables -A INPUT -p udp --dport 111 -j接受 iptables -A输入-p tcp--dport 853 -j接受 iptables -A INPUT -p udp --dport 853 -j接受 iptables -A输入-p tcp--dport 850 -j接受 iptables -A INPUT -p udp --dport 850 -j接受
当您重新启动ypbind时,上面的命令将不起作用,因为那时ypbind具有不同的端口号。
有两种解决方案:1)为NIS使用静态ip地址,或2)使用一些聪明的shell脚本技术自动从服务器获取动态端口号。“rpcinfo -p”命令输出,并使用上述iptables规则中的命令。
18.允许来自特定网络的Rsync
以下规则仅允许来自特定网络的rsync。
iptables-A输入-i eth0 -p tcp-s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 873 -m state --state ESTABLISHED -j接受
19.只允许来自特定网络的MySQL连接
如果您正在运行MySQL,通常您不会’不想允许外部直接连接。在大多数情况下,您的Web服务器可能在运行MySQL数据库的服务器上运行。
但是,DBA和开发人员可能需要使用MySQL客户端从其笔记本电脑和台式机直接登录MySQL。在这种情况下,您可能希望允许您的内部网络直接与MySQL通信,如下所示。
iptables-A输入-i eth0 -p tcp-s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 3306 -m state --state ESTABLISHED -j接受
20.允许Sendmail或Postfix流量
以下规则允许邮件流量。它可能是sendmail或postfix。
iptables-A输入-i eth0 -p tcp--dport 25 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 25 -m state --state ESTABLISHED -j接受
21.允许IMAP和IMAPS
以下规则允许IMAP / IMAP2通信。
iptables-A输入-i eth0 -p tcp--dport 143 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 143 -m state --state ESTABLISHED -j接受
以下规则允许IMAPS通信。
iptables-A输入-i eth0 -p tcp--dport 993 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 993 -m state --state ESTABLISHED -j接受
22.允许POP3和POP3S
以下规则允许POP3访问。
iptables-A输入-i eth0 -p tcp--dport 110 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 110 -m state --state ESTABLISHED -j接受
以下规则允许POP3S访问。
iptables-A输入-i eth0 -p tcp--dport 995 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 995 -m state --state ESTABLISHED -j接受
23.防止DoS攻击
以下iptables规则将帮助您预防Web服务器上的拒绝服务(DoS)攻击。
iptables-A输入-p tcp--dport 80 -m 限制 --limit 25/minute --limit-burst 100 -j接受
在上面的示例中:
- -m 限制: This uses the 限制 iptablesextension
- –limit 25/minute: This 限制s 上 ly maximum of 25 connection per minute. Change this value based 上 your specific requirement
- –limit-burst 100: This value indicates that the 限制/minute will be enforced 上 ly after the total number of connection have reached the 限制-burst level.
24.端口转发
以下示例将所有到达端口442的流量路由到22。这意味着传入的ssh连接可以来自端口22和422。
iptables-t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
如果执行上述操作,则还需要显式允许端口422上的传入连接。
iptables-A输入-i eth0 -p tcp--dport 422 -m state --state NEW,ESTABLISHED -j接受 iptables -A输出-o eth0 -p tcp--sport 422 -m state --state ESTABLISHED -j接受
25.日志丢弃的数据包
您可能还想记录所有丢弃的数据包。这些规则应位于底部。
首先,创建一个名为LOGGING的新链。
iptables-N LOGGING
接下来,确保所有剩余的传入连接都跳到LOGGING链,如下所示。
iptables-A INPUT -j LOGGING
接下来,通过指定自定义记录这些数据包“log-prefix”.
iptables-A LOGGING -m 限制 --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
最后,丢弃这些数据包。
iptables-A LOGGING -j DROP
以上所有25个iptables规则均采用Shell脚本格式: iptables规则
Previous articles in the iptablesseries:
- Linux防火墙教程:IPTables表,链,规则基础知识
- IPTables Flush:在RedHat和CentOS Linux上删除/删除所有规则
- Linux IPTables:如何添加防火墙规则(带有“允许SSH”示例)
- Linux IPTables:传入和传出规则示例(SSH和HTTP)
如果您喜欢这篇文章,您可能还会喜欢..
![]() |
![]() |
![]() |
![]() |
好人,并且期望所有与iptables相关的著作都在一个pdf文件中。谢谢