Xeo*_*oss 16 security linux firewall iptables best-practices
我一直在尝试组合一个基本的服务器 iptables 脚本,该脚本适用于大多数使用 HTTP(S) 和 SSH(端口 80、443 和 22)运行基本网络服务器的站点。毕竟,大多数VPS只需要这些起始端口规则,以后可以根据需要添加邮件或游戏端口。
到目前为止,我有以下规则集,我想知道是否有人知道更好的脚本或可以添加的任何改进。
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections (only 4 attempts by an IP every 3 minutes, drop the rest)
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Run Code Online (Sandbox Code Playgroud)
iptables 是保护您的机器的最重要的部分之一(另请参阅fail2ban),但有很多人像我一样难以理解为我们的服务器制作安全的基本防火墙的所有内容。
仅打开网络服务器所需的基本端口的最安全方法是什么?
更新: cyberciti.biz 有另一个看起来不错的iptables 脚本。
此外,您可以使用iptables 本身来阻止对 SSH 的错误重复尝试,而不是使用 Denyhosts 或 fail2ban 。
Mar*_*era 14
使用 iptables 最安全的方法是关闭所有内容,只打开您需要的内容。我有点心烦意乱,所以我总是尽量保持懒惰,所以我不会犯可能导致服务器不安全的错误。
我使用这个,只需要做一点变量赋值就可以让它工作。
#!/bin/bash +x
# first author: marcos de vera
# second: joan marc riera
ip=/sbin/iptables
mriera="xx.xx.xx.xx"
nsancho="yy.yy.yy.yy"
admins="$mriera $nsancho "
sshers=""
mysqlrs="zz.zz.zz.zz/23"
snmprs="uu.uu.uu.uu"
tcpservices="80 443 22"
udpservices=""
# Firewall script for servername
echo -n ">> Applying iptables rules... "
## flushing...
$ip -F
$ip -X
$ip -Z
$ip -t nat -F
# default: DROP!
$ip -P INPUT DROP
$ip -P OUTPUT DROP
$ip -P FORWARD DROP
# filtering...
# localhost: free pass!
$ip -A INPUT -i lo -j ACCEPT
$ip -A OUTPUT -o lo -j ACCEPT
# administration ips: free pass!
for admin in $admins ; do
$ip -A INPUT -s $admin -j ACCEPT
$ip -A OUTPUT -d $admin -j ACCEPT
done
# allow ssh access to sshers
for ssher in $sshers ; do
$ip -A INPUT -s $ssher -p tcp -m tcp --dport 22 -j ACCEPT
$ip -A OUTPUT -d $ssher -p tcp -m tcp --sport 22 -j ACCEPT
done
# allow access to mysql port to iReport on sugar
for mysql in $mysqlrs ; do
$ip -A INPUT -s $mysql -p tcp -m tcp --dport 3306 -j ACCEPT
$ip -A OUTPUT -d $mysql -p tcp -m tcp --sport 3306 -j ACCEPT
$ip -A INPUT -s $mysql -p udp -m udp --dport 3306 -j ACCEPT
$ip -A OUTPUT -d $mysql -p udp -m udp --sport 3306 -j ACCEPT
done
# allowed services
for service in $tcpservices ; do
$ip -A INPUT -p tcp -m tcp --dport $service -j ACCEPT
$ip -A OUTPUT -p tcp -m tcp --sport $service -m state --state RELATED,ESTABLISHED -j ACCEPT
done
for service in $udpservices ; do
$ip -A INPUT -p udp -m udp --dport $service -j ACCEPT
$ip -A OUTPUT -p udp -m udp --sport $service -m state --state RELATED,ESTABLISHED -j ACCEPT
done
$ip -A INPUT -j LOG --log-level 4
# VAS and VGP
#88 tcp udp
#389 tcp ldap queries , udp ldap ping
#464 tcp upd kerberos
#3268 tcp global catalog access
for dc in ip.ip.ip.ip ; do # our dc servers for some ldap auth
vas=88
$ip -A INPUT -s $dc -p tcp -m tcp --dport $vas -j ACCEPT
$ip -A OUTPUT -d $dc -p tcp -m tcp --dport $vas -j ACCEPT
$ip -A INPUT -s $dc -p udp -m udp --dport $vas -j ACCEPT
$ip -A OUTPUT -d $dc -p udp -m udp --dport $vas -j ACCEPT
ldap=389
$ip -A INPUT -s $dc -p tcp -m tcp --dport $ldap -j ACCEPT
$ip -A OUTPUT -d $dc -p tcp -m tcp --dport $ldap -j ACCEPT
$ip -A INPUT -s $dc -p udp -m udp --dport $ldap -j ACCEPT
$ip -A OUTPUT -d $dc -p udp -m udp --dport $ldap -j ACCEPT
kpasswd=464
$ip -A INPUT -s $dc -p tcp -m tcp --dport $kpasswd -j ACCEPT
$ip -A OUTPUT -d $dc -p tcp -m tcp --dport $kpasswd -j ACCEPT
$ip -A INPUT -s $dc -p udp -m udp --dport $kpasswd -j ACCEPT
$ip -A OUTPUT -d $dc -p udp -m udp --dport $kpasswd -j ACCEPT
gca=3268
$ip -A INPUT -s $dc -p tcp -m tcp --dport $gca -j ACCEPT
$ip -A OUTPUT -d $dc -p tcp -m tcp --dport $gca -j ACCEPT
vgp=445
$ip -A INPUT -s $dc -p tcp -m tcp --dport $vgp -j ACCEPT
$ip -A OUTPUT -d $dc -p tcp -m tcp --dport $vgp -j ACCEPT
done
# allow the machine to browse the internet
$ip -A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ip -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ip -A INPUT -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ip -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
$ip -A INPUT -p tcp -m tcp --sport 8080 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ip -A OUTPUT -p tcp -m tcp --dport 8080 -j ACCEPT
# don't forget the dns...
$ip -A INPUT -p udp -m udp --sport 53 -j ACCEPT
$ip -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
$ip -A INPUT -p tcp -m tcp --sport 53 -j ACCEPT
$ip -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
# ... neither the ntp... (hora.rediris.es)
#$ip -A INPUT -s 130.206.3.166 -p udp -m udp --dport 123 -j ACCEPT
#$ip -A OUTPUT -d 130.206.3.166 -p udp -m udp --sport 123 -j ACCEPT
$ip -A INPUT -p udp -m udp --dport 123 -j ACCEPT
$ip -A OUTPUT -p udp -m udp --sport 123 -j ACCEPT
# and last but not least, the snmp access
for monitor in $snmprs ; do
$ip -A INPUT -s $monitor -p tcp -m tcp --sport 161 -j ACCEPT # monitoring service
$ip -A OUTPUT -d $monitor -p tcp -m tcp --dport 161 -j ACCEPT # monitoring service
end
# outgoing SMTP
$ip -A INPUT -p tcp -m tcp --sport 25 -j ACCEPT
$ip -A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT
# temporary backup if we change from DROP to ACCEPT policies
$ip -A INPUT -p tcp -m tcp --dport 1:1024 -j DROP
$ip -A INPUT -p udp -m udp --dport 1:1024 -j DROP
echo "OK. Check rules with iptables -L -n"
# end :)
Run Code Online (Sandbox Code Playgroud)
我已经使用它一段时间了,如果它使管理更容易,任何类型的修改都将不胜感激。
| 归档时间: |
|
| 查看次数: |
28980 次 |
| 最近记录: |