最常用的Linux IPTables规则和示例
本文将帮助您创建可直接用于日常或例行需求的IPtables规则。这些示例将充当基本模板,供您使用符合特定要求的这些规则处理iptables。
删除IPtable或现有规则
在开始构建新的IPtables规则集之前,应清除所有默认规则和现有规则。使用IPtablesflush命令,以下是一些示例–
#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规则是以简单的外壳脚本格式编写的,因此我们可以在编写外壳脚本以将其应用于多个服务器时使用它们。