Iptables小结1
原创
©著作权归作者所有:来自51CTO博客作者surpassdream的原创作品,请联系作者获取转载授权,否则将追究法律责任
iptables
安全控制低到高策略大致为:
1)防火墙(又分为包过滤防火墙,代理防火墙)
包过滤防火墙又分为简单的包过滤防火墙,和基于状态检测的包过滤防火墙
2)tcp_wrappers(tcp包装器)它工作在OSI七层模型中的四层以上,但它只能够防护连接到这个库上的软件。
#所有连接到库的服务将被tcp_wrappers代为监听
#cd /etc/xinetd.d/切换到此目录下可进行查看被tcp_wrappers代为管理的服务
3)xinetd(超级守护进程,它本身管理了很多非独立守护进程)
#在/etc/xinetd.conf中定义了非独立守护进程的控制方式
#在/etc/xinetd.d/为了方便管理在它中来写服务配置文件
4)Pluggable Authentication Modules(对用户提供的用户密码做认证的)
5)Security Enhanced Linux(控制活动范围selinux)
6)Service Specific(某个服务特定的安全访问控制)规则)
7)Application Hardening(对应用程序的加固),它即可基于软件软件来实现,也可给基于硬件来实现
tcp/ip选择了五个点用来检查数据包,这5个点成为5个链,ipchain用来生成包过滤过规则的。
这5个链分别如下:INPUT , OUTPUT , FORWARD , PREROUTING , POSTING
iptables的规则格式:
iptables [-t table ] COMMAND chains [NUM] [match condition] [-j ]
具体如下
iptables [-t table] -[AD] chain rule-specification [options]
iptables [-t table] -I chain [rulenum] rule-specification [options]
iptables [-t table] -R chain rulenum rule-specification [options]
iptables [-t table] -D chain rulenum [options]
iptables [-t table] -[LFZ] [chain] [options]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target [options]
iptables [-t table] -E old-chain-name new-chain-name
其中“-t”用来指定转换类型
table表有:
【filter(定义包过滤的)包含的链:INPUT , OUTPUT , FORWARD
【nat (那天转换)包含的链:PREROUTING , POSTROUTING , OUTPUT
【mangle含所有的链
链中规则操作命令主要对链中规则进行管理的,具体命令如下:
【-A 在链尾部追加一个新规则
【-I [N] 插入一条新规则,也可指定插入第几条
【-R N 替换木条规则
【-D [N] 删除第几条规则
对链做管理:
【-F 清空规则
【-P 改默认策略
【-N 用户自定义一条新链
【-X 用来删除用户自定义的空链
【-E 重命名用户定义的某条链
【-Z 清空计数器的
链查看:
【-L 查看某条链中的所有规则,“-L”的子命令如下:
(-n 用ip地址格式来显示源地址目标地址
(-v显示详细信息
(-vv显示更的详细
(-x不做单位换算直接显示其精确值得
(--line-number显示行号
例
[root@station10 ~]# iptables -L --line-number -vxn
Chain INPUT (policy ACCEPT 377808 packets, 121144840 bytes)
num pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 505 packets, 41676 bytes)
num pkts bytes target prot opt in out source destination
【-S 打印某条链中的规则
匹配条件分为:
{通用匹配(作为选项出现的)
【-p 匹配协议的支持tcp ,udp ,icmp这三种四层协议但icmp是三四层之间的协议
【-s 用来匹配源地址的
【-d 用来匹配目标地址的
【-i 制定通过那个网卡接口进来的
【-o 指定通过那个网卡出去的
{扩展匹配又分为:
****隐含扩展
【tcp的扩展(--dprot 目标端口
(--sport 源端口
(--tcp-flags标志位
(--syn相当于建立一个新连接
##例:--tcp-flags [ ! ] mask comp格式
mask 表示要检查那几各位
comp指定某个位的值为{0|1}
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST
其中SYN表示发起一个连接请
ACK表示回应请求的
FIN表示结束
RST表示重置
###########################################################
【udp扩展 (--sport
(--dport
【icmp扩展 (--icmp-type有三种:(8 echo-request是发起ping的
( 0 echo-reply 拒绝回应
(3 destination unreachable
****显式扩展
【-m 可指定后面的扩展如下:(-m state --state
(-m multiport --port
(-m limit --limit对速率扩展的
(-m string --string包含字符串的
(-m mac --mac-source
处理动作“-j”具体如下:
【DROP丢弃
【REJECT明确拒绝(考试中用)
【ACCEPT接受
【SNAT源地址转换
【DNAT目标地址转换
【LOG昨日志的
【REDIRECT端口重定向
【MASQUERADE端口伪装,只要用SNAT时都可用到
###########################################################
基于filter表主要是用来过滤的我们可以这样来做
例1:假设凡是到本机上来访问wed服务客户机都被拒绝以这样做:
(若本机IP:192.168.0.105,在此机子上的准备工作:
[root@station19 ~]# yum -y install httpd.i386
[root@station19 ~]# chkconfig httpd on(添加为开机自启动)
[root@station19 ~]# service httpd start(启动httpd服务)
[root@station19 ~]# netstat –tnlp(查看80端口以开放)
tcp 0 0 :::80 :::* LISTEN 29843/httpd
为了测试演示是否成功我们vim /var/www/html/index.html
[root@station19 ~]# vim /var/www/html/index.html
This is 192.168.0.105...
[root@station19 ~]# elinks 127.0.0.1(本机访问成功)
[root@station6 ~]# elinks 192.168.0.105:80(本机做规则前其它机子访问也成功)
[root@station19 ~]# iptables -t filter -A INPUT -s 0.0.0.0/0.0.0.0 -d 192.168.0.105 -p tcp --dport 80 -i eth0 -j DROP(本机设置规则)
[root@station19 ~]# iptables -L --line-number –n(查看)
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 192.168.0.105 tcp dpt:80
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@station6 ~]# elinks 192.168.0.105:80(其他机子再次测试已经不能访问到服务了)
如果我们让出去的也被绝绝该怎么做呢?
很简单,我们应该再写一条出去的过滤规则就行了,如下
[root@station19 ~]# iptables -t filter -A OUTPUT -s 192.168.0.105 -d 0.0.0.0/0.0.0.0 -p tcp --sport 80 -j DROP
[root@station19 ~]# iptables -L --line-number -n
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 192.168.0.105 tcp dpt:80
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 192.168.0.105 0.0.0.0/0 tcp spt:80
用这两条链INPUT和OUTPUT时一定要注意来源“-s”和目标“-d”
例2:如果我们想让192.168.0.105不能ping其他主机该怎么做呢?
[root@station19 ~]# ping 192.168.106(做规则前ping其它主机成功)
PING 192.168.106 (192.168.0.106) 56(84) bytes of data.
64 bytes from 192.168.0.106: icmp_seq=1 ttl=64 time=3.45 ms
[root@station19 ~]# iptables -t filter -A OUTPUT -s 192.168.0.105 -p icmp --icmp-type 8 -j DROP
[root@station19 ~]# iptables -L --line-number –n
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 192.168.0.105 tcp dpt:80
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 192.168.0.105 0.0.0.0/0 tcp spt:80
2 DROP icmp -- 192.168.0.105 0.0.0.0/0 icmp type 8
查看已经看到OUTPUT中出现了第二条规则
[root@station19 ~]# ping 192.168.0.106(看到本机ping其他主机已ping不通了)
PING 192.168.0.106 (192.168.0.106) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
[root@station6 ~]# ping 192.168.0.105(但是其它客户机仍能ping通192.168.0.105如下)
PING 192.168.0.105 (192.168.0.105) 56(84) bytes of data.
64 bytes from 192.168.0.105: icmp_seq=1 ttl=64 time=1.80 ms
c64 bytes from 192.168.0.105: icmp_seq=2 ttl=64 time=0.444 ms
如果这时我们也不想让其它客户机ping通192.168.0.105该怎么办呢?思考一下:
[root@station19 ~]# iptables -t filter -A INPUT -d 192.168.0.105 -p icmp --icmp-type 8 -j DROP
[root@station19 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere tcp dpt:http
DROP icmp -- anywhere icmp echo-request
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere tcp spt:http
DROP icmp -- anywhere icmp echo-request
[root@station6 ~]# ping 192.168.0.105(看到其它客户机也不能ping了)
PING 192.168.0.105 (192.168.0.105) 56(84) bytes of data
--- 192.168.0.105 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2855ms
特别注意“--icmp-type 8”永远是发起ping的,“--icmp-type 0”是回应ping的,“--icmp-type 3”表示目标不可达。
[root@station19 ~]# iptables –F(用来清空所有规则)
[root@station19 ~]# iptables –L (看到已经全部清空了)
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
上一篇:SELinux3
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Go语言开发设计模式小结
本文汇总GO语言软件开发过程中典型的设计模式。
Go 设计模式 单例模式 工厂模式 观察者模式 -
iptables学习小结
iptables -t -A append INPUT 5 -i|o eth0 -p
职场 iptables 休闲 -
oracle小结1
1 显示操作时间 set timing on;2 nvl(comm,0),如果COMM为空,则显示0,否则用C
oracle file sql insert system
















