iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

时间 -- ::  IT社区推荐资讯
原文 http://itindex.net/detail/47725-iptables-ip-地址
主题 iptables 网络地址转换 负载均衡
感谢此文原作者 转自:http://lesca.me/archives/iptables-examples.html 一、iptables:从这里开始 删除现有规则 iptables -F
(OR)
iptables --flush 设置默认链策略 iptables的filter表中有三种链:INPUT, FORWARD和OUTPUT。默认的链策略是ACCEPT,你可以将它们设置成DROP。 ? iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP #一般出站连接设置为ACEEPT,看需求 你需要明白,这样做会屏蔽所有输入、输出网卡的数据包,除非你明确指定哪些数据包可以通过网卡。 屏蔽指定的IP地址 以下规则将屏蔽BLOCK_THIS_IP所指定的IP地址访问本地主机: ? BLOCK_THIS_IP= "x.x.x.x" iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP (或者仅屏蔽来自该IP的TCP数据包) iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP 允许来自外部的ping测试 iptables -A INPUT -p icmp --icmp- type echo -request -j ACCEPT iptables -A OUTPUT -p icmp --icmp- type echo -reply -j ACCEPT 允许从本机ping外部主机 iptables -A OUTPUT -p icmp --icmp- type echo -request -j ACCEPT iptables -A INPUT -p icmp --icmp- type echo -reply -j ACCEPT 允许环回(loopback)访问 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT 二、iptables:协议与端口设定 允许所有SSH连接请求 本规则允许所有来自外部的SSH连接请求,也就是说,只允许进入eth0接口,并且目的端口为22的数据包 iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 允许从本地发起的SSH连接 本规则和上述规则有所不同,本规则意在允许本机发起SSH连接,上面的规则与此正好相反。 iptables -A OUTPUT -o eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 仅允许来自指定网络的SSH连接请求 以下规则仅允许来自192.168.100./24的网络: iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0 / --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 上例中,你也可以使用-s 192.168.100.0/255.255..0作为网络地址。当然使用上面的CIDR地址更容易让人明白。 仅允许从本地发起到指定网络的SSH连接请求 以下规则仅允许从本地主机连接到192.168.100./24的网络: iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0 / --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 允许HTTP/HTTPS连接请求 # .允许HTTP连接:80端口 iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT # .允许HTTPS连接:443端口 iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 允许从本地发起HTTPS连接 本规则可以允许用户从本地主机发起HTTPS连接,从而访问Internet。 iptables -A OUTPUT -o eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 类似的,你可以设置允许HTTP协议(80端口)。 -m multiport:指定多个端口
通过指定-m multiport选项,可以在一条规则中同时允许SSH、HTTP、HTTPS连接: iptables -A INPUT -i eth0 -p tcp -m multiport --dports ,, -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports ,, -m state --state ESTABLISHED -j ACCEPT 允许出站DNS连接 iptables -A OUTPUT -p udp -o eth0 --dport -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport -j ACCEPT 允许NIS连接 如果你在使用NIS管理你的用户账户,你需要允许NIS连接。即使你已允许SSH连接,你仍需允许NIS相关的ypbind连接,否则用户将无法登陆。NIS端口是动态的,当ypbind启动的时候,它会自动分配端口。因此,首先我们需要获取端口号,本例中使用的端口是853和850: rpcinfo -p | grep ypbind
然后,允许连接到111端口的请求数据包,以及ypbind使用到的端口: iptables -A INPUT -p tcp --dport -j ACCEPT iptables -A INPUT -p udp --dport -j ACCEPT iptables -A INPUT -p tcp --dport -j ACCEPT iptables -A INPUT -p udp --dport -j ACCEPT iptables -A INPUT -p tcp --dport -j ACCEPT iptables -A INPUT -p udp --dport -j ACCEPT 以上做法在你重启系统后将失效,因为ypbind会重新指派端口。我们有两种解决方法: .为NIS使用静态IP地址
.每次系统启动时调用脚本获得NIS相关端口,并根据上述iptables规则添加到filter表中去。 允许来自指定网络的rsync连接请求 你可能启用了rsync服务,但是又不想让rsync暴露在外,只希望能够从内部网络(192.168.101.0/)访问即可: iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0 / --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 允许来自指定网络的MySQL连接请求 你可能启用了MySQL服务,但只希望DBA与相关开发人员能够从内部网络(192.168.100.0/)直接登录数据库: iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0 / --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 允许Sendmail, Postfix邮件服务 邮件服务都使用了25端口,我们只需要允许来自25端口的连接请求即可。 iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 允许IMAP与IMAPS # IMAP:
iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT # IMAPS:
iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 允许POP3与POP3S # POP3:
iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT # POP3S:
iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 防止DoS攻击 iptables -A INPUT -p tcp --dport -m limit --limit /minute--limit-burst -j ACCEPT -m limit: 启用limit扩展
--limit /minute: 允许最多每分钟25个连接
--limit-burst : 当达到100个连接后,才启用上述25/minute限制 三、转发与NAT 允许路由 如果本地主机有两块网卡,一块连接内网(eth0),一块连接外网(eth1),那么可以使用下面的规则将eth0的数据路由到eht1: iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT DNAT与端口转发 以下规则将会把来自422端口的流量转发到22端口。这意味着来自422端口的SSH连接请求与来自22端口的请求等效。 # .启用DNAT转发 iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport -j DNAT --to-destination 192.168.102.37: # .允许连接到422端口的请求 iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT 假设现在外网网关是xxx.xxx.xxx.xxx,那么如果我们希望把HTTP请求转发到内部的某一台计算机,应该怎么做呢? iptables -t nat -A PREROUTING -p tcp -i eth0 -d xxx.xxx.xxx.xxx --dport -j DNAT --to 192.168.0.2: iptables -A FORWARD -p tcp -i eth0 -d 192.168.0.2 --dport -j ACCEPT 当该数据包到达xxx.xxx.xxx.xxx后,需要将该数据包转发给192.168.0.2的80端口,事实上NAT所做的是修改该数据包的目的地址和目的端口号。然后再将该数据包路由给对应的主机。
但是iptables会接受这样的需要路由的包么?这就由FORWARD链决定。我们通过第二条命令告诉iptables可以转发目的地址为192.168.0.:80的数据包。再看一下上例中422端口转22端口,这是同一IP,因此不需要设置FORWARD链。 SNAT与MASQUERADE 如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去: iptables -t nat -A POSTROUTING -s 10.8.0.0 / -o eth0 -j snat --to- source 192.168.5.3 对于snat,不管是几个地址,必须明确的指定要snat的IP。假如我们的计算机使用ADSL拨号方式上网,那么外网IP是动态的,这时候我们可以考虑使用MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.0 / .255.255. -o eth0 -j MASQUERADE 负载平衡 可以利用iptables的-m nth扩展,及其参数(--counter --every --packet x),进行DNAT路由设置(-A PREROUTING -j DNAT --to-destination),从而将负载平均分配给3台服务器: iptables -A PREROUTING -i eth0 -p tcp --dport -m state --state NEW -m nth --counter --every --packet -j DNAT --to-destination 192.168.1.101: iptables -A PREROUTING -i eth0 -p tcp --dport -m state --state NEW -m nth --counter --every --packet -j DNAT --to-destination 192.168.1.102: iptables -A PREROUTING -i eth0 -p tcp --dport -m state --state NEW -m nth --counter --every --packet -j DNAT --to-destination 192.168.1.103: 自定义的链 记录丢弃的数据包 # .新建名为LOGGING的链 iptables -N LOGGING # .将所有来自INPUT链中的数据包跳转到LOGGING链中 iptables -A INPUT -j LOGGING # .指定自定义的日志前缀"IPTables Packet Dropped: " iptables -A LOGGING -m limit --limit /min -j LOG --log-prefix"IPTables Packet Dropped: " --log-level # .丢弃这些数据包 iptables -A LOGGING -j DROP
   

iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链的更多相关文章

  1. linux使用iptables屏蔽ip地址

    一.iptables命令介绍: netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,在安装系统的时 ...

  2. 6.iptables常用规则

    开启ip段192.168.1.0/24端的80口 开启ip段211.123.16.123/24端ip段的80口 # iptables -I INPUT -p tcp --dport 80 -j DRO ...

  3. linux下通过iptables只允许指定ip地址访问指定端口的设置方法

    这篇文章主要介绍了linux下通过iptables只允许指定ip地址访问指定端口的设置方法,需要的朋友可以参考下. 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的 ...

  4. 解决redhat linux下IP地址可以ping通,域名无法ping通问题

    解决redhat linux下IP地址可以ping通,域名无法ping通 在/etc/resolv.conf中添点东西 格式如下: nameserver xxx.xxx.xxx.xxx nameser ...

  5. 包格式及IP地址,网络层协议

    包格式及IP地址,网络层协议 案例1:配置静态路由 案例2:配置浮动路由 案例3:配置多路由的静态路由 案例4:配置默认路由 1 案例1:配置静态路由 1.1 问题 配置路由接口IP地址并通过静态路由 ...

  6. (转)iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

    转自:http://lesca.me/archives/iptables-examples.html 本文介绍25个常用的iptables用法.如果你对iptables还不甚了解,可以参考上一篇ipt ...

  7. iptables常用规则

    删除现有规则 iptables -F (OR) iptables --flush 设置默认链策略 iptables的filter表中有三种链:INPUT, FORWARD和OUTPUT.默认的链策略是 ...

  8. iptables只允许指定ip地址访问指定端口

    首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清除预设表filter中使用者自定链中的规则 其次,设置只允许指定ip地址访问指定端口 ...

  9. C#判断ip地址是否ping的通

    Ping pingSender = new Ping(); PingReply reply = pingSender.Send("127.0.0.1",120);//第一个参数为i ...

随机推荐

  1. redigo简单理解

    package main import ( "fmt" "github.com/gomodule/redigo/redis") func main() { // ...

  2. 16.同步类容器Collections.synchronized

    voctor动态数组.同步类容器,底层实现基于:Collections.synchronized package demo5; import java.util.ArrayList; import j ...

  3. 预防U盘被病毒侵害的方法

    写在前面:此方法只能杜绝自己的u盘免收侵害,而不能杜绝自己的电脑免收其他u盘病毒的侵害,如果想知道如何让自己的电脑防止被u盘病毒侵害,可以阅读此文章:https://www.cnblogs.com/t ...

  4. TCP为何采用三次握手来建立连接,若采用二次握手可以吗?

    首先简单介绍一下TCP三次握手     在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_ ...

  5. Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误

    Android Studio 项目中集成百度地图SDK报以下错误: java.lang.UnsatisfiedLinkError: Native method not found: com.baidu ...

  6. dubbo-monitor安装监控中心,管理控制台安装

    一.安装监控中心 1.创建安装目录 2.解压 上传文件解压文件 解压 3.修改配置文件 4.启动 如果一直出现点.只需要加大内存即可,内存至少大于1024,然后reboot重启 5.测试 二.安装管理 ...

  7. 屏幕录像大师如何把LXE文件转换为EXE文件

    EXE 和 LXE 实际上是同一种格式,文件大小完全相同,可以快速相互转换.区别是EXE复制到其它电脑上可以直接播放,LXE需要播放器播放,我们提供LXE播放器,而且是完全免费的.EXE的好处是复制到 ...

  8. Cocos2d-x中点九图(Scale9Sprite)创建图片按钮

    1. 配置引擎根目录支持 C/C++->常规->附加包含目录->增加->$(EngineRoot) 2. 引入头文件 #include "cocos-ext.h&qu ...

  9. ES6 WeakMap Map 区别

    WeakMap与Map的区别 1.WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名. 2.WeakMap的键名所指向的对象,不计入垃圾回收机制. 示例: const wm ...

  10. 可拖拽的3D盒子

    代码地址如下:http://www.demodashi.com/demo/11453.html   一直想做一个立体的盒子,前段时间刚好看见掘金上有位朋友发了篇关于3d盒子的文章,看了决定自己做一下, ...