iptables之实例

实例:
    #iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -j DROP 源地址为172.16.0.0网段的,访问172.16.100,7的数据包都丢弃。

#iptables  -L -n 查看filter表的规则

#iptables -t nat -L -n 查看nat表中的规则

#iptables  -A INPUT -m state --state NEW,ESTABLISHED-j ACCEPT 显示扩展,允许连接状态为NEW和ESTABLISHED的数据包进入本机

1.本机ip为172.16.100.7,有sshd服务,监听在tcp22端口,放行172.16.0.0对本机sshd服务的访问
        #iptables -t filter -A INPUT  -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22  -j ACCEPT
        #iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT

2.修改规则默认策略为DROP,只开放web服务:
        #iptables -P INPUT DROP
        #iptables -P OUTPUT DROP
        #iptables -P FORWARD DROP
        #iptables -I INPUT -d 172.16.100.7 -tcp -dport 80 -j ACCEPT
        #iptables -I OUTPUT -s 172.16.100.7 -tcp -sport 80 -j ACCEPT

3.允许本地io接口的ping
        #iptables -A INPUT  -s 127.0.0.1 -d 127.0.0.1 -i io -j ACCEPT
        #iptables -A OUTPUT  -s 127.0.0.1 -d 127.0.0.1 -o io -j ACCEPT

4.允许本机对外ping
        #iptables -A OUTPUT -s 192.168.100.7 -p icmp -icmp-type 8 -j ACCEPT
        #iptables -A INPUT -d 192.168.100.7 -p icmp -icmp-type 0 -j ACCEPT

5.允许外部ping本机
        #iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -J ACCEPT
        #iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 0 -J ACCEPT

6.假设在172.16.1007上搭建了DNS服务,开放对应端口提供服务

为客户端提供DNS解析:

#iptables -A INPUT -d 172.16.100.7 -p udp -dport 53 -j ACCEPT
        #iptables -A OUTPUT -s 172.16.100.7 -p udp -sport 53 -J ACCEPT

向其他DNS服务器查询:
        #ptables -A INPUT -d 172.16.100.1 -p udp -sport 53 -j ACCEPT  接受其他DNS的响应,数据包源端口为53
        #ptables -A OUTPUT  -s 172.16.100.7  -p udp -dport 53 -j ACCEPT 向其他DNS发送请求,数据包目标端口为53

#iptables -A INPUT -d 172.16.100.7 -p tcp -dport 53 -j ACCEPT
        #iptables -A OUTPUT -s 172.16.100.7 -p tcp -sport 53 -J ACCEPT
        #ptables -A INPUT -d 172.16.100.7 -p  tcp -sport 53 -J ACCEPT
        #ptables -A OUTPUT -s 172.16.100.7 -p tcp -dport 53 -J ACCEPT

7.保存规则到默认配置文件:
        #service iptables save

8.自定义保存配置文件并装载:
        #iptables-save > /etc/sysconfig/iptables.test
        #iptables-restore < /etc/sysconfig/iptables.test

9.清空所有规则:
        #iptables -F

10.使用连接状态检测方式改写sshd和httpd规则
        只有状态为NEW和ESTABLISED的数据包可以进入本机,只有状态为ESTABLISHED的数据包可以从本机出去。其余数据包均丢弃。

此规则使服务器只能响应客户端请求,不主动发出请求。保证了服务器是被动连接。提高了安全性。

#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT 连接状态为NEW和
        ESTABLISHED的数据包允许进入本机
        #iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 连接状态为ESTABLISHED的数据包允许从本机出去,其他状态则不允许。

#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
        #iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

#iptables -P INPUT DROP 修改默认规则
        #iptables -P OUTPUT DROP

11.临时修改修改ip_conntrack的max值和缓存时间,否则连接数过大则超过max的连接则会被拒绝。
        #sysctl -w net.ipv4.ip_conntrack_max=65536 默认为32768
        #sysctl -w net.ipv4.ip_conntrack_tpc_timeout_established=86400

12.永久修改ip_conntrack的相关值
        #vim /etc/sysctl.conf
            net.ipv4.ip_conntrack_max=65536
            net.ipv4.ip_conntrack_tpc_timeout_established=86400

13.允许外部ping本机:
        #iptables -A INPUT  -d 172.16.100.7 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
        #iptables -A OUTPUT  -s 172.16.100.7 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

14.合并OUTPUT追踪规则:
        #iptable -I  OUTPUT -s 172.16.100.7  -m state --state ESTABLELISHED -j ACCEPT 只要符合源地址为172.16.100.7并且连接状态为ESTABLISHED的数据包均放行。
        #iptable -D OUTPUT 2 删除其他规则
        #iptable -D OUTPUT 2
        #iptable -D OUTPUT 2
        #iptables -L -n --line-nubmers

15.假设172.16.100.7上有假设ftp服务器,允许提供ftp服务:

这里ftp一般设置成主动模式,即开放20,21端口。被动模式开放端口太多,规则不好定义。
        先加载ip_conntrack_ftp 和ip_nat_ftp模块到内核中
        #vim /etc/sysconfig/iptables-config
            IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

#iptables -A INPUT -d 172.16.100.7 -p tcp -dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 允许状态为NEW和ESTABLISHED的,目标地址为172.16.100.7,端口为22的ftp协议数据包进入本机。

#iptables -I OUTPUT  -s 172.16.100.7 -p tcp  -m state --state ESTABLISHED,RELATED -j ACCEPT 允许状态为ESTABLISHED和RELATED的数据包从本机出去,包括协议和数据。

#iptables -I INPUT -d 172.16.100.7 -p -tcp -m state --state ESTABLISHED,RELATED -j ACCEPT  允许状态为ESTABLISHED和RELATED的ftp数据包进入本机本机。

若ftp的账号储存在mysql上,则需要允许io回环,否则无法连接mysql进行账号验证。
        #iptables -A INPUT  -i io -j ACCEPT 
        #iptables -A OUTPUT -o io -j ACCEPT

16.多端口匹配
        使用多端口匹配可以将多个条目合并,可以提高匹配效率。
        将sshd、vsftpd、httpd进行多端口合并。

#iptables -F
        #iptables -I INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,REALTED -j ACCEPT
        #iptables  -I INPUT 2 -d 172.16.100.7 -p tcp -m multiport --destination 21,22,80 -m state --state NEW -j ACCEPT

#iptables -I OUTPUT  -s 172.16.100.7 -p tcp  -m state --state ESTABLISHED,RELATED -j ACCEPT

#iptables -A INPUT  -i io -j ACCEPT  
        #iptables -A OUTPUT -o io -j ACCEPT

17.匹配条件取反
        #iptables -A INPUT -d ! 172.16.100,7 -j ACCEPT 表示除目标地址为172.16.100.7的数据包允许进入本机

18.指定ip组;
        #iptables -A INPUT  -p tcp -m iprange 172.16.100.3-172.16.100.10 -j ACCEPT

19.限定连接服务器的tcp连接数为5个:
        #iptables -A INPUT -p tcp -d 172.16.100.7 --dport 80 -m connlimit  ! --connlimit-above 5 -j ACCEPT
        或
        #iptables -A INPUT -p tcp -d 172.16.100.7 --dport 80 -m connlimit  --connlimit-above 5 -j REJECT

20.限定ping请求的速率:
        #iptables -A OUTPUT  -s 127.16.100.7 -m state --state RELATED,ESTABLISHED -J ACCEPT
        #iptables -I INPUT -p icmp --icmp-type 8   -d 172.16.100.7 -m limit --limit 5/minute [--limit-burst 5] -j ACCEPT 指定进入本机的ping请求为每分钟5个 ,每分钟内最高可以同时请求5个。--limit-burst可以不指定,默认为5。

21.指定字符串限定用户访问
        #iptables  -I OUTPUT -s 172.16.100.7 -m string --algo kmp --string “test” -j REJECT  响应数据包中包含test字符的都拒绝

22.自定义日志记录功能
        日志的条目一定要在对应条目的上方才能被正确匹配到。

以自定义外部主机允许ping为例

#iptables  -I INPUT 3 -d 172.16.100.7 -p icmp -j LOG  --log-prefix  "ping log"

#iptables -I INPUT 4 -d 172.16.100.7 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT

#cat /var/log/messages |grep "ping log"

23.使用自定义链
        自定义链名为test。自定义链要放在列表的最前,调用完毕后返回列表继续匹配。
        #iptables -N test 创建自定义链test
        #iptables -A test -d 255.255.255.255 -p icpm -j DROP 添加规则
        #iptables -A test -d 172.16.100.7 -j RETURN  放在最后,跳转回主链

#iptables -I INPUT 1 -j test 调用test链

24.防止DOS攻击。

是使用recent扩展来控制连接数。以sshd服务为例

#iptables -I INPUT  2 -d 172.116.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP 将目标地址是172.16.100.7,端口为tcp协议的22号,tcp连接个数大于3的tcp连接都丢弃。
        #iptables -I INPUT 3 -d 172.116.100.7 -p tcp --dport 22 -m recent  --set --name sshconn -m state --state NEW 将目标地址是172,16,100.7,端口为tcp协议的22号,建立名为sshconn的清单,将状态是NEW对应的ip地址记录在sshconn中。
        #iptables -I INPUT 4 -d 172.116.100.7 -p tcp --dport 22 -m recent --update --second 300 --hitconut 3 --name sshconn -j DROP 将目标地址是172,16,100.7,端口为tcp协议的22号,sshconn清单中符合300秒内新建连接数于或等于3的数据包丢弃。即只允许每个ip地址对sshd服务建立2个连接。第3个连接请求将被拒绝。

25.启用网卡转发
        #vim /etc/sysctl.conf
            net.ipv4.ip_forward = 1
        #sysctl -p

26.源地址转换。

假设该网关内有2张网卡,enoin0的IP为192.168.10.1,enoout0的IP为 123.123.0.1,内网为192.168.10.0/24。外网服务器ip为123.123.0.5,内网主机ip为192.168.10.2。

现允许192.168.10.2访问123.123.0.5。

#iptables -t nat -A POSTROUTING -o enoout -s 192.168.10.0/24 -j SNAT --to-source 123.123.0.1

假设网关上有enoout0-enoout3多块网卡,ip地址位123.123.0.1-123.123.0.4。多源地址转换需要配合负载均衡等设备配合才能正常使用,因为数据包出去的端口和回来的端口不一定相同。

#iptables -t nat -A POSTROUTING -o enoout -s 192.168.10.0/24 -j SNAT --to-source 123.123.0.1-123.123.0.4

27.禁止内网主机ping网关,同时开放httpd服务。
        对于网关来说,对icmp报文提供转发,不涉及其他表。

#iptables -A FORWARD -s 192.168.10.0/24 -p icmp -j REJECT
        #iptables -A FORWARD -m state --state ESTABLISHED -j ACCETP
        #iptables -A FORWARD -m state --state NEW -s 192.168.10.0/24 --dport 80 -J ACCEPT

28.允许内网ping网关。
        #iptables -A FORWARD -s 192.168.10.0/24 -p icmp --icmp-type 8 --m state --state NEW -J ACCEPT

29.允许访问ftp,提前加载对应内核模块(ip_nat_ftp)
        #iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 --m state --state NEW -J ACCEPT
        #iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

30.目标地址转换。

网关内有2张网卡,enoin0的IP为192.168.10.1,enoout0的IP为 123.123.0.1,内网为192.168.10.0/24。外网客户端ip为123.123.0.5,内网服务器ip为192.168.10.2,端口为80。

现允许外网客户端访问内网服务器。

#iptables -t nat -A PREROUTING -d 123.123.0.1  -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2

31.端口转换。

接上题,192.16.10.1的httpd端口为8080。
        #iptables -t nat -R PREROUTING 1 -d 123.123.0.1  -p tcp --dport 80 -j DNAT --to-destination 192.168.10.2:8080

32.接上题,在网关上使用字符串匹配,丢弃包含test字符串的数据包。
        #iptables -A FORWARD   -m string --algo kmp --string “test” -j DROP

33.假设192.168.10.2为内网主机,123.123.0.1为外网网关 。

使用l7扩展在8点到12点禁用qq
        #iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT -to-source 123.123.0.1
        #iptables -A  FORWARD  -s 192.168.10.0/24 -m layer7 --l7proto  qq  -m time --timestart 08:00 --timestop 12:00  -j REJECT

时间: 2024-08-25 05:54:23

iptables之实例的相关文章

iptables经典实例

Q:一局域网192.168.1.0/24,有web和ftp服务器192.168.1.10.192.168.1.11,网关linux,内网eth0,IP为192.168.1.1,外网eth1,IP为a.b.c.d,怎样作NAT能使内外网都能访问公司的服务器? A:# web# 用DNAT作端口映射iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10# 用SNAT作源地址转换(关键),

常用iptables配置实例

常用iptables配置实例 iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙.NAT.咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习iptables的详细用法. 1.删除已有规则 在新设定iptables规则时,我们一般先确保旧规则被清除,用以下命令清除旧规则: iptables -F (or iptables --flush) 2.设置chain策略 对于filter table,默认的chain策略

RedHat iptables配置实例

iptables配置实例 iptables 基本命令使用举例一.链的基本操作  1.清除所有的规则.  1)清除预设表filter中所有规则链中的规则.  # iptables -F  2)清除预设表filter中使用者自定链中的规则.  #iptables -X  #iptables -Z  2.设置链的默认策略.一般有两种方法.  1)首先允许所有的包,然后再禁止有危险的包通过放火墙.  #iptables -P INPUT ACCEPT  #iptables -P OUTPUT ACCEP

9个常用iptables配置实例

iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙.NAT.咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习iptables的详细用法. 1.删除已有规则 在新设定iptables规则时,我们一般先确保旧规则被清除,用以下命令清除旧规则: iptables -F (or iptables --flush) 2.设置chain策略 对于filter table,默认的chain策略为ACCEPT,我们可以通过以

iptables 脚本实例

#!/bin/sh # # firewall starting firewall # # chkconfig: 2345 98 01 # description: setting firewall ########################################################################## # 设定参数 #####################################################################

一个简单的防火墙(iptables)实例

#!/bin/bash##for centos7 iptables table##yum install iptables-services -y###规则的排列是有顺序的##清除默认规则 iptables -Fiptables -Xiptables -Z #设置策略 iptables -P INPUT DROP#iptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPT #定制规则iptables -A

【转载】shell实例手册

原文地址:shell实例手册  作者:没头脑的土豆 shell实例手册 0说明{ 手册制作: 雪松 更新日期: 2013-12-06 欢迎系统运维加入Q群: 198173206 请使用"notepad++"打开此文档,"alt+0"将函数折叠后方便查阅 请勿删除信息,转载请说明出处,抵制不道德行为. 错误在所难免,还望指正! # shell实例手册最新下载地址: http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02

iptables防火墙原理详解

1. netfilter与iptables Netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤.数据包处理.地址伪装.透明代理.动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤.包速率限制等.Iptables/Netfilter的这些规则可以通过灵活组合,形

CentOS7 iptables

在CentOS7上默认安装的是Firewalld防火墙,虽然在新的firewalld中对流量的语法和控制更加的简单,也能让管理者更加清晰的控制访问策略,但是对于大部分习惯使用iptables的用户来说,使用原有的iptables 来控制更加顺手. 在使用iptables 之前需要安装iptables服务. yum install iptables-services 在没有安装iptables服务时,是没有/etc/sysconfig/iptables文件的,执行iptables-save也无法保