我正在运行一个使用 Centos 7 的小型集群,并需要以下防火墙规则。
- 从任何地方都可以进行 ssh 访问(我将从 /etc/ssh/sshd_config 进一步配置)
- 具有对 FTP 服务器的 FTP 访问权限
- 有权访问在 :7180 运行的 Web 应用程序
- 拥有某些服务器的完全访问权限
- 记录所有事件
- 预防 DDoS
我已经编写了以下脚本,但不知道这是否是最佳方法。有什么建议吗?
/bin/bash`#!/bin/bash
IPTABLES=/usr/sbin/iptables MY_NET=server1.sample.com,server2.sample.com,server3.sample.com MY_IP=123.456.789.101
FTP=ftp.sample.com$IPTABLES -F
$IPTABLES -I 输入 1 -j 日志
$IPTABLES -I 输出 1 -j 日志$IPTABLES -P 输入删除
$IPTABLES -P 输出删除$IPTABLES -A 输入 -p tcp -s $MY_NET,$MY_IP -j 接受 $IPTABLES -A 输出 -p tcp -d $MY_NET,$MY_IP -j 接受
$FTP -m 多端口 --dports 20,21 -j 接受 $IPTABLES -A OUTPUT -p tcp -d $FTP -m 多端口 --dports 20,21 -j 接受
$IPTABLES -A INPUT -p tcp -m multiport --dports 22,7180 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m multiport --sports 22,7180 -m state --state ESTABLISHED -j ACCEPT$IPTABLES -A 输入 -p icmp --icmp 类型 echo-reply -j 接受
$IPTABLES -A INPUT -p tcp --dport 22,8080,7180 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT`
答案1
- 防火墙最好的解决办法就是全部禁止然后打个洞。
- 为协议创建一个链
- 使规则结构变得非线性,有助于在大负载下更快地运行。
- 对于 LOG 的使用也有限制,请注意已满的日志磁盘分区。
有些例子没有涵盖你的例子,但是展示了如何
$IPTABLES -n ftp
$IPTABLES -n ssh
$IPTABLES -n webapp
$IPTABLES -n icmp
$IPTABLES -P INPUT DROP
#first log (i think better log only good or only bad)
$IPTABLES -A INPUT -m limit --limit 25/minute -j LOG
#decide to which chain goto...
$IPTABLES -A INPUT -p tcp --port 7180 -j webapp
$IPTABLES -A INPUT -p icmp -j icmp
$IPTABLES -A INPUT -p tcp --dport 22 -j ssh
#fill chain specific for protocol (port was matched before)
$IPTABLES -A webapp -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A icmp -p icmp --icmp-type echo-reply -j ACCEPT
#ssh accept packet to all destionation.. it is quicker then state comparsion
$IPTABLES -A ssh -j ACCEPT
#for output make other chain than input
$IPTABLES -N ssh_out
$IPTABLES -A OUTPUT -p tcp --sport 22 -j ACCEPT
$IPTABLES -A ssh_out -m state --state ESTABLISHED -j ssh_out
$IPTABLES -A ssh_out -j DROP #or make drop policy on output...
那么一个……