<p>iptables学习手记<br />
iptables外面的文章太多了,我这里就把我自己的过程记录一下。<br />
iptables的应用场合太多。我这里的使用是。<br />
国外vps,安装iptables,<br />
1:需要允许ssh远程访问,<br />
2:开放常用的端口,web,mail等端口。打开1194 vpn端口。<br />
3:希望openvpn,启用NAT的功能。<br />
安装iptables<br />
yum install iptables<br />
安装完后<br />
# ll /etc/sysconfig/<br />
total 60<br />
-rw-r--r-- 1 root root 291 Aug 1 06:55 authconfig<br />
drwxr-xr-x 2 root root 4096 Aug 1 06:54 cbq<br />
drwxr-xr-x 2 root root 4096 Mar 11 14:12 console<br />
-rw-r--r-- 1 root root 1068 Nov 13 2008 init<br />
-rw------- 1 root root 1740 May 24 2008 iptables-config<br />
drwxr-xr-x 2 root root 4096 Mar 11 14:12 modules<br />
-rw-r--r-- 1 root root 634 Nov 13 2008 netconsole<br />
-rw-r--r-- 1 root root 112 Aug 1 06:55 network<br />
drwxr-xr-x 2 root root 4096 Aug 1 06:55 network-scripts<br />
drwxr-xr-x 4 root root 4096 Mar 11 14:12 networking<br />
-rw-r--r-- 1 root root 544 Nov 13 2008 readonly-root<br />
drwxr-xr-x 2 root root 4096 Aug 1 06:54 rhn<br />
-rw-r--r-- 1 root root 513 Jan 22 2008 rsyslog<br />
-rw-r--r-- 1 root root 610 May 24 2008 syslog<br />
-rw-r--r-- 1 root root 47 Apr 17 19:45 udev-stw<br />
你会发现/etc/sysconfig/ 目录下,并没有iptables这个文件<br />
查看当前规则<br />
#iptables -L -n<br />
Chain INPUT (policy ACCEPT)<br />
target prot opt source destination<br />
Chain FORWARD (policy ACCEPT)<br />
target prot opt source destination<br />
Chain OUTPUT (policy ACCEPT)<br />
target prot opt source destination<br />
应该就是没有任何的限制。<br />
保存当前的规则<br />
# /etc/rc.d/init.d/iptables save<br />
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]<br />
这个时候,/etc/sysconfig/iptables这个文件就有了。<br />
# cat /etc/sysconfig/iptables<br />
# Generated by iptables-save v1.3.5 on Sat Aug 1 07:08:03 2009<br />
*filter<br />
:INPUT ACCEPT [141:21585]<br />
:FORWARD ACCEPT [0:0]<br />
:OUTPUT ACCEPT [14:5380]<br />
COMMIT<br />
# Completed on Sat Aug 1 07:08:03 2009<br />
添加SSH端口<br />
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT<br />
# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT<br />
查看一下设置的规则<br />
# iptables -L -n<br />
Chain INPUT (policy ACCEPT)<br />
target prot opt source destination<br />
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22<br />
Chain FORWARD (policy ACCEPT)<br />
target prot opt source destination<br />
Chain OUTPUT (policy ACCEPT)<br />
target prot opt source destination<br />
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22<br />
不过这个规则,没有保存,重新启动机器,就会消失。<br />
这个时候,你查看一下/etc/sysconfig/iptables<br />
cat /etc/sysconfig/iptables<br />
# Generated by iptables-save v1.3.5 on Sat Aug 1 07:08:03 2009<br />
*filter<br />
:INPUT ACCEPT [141:21585]<br />
:FORWARD ACCEPT [0:0]<br />
:OUTPUT ACCEPT [14:5380]<br />
COMMIT<br />
# Completed on Sat Aug 1 07:08:03 2009<br />
保存规则<br />
# service iptables save<br />
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]<br />
这个时候<br />
cat /etc/sysconfig/iptables<br />
# Generated by iptables-save v1.3.5 on Sat Aug 1 07:14:27 2009<br />
*filter<br />
:INPUT ACCEPT [554:85824]<br />
:FORWARD ACCEPT [0:0]<br />
:OUTPUT ACCEPT [107:21008]<br />
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT<br />
-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT<br />
COMMIT<br />
# Completed on Sat Aug 1 07:14:27 2009<br />
设定预设规则<br />
这是关键的一步,防火墙的规则,一般做法,拒绝所有,然后开放相应的服务。<br />
不过我们拒绝所有前,必须把ssh端口打开,否则就无法ssh访问,除非你只机器前面<br />
iptables -P INPUT DROP<br />
iptables -P OUTPUT ACCEPT<br />
iptables -P FORWARD DROP<br />
这个时候,服务器上,就只打开了22端口,别的都禁止访问。<br />
/etc/rc.d/init.d/iptables save<br />
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]<br />
这个时候,就把规则保存起来。<br />
NAT转发<br />
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to 66.160.197.199<br />
这条规则是给openvpn用的。记录一下。<br />
参考文章<br />
<a href="http://www.qudong.com/OS/Linux/2009/0728/42174.html">http://www.qudong.com/OS/Linux/2009/0728/42174.html</a><br />
<a href="http://www.redflag-linux.com/bbs/read.php?15,53207">http://www.redflag-linux.com/bbs/read.php?15,53207</a><br />
<a href="http://blog.chinaunix.net/u/22249/showart_154578.html">http://blog.chinaunix.net/u/22249/showart_154578.html</a><br />
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能使内外网都能访问公司的服务器?<br />
A:# web<br />
# 用DNAT作端口映射<br />
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10<br />
# 用SNAT作源地址转换(关键),以使回应包能正确返回<br />
iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1<br />
# 一些人经常忘了打开FORWARD链的相关端口,特此增加<br />
iptables -A FORWARD -o eth0 -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT<br />
iptables -A FORWARD -i eth0 -s 192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT</p>
<p># ftp<br />
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT<br />
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块<br />
# 用DNAT作端口映射<br />
iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11<br />
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 21 -j ACCEPT<br />
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -j ACCEPT<br />
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -j ACCEPT<br />
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -j ACCEPT<br />
iptables -A FORWARD -o eth0 -d 192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -j ACCEPT<br />
iptables -A FORWARD -i eth0 -s 192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -j ACCEPT<br />
# 用SNAT作源地址转换(关键),以使回应包能正确返回<br />
iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to 192.168.1.1</p>