菜鸟笔记
提升您的技术认知

linux下用iptables做本机端口转发方法-ag真人游戏

拓扑图

下来一个一般情况下公司内网和外网的拓扑图

 

1、防火墙分类

      ①包过滤防火墙(pack filtering)在网络层对数据包进行选择过滤,采用访问控制列表(access control table-acl)检查数据流的源地址,目的地址,源和目的端口,ip等信息。
      ②代理服务器型防火墙

2、iptables基础

      ①规则(rules):网络管理员预定义的条件
      ②链(chains): 是数据包传播的路径
      ③表(tables):内置3个表filter表,nat表,mangle表分别用于实现包过滤网络地址转换和包重构的功能
      ④filter表是系统默认的,input表(进入的包),forword(转发的包),output(处理本地生成的包),filter表只能对包进行授受和丢弃的操作。
      ⑤nat表(网络地址转换),prerouting(修改即将到来的数据包),output(修改在路由之前本地生成的数据包),postrouting(修改即将出去的数据包)
      ⑥mangle表,prerouting,output,forword,postrouting,input

3、其它

   iptables是按照顺序读取规则
   防火墙规则的配置建议
    ⅰ 规则力求简单
    ⅱ 规则的顺序很重要
    ⅲ 尽量优化规则
    ⅳ 做好笔记

1、iptables命令格式

     iptables [-t 表] -命令 匹配 操作 (大小写敏感)
   动作选项
     accept          接收数据包
     drop             丢弃数据包
     redirect      将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务
     snat             源地址转换
     dnat             目的地址转换
     masquerade       ip伪装
     log               日志功能

2、定义规则

   ①先拒绝所有的数据包,然后再允许需要的数据包
      iptalbes -p input drop
      iptables -p forward drop
      iptables -p output accept
   ②查看nat表所有链的规则列表
      iptables -t nat -l
   ③增加,插入,删除和替换规则
     iptables [-t 表名] <-a|i|d|r> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [--sport 源端口号] [-d 目的ip|目标子网] [--dport 目标端口号] [-j 动作]
    参数:-a 增加
               -i 插入
               -d 删除
               -r 替换
 

①iptables -t filter -a input -s 192.168.1.5 -i eth0 -j drop
禁止ip为192.168.1.5的主机从eth0访问本机②iptables -t filter -i input 2 -s 192.168.5.0/24 -p tcp --dport 80 -j drop
禁止子网192.168.5.0访问web服务③iptables -t filter -i input 2 -s 192.168.7.9 -p tcp --dport ftp -j drop
禁止ip为192.168.7.9访问ftp服务
④iptables -t filter -l input
查看filter表中input链的规则
⑤iptables -t nat -f
删除nat表中的所有规则
⑥iptables -i forward -d www.coonote.com -j drop
禁止访问www.playboy.com网站
⑦iptables -i forward -s 192.168.5.23 -j drop
禁止192.168.5.23上网

 

下面详细介绍一下iptables的配置

一 :从一台机到另一台机端口转发

启用网卡转发功能
#echo 1 > /proc/sys/net/ipv4/ip_forward

举例:从192.168.0.132:21521(新端口)访问192.168.0.211:1521端口

a.同一端口转发

(192.168.0.132上开通1521端口访问 iptables -a rh-firewall-1-input -m state --state new -m tcp -p tcp --dport 1521 -j accept)

iptables -t nat -i prerouting -p tcp --dport 1521 -j dnat --to 192.168.0.211
iptables -t nat -i postrouting -p tcp --dport 1521 -j masquerade

b.不同端口转发

(192.168.0.132上开通21521端口访问 iptables -a rh-firewall-1-input -m state --state new -m tcp -p tcp --dport 21521 -j accept)

iptables -t nat -a prerouting -p tcp -m tcp --dport21521 -j dnat --to-destination192.168.0.211:1521
iptables -t nat -a postrouting -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j snat --to-source 192.168.0.132

以上两条等价配置(更简单[指定网卡]):
iptables -t nat -a prerouting -p tcp -i eth0 --dport 31521 -j dnat --to 192.168.0.211:1521
iptables -t nat -a postrouting -j masquerade

保存iptables
#service iptables save
#service iptables restart
 

二 用iptables做本机端口转发

代码如下:
   iptables -t nat -a prerouting -p tcp --dport 80 -j redirect --to-ports 8080

估计适当增加其它的参数也可以做不同ip的端口转发。

如果需要本机也可以访问,则需要配置output链(********特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问yown.com,实际上是访问到本地,建议不做80端口的转发或者指定目的 -d localhost):
  iptables -t nat -a output -d localhost -p tcp --dport 80 -j redirect --to-ports 8080

原因:
外网访问需要经过prerouting链,但是localhost不经过该链,因此需要用output。

例子1:

概述:

      有一些核心mysql服务器位于核心机房的内网段,经常需要去连接这些服务器,因无法直接通过外网访问,给管理造成了不便。
思路:

      虽然解决此问题的方法及思路有很多,但当下想使用iptables的端口重定向功能解决此问题,比较简单易用,而且扩展性也比较好,依次类推,可以运用到其他的端口转发方面的应用。
网络环境:
公网服务器      :eth0:公网ip    eth1:内网ip - 192.168.1.1
mysql服务器:eth1:内网ip - 192.168.1.2

实现方法:通过访问公网ip的63306端口来实现到内网mysql服务器的3306端口的访问
在公网服务器上:
配置脚本:
iptables -t nat -a prerouting -p tcp --dport 63306 -j dnat --to-destination 192.168.1.2:3306
iptables -t nat -a postrouting -d 192.168.1.2 -p tcp --dport 3306 -j snat --to 192.168.1.1

允许服务器的ip转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward
使用方法:
mysql -h 公网ip -p 63306 -uroot -p

例子2:

     由于业务需要,服务器越来越多,内网服务器无外网环境管理甚是不便,所以折腾了一下外网到内网的端口转发以达到轻松管理的目的,贴一下心得。

s1:
eth0 10.0.0.1
eth1 x.x.x.x

s2:
eth0 10.0.0.2

s1 8082端口转发到内网机器22端口

iptables规则配置如下:

iptables -t nat -a prerouting -d x.x.x.x -p tcp --dport 8082 -j dnat --to-destination 10.0.0.2:22

iptables -t nat -a postrouting -d 10.0.0.2 -p tcp --dport 22 -j snat --to-source x.x.x.x

说明:
iptables -t nat -a prerouting -d "对外公网ip" -p tcp --dport "对外端口" -j dnat --to "内部实际提供服务的ip":"实际提供服务的端口"

iptables -t nat -a postrouting -d "内部实际提供服务的ip"-p tcp --dport "实际提供服务的端口" -j snat --to-source "运行iptables机器的内网ip

25个最常用的iptables策略

1、清空存在的策略

当你开始创建新的策略,你可能想清除所有的默认策略,和存在的策略,可以这么做:

  • iptables -f 或者iptables –flush

2、设置默认策略

默认链策略是accept,改变所有的链策略为drop:

  • iptables -p input drop
  • iptables -p forward drop
  • iptables -p output drop

3、阻止一个指定的ip

  • block_this_ip=“x.x.x.x"
  • iptables -a input -s ”$block_this_ip“ -j drop
  • iptables -a input -i eth0 -s "$block_this_ip" -j drop
  • iptables -a input -i eth0 -p tcp -s "$block_this_ip" -j drop

4、允许ssh

允许所有通过eth0接口使用ssh协议连接本机:

  • iptables -a input -i eth0 -p tcp -dport 22 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 22 -m state -state established -j accept

5、允许某个网段通过ssh连接

  • iptables -a input -i eth0 -p tcp -s 192.168.100.0/24 –dport 22 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 22 -m state –state established -j accept

6、允许ssh连接指定的网段

  • iptables -a output -o eth0 -p tcp -d 192.168.100.0/24 -dport 22 -m state -state new,established -j accept
  • iptables -a input -i eth0 -p tcp -sport 22 -m state -state established -j accept

7、允许http和https

允许所有进来的web流量:http协议80端口,https协议是443端口

  • 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

8、多个策略联合一起

允许ssh,http,https:

  • iptables -a input -i eth0 -p tcp -m multiport -dports 22,80,443 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -m multiport -sports 22,80,443 -m state -state established -j accept

9、允许ssh连接其他主机

  • iptables -a output -o eth0 -p tcp -dport 22 -m state -state new,established -j accept
  • iptables -a input -i eth0 -p tcp -sport 22 -m state -state established -j accept

10、允许https出去

  • iptables -a output -o eth0 -p tcp -dport 443 -m state -state new,established -j accept
  • iptables -a input -i eth0 -p tcp -sport 443 -m state -state established -j accept

11、对web请求做负载均衡(每三个包,均衡到指定服务器,需要扩展iptables)

  • iptables -a prerouting -i eth0 -p tcp –dport 443 -m state -state new -m nth -counter 0 -every 3 -packet 0 -j dnat -to-destination 192.168.1.101:443
  • iptables -a prerouting -i eth0 -p tcp –dport 443 -m state -state new -m nth -counter 0 -every 3 -packet 1 -j dnat -to-destination 192.168.1.102:443
  • iptables -a prerouting -i eth0 -p tcp –dport 443 -m state -state new -m nth -counter 0 -every 3 -packet 2 -j dnat -to-destination 192.168.1.103:443

12、允许ping

  • iptables -a input -p icmp -icmp-type echo-request -j accept
  • iptables -a output -p icmp -icmp-type echo-reply -j accept

13、允许ping远程

  • iptables -a output -p icmp -icmp-type echo-request -j accept
  • iptables -a input -p icmp -icmp-type echo-reply -j accept

14、允许本地回环

  • iptables -a input -i lo -j accept
  • iptables -a output -o lo -j accept

15、允许内网访问外部网络

这个例子eth1 连接外部网络,eth0连接内部网络

  • iptables -a forward -i eth0 -o eth1 -j accept

16、允许dns出去

  • iptables -a output -p udp -o eth0 -dport 53 -j accept
  • iptables -a input -p udp -i eth0 -sport 53 -j accept

17、允许nis连接

nis端口是动态的,当ypbind启动时它分配端口。

首先运行 rpcinfo -p 显示得到端口号,这个例子使用端口850,853。

  • iptables -a input -p tcp -dport 111 -j accept
  • iptables -a input -p udp -dport 111 -j accept
  • iptables -a input -p tcp -dport 853 -j accept
  • iptables -a input -p udp -dport 853 -j accept
  • iptables -a input -p tcp -dport 850 -j accept
  • iptables -a input -p udp -dport 850 -j accept

上面的例子当ypbind重新启动时将失效,有2种ag真人游戏的解决方案:

(1) 分配nis服务静态ip

(2) 使用精妙的脚本

18、允许指定网段连接rsync

  • iptables -a input -i eth0 -p tcp -s 192.168.101.0/24 -dport 873 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 873 -m state -state established -j accept

19、允许mysql从指定的网段连接

  • iptables -a input -i eth0 -p tcp -s 192.168.100.0/24 -dport 3306 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 3306 -m state -state established -j accept

20、允许sendmail或者postfix

  • iptables -a input -i eth0 -p tcp -dport 25 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 25 -m state -state established -j accept

21、允许imap和imaps

  • iptables -a input -i eth0 -p tcp -dport 143 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 143 -m state -state established -j accept
  •  
  • iptables -a input -i eth0 -p tcp -dport 993 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 993 -m state -state established -j accept

22、允许pop3和pop3s

  • iptables -a input -i eth0 -p tcp -dport 110 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 110 -m state -state established -j accept
  •  
  • iptables -a input -i eth0 -p tcp -dport 995 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 995 -m state -state established -j accept

23、预防ddos攻击

  • iptables -a input -p tcp -dport 80 -m limit -limit 25/minute -limit-burst 100 -j accept
  • -m :使用iptables扩展
  • –limit 25/minute : 限制分钟连接请求数
  • –limit-burst:触发阀值,一次涌入数据包数量

24、端口转发

来自442的都转到22端口

  • iptables -t nat -a prerouting -p tcp -d 192.168.102.37 -dport 422 -j dnat -to 192.168.102.37:22

你还必须明确允许442端口

  • iptables -a input -i eth0 -p tcp -dport 422 -m state -state new,established -j accept
  • iptables -a output -o eth0 -p tcp -sport 422 -m state -state established -j accept

25、包丢弃日志

你也许想查看所有丢弃包的日志。首先创建一个新链叫 logging

  • iptables -n logging

确保所有的连接跳到logging

  • iptables -a input -j logging

记录这些包通过自定义名字 "log-prefix"

  • iptables -a logging -m limit -limit 2/min -j log -log-prefix "iptables packet dropped:" -log-level 7

最后丢弃这些数据包

  • iptables -a logging -j drop
网站地图