iptables_防火墙

------'netfilter/iptabls'[linux自带的firwall]--------------------

[firewall]:

1>.可以是一个 [特殊路由器] 或者一个 [装有firewall软件的PC机],

2>.拥有多块网卡(NIC), 可分别标识 firewall_ip/ 连接'公网'的eth0_ip/ 连接'私网a'的eth1_ip/ 连接'私网b'的eth2_ip

//概念:

1> netfilter:内核模块:保存规则

2> iptables :实用工具

3> iptables 命令更改 netfilter内核模块规则

//文件:

1> iptables服务配置文件:/etc/sysconfig/iptables-config

2> iptables规则设置文件: /etc/sysconfig/iptables

//永久生效:[iptables 设置的规则,默认重启失效]

1> service iptables save //将采用内存中的规则,并写入/etc/sysconfig/iptables(启动时读取)

2> /etc/sysconfig/iptables //直接修改文件
service iptables restart


netfilter[内核模块]:


[INPUT链]: //[针对dest_ip=firewall_ip 的数据包],如在firewall的PC上提供 mail服务,此时 [私/公网IP] 访问 firewall本身
/
[filter表] - [FORWARD]: //[私网/公网]之间 or [私网a/私网b]之间 的数据包.
'/etc/sysctl.conf net.ipv4.ip_forward = 1 '
\
[OUTPUT]: //

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

[PREROUTING]: //[公网某IP]访问 [私网某IP] 时,将dest_ip=连接'公网'的eth0_ip -> dest_ip=私网IP
/
[NAT表] - [POSTROUTING]: //[私网某IP]访问 [公网某IP] 时,将src_ip=私网IP -> src_ip=eth0_ip
\
[OUTPUT]: //

==注==:只有[私网/公网] 之间 的数据包,才需要涉及 [NAT表]。 //只有此时才需要地址转换
[私网/私网]之间的数据包,只需要考虑 [FORWARD链] .
----------------------------------------------


[MANGLE表] - [INPUT/FORWARD/OUTPUT/PREROUTING/POSTROUTING] 5 条链 'iptables -t mangle -nvxL'查看


/*--实例--*/

---//情景描述

firewall 有 4块 网卡:

[ 连接外网的eth0] : eth0_ip=200.200.200.200 //eth0_ip:firewall唯一公网网IP

[ 连接'私网a'的eth1]:eth1_ip=192.168.0.1, //该网段有多台Host

[连接'私网b'的eth2]:eth2_ip=192.168.1.1, //该网段有多台Server:WWW/FTP/SAMBA

[标识自身的eth3]:eth3_ip=192.168.0.254 //用作firewall的PC上,提供ssh服务

---//初始化

iptables -P INPUT ACCEPT //确定INPUT 链的[默认策略] 为ACCEPT,然后清空所有规则
/否则-F 将清空所有导致 -> [发往firewall的数据包] 被 DROP,
1.ping无响应;
2. 与各种服务器 断开连接,such as ssh不能连接他人
[应用层的服务 base on TCP/IP 三次握手建立连接,
第二步server_ip -> firewall_ip 的数据包,被DROP]

iptables -F //清空所有规则

---//允许 inner_host_ip=192.168.0.3 访问 防火墙 eth3_ip 的ssh服务(处于同一网段,无须forward)

iptables [-t filter] -A INPUT -p tcp -s 192.168.0.3 --dport 22 -j ACCEPT

---//允许out_host_ip=1.1.1.1访问 WWW 服务 [允许外网访问内网 -> 需要 3 条]

iptables -t NAT -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to-destination WWW_ip

iptables [-t filter] -A FORWARD -p tcp -s 1.1.1.1 --dport 80 -j ACCEPT

iptables -t NAT -A POSTROUTING -s WWW_ip -o eth0 -j SNAT --to-source eth0_ip

---//允许 subnet=192.168.0.0/24访问 外网

iptables -t NAT -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source eth0_ip

---//禁止 inner_host_ip=192.168.0.3 访问 QQ(不同网段,需要forward)

iptables [-t FILTER] -A FORWARD -s 192.168.0.3 -p tcp --dport QQ_port -j DROP

---//禁止 out_host_ip 访问 FTP 服务 [禁止外网访问内网 -》 需要1条forward即可]

iptables [-t FILTER] -A FORWARD -p tcp -s 1.1.1.1 --dport 21 -j DROP



------------iptables '基本命令' ----------------------------------------------------

0.iptables [-t Table] -nvxL [chain] //-n:显示IP,不查询DNS[快]/-v:verbose/-x:/

1.iptables -A INPUT -s RHEL6 -p tcp --dport 22 -j REJECT //禁止RHEL6访问ssh服务

2.iptables -D INPUT 1 //-D:删除INPUT链的第一个rule

iptables -D INPUT -s RHEL6 -p tcp --dport 22 -j REJECT //-D:按内容匹配

3.iptables -N USER //-N:创建用户定义的链

4.iptables -I INPUT 2 -j USER //-I:在 2nd处,插入rule, -> USER链

5.iptables -R INPUT 1 -s 192.168.1.0/24 -p udp --dport 1024:65535 -j ACCEPT //-R:替换 1st rule

6.iptables -E USER JACKY //-E:重命名USER链 -> JACKY

7.iptables -P INPUT ACCEPT //-p:只能为[内置链]指定[Policy]

8.iptables [-t Table] -F [Chain] //-F:如不指定chain,清空所有链(*包括USER链*)的所有规则

9.iptables [-t Table] -X [User-Chain] //-X:如不指定,则删除所有 User-Chain

10.iptables [-t Table] -L -Z [Chain] //-Z:zero the packet and byte counters in all Chains
//-L -Z:在清空数据包计数器前,查看
11.iptables -A INPUT -p tcp --dport 22 -j LOG //-j LOG:将匹配包记录到日志/var/log/message
//通过tail -f /var/log/message | cat -n 查看

12.iptables -A INPUT -p tcp ! --dport 21 -j REJECT //!:匹配--dport 21之外的所有数据包
//即此时只可访问ftp:21服务。
//---规则保存 && 恢复

13.iptables-save //dump iptables rules to stdout

14.iptables-save > iptables.bak //将【当前规则】另存为iptables.bak文件

15.iptables-restore < iptables.bak //将iptables.bak恢复为【当前规则】

'注':iptables-save 和 iptables-restore 都是临时有效,永久有效--> service iptables saved


|-----------------------------------------------------------------------------------------------------------------------------------|
| ['操作命令'] ['匹配规则'] ['目标'] //-p:tcp | udp | icmp | /etc/protocols | all |
| iptables -A/D/N/I/R/E/P/F/X/Z/L INPUT -p/s/d/dport/sport/i/o/! -j ACCEPT/DROP/REJECT/LOG/SNAT/DNAT/MASQUERADE |
|-----------------------------------------------------------------------------------------------------------------------------------|

|
----------//NAT表------------------------------------------------

---PREROUTING链:

一般用途:0:外网访问DMZ(非军事区)中开放的某服务,such as Web:80/Ftp:21/Samba

一般格式:1.iptables -t NAT -A PREROUTING -i '进入网卡' -p '协议' --deport '某服务端口' -j DNAT --to-destination ip[-ip][:port][-port] '目的IP'

---POSTROUTING链:

一般用途:0:转换源IP

一般格式:1.iptables -t NAT -A POSTROUTING -o '出网卡' -s '源IP' -j SNAT --to-source ip[-ip][:port][-port]'New源IP'
-j MASQUERADE //用于动态获得的IP,如ADSL拨号上网

1.iptables -t NAT -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE //对源地址进行'地址伪装'

-----------//Filter表----------------------------------------------

---FORWARD链:

一般用途:0:用于【外网】<---->【firewall】<----->【DMZ】,即【外网】和【DMZ】通过【firewall】时,firewall是否允许数据包通过。
1:用于'禁止'【外网】于【DMZ】之间访问,'只需'一条 FORWARD 规则即可;
2:用于'允许'----------------------,还需要POSTROUTING && PREROUTING。

1.iptables -A FORWARD -s 202.201.100.4 -j DROP //不允许202.201.100.4的数据包通过firewall

2.iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport QQ_port -j ACCEPT //允许内网访问QQ(还需要配置POSTROUTING && PREROUTING)


/*注意*/:a.Policy = DROP时,小心使用 -F
b. -p tcp --sport/dport 一起使用



posted on 2012-03-20 21:26  笑剑钝  阅读(448)  评论(0编辑  收藏  举报

导航