29 linux forwarding iptables input
我有一个带有Linux pc的家庭网络,它们都运行iptables.我认为把我的局域网放在Linux网关/防火墙后更容易,所以我在我的路由器和局域网之间安装了一台电脑(带有fedora,没有gui)并配置了iptables.这里没问题,INPUT只允许dns一个http(和一些本地的东西),转发工作正常:LAN连接到互联网.
但我的问题是:FORWARD允许来自外部的所有内容,还是只允许我使用INPUT配置的端口?FORWARD和INPUT一起工作还是分开?
这是我的iptables:
*nat
:PREROUTING ACCEPT [16:1336]
:INPUT ACCEPT [14:840]
:OUTPUT ACCEPT [30:2116]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o p1p1 -j MASQUERADE
COMMIT
# Completed on Tue Oct 16 09:55:31 2012
# Generated by iptables-save v1.4.14 on Tue Oct 16 09:55:31 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [91:9888]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p UDP --dport 53 -j ACCEPT
-A INPUT -p TCP --dport 53 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp -m tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp -m tcp --dport 5000:5100 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i p1p1 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.2.0/24 -i p3p1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.1.0/24 -i p1p1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i p1p1 -p tcp -m multiport --dports 20,21,443 -j DROP
-A INPUT -i p1p1 -p tcp --dport 5000:5100 -j DROP
-A INPUT -i p1p1 -p icmp -m icmp --icmp-type 8 -j DROP
-A FORWARD -s 192.168.2.0/24 -j ACCEPT
-A FORWARD -d 192.168.2.0/24 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A OUTPUT -j LOG --log-prefix "denied out: "
COMMIT
Run Code Online (Sandbox Code Playgroud)
p1p1(.1.x)是我的外部nic,p3p1(.2.x)是内部的.
Sam*_*han 82
RedHat有一个很好的关于iptables的文档(有点长),但要讨论的主题很复杂,有很多不同的用例,我看不出如何避免它.
这是关于FORWARD和NAT规则的章节.如上所述:
例如,如果要将传入的HTTP请求转发到172.31.0.23的专用Apache HTTP Server,请使用以下命令作为root用户:
~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 172.31.0.23:80
Run Code Online (Sandbox Code Playgroud)
这是发生的事情:
x.x.x.x:y
来自用于数据包传输的互联网和源端口的发送方IP)192.168.1.1:80
假设你的linux网关IP在外部网卡上,即p1p1
)-j
)到DNAT功能(目标网络地址转换),该功能将数据包标头的目的地从初始192.168.1.1:80
更改为172.31.0.23:80
.172.31.0.23:80
.
192.168.1.1:80
)?不,所以我不会把它发送到INPUT链.filter
表链FORWARD
)上将规则设置为FORWARD all,因此应将数据包正确转发到本地Apache HTTP Server(例如).希望它能帮助理解内部路由如何与iptables协同工作.
Joh*_*ica 67
INPUT,FORWARD和OUTPUT是分开的.数据包只会命中三个链中的一个.
如果目标是到该服务器,它击中INPUT链.如果它的源是来自此服务器,则它会命中OUTPUT.如果它的源和目标都是其他机器 - 它正在通过服务器路由- 那么它就会击中FORWARD链.
归档时间: |
|
查看次数: |
75612 次 |
最近记录: |