iptables书写思路顺序

1.协议 icmp
2.哪个功能和目标:过滤,拒绝
3.数据包流向:外到内
4.哪个链适合:越早越好,INPUT
5.源地址和目标地址

练习1.禁止某些主机或网络访问本机


禁止192.168.56.14网段的主机ping本主机
iptables -t filter -A INPUT -p icmp -s 192.168.56.14 -d 192.168.56.11 -j DROP
watch -n 1 'iptables -t filter -L -v -n' 实时查看包统计

禁止192.168.56.1访问本机网页 
iptables -t filter -A INPUT -p tcp -s 192.168.56.1 -d 192.168.56.14 --dport 80 -j DROP

练习2.练习filter的各类匹配规则写法


对filter的规则优先级按从低到高为:首先使用通策略,其次对外开放80端口访问,最后禁止破解方的IP,
查看和导出规则,监控包统计
iptables -L -n -v -x
iptables-save > /etc/sysconfig/iptables
cat /etc/sysconfig/iptables
watch -n 1 'iptables -t filter -L -nxv --line-numbers'
清空filter表
iptables -F
iptables -Z

清空filter表前先设置默认策略,否则登录不了

添加ssh远程访问规则
iptables -t filter -A INPUT -p tcp -i eth0 -s 192.168.56.0/24 -d 192.168.56.14 --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -o eth0 -s 192.168.56.14 -d 192.168.56.0/24 --sport 22 -j ACCEPT

添加filter表默认规则
iptables -t filter -P INPUT DROP 
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

更正规则ssh访问规则
iptables -t filter -R OUTPUT 1 -s 192.168.56.14 -d 192.168.56.0/24 -o eth0 -p tcp --sport 22 -j ACCEPT

添加回环接口访问
iptables -t filter -I INPUT 1 -i lo -j ACCEPT
iptables -t filter -I OUTPUT 1 -o lo -j ACCEPT

禁止基于非法TCP标志位的连接
iptables -t filter -I INPUT -p tcp --tcp-flags all all -j DROP
iptables -t filter -I INPUT -p tcp --tcp-flags all none -j DROP

放行ssh第一次握手,如果启用连接追踪功能,新写法更简洁
iptables -t filter -I INPUT 3 -p tcp --dport 22 --tcp-flags syn,ack,rst,fin syn -j ACCEPT
iptables -t filter -R INPUT 3 -p tcp --dport 22 --syn  -j ACCEPT 简单写法

放行DNS查询
iptables -t filter -A OUTPUT -p udp -s 192.168.8.14 --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp -d 192.168.8.14 --dport 53 -j ACCEPT
dig -t A www.baidu.com @192.168.8.1

开放ping
iptables -t filter -I INPUT 3 -p icmp -d 192.168.56.14 -j ACCEPT
iptables -t filter -I OUTPUT -p icmp -s 192.168.56.14 -j ACCEPT

只允许自己ping别人,不允许别人自己
iptables -t filter -D INPUT 3
iptables -t filter -D OUTPUT 1
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -s 192.168.56.14 -j ACCEPT
iptables -t filter -I INPUT 3 -p icmp --icmp-type 0 -d 192.168.56.14 -j ACCEPT 


同时只开放ssh和web访问
iptables -t filter -I INPUT -p tcp -m multiport --dports 22,80 -d 192.168.56.14 -j ACCEPT
iptables -t filter -I OUTPUT -p tcp -m multiport --sports 22,80 -s 192.168.56.14 -j ACCEPT
iptables -t filter -D INPUT 2 执行多次
iptables -t filter -D OUTPUT 2 执行多次

允许一批连续IP的主机对本机的telnet
iptables -t filter -A INPUT -p tcp --dport 23 -m iprange --src-range 192.168.56.1-192.168.56.100 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 23 -m iprange --dst-range 192.168.56.1-192.168.56.100 -j ACCEPT

禁止访问敏感网页,含sex字眼的
[root@node1 ~]# cd /var/www/html
[root@node1 html]# echo "this is a sex page" > test.html
http://192.168.56.14/test.html
iptables -t filter -I OUTPUT -p tcp --sport 80 -m string --algo kmp --string "sex" -j DROP
http://192.168.56.14/test.html 注意缓存问题

禁止周一、二、四、五的8:20到18:40访问web服务器
iptables -t filter -I INPUT -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j DROP
iptables -t filter -D INPUT 1 测试完,删掉它

访问本机ssh服务,每IP不能超过4个并发
iptables -t filter -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 4 -j DROP

限制外部每分钟发20个ping包(允许超出5个包)到本机
iptables -t filter -A INPUT -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT

使用连接追踪功能改写只允许ssh和http连接进来
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -F
iptables -t filter -A INPUT -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
iptables -t filter -I INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -t filter -I OUTPUT -m state --state ESTABLISHED -j ACCEPT 放行所有的响应,效率超高
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP

使用连接追踪功能放行ping
iptables -t filter -A INPUT -p icmp --icmp-type 8 -j ACCEPT
注意这里不用再增加响应的放行规则,因为上一步的规则已经做了

使用连接追踪功能放行ftp服务

安装vfstpd
yum -y install vsftpd
service vsftpd start
装载内核支持模块:
cd /lib/modules/2.6.32-358.el6.x86_64/kernel/net/netfilter/
ls *ftp*
nf_conntrack_ftp.ko  nf_conntrack_tftp.ko
modprobe nf_conntrack_ftp
添加规则:
放行21端口的NEW状态连接、放行所有ESTABLISH和RELATED状态的请求报文、放行ESTABLISH和RELATED状态的响应报文
iptables -t filter -R INPUT 2 -p tcp -m multiport --dports 22,80,21 -m state --state NEW -j ACCEPT
iptables -t filter -R INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -R OUTPUT 1 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
测试:
ftp://192.168.56.14/

用自定义规则的方式,禁止一批连续IP的主机对本机的web访问

设置默认规则放通
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -F

添加web自定义规则
iptables -t filter -N http_in
iptables -t filter -A http_in -p tcp -d 192.168.56.14 --dport 80 -m iprange --src-range 192.168.56.1-192.168.56.100 -j DROP
iptables -t filter -A http_in -p tcp -d 192.168.56.14 --dport 80 -m state --state NEW -j ACCEPT
iptables -t filter -A http_in -j RETURN 在自定义链中无法匹配时返回主链

在INPUT链放行所有已建立连接
iptables -t filter -A INPUT -m state --state established -j ACCEPT

添加ssh自定义规则
iptables -t filter -N ssh_in
iptables -t filter -A ssh_in -p tcp -d 192.168.56.14 --dport 22 -m state --state NEW -j ACCEPT

在OUTPUT链放行所有已建立连接
iptables -t filter -A OUTPUT -m state --state established -j ACCEPT

在INPUT上调用http_in链
iptables -t filter -A INPUT -p tcp -d 192.168.56.14 --dport 80 -j http_in

在INPUT上调用ssh_in链
iptables -t filter -A INPUT -p tcp -d 192.168.56.14 --dport 22 -j ssh_in

设置默认规则禁止
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP

测试:
curl 
-i 显示响应头部和实体
-I 显示响应头部
-dump 显示响应实体
curl -I http://192.168.56.14/test.html

删除http_in自定义链的顺序
iptables -t filter -D INPUT 2
iptables -t filter -F http_in
iptables -t filter -X http_in

重命名自定义链
iptables -t filter -N http_in
iptables -t filter -E http_in web_in

练习3:安装telnet服务


安装并启动服务
yum -y install xinetd
yum -y install telnet-server
yum -y install telnet
vim /etc/xinetd.d/telnet
disable         = no
service xinetd start

更改telnet服务端口号:
vim /etc/services
telnet          23/tcp
telnet          23/udp

更多/etc/xinetd.d/telnet选项说明
# 先针对对内的较为松散的限制来设定
bind       = 210.45.160.17 只允许经由这个适配卡的封包进来
only_from    = 210.45.160.0/24 只允许 210.45.160.0/24 这个网段的主机联机进来使用 telnet 的服务
only_from    = .edu.cn <==重复设定,只有教育网才能联机!
no_access    = 192.168.25.{10,26} <==不许这些 PC 登入
access_times  = 1:00-9:00 20:00-23:59 <==每天只有这两个时段开放服务


练习4:配置主机作为路由网关


环境:
网络A
客户端c:192.168.60.20/24
路由网关r的地址1: 192.168.60.11/24
网络B
服务端s:192.168.56.20/24
路由网关r的地址2:192.168.56.11/24
要求c能访问s提供的服务:http、ssh、ftp
配置s:
清空filter表,以及删除自定义链,然后设置网络属性
ifconfig | less
ifconfig eth1 down
ifconfig eth2 down
ifconfig eth0 192.168.56.20/24 up
route -n 
route del -net default
route add -net default gw 192.168.56.11 dev eth0
安装并启动服务
yum -y install httpd
yum -y install vsftpd
service httpd start
service vsftpd start

配置c
清空filter表,以及删除自定义链,然后设置网络属性
ip addr show
ip addr del 192.168.60.15/24 dev eth2
ip addr add 192.168.60.20/24 dev eth2
ip link set eth0 down
ip link set eth1 down
ip route show
ip route del default
ip route add default via 192.168.60.11 dev eth2
如果无法访问远程ssh,用ssh -v user@ip来检查问题所在。
如果是gss的问题,则去掉本ssh客户端中的GSS认证
vi /etc/ssh/ssh_config
设置GSSAPIAuthentication no  
如果是dns反解析的问题,则取消ssh服务器端的dns解析配置
vim /etc/ssh/sshd_config
UseDNS no


配置r
清空filter表,以及删除自定义链,然后设置网络属性
修改内核中关于转发的参数
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
cat /proc/sys/net/ipv4/ip_forward
添加转发规则
iptables -t filter -P FORWARD DROP
iptables -t filter -A FORWARD -m state --state established,related -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 80 -d 192.168.56.20 -m state --state new -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 22 -d 192.168.56.20 -m state --state new -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 21 -d 192.168.56.20 -m state --state new -j ACCEPT
加载ftp连接追踪模块
lsmod | grep nf_conntrack_ftp
临时生效:
cd /lib/modules/2.6.32-358.el6.x86_64/kernel/net/netfilter/
ls *ftp*
modprobe nf_conntrack_ftp
永久生效:
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
在客户端c上验证:
ssh fedora@192.168.56.20
curl -i http://192.168.56.20
lftp 192.168.56.20 (匿名账号)


练习5:内网与公网的服务能互相访问


内网主机 h1:192.168.56.20/24,网关192.168.56.11
公网主机 h2:192.168.60.20/24,无网关,但与h1的网关主机在同一网络
网关主机:
地址1: 192.168.56.11
地址2: 192.168.60.11
1.内网访问公网的http服务
配置h1:
ifconfig eth0 192.168.56.20/24 up
route add -net default gw 192.168.56.11 dev eth0
配置h2:
ip addr add 192.168.60.20/24 dev eth2
ip route del default
service httpd start
配置网关r:
iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j SNAT --to-source 192.168.60.11
优化:如果网关的公网ip经常变化(家里通过ADSL拨号上网,每次拨号得到的公网IP都不同)则上面语句改写为
iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE
测试:
h1通过http访问h2上的web,在h2上的web虚拟主机访问日志看到来源ip为h1的映射公网地址192.168.60.11即是正确
补充
在原来"1.内网访问公网的http服务"的基础上做限制,只允许访问公网的http服务,且开放时间为周一、二、四、五的8:20到18:40
增加filter规则
iptables -t filter -A FORWARD -p tcp -s 192.168.56.0/24 --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j DROP
iptables -t filter -P FORWARD ACCEPT
2.公网访问内网的http服务
配置h1:
ifconfig eth0 192.168.56.20/24 up
route add -net default gw 192.168.56.11 dev eth0
service httpd start
配置h2:
ip addr add 192.168.60.20/24 dev eth2
ip route del default
配置网关r:
iptables -t nat -A PREROUTING -p tcp -d 192.168.60.11 --dport 80 -j DNAT --to-destination 192.168.56.20:80
测试:
h2通过http访问h1上的web,在h1上的web虚拟主机访问日志看到来源ip为h2的公网地址192.168.60.20即是正确

iptables的用例的更多相关文章

  1. Linux iptables用法与NAT

    1.相关概念 2.iptables相关用法 3.NAT(DNAT与SNAT) 相关概念 防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IP ...

  2. iptables防火墙详解(一)

    -- 防火墙 常见的防火墙 :瑞星 江民 诺顿 卡巴斯基 天网...... iptables firewalld http://www.netfilter.org/ netfilter / iptab ...

  3. Linux 服务器如何禁止 ping 以及开启 ping

    Linux 默认是允许 ping 响应的,也就是说 ping 是开启的,但 ping 有可能是网络攻击的开始之处,所以关闭 ping 可以提高服务器的安全系数.系统是否允许 ping 由2个因素决定的 ...

  4. Linux禁止ping、开启ping设置

    Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 具体的配置方法如 ...

  5. Linux 允许或者禁止ping

    Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping. 具体的配置方法如 ...

  6. Linux禁止ping以及开启ping的方法

    ---恢复内容开始--- Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法P ...

  7. kube-proxy源代码分析

    摘要:假设你对kube-proxy的工作原理有一定的了解.本文基于kubernetes v1.5代码对kube-proxy的源代码文件夹结构进行了分析,并以iptables mode为例进行了完整流程 ...

  8. Linux禁止ping的俩种方法【转】

    Linux禁止ping以及开启ping的方法   Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任 ...

  9. Centos6.x搭建lnmp环境

    查看系统版本 #cat /etc/redhat-release CentOS release 6.7 (Final) 配置静态ip #vi /etc/sysconfig/network-scripts ...

随机推荐

  1. 机器学习算法实践:朴素贝叶斯 (Naive Bayes)(转载)

    前言 上一篇<机器学习算法实践:决策树 (Decision Tree)>总结了决策树的实现,本文中我将一步步实现一个朴素贝叶斯分类器,并采用SMS垃圾短信语料库中的数据进行模型训练,对垃圾 ...

  2. Spark-Join优化之Broadcast

    适用场景 进行join中至少有一个RDD的数据量比较少(比如几百M,或者1-2G) 因为,每个Executor的内存中,都会驻留一份广播变量的全量数据 Broadcast与map进行join代码示例 ...

  3. 为windows开启winrm service, 以便进行远程管理

    为windows开启winrm service, 以便进行远程管理   是windows 一种方便远程管理的服务:开启winrm service,便于在日常工作中,远程管理服务器,或通过脚本,同时管理 ...

  4. Hibernate级联及控制反转的增删改查

    在JavaHibernate中,双向多对一的操作一直是一个重点难点,本篇文章就是来探讨这个问题. 双向多对一:一个班级对应多个学生,多个学生同属于一个班级,通过班级信息可以查到班级内的学生,通过学生可 ...

  5. JAVA Eclipse如何修改Android程序名称

    Values中修改strings.xml中的app_name即可   注意他是连接到AndroidManifest.xml文件的  

  6. 从零单排之玩转Python安全编程(II)

    转自:http://www.secpulse.com/archives/35893.html 都说Python大法好,作为一名合格的安全从业人员,不会几门脚本语言都不好意思说自己是从事安全行业的. 而 ...

  7. SQL Server 2008 导入MDF数据库文件

    1.将.MDF和.LDF文件拷到SQL Server2008数据目录,如:\\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ ...

  8. Asp.net Mvc使用PagedList分页

    git:https://github.com/troygoode/PagedList 1. Nuget 安装package watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  9. RabbitMQ一

    RabbitMQ: 一.rabbitmq的系统架构: RabbitMQ Server:也叫broker server,它不是运送食物的卡车,而是一种传输服务.原话是RabbitMQisn’t a fo ...

  10. JavaScript 数组去重 方法汇总

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...