ssh、ftp 和 webapps 的防火墙规则

ssh、ftp 和 webapps 的防火墙规则

我正在运行一个使用 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-r​​eply -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...

那么一个……

相关内容