|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 865|回復: 0
打印 上一主題 下一主題

linux nat

[複製鏈接]

111

主題

1

好友

463

積分

中學生

Rank: 3Rank: 3

  • TA的每日心情
    開心
    2024-4-11 17:15
  • 簽到天數: 338 天

    [LV.8]以壇為家I

    推廣值
    0
    貢獻值
    22
    金錢
    169
    威望
    463
    主題
    111
    樓主
    發表於 2014-8-17 22:04:31
    (一)Iptables 的使用语法
    在使用iptables的NAT功能时,我们必须在每一条规则中使用"-t nat"显示的指明使用nat表。然后使用以下的选项::
    1. 对规则的操作
    加入(append) 一个新规则到一个链 (-A)的最后。
    在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。
    在链内某个位置替换(replace) 一条规则 (-R)。
    在链内某个位置删除(delete) 一条规则 (-D)。
    删除(delete) 链内第一条规则 (-D)。
    2. 指定源地址和目的地址
    通过--source/--src/-s来指定源地址(这里的/表示或者的意思,下同),通过--destination/--dst/-s来指定目的地址。可以使用以下四中方法来指定ip地址:
    a. 使用完整的域名,如“www.linuxaid.com.cn”;
    b. 使用ip地址,如“192.168.1.1”;
    c. 用x.x.x.x/x.x.x.x指定一个网络地址,如“192.168.1.0/255.255.255.0”;
    d. 用x.x.x.x/x指定一个网络地址,如“192.168.1.0/24”这里的24表明了子网掩码的有效位数,这是 UNIX环境中通常使用的表示方法。
    缺省的子网掩码数是32,也就是说指定192.168.1.1等效于192.168.1.1/32。
    3. 指定网络接口
    可以使用--in-interface/-i或--out-interface/-o来指定网络接口。从NAT的原理可以看出,对于PREROUTING链,我们只能用-i指定进来的网络接口;而对于POSTROUTING和OUTPUT我们只能用-o指定出去的网络接口。
    4. 指定协议及端口
    可以通过--protocol/-p选项来指定协议,如果是udp和tcp协议,还可--source-port/--sport和 --destination-port/--dport来指明端口。

    (二)iptabls的使用实例:
    假如有一个广域网的ip地址为a.b.c.d 网关a.b.c.x 掩码 255.255.255.252
    局域网ip地址为192.168.0.1-192.168.0.255 网关 192.168.0.1
    软件环境为:Linux7.2 选择server安装
    指定eth0:a.b.c.d eth1:192.168.0.1
    添加路油表
    vi /etc/sysconfig/static-routes
    etho net a.b.c.d netmask 255.255.255.252 gw a.b.c.x
    eth1 net 192.168.0.1netmask 255.255.255.0 gw 192.168.0.1
    指定网关
    vi /etc/sysconfig/network
    NETWORKING=yes
    GATEWAYDEV=eth0
    GATEWAY=a.b.c.x
    HOSTNAME=(主机名字)
    起用路油
    vi /etc/sysctl.conf
    net.ipv4.ip_forward=1
    net.ipv4.conf.default.rp_filter=1
    kernel.core_uses_pid=1
    kernel.sysrq=0
    配置iptables的脚本
    建立rc.fw
    #for this to run iptables firewall
    !/bin/sh
    /sbin/modprobe ip_tables
    /sbin/modprobe ip_nat_ftp
    /sbin/modprobe ip_conntrack_ftp
    /sbin/iptables -F
    /sbin/iptables -F -t nat
    /sbin/iptables -X
    /sbin/iptables -Z
    echo"1">/proc/sys/net/ipv4/ip_forward
    /sbin/iptables -P INPUT ACCEPT
    /sbin/iptables -P FORWARD ACCEPT
    /sbin/iptables -P OUTPUT ACCEPT
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT
    上面这些是没有任何限制的iptables要想有些安全限制可以自行
    新的联接
    (三)端口的转发
    假如内部有一个www 服务器 一个ftp服务器
    地址分别是192.168.0.8(www)
    192.168.0.9(ftp)
    在上面的脚本里最后添加
    iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 –j DNAT --to 192.168.0.8:80
    iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.0.9:21
    附录:
    -p 指定协议(--protocol)
    --dport 指明端口(--source-port/--sport和 --destination-port)
    -i 或者-o 指定网络接口(PREROUTING链用-i POSTROUTING 用-o)
    -s 指明源地址(--source/--src/源地址destination/--dst/目的地址)
    -A 加入一个新规则到一个链(一般写到最后面)(append)
    -I 在链内某个位置插入(insert)一般最后面
    -R 在链内某个位置替换一条规则
    -D 删除链内第一条规则(delete)
    -d 指明目的地址
    ——————————————————————————————————————
    下面是一个iptable的脚本没有安全性能
    touch /var/lock/subsys/local
    #for this to run iptables firewall
    !/bin/sh
    /sbin/modprobe ip_tables
    /sbin/modprobe ip_nat_ftp
    /sbin/modprobe ip_conntrack_ftp
    /sbin/iptables -F
    /sbin/iptables -F -t nat
    /sbin/iptables -X
    /sbin/iptables -Z
    /sbin/iptables -P INPUT ACCEPT
    /sbin/iptables -P FORWARD ACCEPT
    /sbin/iptables -P OUTPUT ACCEPT

    echo"1">/proc/sys/net/ipv4/ip_forward
    /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    /sbin/iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT

    ————————————————————————————————————————
    iptables 过滤规则
    # 过滤表规则

    *filter

    # 默认彻略
    :FORWARD DROP [ ]
    :INPUT DROP [ ]
    :OUTPUT ACCEPT [ ]

    # 定义新链
    -N ICMP_FORWARD
    -N TCP_FORWARD
    -N UDP_FORWARD
    -N ICMP_INPUT
    -N TCP_INPUT
    -N UDP_INPUT

    # Fix a bug
    -A OUTPUT -p icmp -m state --state INVALID -j DROP

    # 以下是FORWARD链的规则
    # 若是ICMP协议则跳到 ICMP_FORWARD
    -A FORWARD -p icmp -j ICMP_FORWARD
    # 若是TCP协议则跳到 TCP_FORWARD
    -A FORWARD -p tcp -j TCP_FORWARD
    # 若是UDP协议则跳到 UDP_FORWARD
    -A FORWARD -p udp -j UDP_FORWARD
    # 允许碎片通过的速率200个/s,从200开始计数
    -A FORWARD -f -m limit --limit 200/s --limit-burst 200 -j ACCEPT
    # 不匹配FORWARD链的所有规则,丢弃数据包,结束FORWARD链
    -A FORWARD -j DROP

    # 以下是FORWARD链中针对ICMP协议的规则
    # 从内网到外网的放行
    -A ICMP_FORWARD -p icmp -s 192.168.0.0/24 -i eth0 -o ppp+ -j ACCEPT
    # 从外网进来的回应包放行
    -A ICMP_FORWARD -p icmp -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
    # 丢弃所有不匹配的ICMP数据包,结束FORWARD链
    -A ICMP_FORWARD -p icmp -j DROP

    # 以下是FORWARD链中针对TCP协议的规则
    # 允许内网1024以上的端口连接外网
    -A TCP_FORWARD -p tcp -s 192.168.0.0/24 -m tcp --sport 1024: -i eth0 -o ppp+ -j ACCEPT
    # 允许内网进行主动式的FTP
    -A TCP_FORWARD -p tcp -m tcp --sport 21 --dport 1024: -m state --state ESTABLISHED -i ppp+ -j ACCEPT
    -A TCP_FORWARD -p tcp -m tcp --sport 20 --dport 1024: -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
    # 允许外网进来的回应包通过
    -A TCP_FORWARD -p tcp -m state --state ESTABLISHED -m tcp --dport 1024: -i ppp+ -j ACCEPT
    # 丢弃所有不匹配的TCP数据包,结束FORWARD链
    -A TCP_FORWARD -p tcp -j DROP

    # 以下是FORWARD链中针对UDP协议的规则
    # 允许内网1024以上的端口连接外网
    -A UDP_FORWARD -p udp -s 192.168.0.0/24 -m udp --sport 1024: -i eth0 -o ppp+ -j ACCEPT
    # 允许外网中指明的DNS服务器进行域名解析
    -A UDP_FORWARD -p udp -s 202.96.96.68 -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
    -A UDP_FORWARD -p udp -s 202.96.*.* -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
    # 开放IRC OICQ 端口
    -A UDP_FORWARD -p udp -m multiport --source-port 4000,8000 -m udp --dport 1024: -i ppp+ -j ACCEPT
    # 允许从外网进来的UDP回应包通行
    -A UDP_FORWARD -p udp -m state --state ESTABLISHED,RELATED -m udp --dport 1024: -i ppp+ -j ACCEPT
    # 丢弃所有不匹配的UDP数据包,结束FORWARD链
    -A UDP_FORWARD -p udp -j DROP

    # 以下开始是对网关服务器的匹配规则

    # 允许数据包进入本地回环接口
    -A INPUT -p all -i lo -j ACCEPT

    # 若是ICMP协议则跳到ICMP_INPUT进行规则匹配
    -A INPUT -p icmp -j ICMP_INPUT
    # 若是TCP协议则跳到TCP_INPUT进行规则匹配
    -A INPUT -p tcp -j TCP_INPUT
    # 若是UDP协议则跳到UDP_INPUT进行规则匹配
    -A INPUT -p udp -j UDP_INPUT
    # 允许碎片通过的速率200个/s,从200开始计数
    -A INPUT -f -m limit --limit 200/s --limit-burst 200 -j ACCEPT
    # 不匹配INPUT链的所有规则,丢弃数据包,结束INPUT链
    -A INPUT -j DROP

    # 以下是INPUT链中针对ICMP协议的规则
    # 允许从内网来的ICMP数据包
    -A ICMP_INPUT -p icmp -i eth0 -j ACCEPT
    # 允许从外网来的ICMP回应包通行
    -A ICMP_INPUT -p icmp -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
    # 丢弃所有不匹配的ICMP数据包,结束INPUT链
    -A ICMP_INPUT -p icmp -j DROP

    # 以下是INPUT链中针对TCP协议的规则
    # 对内网机器提供 http https 网上邻居 透明代理服务
    -A TCP_INPUT -p tcp -s 192.168.0.0/24 -m multiport --destination-port 80,443,137,138,139,8080 -i eth0 -j ACCEPT
    # 允许服务器以主动方式连接外网的FTP服务器
    -A TCP_INPUT -p tcp -m tcp --sport 21 --dport 1024: -m state --state ESTABLISHED -i ppp+ -j ACCEPT
    -A TCP_INPUT -p tcp -m tcp --sport 20 --dport 1024: -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
    # 提供 ssh smtp pop3 http https 服务
    -A TCP_INPUT -p tcp -m multiport --destination-port 22,25,110,80,443 -j ACCEPT
    # 拒绝外网主动连接本服务器
    -A TCP_INPUT -p tcp -m tcp --syn -i ppp+ -j DROP
    # 允许进来的回应包通过
    -A TCP_INPUT -p tcp -m state --state ESTABLISHED -m tcp --dport 1024: -j ACCEPT
    # 丢弃所有不匹配的TCP数据包,结束INPUT链
    -A TCP_INPUT -p tcp -j DROP

    # 以下是INPUT链中针对UDP协议的规则
    # 允许外网中指明的DNS服务器进行域名解析
    -A UDP_INPUT -p udp -s 202.96.96.68 -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
    -A UDP_INPUT -p udp -s 202.96.*.* -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
    # 为内网的机器提供DNS和SAMBA服务
    -A UDP_INPUT -p udp -s 192.168.0.0/24 -m multiport --destination-port 53,137,138,139 -i eth0 -j ACCEPT
    # 允许服务器作为samba client
    -A UDP_INPUT -p udp -s 192.168.0.0/24 -m udp --sport 137:139 --dport 1024: -i eth0 -j ACCEPT
    # 允许进来的回应包通过
    -A UDP_INPUT -p udp -m state --state ESTABLISHED,RELATED -m udp --dport 1024: -j ACCEPT
    # 为内网的机器提供DHCP服务
    -A UDP_INPUT -p udp -m udp --sport 68 --dport 67 -i eth0 -j ACCEPT
    # 丢弃所有不匹配的UDP数据包,结束INPUT链
    -A UDP_INPUT -p udp -j DROP

    COMMIT


    # 路由表规则

    *nat

    # 默认彻略
    :PREROUTING ACCEPT [ ]
    :POSTROUTING ACCEPT [ ]
    :OUTPUT ACCEPT [ ]

    # 为内网机器使用squid透明代理进行端口重定向
    -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.1 -m tcp --dport 80 -j REDIRECT --to-ports 8080
    # 对内网机器应用IP伪装
    -A POSTROUTING -o ppp+ -j MASQUERADE

    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-11-1 10:23 , Processed in 0.016935 second(s), 17 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部