28_02_iptables系列之基本应用及显式扩展

netfiler:Framework, TCP/IP

iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件 -j 处理动作

匹配条件

通用匹配

-s 匹配源地址

-d 匹配目标地址

-p 匹配协议的{tcp|udp|icmp}

-i 指定数据报文流入接口

-o 指定书库报文流出接口

扩展匹配

隐含扩展

-p tcp

--sport PORT [-PORT]: 源端口

--dport PORT [-PORT]: 目标端口

--tcp-flags mask comp:只检查mask指定的标志位,是逗号分隔的标志位列表;

comp:此列表中出现的标记为必须为1,comp中没出现,而mask中出现,必须为0;

--tcp-flags SYN,FIN,ACK,RST SYN = --syn

--syn:专门匹配tcp三次握手的第一次

-p icmp

--icmp-type

0:echo-reply  响应报文

8:echo-request 请求报文

-p udp

--sport

--dport

显示扩展:使用额外的匹配机制

-m EXTESTION --spe-opt

state:状态扩展

结合ip_conntrack追踪会话的状态

NEW:新连接请求

ESTABLISHED:已建立的连接

INBALID:非法连接

RELATED:相关联的

-m state --state NWE,ESTABLISHED -j ACCEPT

multiport:离散的多端口扩展

--source-ports

--destination-ports

--ports

-m multiport --destination-ports 21,22,80 -j ACCEPT   合并端口

条件取反:!,            -s ! 172.16.100.6 除了此IP以外都可以作为原地址

命令:

管理规则

-A:附加一条规则,在链的尾部追加一条规则

-I:CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条

-D:CHAIN [num]:删除指定链中第num条规则

-R:CHAIN [num]:替换指定的规则

管理链

-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN则表示清空对应表中的所有链。

-P CHAIN: 设定指定链的默认策略:

-N:自定义一条新的空链

-X:删除一个自定义的空链

-Z:置零指定链中所有规则的计数器

-E:重命名一条自定义的链

查看类:

-L:显示指定表中的所有规则;

-n:以数字格式显示主机地址和端口号

-V:显示详细信息

-VV

-X:显示精确值

--line-numbers:显示规则号码

动作(target)

ACCEPT 允许通过

DROP   丢弃

REJECT 拒绝

DNAT  目标地址转换

SNAT  源地址转换

REDIRECT   端口重定向

MASQUERADE 地址伪装

LOG   日志

MARK 给一个报文设定标记

iptables -t filter -A INPUT -s 192.168.1.0/24 -j DROP

允许172.16.0.0网段的用户访问172.16.100.7,的sshd:22/tcp

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

iptables 不是服务,而是服务脚本;服务脚本的主要作用,在于生效保存的规则

lsmod命了可以检查iptables的模块是都装载

开启或者停止iptables服务 其实是装载或移除iptables/netfilter相关内核模块

iptanles_nat ,  iptables_filter,  iptables_mangle,  iptables_raw,  iptables_nat

ip_conntrack

yum install mysql-server vsftpd httpd -y

iptables -P INPUT DROP 修改默认链为丢弃

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

iptables -L -n 查看修改后的链

允许所有主机访问本机的web服务

iptables -I  INPUT  -d 192.168.1.51 -p tcp --dport 80 -j ACCEPT

iptables -I  OUTPUT -s 192.168.1.51 -p tcp --sport 80 -j ACCEPT

iptables -A  INPUT -s 127.0.0.1  -d 127.0.0.1  -i l0 -j ACCEPT

iptables -A  OUTPUT -s 127.0.0.1 -d 127.0.0.1  -o lo  -j ACCEPT

允许自己ping任意主机

iptables -A  OUTPUT -s 192.168.1.51   -p icmp  --icmp-type 8 -j ACCEPT

iptables -A  INPUT -d 192.168.1.51   -p icmp --icmp-type 0 -j ACCEPT

DNS服务器:放行别人到服务器来请求

iptables -A  INPUT -d 192.168.1.51 -p udp --dport 53 -j ACCEPT

iptables -A  OUTPUT -s 192.168.1.51 -p udp --sport 53 -j ACCEPT

iptables -A  INPUT -s 192.168.1.51  -p udp --sport 53 -j ACCEPT

iptables -A  OUTPUT -d 192.168.1.51 -p udp --dport 53 -j ACCEPT

/proc/net/ip_conntrack  记录连接信息,追踪连接,此功能可以使服务器根据追踪信息 只允许响应回复出站,从而有效的避免反弹性的病毒。

iptstate

-t 显示当前所有连接的个数

modprobe ip_conntrack 装载模块

modprobe -r ipcontrack 移除模块

[[email protected] ~]# lsmod |grep ip 查看已装载的模块

[[email protected] ~]# cat /proc/sys/net/ipv4/ip_conntrack_max  查看ip_conntrack记载的最大条目数

注意:特别繁忙的服务器不要装载ip_conntrack模块。否则会出现问题

iptables -t nat -L 查看nat表,也会自动加载此模块

重启iptables 会清空表里的规则

[[email protected] ~]# cat /etc/sysconfig/iptables

service iptables save 保存规则到此文件,后重启服务规则不会丢失

iptables-save > /etc/sysconfig/iptables.2013041801 可以使用输出重定向来指明保存到什么位置

iptables-restore < /etc/sysconfig/iptables.2013041801 使用输入重定向来指明从什么位置读取信息

-------------------------------

server:172.16.100.7

放行sshd,httpd服务

iptables -I OUTPUT -s 172.16.100.7 -p tcp --sport 80  -m state --state ESTABLISHED    -j ACCEPT

iptables -I INPUT -d 172.16.100.7  -p tcp --dport 80  -m state --state NEW,ESTABLISHED  -j ACCEPT

iptables -A INPUT -d 172.16.100.7 -P tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 22  -m state --state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP

iptables -P OUTPUT DROP

-------------------------------

修改ip_conntrack最大连接数

sysctl -w net.ipv4.ip_conntrack_max=65536

要永久有效需要修改/etc/sysctl.conf

/proc/sys/net/ipv4/netfilter  此目录里的文件定义了一些超时时间

iptables -L -n --line-numbers -v 查看一写的规则

-------------------------------------------

FTP:

iptables -A INPUT  -i lo  -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

需要安装ip_conntrack_ftp和ip_nat_ftp模块

[[email protected] ~]# vim /etc/sysconfig/iptables-config

IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"

iptables -A INPUT  -d  172.16.100.7 -p tcp  -m state --state RELATED,ESTABLISHED -j  ACCEPT

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

----------------------

[[email protected] ~]# vim /etc/sysconfig/iptables 可以直接编辑配置文件写入防火墙规则

由于匹配规则是从第一条开始匹配,直到匹配到就为止,所有可以把相同的规则,统一后写到最前面从而提高性能。

把端口相同的合并:

列如:

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

iptables -R 修改

列如:

修改第6条 为 -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,REDIRECT -j ACCEPT

iptanles -R INPUT 6  -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,REDIRECT -j ACCEPT

iptables -D 删除

时间: 2024-10-19 20:40:55

28_02_iptables系列之基本应用及显式扩展的相关文章

《Entity Framework 6 Recipes》中文翻译系列 (28) ------ 第五章 加载实体和导航属性之测试实体是否加载与显式加载关联实体

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-11  测试实体引用或实体集合是否加载 问题 你想测试关联实体或实体集合是否已经加载到上下文中,另外你想使用Code-First来管理数据访问. 解决方案 假设你有如图5-26所示的概念模型 图5-26 一个包含projects,managers和contractors的模型 在Visual Studio中添加一个名为Recipe11的控制台应用,并确保引用了实体框架6的库,NuGet可

AOP系列(一)——ProxyFactoryObject 显式创建AOP代理

AOP概念 Aspect Oriented Programming,面向切面编程,可以通过预编译方式和运行期动态代理,实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 前提 了解Spring.NET IOC 熟悉代理模式 下面我们结合一个具体的例子来了解AOP. 基本情景 User类 /// <summary> /// 用户实体,具有姓名和年龄两个属性 /// </summary> public class User { public string Name { get

JDK并发包温故知新系列(五)—— 显式锁与显式条件

显式锁-Lock与ReadWriteLockJDK针对Lock的主要实现是ReentrantLock,ReadWriteLock实现是ReentrantReadWriteLock.本文主要介绍ReentrantLock. ReentrantReadWriteLock两把锁共享一个等待队列,两把锁的状态都由一个原子变量表示,特有的获取锁和释放锁逻辑. ReentrantReadWriteLock的基本原理:读锁的获取,只要求写锁没有被线程持有就可以获取,检查等待队列,逐个唤醒等待读锁线程,遇到等待

Javascript模块化编程(一)模块的写法最佳实践六、输入全局变量 独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互。 为了在模块内部调用全局变量,必须显式地将其他变量输入模块。

Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块但是,Javascript不是一种模块化编程语言,它不支持类class,更遑论模块module了 随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂.网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑. Javascript模块化编程,已

实现接口与显式实现接口的区别

原文:http://www.cnblogs.com/chenxizhang/archive/2008/08/22/1274265.html 在实现接口的时候,VS提供了两个菜单,一个是"实现接口",一个是"显式实现接口",它们到底有何不一样呢 我们来比较一下看看 1.首先假设我们有一个接口 public interface ICustomer{    void SomeMethod();} 2.如果是"实现接口",那么代码大致如下 public

C++拾遗--name_cast 显式类型转换

C++拾遗--name_cast 显式类型转换 前言 C++中提供了四种显式的类型转换方法:static_cast,const_cast,reinterpret_cast,dynamic_cast.下面分别看下它们的使用场景. 显式类型转换 1.staitc_cast 这是最常用的,一般都能使用,除了不能转换掉底层const属性. #include <iostream> using namespace std; int main() { cout << "static_c

网站后端_Python+Flask.0008.FLASK响应相关之隐式显式与自定义响应?

隐式响应: 1. 视图函数的返回值会被隐式转换为一个响应对象 2. 如果返回的是一个合法的响应对象,则会从视图函数中直接返回 3. 如果返回的是一个字符串,会用字符串数据和默认参数创建字符串为主体,状态码为200,MIME类型为text/html的werkzeug.wrappers.Response响应对象 4. 如果返回的是一个元组(response, status, headers),且至少包含一个元素,status值会覆盖状态代码,headers可以是一个列表或是字典,作为额外的消息头 5

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 &#39;#TT&#39; 中的标识列插入显式值。 sql server 临时表

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 '#TT' 中的标识列插入显式值.我是在SqlServer写存储过程中遇到的这个错误,当时就心想:临时表怎么会有主键呢,我也没有设置主键.然后我就和同事一块调试,终于发现了.原因就是我把真实的数据表中id(其实就是主键)取出来放到临时表(#TT)中,一开始是以为把主键的属性取出来了.后来又一起调试,发现不是那么回事,1.原来SqlServer会自动给临时表设置主键,如果你要插入数据的话,还要打开主键,这样你才能插入数据.“当 ID

显式与隐式启动Activity

1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.metrox.l8"> 4 5 <application 6 android:allowBackup="true&quo