最常用的Linux IPTables规则和示例

本文将帮助您创建可直接用于日常或例行需求的IPtables规则。这些示例将充当基本模板,供您使用符合特定要求的这些规则处理iptables。

删除IPtable或现有规则

在开始构建新的IPtables规则集之前,应清除所有默认规则和现有规则。使用IPtables flush命令,以下是一些示例–

#iptables --flush
(or)
# iptables --F

默认策略链

默认策略为ACCEPT,将所有INPUT,FORWARD,OUTPUT的策略更改为DROP。

# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT DROP

对于每个防火墙规则,我们需要定义两个规则,即,一个规则用于传入,另一个规则用于传出。

如果我们信任内部用户,则可以将DROP用于传入规则,并且默认传出将是ACCEPT。

允许HTTP和HTTPS传入连接

以下规则将允许HTTP和HTTPS(80和443)的所有传入流量

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

仅允许SSH到网络

以下规则将仅允许来自内部网络的ssh连接,这意味着我们只能仅来自192.168.87.0/24网络的ssh

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

允许传入的MySQL端口(3306)进行TCP通信。

下面的示例在eth0适配器的端口3306(mysql)上具有传入和传出流量。

iptables -A INPUT -i eth0 -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

允许特定网络的传入MySQL端口(3306)

以下示例将允许3306(mysql)用于特定的网络192.168.87.x。

iptables -A INPUT -i eth0 -p tcp -s 192.168.87.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

使用一个规则允许多个端口

下面的规则将允许从外部到多个端口的传入连接,而不是编写多个规则,我们还可以将多个端口一起编写规则,如下所示。

在这里,允许在单个规则中使用mysql,Http和Https。

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 3306,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 3306,80,443 -m state --state ESTABLISHED -j ACCEPT

允许传出MySQL

这与传入连接不同,我们在OUTPUT链上同时允许新连接和已建立的连接,但是在INPUT中,我们仅允许已建立的链。

当我们尝试从Linux框中连接到MySQL服务器时,此规则将仅允许与MySQL的传出连接。

iptables -A OUTPUT -o eth0 -p tcp --dport 3306-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

允许Sendmail流量

这些规则将允许使用sendmail或postfix端口25的邮件。

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

允许IMAP和POP3端口

此规则将允许从IMAP或POP3发送或接收电子邮件

iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

将端口转发到5722到22(SSH)

这些规则会将来自端口5722的总流量转发到端口22。这意味着ssh的传入连接可以来自5722和22。

iptables -t nat -A PREROUTING -p tcp -d 192.168.87.100 --dport 5722 -j DNAT --to 192.168.87.200:22

允许端口873(rsync)进行备份

这些规则将允许您使用rsync从特定网络进行备份或复制数据

iptables -A INPUT -i eth0 -p tcp -s 192.168.87.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

封锁IP位址

如果我们要阻止特定的IP地址。

BLOCK_ADDRESS="192.168.87.100"
# iptables -A INPUT -s "$BLOCK_ADDRESS" -j DROP

如果我们要阻止某些IP地址在他们正在下载或尝试访问服务器的位置,我们可以在该IP地址进行进一步调查,则这将很有用。

# iptables -A INPUT -i eth0 -s “$ BLOCK_ADDRESS ” -j DROP
# iptables -A INPUT -i eth0 -p tcp -s “$ BLOCK_ADDRESS ” -j DROP

上面的示例将阻止eth0上该特定IP地址的TCP / IP通信。

如果您想限制从外部访问服务器,我们可以在变量中添加网络

通过使用上述iptables规则或修改规则和端口,我们可以保护连接或网络/服务器。我们还可以相应地修改网络或端口以适合我们的环境。而且这些iptables规则是以简单的外壳脚本格式编写的,因此我们可以在编写外壳脚本以将其应用于多个服务器时使用它们。