关于 iptables 入站 出站以及NAT实例-演道网

本文是自己工作上的iptables笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!

iptbales默认ACCEPT策略,也称通策略,这种情况下可以做拦截策略,还有种叫堵策略,然后开放通的规则。(我偏向堵策略,自己需要开放什么在开,以下例子也是在此基础上的)

iptables 一些参数名称:

四表五链:fifter表、NAT表、Mangle表、Raw表  。  INPUT链、OUTPUT链、FORWARD链、PREROUTING链、POSTROUTING链

  INPUT链 – 处理来自外部的数据。
  OUTPUT链 – 处理向外发送的数据。
  FORWARD链 – 将数据转发到本机的其他网卡设备上。 

  PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。(NAT表需要开启linux路由 net.ipv4.ip_forward = 1)
  POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
  OUTPUT链 – 处理本机产生的数据包。

iptables 新建时情况所有记录

iptables -F
iptables -X
iptables -F -t mangle
iptables -t mangle -X
iptables -F -t nat
iptables -t nat -X

开放22 SSH端口

iptables -A INPUT -p tcp -p tcp –dport 22 -j ACCEPT  (允许外部访问本机的22端口)

iptables -A OUTPUT   -p tcp –sport 22 -j ACCEPT (有进就有出,IP包是来回的)

例如一条比较完整的SSH端口限制:(意思为:从eth0进来的SSH访问,除了公司192.168.16.0/24不限制,其他的地址都限制为每个ip最多5个SSH连接,且只为NEW和ESTABLISHED的连接,其他的都拒接)

iptables -A INPUT -i eth0 ! -s 192.168.16.0/24 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -m  connlimit –connlimit-above 5  -j REJECT

—-

iptables -A OUTPUT -p tcp –dport 22 -j ACCEPT (允许本机去ssh其他的服务器的22端口)

iptables -A INPUT -p tcp –sport 22 -j ACCEPT 

设置默认规则为DROP

iptables -P INPUT DROP

iptables -P OUTPUT DROP

此时占时不要service iptables save,先用客户端ssh连接一下服务器,看看可以连接吗?如果不行最起码还可以重启,这样规则没保存重启是不生效,如果保存了发现不通就麻烦一些了!

当发现可以SSH的时候,我们就可以继续下面的步骤了!

打开回环地址,为了本地访问,如本地访问数据库之类

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

打开服务器的ping功能,我觉得有必要打开,可以检测服务器状况

iptables -A INPUT -p icmp -m icmp –icmp-type 0 -j ACCEPT  (此2条规则是允许本机ping外网的ip,不包括域名,其中8是icmp的请求,0是icmp的响应)

iptables -A OUTPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT

—-

iptables -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT (此2条规则是允许外部ping本机)

iptables -A OUTPUT -p icmp -m icmp –icmp-type 0 -j ACCEPT

允许内部ping外部的域名

iptables -A INPUT -p udp  –sport 53 -j ACCEPT

iptables -A OUTPUT -p udp  –dport 53 -j ACCEPT

允许外部访问本机的80服务,且只允许新连接的和已经连接的会话(状态检测)

iptables -A INPUT -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

允许外部访问我本地多个端口 如 8080,8081,8082,且只允许是新连接,已经连接的和已经连接的在延伸出新连接的会话

iptables -A INPUT -p tcp -m multiport –dport 8080,8081,8082  -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -p tcp -m multiport –sport 8080,8081,8082 -m state –state ESTABLISHED -j ACCEPT

允许外部访问本机81端口,且本机初始只允许有200个连接,超过了此数量,然后每秒新增加2个连接,如果访问超过此限制则拒接 (此方式可以限制一些攻击)

iptables -A INPUT -p tcp –dport 81 -m limit –limit 2/s –limit-burst 200 -j ACCEPT

iptables -A OUTPUT -p tcp –sport 81 -j ACCEPT

限制除用户192.168.16.99以外的IP连接数为50 (相当于可以给自己开特权^_^)

iptables -A FORWARD -p tcp -s !192.168.16.99 -m connlimit –connlimit-above 50 -j REJECT

TCP匹配扩展协议–tcp-flags

iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK,RST SYN (表示 SYN,FIN,ACK,RST的标识都检查,但只匹配SYN标识)

iptables -A INPUT -p tcp –syn (如果这是为了匹配SYN标识位也可以写成这样,选项—syn相当于”–tcp-flags SYN,RST,ACK SYN”的简写。)

实例:

//nmap-xmas

iptables -A INPUT -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP (检查所以的标识位,匹配到FIN URG PSH的丢弃)

//nmap-push

iptables -A INPUT  -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP (检查所以的标识位,匹配到SYN RST ACK FIN URG的丢弃)

// Null

iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP (检查所以的标识位,没标志位的丢弃)

iptables -A INPUT  -p tcp –tcp-flags SYN,RST SYN,RST -j DROP(检查 SYN,RST标识位,匹配到 SYN,RST的丢弃,SYN是建立连接,RST是重置连接,所以这样的包是有问题的)

iptables -A INPUT  -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP (检查 SYN,FIN标识位,匹配到 SYN,FIN的丢弃,SYN是建立连接,FIN是结束连接,所以这样的包是有问题的)

iptables -A INPUT  -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP

iptables -A INPUT  -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

 

SNAT 和 DNAT

SNAT:

假如我要让公司192.168.10.0/24段的地址都通过linux服务器的eth0 :123.123.123.123上网

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT –to-source 123.123.123.123

DNAT

GATEWAY eth0:123.123.123.123 eth1:192.168.10.1 内网主机:192.168.10.10

要使访问123.123.123.123的80 自动跳到192.168.10.10的80端口上

iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 –dport 80 -j DNAT –to-destination 192.168.10.10:80

iptables -t nat -A POSTROUTING -p tcp -d 192.168.10.10 –dport 80 -j SNAT –to-source 192.168.10.1 (内网之间进行nat才加上)

第一条:将外部数据包的目的地址改到内网主机的指定端口
第二条:转发前,将外部源地址改为内网本地地址

更多iptables相关教程见以下内容

CentOS 7.0关闭默认防火墙启用iptables防火墙  http://www.linuxidc.com/Linux/2015-05/117473.htm

Iptables工作原理使用详解 http://www.linuxidc.com/Linux/2016-09/134945.htm

iptables使用范例详解 http://www.linuxidc.com/Linux/2014-03/99159.htm

Linux防火墙iptables详细教程 http://www.linuxidc.com/Linux/2013-07/87045.htm

iptables的备份、恢复及防火墙脚本的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm

Linux下防火墙iptables用法规则详解 http://www.linuxidc.com/Linux/2012-08/67952.htm

Linux下iptables防火墙设置 http://www.linuxidc.com/Linux/2015-10/123843.htm

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

发表评论

电子邮件地址不会被公开。 必填项已用*标注