Iptables
iptables是運行在使用者空間的應用軟體,通過控制Linux內核netfilter模組,來管理網路封包的处理和转发。在大部分Linux发行版中,可以通过 手册页 (页面存档备份,存于互联网档案馆) 或 目前,iptables 支持内核2.4以上版本,旧版内核环境下则使用ipchains(于2.2版内核)或 ipwadm(于2.0版内核)完成类似的功能。2014年1月19日起發行的Linux内核3.13版则使用nftables取而代之,但仍然提供 iptables 命令做为兼容接口。[3] 概要![]() iptables、ip6tables等都使用Xtables框架。存在「表(tables)」、「链(chain)」和「规则(rules)」三个层面。 每个「表」指的是不同类型的数据包处理流程,如 filter表filter表是默认的表,如果不指明表则使用此表。其通常用于过滤数据包。其中的内建链包括:
nat表nat表如其名,用于地址转换操作。其中的内建链包括:
mangle表mangle表用于处理数据包。其和nat表的主要区别在于,nat表侧重连接而mangle表侧重每一个数据包。[5]其中内建链列表如下。
raw表raw表用于处理异常,有如下两个内建链:
命令示例防火墙示例一个典型的工作站的防火墙配置实例。超级用户(root)可以用" # iptables -L Chain INPUT(policy DROP) target prot opt source destination ACCEPT all—localhost.localdomain localhost.localdomain ACCEPT all—anywhere anywhere state RELATED,ESTABLISHED REJECT all—anywhere anywhere Chain FORWARD(policy DROP) target prot opt source destination Chain OUTPUT(policy ACCEPT) target prot opt source destination 以上配置允许本机连接所有外部的系统,拒绝(REJECT)或丢弃(DROP)任何发往本机的数据包,但是有以下例外(和 此时,来自外部的ping将没有回应: $ ping -c 1 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. --- 10.0.0.1 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms 外部尝试连接本机的HTTP端口(即TCP 80端口)将被拒绝连接: $ telnet 10.0.0.1 80 Trying 10.0.0.1... telnet: connect to address 10.0.0.1: Connection refused 但本机访问外部(OUTPUT)均正常,因为其链为空且默认策略为接受(ACCEPT);且本机不转发(FORWARD)数据包,因为其默认策略为丢弃(DROP)。需要额外注意的是,这里仅展示了IPv4的情况,若同时使用IPv6则需要另行配置ip6tables。 端口重定向示例iptables的重要功能之一是用于端口和/或地址的转换。如下示例展示了將預設HTTP埠的封包由TCP 80轉向8080埠。這樣,HTTP的守护进程(daemon)可以允許由一般用户權限啟動,而不需要對一般使用者無法將埠號綁在1024埠以下的限制的問題多加考慮。
如果有多个端口的数据需要转发到一个端口,则可调取“multiport”(多端口)模块,如下规则会将ens0接口上UDP端口66到77、88到99的数据包转向UDP端口443。
注意:如果你在你的電腦上面運行了這個指令,它只會對連到你的機器上的外部的IP發生效果。從本地端發起的連線不會遵循nat表上PREROUTING鏈的設置。如果你想讓本地端也遵循規則,你可以另外鍵入下面的指令:
這條規則會將lo介面上的封包輸出由80埠轉向到8080埠上面。 网络地址转换示例典型设置如办公室用小型局域网,由一台Linux主机作为路由器共享地址接入Internet。 假设局域网接口为eth0,地址使用192.168.0.0/24;而Internet接口为eth1,使用的地址为198.51.100.3。 在局域网用户访问Internet时,源地址需要被转换为198.51.100.3,则使用规则: iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to 198.51.100.3 若需要在局域网192.168.0.2上开启HTTP服务,则可以设置相应的DNAT服务,将访问外部TCP 80端口的数据包重定向: iptables -t nat -I PREROUTING -p tcp -d 198.51.100.3 --dport 80 -j DNAT --to 192.168.0.2 需要注意的是,转发操作需要在 其他控制界面前端控制介面及命令有很多第三方软件可以帮助设定iptables规则。前端介面像是Ncurses或圖型介面可以讓使用者用點選的方式產生許多簡單的規則。命令稿通常是參照Unix shell產生出來的(不過當然也有可能會使用其它種類型的命令稿),它們有的會用一些預先定義好的規則或簡單的範本來调用iptables或 此类前端装置如生成器(generator)或脚本(script)往往会被其模板限制,模板仅仅能使用用户定义规则并替换指定的部分,如只能替换端口或IP地址,同时,生成的规则往往难以达到最佳状态,需要进行进一步优化,如此会增加开发和运维的成本。如果用户想要了解iptables并且优化自己的规则,则需要自己创建规则。 前端的設定
其它的工具
Iptables/Netfilter圖表為了較好地了解一個封包穿越内核層的X表(Xtables)之表/鏈(table/chain),你可以參考下列圖表的使用: 參照
其它防火墻的解決方案外部連結
参考文献
|