当前设置
Centos 是一个 Web、邮件(Postfix、Dovecot)、FTP 服务器和网关,具有公共 IP 和私有 IP(用于 LAN 网关)。
我们计划实施外部防火墙并将服务器引入局域网
请指导配置 IPTables...无法接收邮件,并且发出的邮件停留在 Postfix 队列中,并在延迟后发送...
服务器本地ip为192.168.1.220
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# incoming HTTP
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
#outgoing HTTP
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# FTP
iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.1.220 --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.1.220 --sport 21 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.1.220 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.1.220 --sport 1024:65535 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
#SMTP
iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.1.220 --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.1.220 --sport 25 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.1.220 --sport 1024:65535 -d 0/0 --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --sport 25 -d 192.168.1.220 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
#POP3
iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.1.220 --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.1.220 --sport 110 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
答案1
您可以将这些规则简化为此。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -m multiport -p tcp --dport 80,443,21,25,110 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -m multiport -p tcp --dport 80,443,21,25,110 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -m state --state NEW -j ACCEPT
您还需要加载 ftp 跟踪模块。
modprobe ip_nat_ftp
我添加了一条规则来允许 DNS 查找,因为没有 DNS 邮件就无法运行。
答案2
如果我理解正确的话,您有一个防火墙和另一个内部服务器。在这种情况下:
INPUT 和 OUTPUT 链用于进出防火墙的流量。您的规则应在 FORWARD 链上。您还需要 NAT 规则。SNAT 用于让内部服务器访问互联网,DNAT 用于将外部流量重定向到内部服务器。
首先检查您是否启用了转发。
放:
net.ipv4.ip_forward = 1
在 /etc/sysctl.conf 中
假如说:
防火墙 IP 为 192.168.1.5,网络接口为:eth0 WAN、eth1 LAN
http/邮件服务器 IP 为 192.168.1.1
尝试:
###load ftp nat modules
/usr/sbin/modprobe ip_nat_ftp
/usr/sbin/modprobe ip_conntrack_ftp
### set chains policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
### for server to access internet
### SNAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
### and allow full server access
iptables -A FORWARD -i eth1 -s 192.168.1.1 -j ACCEPT
### for incoming http connections
### DNAT
iptables -t bat -A PREROUTING -i eth0 -p tcp --dport 80 -j NAT --to-destination 192.168.1.1:80
### and allow forward
iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.1.1 -j ACCEPT
要将其他端口重定向到服务器,请复制最后两行(DNAT 和转发)并将端口更改为 110、443 等。
至少不要忘记添加输入或输出规则
IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
能够通过 ssh 访问防火墙