一则自用iptables例子解释

时间:2021-09-25 22:13:04

公网IP:110.24.3.83
内网IP:10.252.214.186
局域网数据库:10.252.214.100

通过NAT端口转发,访问110.24.3.83:3308端口跳转到局域网数据库机器的3306端口

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 110.24.3.83 -p tcp --dport 3308 -j DNAT --to-destination 10.252.214.100:3306
-A POSTROUTING -d 10.252.214.100 -p tcp -j SNAT --to-source 10.252.214.186
COMMIT

*filter
:INPUT DROP [0:0]      #默认进来的所有包DROP,0:0表示没有限制包的个数和总字节数,匹配的动作无限制的流入流出。
:FORWARD DROP [0:0]   #默认转发的所有包DROP,0:0表示没有限制包的个数和总字节数,匹配的动作无限制的流入流出。
:OUTPUT ACCEPT [0:0]   #默认出去的所有包ACCEPT,0:0表示没有限制包的个数和总字节数,匹配的动作无限制的流入流出。
:RH-Firewall-1-INPUT - [0:0]         #自定义了一个表RH-Firewall-1-INPUT
-A INPUT -j RH-Firewall-1-INPUT       #将INPUT的所有包转发到自定义的RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT    #将FORWARD的所有包转发到自定义的RH-Firewall-1-INPUT ;这样INPUT和FORWARD的规则就一致了,也就意味着,只要定义好RH-Firewall-1-INPUT,就定义好了INPUT和FORWARD两个链
-A RH-Firewall-1-INPUT -i lo -j ACCEPT    #允许本机数据包通过
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  #允许已建立的链接数据包通过
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT        #允许ping本机
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -s 121.10.246.64/255.255.255.224 -m state --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -s 123.27.13.60 -m state --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -s 123.27.16.45 -m state --state NEW -j ACCEPT
COMMIT

-p tcp:   是说当前规则作用于 tcp 协议包
-m tcp:  是说明要使用iptables的tcp模块的功能 (--dport 等)

-m state --state <状态>
有数种状态,状态有:
▪ INVALID:无效的封包,例如数据破损的封包状态
▪ ESTABLISHED:已经联机成功的联机状态;
▪ NEW:想要新建立联机的封包状态;
▪ RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因为设定了他之后,只要未来由本机发送出去的封包,即使我们没有设定封包的INPUT规则,该有关的封包还是可以进入我们主机,可以简化相当多的设定规则。