Jumat, 15 Juli 2011

How To Set Up A Debian Linux Firewall




The material on this page was prepared using Sarge or Etch
configured using our Installation and Packages pages.
If you did not use our pages to set up your system, what you
encounter on your system may be different than what is given here.


This page covers using IPTABLES with the 2.4 Linux kernel.
For the page on using IPCHAINS with the 2.2 Linux kernel click here.


A firewall is a system or router that sits between an external network (i.e. the Internet) and an internal network. This internal network can be a large LAN at a business or your networked home PCs. The firewall in it's simplest form is like a one-way street. It allows people on the internal network to access the external network (the Intenet), but it restricts traffic so that no one can use the external network to access the systems or files on the internal network.

If you connect to the Internet using a modem you typically don't have to be too concerned about firewalling your internal network. That's because each time you connect to the Internet you are assigned a different IP address by your ISP, and your dial-up sessions are limited in length. However, if you have a DSL line or a cable modem, you retain the same IP address for much longer periods of time, perhaps months, because you have an "always on" connection to the Internet. In this case a firewall is advisable.

A firewall has two network connections, one for the external network and one for the internal network. Traffic that is allowed to flow between the two networks is internally "bridged" (using a FORWARD rule) between these two connections. Disallowed traffic is not. This decision-based bridging of traffic between two connections is called "routing" or "IP forwarding". What this means is that any firewall, by its very nature, is a router (but not all routers block traffic, so not all routers are firewalls).

You can buy "cable/DSL routers" (proxy-in-a-box) for under $100 which offer integrated firewalling functionality. However, the firewalling is typically limited in nature and may not be able to be upgraded as new threats are discovered.

So why use a Linux system as a firewall if these $100 boxes are available? One reason is flexibility. You could use your Linux firewall system to simultaneously act as a Web (possibly with a Web cam) and/or e-mail server (more about this can be found on the Internet Servers and Web Cam pages). Plus you can set up very fine controls about who can access what on the Internet. Many organizations only want a few select individuals to have Internet access. In this case you could statically assign them addresses in a range outside of the DHCP scope and only allow that address range out. (If you have your own internal DNS server be sure to allow it outbound UDP port 53 so it can access the root hints servers.) But the main reason for setting up a Linux firewall is because it will help you learn Linux.


The Firewall Script Top of page

If you haven't already done so, please read the Proxy/NAT page. Much of the information for proxy servers and firewalls is the same and we won't be repeating it here. As a matter of fact, if you created the proxy server on the previous page, all you have to do is add a few more IPTABLES commands to enhance the firewalling functionality of the system.

All we're going to do is take the proxy server shell script from the Proxy/NAT page and add some more rules to it. Whereas the proxy script only had specific rules related to forwarding, the modified script will have all three types of rules (input, ouput, and forwarding). To set this script up you'll need to:
    Section A
  • Enter your internal interface designation (INTIF)
  • Enter your internal network address (INTNET)
  • Enter your internal interface IP address (INTIP)
  • Enter your external interface designation (EXTIF)
    Section B
  • If your external interface uses a static IP address
    • Uncomment the EXTIP line and enter your static IP address
    Section C
  • If your external interface uses a dynamic IP address
    • Uncomment the EXTIP line
    Optional
  • If you plan to simultaneously use your firewall system as a Web server uncomment the two OPTIONAL: lines (echo and iptables) in the INPUT section.
The comments in the script give a little more information on what values to enter and what lines need to be uncommented for your situation. If you want to have a Web server but don't feel comfortable using your firewall system to act as one, we show you how to set up the firewall to forward traffic to a separate Web server that's behind the firewall in the DMZ section below.


#!/bin/sh  #  IPTABLES  FIREWALL  script for the Linux 2.4 kernel. #  This script is a derivitive of the script presented in #  the IP Masquerade HOWTO page at: #  www.tldp.org/HOWTO/IP-Masquerade-HOWTO/stronger-firewall-examples.html #  It was simplified to coincide with the configuration of #  the sample system presented in the Guides section of #  www.aboutdebian.com # #  This script is presented as an example for testing ONLY #  and should not be used on a production firewall server. # #    PLEASE SET THE USER VARIABLES #    IN SECTIONS A AND B OR C  echo -e "\n\nSETTING UP IPTABLES FIREWALL..."   # === SECTION A # -----------   FOR EVERYONE   # SET THE INTERFACE DESIGNATION AND ADDRESS AND NETWORK ADDRESS # FOR THE NIC CONNECTED TO YOUR _INTERNAL_ NETWORK #   The default value below is for "eth0".  This value  #   could also be "eth1" if you have TWO NICs in your system. #   You can use the ifconfig command to list the interfaces #   on your system.  The internal interface will likely have #   have an address that is in one of the private IP address #   ranges. #       Note that this is an interface DESIGNATION - not #       the IP address of the interface.  # Enter the designation for the Internal Interface's INTIF="eth0"  # Enter the NETWORK address the Internal Interface is on INTNET="192.168.1.0/24"  # Enter the IP address of the Internal Interface INTIP="192.168.1.1/24"    # SET THE INTERFACE DESIGNATION FOR YOUR "EXTERNAL" (INTERNET) CONNECTION #   The default value below is "ppp0" which is appropriate  #   for a MODEM connection. #   If you have two NICs in your system change this value #   to "eth0" or "eth1" (whichever is opposite of the value #   set for INTIF above).  This would be the NIC connected #   to your cable or DSL modem (WITHOUT a cable/DSL router). #       Note that this is an interface DESIGNATION - not #       the IP address of the interface. #   Enter the external interface's designation for the #   EXTIF variable:  EXTIF="ppp0"   # ! ! ! ! !  Use ONLY Section B  *OR*  Section C depending on #  ! ! ! !   the type of Internet connection you have. # ! ! ! ! !  Uncomment ONLY ONE of the EXTIP statements.   # === SECTION B # -----------   FOR THOSE WITH STATIC PUBLIC IP ADDRESSES     # SET YOUR EXTERNAL IP ADDRESS    #   If you specified a NIC (i.e. "eth0" or "eth1" for    #   the external interface (EXTIF) variable above,    #   AND if that external NIC is configured with a    #   static, public IP address (assigned by your ISP),    #   UNCOMMENT the following EXTIP line and enter the    #   IP address for the EXTIP variable:  #EXTIP="your.static.IP.address"    # === SECTION C # ----------   DIAL-UP MODEM, AND RESIDENTIAL CABLE-MODEM/DSL (Dynamic IP) USERS   # SET YOUR EXTERNAL INTERFACE FOR DYNAMIC IP ADDRESSING #   If you get your IP address dynamically from SLIP, PPP, #   BOOTP, or DHCP, UNCOMMENT the command below. #   (No values have to be entered.) #         Note that if you are uncommenting these lines then #         the EXTIP line in Section B must be commented out.  #EXTIP="`/sbin/ifconfig ppp0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"   # --------  No more variable setting beyond this point  --------   echo "Loading required stateful/NAT kernel modules..."  /sbin/depmod -a /sbin/modprobe ip_tables /sbin/modprobe ip_conntrack /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_conntrack_irc /sbin/modprobe iptable_nat /sbin/modprobe ip_nat_ftp /sbin/modprobe ip_nat_irc  echo "    Enabling IP forwarding..." echo "1" > /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/ip_dynaddr  echo "    External interface: $EXTIF" echo "       External interface IP address is: $EXTIP" echo "    Loading firewall server rules..."  UNIVERSE="0.0.0.0/0"  # Clear any existing rules and setting default policy to DROP iptables -P INPUT DROP iptables -F INPUT  iptables -P OUTPUT DROP iptables -F OUTPUT  iptables -P FORWARD DROP iptables -F FORWARD  iptables -F -t nat  # Flush the user chain.. if it exists if [ "`iptables -L | grep drop-and-log-it`" ]; then    iptables -F drop-and-log-it fi  # Delete all User-specified chains iptables -X  # Reset all IPTABLES counters iptables -Z  # Creating a DROP chain iptables -N drop-and-log-it iptables -A drop-and-log-it -j LOG --log-level info  iptables -A drop-and-log-it -j REJECT  echo -e "     - Loading INPUT rulesets"  ####################################################################### # INPUT: Incoming traffic from various interfaces.  All rulesets are  #        already flushed and set to a default policy of DROP.  #  # loopback interfaces are valid. iptables -A INPUT -i lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT  # local interface, local machines, going anywhere is valid iptables -A INPUT -i $INTIF -s $INTNET -d $UNIVERSE -j ACCEPT  # remote interface, claiming to be local machines, IP spoofing, get lost iptables -A INPUT -i $EXTIF -s $INTNET -d $UNIVERSE -j drop-and-log-it  # remote interface, any source, going to permanent PPP address is valid iptables -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -j ACCEPT  # Allow any related traffic coming back to the MASQ server in iptables -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ACCEPT   #  OPTIONAL:  Uncomment the following two commands if plan on running #             an Apache Web site on the firewall server itself # #echo -e "      - Allowing EXTERNAL access to the WWW server" #iptables -A INPUT -i $EXTIF -m state --state NEW,ESTABLISHED,RELATED -p tcp -s $UNIVERSE -d $EXTIP --dport 80 -j ACCEPT   # Catch all rule, all other incoming is denied and logged.  iptables -A INPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it   echo -e "     - Loading OUTPUT rulesets"  ####################################################################### # OUTPUT: Outgoing traffic from various interfaces.  All rulesets are  #         already flushed and set to a default policy of DROP.  #  # loopback interface is valid. iptables -A OUTPUT -o lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT  # local interfaces, any source going to local net is valid iptables -A OUTPUT -o $INTIF -s $EXTIP -d $INTNET -j ACCEPT  # local interface, any source going to local net is valid iptables -A OUTPUT -o $INTIF -s $INTIP -d $INTNET -j ACCEPT  # outgoing to local net on remote interface, stuffed routing, deny iptables -A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j drop-and-log-it  # anything else outgoing on remote interface is valid iptables -A OUTPUT -o $EXTIF -s $EXTIP -d $UNIVERSE -j ACCEPT  # Catch all rule, all other outgoing is denied and logged.  iptables -A OUTPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it   echo -e "     - Loading FORWARD rulesets"  ####################################################################### # FORWARD: Enable Forwarding and thus IPMASQ #          Allow all connections OUT and only existing/related IN  iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT  # Catch all rule, all other forwarding is denied and logged.  iptables -A FORWARD -j drop-and-log-it  # Enable SNAT (MASQUERADE) functionality on $EXTIF iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP  echo -e "    Firewall server rule loading complete\n\n"  

Not the 'drop-and-log-it' action in the 'catch all' rules. IPTABLES log messages are written to the /var/log/messages file and also to the 'console' (screen). These messages include the source and destintation address and interface information of dropped packets. This is useful in troubleshooting. If your firewall isn't acting the way you thought, you can see which packets are being dropped.

The UNIVERSE="0.0.0.0/0" line just means "any address".

If you read the script comments you saw there's a commented-out command that you can uncomment if you want to also have your firewall act as a Web server (not a real secure idea). But what if you wanted to set up a separate Web server system behind your firewall system? There's three statements that you have to add to the script. We show you how to do that in the Setting Up A DMZ section below. (You don't have to set up a full-blown DMZ to use these commands to have servers behind your firewall.)

As with the proxy script, you can simply copy/paste the above script into a text editor and make the necessary changes for your system, network, and type of external connection Then save it using the file name firewall.txt and anonymous FTP it to your Debian system.

Note that, also like the proxy script, you cannot set this script to run at boot up if you are using a dynamic IP-based modem connection for the external interface unless you add the commands to call the pon script.
Once the file is transferred, use the following commands to copy/rename it to the appropriate scripts directory and to make it executable for root:

cp /home/ftp/pub/incoming/firewall.txt /etc/init.d/firewall.sh
chmod 755 /etc/init.d/firewall.sh
Now all you have to do is connect to your ISP and enter the following command to run the script:

/etc/init.d/firewall.sh

Using IPTABLES sets up a "packet filtering firewall". It inspects packets for source or destination addresses, protocol (tcp, udp, or icmp), and port numbers (which indicate the type of Internet application being used such as 80 for http (Web browsing), 21 for ftp, 23 for telnet, etc.). There are other, more sophisticated types of firewalls. Those that examine the actual data in the packets to see if what's being transferred back and forth is a logical exchange of information are called "stateful" firewalls.

If you created a symbolic link on the Proxy/NAT page so the proxy script would run at bootup, you may want to delete it and recreate one for this script. The following two commands will take care of that:

rm /etc/rc2.d/S95proxy
ln -s /etc/init.d/firewall.sh /etc/rc2.d/S95firewall
If you added the commands to the proxy script to call the pon dialer you may want to add them to the firewall script also.



Where to learn more - The best of our bookshelves:

Linux Firewalls
More info...

Linux Firewalls is extensive in its coverage of, not only firewalls, but other aspects of security as well. The book is crammed with examples of IPTABLES chains for different firewall types and security scenarios including DMZs. The book starts out with a good explanation of the basics of TCP/IP, packets, and firewalls in general. As a result, when you do get into the later chapters you'll not only find out how to do things, but you'll know why you're doing them as well. The book focuses on setting up Linux-system type firewalls which is appreciated. Those that cover firewalls in general tend to blur the lines between commercial products and their non-commercial counterparts. However, within this focus the book runs wide as well as deep. I doubt there's anything you'd need to know about firewall-based security that's not in this book. The book also covers IPCHAINS so it provides a good opportunity to compare the syntaxes of the IPTABLES and IPCHAINS commands.



If you don't want a firewall system doing anything but firewalling any open ports represent a potential hole in your firewall. You can check to see if any ports are actively listening for traffic using the command:

netstat -an | more

If you see any entries with the word LISTEN next to them you've got open ports. Typically you'll see them listed with an address like:

0.0.0.0:80

which would indicate that the server is listening on port 80 (HTTP for a Web server). There are a lot of Web pages out there that list what port numbers are used by which services. You'll want to shut down any services that have ports open on a firewall system. You'll likely have to do this by renaming some of the links (so they don't run) in whichever /etc/rcX.d directory matches your default runlevel and then rebooting.

Debian also has an option that helps prevent spoofing. Check your /etc/network/options file to make sure it has the line:

spoofprotect=yes

If it doesn't, edit the file to add it in. Removing any unnecessary applications (packages) is also a good idea. We get into this more on the Securing Servers page. You may have also noticed in the above file the line:

ip_forward=no

This is because IP forwarding is disabled by default. The line in our firewall script:

echo "1" > /proc/sys/net/ipv4/ip_forward

turns IP forwarding on when the script is run (to allow the proxy function).

If you just want to keep punks off your home or SOHO network a single firewall system is fine. If you want to protect Internet servers you'll want to use a couple IPTABLES firewall systems to set up a DMZ (covered below). However, if your critical intellectual-property or sensitive data is stored on servers on your internal network you'd better look for something more secure. You can do packet filtering with a Cisco router, yet companies will spend tens of thousands of dollars on a Cisco PIX firewall product because it offers greater protection. For Linux systems, you may want to check out the NetMax Firewall Suite or VPN Suite (www.netmax.com). Their products include the Linux software so it's not an application you would install on a Debian system. With NetMax, you remove all existing partitions to create a "bare" hard-drive and pop in the CD to install everything.

Note that it's not advisable to have a serious firewall system also serve up Web pages. Due to it's critical role in the security policy of an organization, a firewall should be one thing and one thing only, a firewall. This is less of an issue for most home networks since home systems typically aren't powered up 24/7 and the external IP address (assigned by your ISP) isn't static.

If you want to get an overall view of your firewall, once you run the firewall script, use the command:

iptables -L

The L stands for List. It gives a comprehensive listing of your rules which is easier to understand than simply looking at the rules themselves.


Setting Up A DMZ Top of page

A DMZ allows you place systems that you want the public to access in an "isolation network" between two firewall systems or routers. Recall the DMZ diagram from the Networking page.

Use PAT on a Linux Firewall DMZ

The outside firewall is set up to do the proxy/NAT stuff for your internal network, but it also offers two more benefits:

  • It allows you to set up some rules to help protect your publically-available systems
  • It allows you to use one public IP address to provide access to several different Internet servers

This functionality is called PAT (Port Address Translation). It allows you to specify that any HTTP traffic (port 80) coming into the outside firewall from the Internet be directed to a specific system (Web server) in the DMZ. Any incoming SMTP traffic (port 25) can be directed to a different (mail server) system. The same for FTP (ports 20 and 21), etc.

Why not run all those services on just one box? A number of reasons. Better security (only one service needs to be configured per system), load balancing, finer control over who accesses what from your internal LAN, or you may already have a mail server but you'd like to add other servers along with implementing a DMZ.

If you just want to make a Web or e-mail server that's running on your internal LAN publically accessible, you don't have to set up a full-blown DMZ. Just set up the "outside firewall" system so you have port forwarding. This, however, leaves your LAN systems more vulnerable to a sophisticated hacker than a full-blown DMZ does.

The Outside Firewall

Let's expand the DMZ diagram a bit and see how we would set up the addresses, etc. As you can see, the DMZ is simply set up as a small private network with two gateways.

Addressing in a DMZ

So how do you accomplish PAT using IPTABLES? You have to use add a few commands to the above firewall script so that the last section of the script looks like this:


####################################################################### # FORWARD: Enable Forwarding and thus IPMASQ #          Allow all connections OUT and only existing/related IN  iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT  # Allow forwarding of incoming Port 80 traffic to DMZ Web server iptables -A FORWARD -i $EXTIF -o $INTIF -d 192.168.1.6 -p tcp --dport 80 -j ACCEPT  # Catch all rule, all other forwarding is denied and logged.  iptables -A FORWARD -j drop-and-log-it  # Enable SNAT (MASQUERADE) functionality on $EXTIF iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP  # Enable DNAT port translation to DMZ Web server iptables -t nat -A PREROUTING -i $EXTIF -d $EXTIP -p tcp --dport 80 -j DNAT --to 192.168.1.6  echo -e "       Firewall server rule loading complete\n\n"  

You can use PAT in this manner if you also have Citrix or VPN boxes set up in your DMZ for remote access by employees. That way they can just point their remote client to your domain name (providing it resolves to the public IP address on the external interface of the outside firewall) and you can have the outside firewall forward the traffic onto the appropriate box based on the port number in the incoming packets.

QUIZ! You'll also need to add a static route to your outside firewall. Looking at the above diagram can you think of what it would be needed for? And if you know, what would the correct route command be? When you think you've got the answers, drag your mouse over the blank area below to see if you're right:

You need a static route which points traffic destined for the "Internal Network" to the external interface of the inside firewall. For the above diagram it would be:
route add -net 172.16.0.0 netmask 255.255.0.0 gw 192.168.1.2
Note that if you have problems accessing an FTP server that you have set up in the DMZ, make sure your FTP client or browser is set to use PASSIVE FTP. In IE6 there's a "Use passive FTP" checkbox under Tools/Options/Advanced. With the WS_FTP client there's a checkbox under the Advanced tab of the "Session Properties" window.

The Inside Firewall

While the outside firewall is mainly for PAT and masquerading, the inside firewall is where you do most of your traffic restriction. You want to restrict outgoing traffic to only those services (port numbers) you want users on the internal network to have, i.e. Web (80), POP (110) to the mail server in the DMZ, FTP (20/21), etc.

Incoming traffic should be restricted to only "established" traffic. This is accomplished in our above script using the command:

iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT

Remember that this is for the external interface of the inside firewall system (the interface that connects to the DMZ).

You may also want to come up with some INPUT rules for the internal interface (the interface that connects to the internal network) which would restrict outgoing user traffic from the internal network to only certain ports or networks. Also remember that there are no NAT rules on this inside firewall system. All the NAT stuff is done on the outside firewall system.

Getting the right rules on the right boxes is a balancing act. It all depends how you want to filter things. You can put traffic restrictions on your outside firewall too (limiting incoming traffic to Web, mail, and FTP traffic for instance). However, you wouldn't want to put the above established-traffic rule on the external interface of your oustide firewall or no one (or no system) on the Internet could ever create a connection to your Web or mail or other DMZ-located systems.

Troubleshooting

If something isn't getting through our firewall you have to find out if the firewall is stopping it or you have some other configuration issue. The fact that logging to the console of dropped packets is enabled by the script you can tell right away if the firewall is stopping the traffic. Packet information will be displayed on the screen. This indicates that your rules aren't correct for what you're trying to accomplish because the firewall is dropping the packets you want to go through.

If traffic isn't getting through but you're not getting any packet information displayed on the screen, it's likely something with the configuration of the system behind the firewall. Don't assume! I beat my brains out for three hours trying to figure out why I wasn't getting a response from my Web server located behind the firewall. No packet information was being displayed on the screen (i.e. the firewall wasn't dropping anything).

It ended up that I did not have the firewall's internal NIC address entered as the default gateway on the Web server system, not the firewall. When the Web server gets a request from a browser on the Internet, it will try and respond to the address that was given as the source address in the request. This source address will be that of the system that's trying to browse to your server over the Internet. This address won't be on the DMZ network, and without a valid gateway address specified in the /etc/network/interfaces file, the Web server won't know how to get to the non-local system.


Linux As A Router Top of page

Cisco's claim to fame is not that they have routers that will route TCP/IP. It's that they have routers that will simultaneously route TCP/IP, IPX/SPX (Novell), AppleTalk, and a few others. These are the protocols that computers use to transfer data between each other and these are the protocols that routers route. These are called routed protocols. Another big benefit of Cisco routers is that they will "talk" to one another using routing protocols. Routing protocols enable routers to update each others routing information so they can automatically adjust to changes in the network (when links go down for example). Using routing protocols to automatically adjust for network changes is known as "dynamic routing".

However, if your internal network isn't very complex and you're strictly using TCP/IP you don't need all the features that Cisco routers offer. You can set up a Linux system with two or three or even four network cards and set it up to be a router rather than spending $5,000 on a Cisco router. In cases where a network isn't complex, there's really no need to run any routing protocols. Any necessary changes made to the network's architecture are rare and can be compensated for by manually changing the routing information. When referring to Cisco routers, manually maintaining the routing information is done using "static routes".

Linux has a route command which lets you enter static routes also. However, no checking of the packets is done. Whatever comes in gets sent out. The benefit of using IPTABLES commands on a per-interface basis to do your packet forwarding is that you can do rules-based routing.



Where to learn more - The best of our bookshelves:

Linux Routers
More info...

The title of Linux Routers - A Primer for Network Administrators is misleading. It's way more than a "primer". It gives detailed listings of route and IPTABLES commands for setting up LAN, Internet, extranet, and satellite office routers. While it doesn't focus on any one distrbution, luckily Debian is the author's distro of choice so the examples in the book are based on it. Not only does the book give details on setting up frame relay and ISDN routers, but the author gives vendor information on where to obtain frame relay and ISDN capable PCI and ISA cards. He also covers how to use LRP (the Linux Router Project software that allows you to fit everything on a floppy disk) and has a very detailed chapter on masquerading.



In the firewall script above notice that the IPTABLES commands had referenced the different interface designations. The ability to apply rules to specific interfaces is the same thing that Cisco does with the IOS (Internetwork Operating System) software that runs on its routers. Packet filtering is a two step process with the Cisco IOS. You set up ACLs (Access Control Lists) and then apply them to the appropriate router interface(s).

If you set up a Linux box with three NICs their designations would be eth0, eth1, and eth2. Each interface (NIC) would be connected to a different subnet. You would then use IPTABLES commands to allow forwarding or denying of traffic between the NICs (and their connected subnetworks). Yes, it would be quite a sophisticated script, but it would be easier to learn IPTABLES and figure out what rules would be needed to accomplish your goals than it would be to learn the Cisco IOS. And once you did learn the Cisco IOS, and pay big bucks for a router, you'd still have to develop similarly-sophisticated ACLs.

For those that may be well-versed in routers, and would like to play around with Linux in a more complex routing environment, there is a server application known as gated that allows a Linux system to work with dynamic routing protocols like RIP and OSPF.


SECURITY WARNING

Do NOT plan to use the system you will create using these guide pages as a "production" (real) server. It will NOT be secure!

There are many steps involved in creating a secure Internet or LAN server. While we do refer to some things you can do to make your system more secure, there are many other measures related to system security that also need to be taken into consideration and they are not covered on these pages.

These guide pages are meant as a learning tool only. The knowledge gained on these pages will help you understand the material covered in security-related publications when you are ready to consider setting up a production server.

IPTables Startup di Debian


Karena kebiasaan menggunakan FreeBSD, maka program yang saya jalankan pada saat mesin tersebut booting biasanya saya letakkan di /etc/rc.local, saya tidak membutuhkan lokasi seperti /usr/local/etc/rc.d/ karena memang tidak diperlukan script yang panjang untuk cuma memanggil (misal) squid -DNYM. Tapi sempet bingung juga ketika ingin melakukan hal yang sama di Debian. Tapi akhirnya ketemu juga.

Ketika saya sudah menuliskan script firewall saya, saya mengeksekusinya dan jalan dengan baik. Cuma masalahnya saya ingin rule-rule iptables tersebut dijalankan tiap kali booting.

Pertama saya menjalankan sebuah text editor untuk kemudian saya tuliskan semua perintah iptables yang dijalankan, misal:


/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp \
--tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp \
--tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp \
--tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp \
--tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP

...dst...



Setelah yakin dengan rule-rule tersebut, paste semuanya di shell console, dan pastikan tidak ada error. Jika ada error, dan ingin mengulangi lagi proses paste nya, jangan lupa flush dulu iptables yang (siapa tau) sudah terlanjur jalan dengan:

shell> iptables -F
shell> iptables -X


Setelah yakin dengan semua rule dan setelah dipaste ke shell console tidak ada error, buatlah sebuah file seperti berikut:

shell> nano /etc/network/if-up.d/iptables


pada file tersebut tambahkan baris:

#!/bin/sh


lalu save. Pada console jalankan command berikut:

shell> iptables-save > /etc/iptables.conf
shell> echo "iptables-restore < /etc/iptables.conf" >> /etc/network/if-up.d/iptables
shell> chmod +x /etc/network/if-up.d/iptables


Nah, tiap kali reboot, script tersebut akan dijalankan dengan otomatis.
Selamat mencoba!

Kamis, 14 Juli 2011

ipteble linux

Introduction

Network security is a primary consideration in any decision to host a website as the threats are becoming more widespread and persistent every day. One means of providing additional protection is to invest in a firewall. Though prices are always falling, in some cases you may be able to create a comparable unit using the Linux iptables package on an existing server for little or no additional expenditure.


This chapter shows how to convert a Linux server into:

  • A firewall while simultaneously being your home website's mail, web and DNS server.
  • A router that will use NAT and port forwarding to both protect your home network and have another web server on your home network while sharing the public IP address of your firewall.

Creating an iptables firewall script requires many steps, but with the aid of the sample tutorials, you should be able to complete a configuration relatively quickly.

What Is iptables?

Originally, the most popular firewall/NAT package running on Linux was ipchains, but it had a number of shortcomings. To rectify this, the Netfilter organization decided to create a new product called iptables, giving it such improvements as:

  • Better integration with the Linux kernel with the capability of loading iptables-specific kernel modules designed for improved speed and reliability.
  • Stateful packet inspection. This means that the firewall keeps track of each connection passing through it and in certain cases will view the contents of data flows in an attempt to anticipate the next action of certain protocols. This is an important feature in the support of active FTP and DNS, as well as many other network services.
  • Filtering packets based on a MAC address and the values of the flags in the TCP header. This is helpful in preventing attacks using malformed packets and in restricting access from locally attached servers to other networks in spite of their IP addresses.
  • System logging that provides the option of adjusting the level of detail of the reporting.
  • Better network address translation.
  • Support for transparent integration with such Web proxy programs as Squid.
  • A rate limiting feature that helps iptables block some types of denial of service (DoS) attacks.

Considered a faster and more secure alternative to ipchains, iptables has become the default firewall package installed under RedHat and Fedora Linux.

Download And Install The Iptables Package

Before you begin, you need to make sure that the iptables software RPM is installed. (See Chapter 6, "Installing Linux Software", if you need a refresher.) When searching for the RPMs, remember that the filename usually starts with the software package name by a version number, as in iptables-1.2.9-1.0.i386.rpm.

How To Start iptables

You can start, stop, and restart iptables after booting by using the commands:

[root@bigboy tmp]# service iptables start [root@bigboy tmp]# service iptables stop [root@bigboy tmp]# service iptables restart 

To get iptables configured to start at boot, use the chkconfig command:.

[root@bigboy tmp]# chkconfig iptables on 

Determining The Status of iptables

You can determine whether iptables is running or not via the service iptables status command. Fedora Core will give a simple status message. For example

[root@bigboy tmp]# service iptables status Firewall is stopped. [root@bigboy tmp]# 

Packet Processing In iptables

All packets inspected by iptables pass through a sequence of built-in tables (queues) for processing. Each of these queues is dedicated to a particular type of packet activity and is controlled by an associated packet transformation/filtering chain.

There are three tables in total. The first is the mangle table which is responsible for the alteration of quality of service bits in the TCP header. This is hardly used in a home or SOHO environment.

The second table is the filter queue which is responsible for packet filtering. It has three built-in chains in which you can place your firewall policy rules. These are the:

  • Forward chain: Filters packets to servers protected by the firewall.
  • Input chain: Filters packets destined for the firewall.
  • Output chain: Filters packets originating from the firewall.

The third table is the nat queue which is responsible for network address translation. It has two built-in chains; these are:

  • Pre-routing chain: NATs packets when the destination address of the packet needs to be changed.
  • Post-routing chain: NATs packets when the source address of the packet needs to be changed

Table 14-1 Processing For Packets Routed By The Firewall

Queue Type Queue Function Packet Transformation Chain in Queue Chain Function
Filter Packet filtering
FORWARD 
Filters packets to servers accessible by another NIC on the firewall.
INPUT 
Filters packets destined to the firewall.
OUTPUT 
Filters packets originating from the firewall
Nat Network Address Translation
PREROUTING 
Address translation occurs before routing. Facilitates the transformation of the destination IP address to be compatible with the firewall's routing table. Used with NAT of the destination IP address, also known as destination NAT or DNAT.
POSTROUTING 
Address translation occurs after routing. This implies that there was no need to modify the destination IP address of the packet as in pre-routing. Used with NAT of the source IP address using either one-to-one or many-to-one NAT. This is known as source NAT, or SNAT.
OUTPUT 
Network address translation for packets generated by the firewall. (Rarely used in SOHO environments)
Mangle TCP header modification
PREROUTING POSTROUTING OUTPUT INPUT FORWARD 
Modification of the TCP packet quality of service bits before routing occurs. (Rarely used in SOHO environments)


You need to specify the table and the chain for each firewall rule you create. There is an exception: Most rules are related to filtering, so iptables assumes that any chain that's defined without an associated table will be a part of the filter table. The filter table is therefore the default.

To help make this clearer, take a look at the way packets are handled by iptables. In Figure 14.1 a TCP packet from the Internet arrives at the firewall's interface on Network A to create a data connection.

The packet is first examined by your rules in the mangle table's PREROUTING chain, if any. It is then inspected by the rules in the nat table's PREROUTING chain to see whether the packet requires DNAT. It is then routed.

If the packet is destined for a protected network, then it is filtered by the rules in the FORWARD chain of the filter table and, if necessary, the packet undergoes SNAT in the POSTROUTING chain before arriving at Network B. When the destination server decides to reply, the packet undergoes the same sequence of steps. Both the FORWARD and POSTROUTING chains may be configured to implement quality of service (QoS) features in their mangle tables, but this is not usually done in SOHO environments.

If the packet is destined for the firewall itself, then it passes through the mangle table of the INPUT chain, if configured, before being filtered by the rules in the INPUT chain of the filter table before. If it successfully passes these tests then it is processed by the intended application on the firewall.

At some point, the firewall needs to reply. This reply is routed and inspected by the rules in the OUTPUT chain of the mangle table, if any. Next, the rules in the OUTPUT chain of the nat table determine whether DNAT is required and the rules in the OUTPUT chain of the filter table are then inspected to help restrict unauthorized packets. Finally, before the packet is sent back to the Internet, SNAT and QoS mangling is done by the POSTROUTING chain

Figure 14-1 Iptables Packet Flow Diagram

Iptables.gif

It is now time to discuss the ways in which you add rules to these chains.

Targets And Jumps

Each firewall rule inspects each IP packet and then tries to identify it as the target of some sort of operation. Once a target is identified, the packet needs to jump over to it for further processing. Table 14.2 lists the built-in targets that iptables uses.


Table 14-2 Descriptions Of The Most Commonly Used Targets

target Desciption Most Common Options
ACCE
  • iptables stops further processing.
  • The packet is handed over to the end application or the operating system for processing

N/A

DROP
  • iptables stops further processing.
  • The packet is blocked

N/A

LOG
  • The packet information is sent to the syslog daemon for logging
  • iptables continues processing with the next rule in the table
  • As you can't log and drop at the same time, it is common to have two similar rules in sequence. The first will log the packet, the second will drop it.
--log-prefix "string" 

Tells iptables to prefix all log

messages with a user

defined string. Frequently used to tell

why the logged

packet was dropped

DNAT
  • Used to do destination network address translation.
  • ie. rewriting the destination IP address of the packet
--to-destination ipaddress 

Tells iptables

what the destination

IP address should be

SNAT
  • Used to do source network address translation rewriting the source IP address of the packet
  • The source IP address is user defined
--to-source 
[-
][:-]

Specifies the source IP address

and ports to be used by SNAT.

MASQUERADE
  • Used to do Source Network Address Translation.
  • By default the source IP address is the same as that used by the firewall's interface
[--to-ports [-]] 

Specifies the range

of source ports to which

the original source port

can be mapped.

Important Iptables Command Switch Operations

Each line of an iptables script not only has a jump, but they also have a number of command line options that are used to append rules to chains that match your defined packet characteristics, such the source IP address and TCP port. There are also options that can be used to just clear a chain so you can start all over again. Tables 14.2 through 14.6 list the most common options.

Table 14-2 General Iptables Match Criteria

iptables command Switch Desciption
-t <-table-> If you don't specify a table, then the filter table is assumed. As discussed before, the possible built-in tables include: filter, nat, mangle
-j Jump to the specified target chain when the packet matches the current rule.
-A Append rule to end of a chain
-F Flush. Deletes all the rules in the selected table
-p Match protocol. Types include, icmp, tcp, udp, and all
-s Match source IP address
-d Match destination IP address
-i Match "input" interface on which the packet enters.
-o Match "output" interface on which the packet exits


In this command switches example

iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1  -p TCP -j ACCEPT 

iptables is being configured to allow the firewall to accept TCP packets coming in on interface eth0 from any IP address destined for the firewall's IP address of 192.168.1.1. The 0/0 representation of an IP address means any.

Table 14-4 Common TCP and UDP Match Criteria

Switch Desciption
-p tcp --sport TCP source port. Can be a single value or a range in the format: start-port-number:end-port-number
-p tcp --dport TCP destination port. Can be a single value or a range in the format: starting-port:ending-port
-p tcp --syn Used to identify a new TCP connection request. ! --syn means, not a new connection request
-p udp --sport UDP source port. Can be a single value or a range in the format: starting-port:ending-port
-p udp --dport UDP destination port. Can be a single value or a range in the format: starting-port:ending-port


In this example:

iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP \          --sport 1024:65535 --dport 80 -j ACCEPT 

iptables is being configured to allow the firewall to accept TCP packets for routing when they enter on interface eth0 from any IP address and are destined for an IP address of 192.168.1.58 that is reachable via interface eth1. The source port is in the range 1024 to 65535 and the destination port is port 80 (www/http).

Table 14-5 Common ICMP (Ping) Match Criteria

Matches used with ---icmp-type Desciption
--icmp-type The most commonly used types are echo-reply and echo-request


In this example:

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT  -p icmp --icmp-type echo-reply   -j ACCEPT 

iptables is being configured to allow the firewall to send ICMP echo-requests (pings) and in turn, accept the expected ICMP echo-replies.

Consider another example

iptables -A INPUT -p icmp --icmp-type echo-request \          -m limit --limit 1/s -i eth0 -j ACCEPT 

The limit feature in iptables specifies the maximum average number of matches to allow per second. You can specify time intervals in the format /second, /minute, /hour, or /day, or you can use abbreviations so that 3/second is the same as 3/s.

In this example, ICMP echo requests are restricted to no more than one per second. When tuned correctly, this feature allows you to filter unusually high volumes of traffic that characterize denial of service (DOS) attacks and Internet worms.

iptables -A INPUT -p tcp --syn -m limit --limit 5/s -i eth0 -j ACCEPT 

You can expand on the limit feature of iptables to reduce your vulnerability to certain types of denial of service attack. Here a defense for SYN flood attacks was created by limiting the acceptance of TCP segments with the SYN bit set to no more than five per second.

Table 14-6 Common Extended Match Criteria

Switch Desciption
-m multiport --sports A variety of TCP/UDP source ports separated by commas. Unlike when -m isn't used, they do not have to be within a range.
-m multiport --dports A variety of TCP/UDP destination ports separated by commas. Unlike when -m isn't used, they do not have to be within a range.
-m multiport --ports A variety of TCP/UDP ports separated by commas. Source and destination ports are assumed to be the same and they do not have to be within a range.
-m --state

The most frequently tested states are:

ESTABLISHED: The packet is part of a connection that has seen packets in both directions

NEW: The packet is the start of a new connection

RELATED: The packet is starting a new secondary connection. This is a common feature of such protocols such as an FTP data transfer, or an ICMP error.

INVALID: The packet couldn't be identified. Could be due to insufficient system resources, or ICMP errors that don't match an existing data flow.

This is an expansion on the previous example:

iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP \          --sport 1024:65535 -m multiport --dports 80,443 -j ACCEPT   iptables -A FORWARD -d 0/0 -o eth0 -s 192.168.1.58 -i eth1 -p TCP \          -m state --state ESTABLISHED -j ACCEPT 

Here iptables is being configured to allow the firewall to accept TCP packets to be routed when they enter on interface eth0 from any IP address destined for IP address of 192.168.1.58 that is reachable via interface eth1. The source port is in the range 1024 to 65535 and the destination ports are port 80 (www/http) and 443 (https). The return packets from 192.168.1.58 are allowed to be accepted too. Instead of stating the source and destination ports, you can simply allow packets related to established connections using the -m state and --state ESTABLISHED options.

Using User Defined Chains

As you may remember, you can configure iptables to have user-defined chains. This feature is frequently used to help streamline the processing of packets. For example, instead of using a single, built-in chain for all protocols, you can use the chain to determine the protocol type for the packet and then hand off the actual final processing to a user-defined, protocol-specific chain in the filter table. In other words, you can replace a long chain with a stubby main chain pointing to multiple stubby chains, thereby shortening the total length of all chains the packet has to pass through. For example

iptables -A INPUT -i eth0  -d 206.229.110.2 -j fast-input-queue iptables -A OUTPUT -o eth0 -s 206.229.110.2 -j fast-output-queue  iptables -A fast-input-queue  -p icmp -j icmp-queue-in iptables -A fast-output-queue -p icmp -j icmp-queue-out  iptables -A icmp-queue-out -p icmp --icmp-type echo-request \          -m state --state NEW -j ACCEPT  iptables -A icmp-queue-in -p icmp --icmp-type echo-reply -j ACCEPT 

Here six queues help assist in improving processing speed. Table 14.7 summarizes the function of each.

Table 14.7 Custom Queues Example Listing

Chain Desciption
INPUT The regular built-in INPUT chain in iptables
OUTPUT The regular built-in OUTPUT chain in iptables
fast-input-queue Input chain dedicated to identifying specific protocols and shunting the packets to protocol specific chains.
fast-output-queue Output chain dedicated to identifying specific protocols and shunting the packets to protocol specific chains.
icmp-queue-out Output queue dedicated to ICMP
icmp-queue-in Input queue dedicated to ICMP

Saving Your iptables Scripts

The service iptables save command permanently saves the iptables configuration in the /etc/sysconfig/iptables file. When the system reboots, the iptables-restore program reads the configuration and makes it the active configuration.

The format of the /etc/sysconfig/iptables file is slightly different from that of the scripts shown in this chapter. The initialization of built-in chains is automatic and the string "iptables" is omitted from the rule statements.

Here is a sample /etc/sysconfig/iptables configuration that allows ICMP, IPSec (ESP and AH packets), already established connections, and inbound SSH.

[root@bigboy tmp]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.2.9 on Mon Nov 8 11:00:07 2004  *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [144:12748] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 255 -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Mon Nov 8 11:00:07 2004 [root@bigboy tmp]# 

It is never a good idea to edit this script directly because it is always overwritten by the save command and it doesn't save any comments at all, which can also make it extremely difficult to follow. For these reasons, you're better off writing and applying a customized script and then using the service iptables save command to make the changes permanent.

Fedora's iptables Rule Generator

Fedora comes with a program called lokkit that you can use to generate a very rudimentary firewall rule set. It prompts for the level of security and then gives you the option of doing simple customizations. It is a good place for beginners to start on a test system so that they can see a general rule structure.

Like the service iptables save command, lokkit saves the firewall rules in a new /etc/sysconfig/iptables file for use on the next reboot.

Once you have become familiar with the iptables syntax, it's best to write scripts that you can comment and then save it to /etc/sysconfig/iptables. It makes them much more manageable and readable.

Recovering From A Lost Script

Sometimes the script you created to generate iptables rules may get corrupted or lost, or you might inherit a new system from an administer and cannot find the original script used to protect it. In these situations, you can use the iptables-save and iptables-restore commands to assist you with the continued management of the server.

Unlike the service iptables save command, which actually saves a permanent copy of the firewall's active configuration in the /etc/sysconfig/iptables file, iptables-save displays the active configuration to the screen in /etc/sysconfig/iptables format. If you redirect the iptables-save screen output to a file with the > symbol, then you can edit the output and reload the updated rules when they meet your new criteria with the iptables-restore command.

This example exports the iptables-save output to a text file named firewall-config.

[root@bigboy tmp]# iptables-save > firewall-config [root@bigboy tmp]# cat firewall-config # Generated by iptables-save v1.2.9 on Mon Nov 8 11:00:07 2004 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [144:12748] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 255 -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Mon Nov 8 11:00:07 2004 [root@bigboy tmp]# 

After editing the firewall-config file with the commands you need, you can reload it into the active firewall rule set with the iptables-restore command.

[root@bigboy tmp]# iptables-restore < firewall-config 

Finally, you should permanently save the active configuration so that it will be loaded automatically when the system reboots:

[root@bigboy tmp]# service iptables save 

If desired, you can eventually convert this firewall-config file into a regular iptables script so that it becomes more easily recognizable and manageable.

Loading Kernel Modules Needed By iptables

The iptables application requires you to load certain kernel modules to activate some of its functions. Whenever any type of NAT is required, the iptable_nat module needs to be loaded. The ip_conntrack_ftp module needs to be added for FTP support and should always be loaded with the ip_conntrack module which tracks TCP connection states. As most scripts probably will keep track of connection states, the ip_conntrack module will be needed in any case. The ip_nat_ftp module also needs to be loaded for FTP servers behind a NAT firewall.

Unfortunately, the /etc/sysconfig/iptables file doesn't support the loading of modules, so you'll have to add the statements to your /etc/rc.local file which is run at the end of every reboot.

The script samples in this chapter include these statements only as a reminder to place them in the /etc/rc.local file

# File: /etc/rc.local  # Module to track the state of connections modprobe ip_conntrack  # Load the iptables active FTP module, requires ip_conntrack modprobe ip_conntrack_ftp    # Load iptables NAT module when required modprobe iptable_nat   # Module required for active an FTP server using NAT modprobe ip_nat_ftp 

Sample iptables Scripts

This section provides some sample scripts you can use to get iptables working for you. Pay special attention to the logging example at the end.

The basic initialization script snippet should also be included in all your scripts to ensure the correct initialization of your chains should you decide to restart your script after startup. This chapter also includes other snippets that will help you get basic functionality. It should be a good guide to get you started.

Note: Once you feel more confident, you can use Appendix II "Codes, Scripts, and Configurations", to find detailed scripts. The appendix shows you how to allow your firewall to:

  • Be used as a Linux Web, mail and DNS server
  • Be the NAT router for your home network
  • Prevent various types of attacks using corrupted TCP, UDP and ICMP packets.
  • Provide outbound passive FTP access from the firewall

There are also simpler code snippets in the Appendix II "Codes, Scripts, and Configurations", for Inbound and outbound FTP connections to and from your firewall

Basic Operating System Defense

You can do several things before employing your firewall script to improve the resilience of your firewall to attack. For example, the Linux operating system has a number of built-in protection mechanisms that you should activate by modifying the system kernel parameters in the /proc filesystem via the /etc/sysctl.conf file. Using of /etc/sysctl.conf to modify kernel parameters is explained in more detail in , Appendix I "Miscellaneous Linux Topics".

Here is a sample configuration:

# File: /etc/sysctl.conf   #--------------------------------------------------------------- # Disable routing triangulation. Respond to queries out # the same interface, not another. Helps to maintain state # Also protects against IP spoofing #---------------------------------------------------------------   net/ipv4/conf/all/rp_filter = 1     #--------------------------------------------------------------- # Enable logging of packets with malformed IP addresses #---------------------------------------------------------------   net/ipv4/conf/all/log_martians = 1     #--------------------------------------------------------------- # Disable redirects #---------------------------------------------------------------   net/ipv4/conf/all/send_redirects = 0     #--------------------------------------------------------------- # Disable source routed packets #---------------------------------------------------------------   net/ipv4/conf/all/accept_source_route = 0     #--------------------------------------------------------------- # Disable acceptance of ICMP redirects #---------------------------------------------------------------   net/ipv4/conf/all/accept_redirects = 0     #--------------------------------------------------------------- # Turn on protection from Denial of Service (DOS) attacks #---------------------------------------------------------------   net/ipv4/tcp_syncookies = 1     #--------------------------------------------------------------- # Disable responding to ping broadcasts #---------------------------------------------------------------   net/ipv4/icmp_echo_ignore_broadcasts = 1   #--------------------------------------------------------------- # Enable IP routing. Required if your firewall is protecting a # network, NAT included #---------------------------------------------------------------  net/ipv4/ip_forward = 1 

Advanced iptables Initialization

You may also want to add some more advanced initialization steps to your script, including checks for Internet traffic from RFC1918 private addresses. The sample script snippet below outlines how to do this. More complex initializations would include checks for attacks using invalid TCP flags and directed broadcasts which are beyond the scope of this book.

The script also uses multiple user-defined chains to make the script shorter and faster as the chains can be repeatedly accessed. This removes the need to repeat the same statements over and over again.

You can take even more precautions to further protect your network. The complete firewall script in Appendix II "Codes, Scripts, and Configurations", outlines most of them.

#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= # # Define networks: NOTE!! You may want to put these "EXTERNAL" # definitions at the top of your script. # #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=   EXTERNAL_INT="eth0"            # External Internet interface EXTERNAL_IP="97.158.253.25"    # Internet Interface IP address   #--------------------------------------------------------------- # Initialize our user-defined chains #---------------------------------------------------------------   iptables -N valid-src iptables -N valid-dst   #--------------------------------------------------------------- # Verify valid source and destination addresses for all packets #---------------------------------------------------------------   iptables -A INPUT   -i $EXTERNAL_INT -j valid-src iptables -A FORWARD -i $EXTERNAL_INT -j valid-src iptables -A OUTPUT  -o $EXTERNAL_INT -j valid-dst iptables -A FORWARD -o $EXTERNAL_INT -j valid-dst   #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=# # # Source and Destination Address Sanity Checks # # Drop packets from networks covered in RFC 1918 (private nets) # Drop packets from external interface IP # #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#   iptables -A valid-src -s 10.0.0.0/8     -j DROP iptables -A valid-src -s 172.16.0.0/12  -j DROP iptables -A valid-src -s 192.168.0.0/16 -j DROP iptables -A valid-src -s 224.0.0.0/4    -j DROP iptables -A valid-src -s 240.0.0.0/5    -j DROP iptables -A valid-src -s 127.0.0.0/8    -j DROP iptables -A valid-src -s 0.0.0.0/8       -j DROP iptables -A valid-src -d 255.255.255.255 -j DROP iptables -A valid-src -s 169.254.0.0/16  -j DROP iptables -A valid-src -s $EXTERNAL_IP    -j DROP iptables -A valid-dst -d 224.0.0.0/4    -j DROP 

Allowing DNS Access To Your Firewall

You'll almost certainly want your firewall to make DNS queries to the Internet. This is not because it is required for the basic functionality of the firewall, but because of Fedora Linux's yum RPM updater which will help to keep the server up to date with the latest security patches. The following statements will apply not only for firewalls acting as DNS clients but also for firewalls working in a caching or regular DNS server role.

#--------------------------------------------------------------- # Allow outbound DNS queries from the FW and the replies too # # - Interface eth0 is the internet interface # # Zone transfers use TCP and not UDP. Most home networks # / websites using a single DNS server won't require TCP statements # #---------------------------------------------------------------   iptables -A OUTPUT -p udp -o eth0 --dport 53 --sport 1024:65535 \          -j ACCEPT   iptables -A INPUT -p udp -i eth0 --sport 53 --dport 1024:65535 \          -j ACCEPT 

Allowing WWW And SSH Access To Your Firewall

This sample snippet is for a firewall that doubles as a web server that is managed remotely by its system administrator via secure shell (SSH) sessions. Inbound packets destined for ports 80 and 22 are allowed thereby making the first steps in establishing a connection. It isn't necessary to specify these ports for the return leg as outbound packets for all established connections are allowed. Connections initiated by persons logged into the Web server will be denied as outbound NEW connection packets aren't allowed.

#--------------------------------------------------------------- # Allow previously established connections # - Interface eth0 is the internet interface #---------------------------------------------------------------  iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED \   -j ACCEPT  #--------------------------------------------------------------- # Allow port 80 (www) and 22 (SSH) connections to the firewall #---------------------------------------------------------------  iptables -A INPUT -p tcp -i eth0 --dport 22 --sport 1024:65535 \   -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp -i eth0 --dport 80 --sport 1024:65535 \   -m state --state NEW -j ACCEPT  

Allowing Your Firewall To Access The Internet

This iptables script enables a user on the firewall to use a Web browser to surf the Internet. HTTP traffic uses TCP port 80, and HTTPS uses port 443.

Note: HTTPS (secure HTTP) is used for credit card transactions frequently, as well as by RedHat Linux servers running up2date. FTP and HTTP are frequently used with yum.

#--------------------------------------------------------------- # Allow port 80 (www) and 443 (https) connections from the firewall #---------------------------------------------------------------  iptables -A OUTPUT -j ACCEPT -m state \   --state NEW,ESTABLISHED,RELATED -o eth0 -p tcp \   -m multiport --dports 80,443 --sport 1024:65535   #--------------------------------------------------------------- # Allow previously established connections # - Interface eth0 is the internet interface #---------------------------------------------------------------  iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED  \ -i eth0 -p tcp   

If you want all TCP traffic originating from the firewall to be accepted, then remove the line:

-m multiport --dports 80,443 --sport 1024:65535 

Allow Your Home Network To Access The Firewall

In this example, eth1 is directly connected to a home network using IP addresses from the 192.168.1.0 network. All traffic between this network and the firewall is simplistically assumed to be trusted and allowed.

Further rules will be needed for the interface connected to the Internet to allow only specific ports, types of connections and possibly even remote servers to have access to your firewall and home network.

#--------------------------------------------------------------- # Allow all bidirectional traffic from your firewall to the # protected network # - Interface eth1 is the private network interface #---------------------------------------------------------------  iptables -A INPUT   -j ACCEPT -p all -s 192.168.1.0/24 -i eth1 iptables -A OUTPUT  -j ACCEPT -p all -d 192.168.1.0/24 -o eth1 

Masquerading (Many to One NAT)

As explained in Chapter 2, "Introduction to Networking", masquerading is another name for what many call many to one NAT. In other words, traffic from all devices on one or more protected networks will appear as if it originated from a single IP address on the Internet side of the firewall.

Note: The masquerade IP address always defaults to the IP address of the firewall's main interface. The advantage of this is that you never have to specify the NAT IP address. This makes it much easier to configure iptables NAT with DHCP.

You can configure many to one NAT to an IP alias, using the POSTROUTING and not the MASQUERADE statement. An example of this can be seen in the static NAT section that follows.

Keep in mind that iptables requires the iptables_nat module to be loaded with the modprobe command for the masquerade feature to work. Masquerading also depends on the Linux operating system being configured to support routing between the internet and private network interfaces of the firewall. This is done by enabling IP forwarding or routing by giving the file /proc/sys/net/ipv4/ip_forward the value 1 as opposed to the default disabled value of 0.

Once masquerading has been achieved using the POSTROUTING chain of the nat table, you will have to configure iptables to allow packets to flow between the two interfaces. To do this, use the FORWARD chain of the filter table. More specifically, packets related to NEW and ESTABLISHED connections will be allowed outbound to the Internet, but only packets related to ESTABLISHED connections will be allowed inbound. This helps to protect the home network from anyone trying to initiate connections from the Internet:

#--------------------------------------------------------------- # Load the NAT module # # Note: It is best to use the /etc/rc.local example in this #       chapter. This value will not be retained in the #       /etc/sysconfig/iptables file. Included only as a reminder. #---------------------------------------------------------------   modprobe iptable_nat  #--------------------------------------------------------------- # Enable routing by modifying the ip_forward /proc filesystem file # # Note: It is best to use the /etc/sysctl.conf example in this #       chapter. This value will not be retained in the #       /etc/sysconfig/iptables file. Included only as a reminder. #---------------------------------------------------------------   echo 1 > /proc/sys/net/ipv4/ip_forward   #--------------------------------------------------------------- # Allow masquerading # - Interface eth0 is the internet interface # - Interface eth1 is the private network interface #---------------------------------------------------------------   iptables -A POSTROUTING -t nat -o eth0 -s 192.168.1.0/24 -d 0/0 \          -j MASQUERADE   #--------------------------------------------------------------- # Prior to masquerading, the packets are routed via the filter # table's FORWARD chain. # Allowed outbound: New, established and related connections # Allowed inbound : Established and related connections #---------------------------------------------------------------   iptables -A FORWARD -t filter -o eth0 -m state \          --state NEW,ESTABLISHED,RELATED -j ACCEPT   iptables -A FORWARD -t filter -i eth0 -m state \          --state ESTABLISHED,RELATED -j ACCEPT  

Note: If you configure your firewall to do masquerading, then if should be the used as the default gateway for all your servers on the network.

Port Forwarding Type NAT (DHCP DSL)

In many cases home users may get a single DHCP public IP address from their ISPs. If a Linux firewall is also your interface to the Internet and you want to host a Web site on one of the NAT protected home servers, then you will have to use port forwarding. Here the combination of the firewall's single IP address, the remote server's IP address, and the source/destination port of the traffic can be used to uniquely identify a traffic flow. All traffic that matches a particular combination of these factors may then be forwarded to a single server on the private network.

Port forwarding is handled by the PREROUTING chain of the nat table. As in masquerading, the iptables_nat module has to be loaded and routing has to be enabled for port forwarding to work. Routing too must be allowed in iptables with the FORWARD chain, this includes all NEW inbound connections from the Internet matching the port forwarding port plus all future packets related to the ESTABLISHED connection in both directions:

#--------------------------------------------------------------- # Load the NAT module # # Note: It is best to use the /etc/rc.local example in this #       chapter. This value will not be retained in the #       /etc/sysconfig/iptables file. Included only as a reminder. #---------------------------------------------------------------   modprobe iptable_nat  #--------------------------------------------------------------- # Get the IP address of the Internet interface eth0 (linux only) # # You'll have to use a different expression to get the IP address # for other operating systems which have a different ifconfig output # or enter the IP address manually in the PREROUTING statement # # This is best when your firewall gets its IP address using DHCP. # The external IP address could just be hard coded ("typed in # normally") #---------------------------------------------------------------   external_int="eth0" external_ip="`ifconfig $external_int | grep 'inet addr' | \                        awk '{print $2}' | sed -e 's/.*://'`" #--------------------------------------------------------------- # Enable routing by modifying the ip_forward /proc filesystem file # # Note: It is best to use the /etc/sysctl.conf example in this #       chapter. This value will not be retained in the #       /etc/sysconfig/iptables file. Included only as a reminder. #---------------------------------------------------------------   echo 1 > /proc/sys/net/ipv4/ip_forward   #--------------------------------------------------------------- # Allow port forwarding for traffic destined to port 80 of the # firewall's IP address to be forwarded to port 8080 on server # 192.168.1.200 # # - Interface eth0 is the internet interface # - Interface eth1 is the private network interface #---------------------------------------------------------------   iptables -t nat -A PREROUTING -p tcp -i eth0 -d $external_ip \      --dport 80 --sport 1024:65535 -j DNAT --to 192.168.1.200:8080   #--------------------------------------------------------------- # After DNAT, the packets are routed via the filter table's # FORWARD chain. # Connections on port 80 to the target machine on the private # network must be allowed. #---------------------------------------------------------------   iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.200 \     --dport 8080 --sport 1024:65535 -m state --state NEW -j ACCEPT   iptables -A FORWARD -t filter -o eth0 -m state \          --state NEW,ESTABLISHED,RELATED -j ACCEPT   iptables -A FORWARD -t filter -i eth0 -m state \          --state ESTABLISHED,RELATED -j ACCEPT   

Static NAT

In this example, all traffic to a particular public IP address, not just to a particular port, is translated to a single server on the protected subnet. Because the firewall has more than one IP address, I can't recommend MASQUERADE; it will force masquerading as the IP address of the primary interface and not as any of the alias IP addresses the firewall may have. Instead, use SNAT to specify the alias IP address to be used for connections initiated by all other servers in the protected network.

Note: Although the nat table NATs all traffic to the target servers (192.168.1.100 to 102), only connections on ports 80,443 and 22 are allowed through by the FORWARD chain. Also notice how you have to specify a separate -m multiport option whenever you need to match multiple non-sequential ports for both source and destination.

In this example the firewall:

  • Uses one to one NAT to make the server 192.168.1.100 on your home network appear on the Internet as IP addresses 97.158.253.26.
  • Creates a many to one NAT for the 192.168.1.0 home network in which all the servers appear on the Internet as IP address 97.158.253.29. This is different from masquerading

You will have to create alias IP addresses for each of these Internet IPs for one to one NAT to work.

#--------------------------------------------------------------- # Load the NAT module # # Note: It is best to use the /etc/rc.local example in this #       chapter. This value will not be retained in the #       /etc/sysconfig/iptables file. Included only as a reminder. #---------------------------------------------------------------   modprobe iptable_nat   #--------------------------------------------------------------- # Enable routing by modifying the ip_forward /proc filesystem file # # Note: It is best to use the /etc/sysctl.conf example in this #       chapter. This value will not be retained in the #       /etc/sysconfig/iptables file. Included only as a reminder. #---------------------------------------------------------------   echo 1 > /proc/sys/net/ipv4/ip_forward   #--------------------------------------------------------------- # NAT ALL traffic: ########### # REMEMBER to create aliases for all the internet IP addresses below ########### # # TO:             FROM:           MAP TO SERVER: # 97.158.253.26    Anywhere        192.168.1.100 (1:1 NAT - Inbound) # Anywhere        192.168.1.100   97.158.253.26 (1:1 NAT - Outbound) # Anywhere        192.168.1.0/24  97.158.253.29 (FW IP) # # SNAT is used to NAT all other outbound connections initiated # from the protected network to appear to come from # IP address 97.158.253.29 # # POSTROUTING: #   NATs source IP addresses. Frequently used to NAT connections from #   your home network to the Internet # # PREROUTING: #   NATs destination IP addresses. Frequently used to NAT #   connections from the Internet to your home network # # - Interface eth0 is the internet interface # - Interface eth1 is the private network interface #---------------------------------------------------------------   # PREROUTING statements for 1:1 NAT # (Connections originating from the Internet)  iptables -t nat -A PREROUTING -d 97.158.253.26 -i eth0 \         -j DNAT --to-destination 192.168.1.100  # POSTROUTING statements for 1:1 NAT # (Connections originating from the home network servers)  iptables -t nat -A POSTROUTING -s 192.168.1.100 -o eth0 \          -j SNAT --to-source 97.158.253.26   # POSTROUTING statements for Many:1 NAT # (Connections originating from the entire home network)  iptables -t nat -A POSTROUTING -s 192.168.1.0/24 \          -j SNAT -o eth0 --to-source 97.158.253.29  # Allow forwarding to each of the servers configured for 1:1 NAT # (For connections originating from the Internet. Notice how you # use the real IP addresses here)   iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.100 \     -m multiport --dports 80,443,22 \     -m state --state NEW -j ACCEPT     # Allow forwarding for all New and Established SNAT connections # originating on the home network AND already established # DNAT connections   iptables -A FORWARD -t filter -o eth0 -m state \          --state NEW,ESTABLISHED,RELATED -j ACCEPT   # Allow forwarding for all 1:1 NAT connections originating on # the Internet that have already passed through the NEW forwarding # statements above   iptables -A FORWARD -t filter -i eth0 -m state \          --state ESTABLISHED,RELATED -j ACCEPT 

Troubleshooting iptables

A number of tools are at your disposal for troubleshooting iptables firewall scripts. One of the best methods is to log all dropped packets to the /var/log/messages file.

Checking The Firewall Logs

You track packets passing through the iptables list of rules using the LOG target. You should be aware that the LOG target:

  • Logs all traffic that matches the iptables rule in which it is located.
  • Automatically writes an entry to the /var/log/messages file and then executes the next rule.

If you want to log only unwanted traffic, therefore, you have to add a matching rule with a DROP target immediately after the LOG rule. If you don't, you'll find yourself logging both desired and unwanted traffic with no way of discerning between the two, because by default iptables doesn't state why the packet was logged in its log message.

This example logs a summary of failed packets to the file /var/log/messages. You can use the contents of this file to determine which TCP/UDP ports you need to open to provide access to specific traffic that is currently stopped.

#--------------------------------------------------------------- # Log and drop all other packets to file /var/log/messages # Without this we could be crawling around in the dark #---------------------------------------------------------------   iptables -A OUTPUT -j LOG iptables -A INPUT -j LOG iptables -A FORWARD -j LOG   iptables -A OUTPUT -j DROP iptables -A INPUT -j DROP iptables -A FORWARD -j DROP  

Here are some examples of the output of this file:

  • Firewall denies replies to DNS queries (UDP port 53) destined to server 192.168.1.102 on the home network.
Feb 23 20:33:50 bigboy kernel: IN=wlan0 OUT= MAC=00:06:25:09:69:80:00:a0:c5:e1:3e:88:08:00 SRC=192.42.93.30 DST=192.168.1.102 LEN=220 TOS=0x00 PREC=0x00 TTL=54 ID=30485 PROTO=UDP SPT=53 DPT=32820 LEN=200 
  • Firewall denies Windows NetBIOS traffic (UDP port 138)
Feb 23 20:43:08 bigboy kernel: IN=wlan0 OUT= MAC=ff:ff:ff:ff:ff:ff:00:06:25:09:6a:b5:08:00 SRC=192.168.1.100 DST=192.168.1.255 LEN=241 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=138 DPT=138 LEN=221 
  • Firewall denies Network Time Protocol (NTP UDP port 123)
Feb 23 20:58:48 bigboy kernel: IN= OUT=wlan0 SRC=192.168.1.102 DST=207.200.81.113 LEN=76 TOS=0x10 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=123 DPT=123 LEN=56 

The traffic in all these examples isn't destined for the firewall; Therefore, you should check your INPUT, OUTPUT, FORWARD, and NAT related statements. If the firewall's IP address is involved, then you should focus on the INPUT and OUTPUT statements

If nothing shows up in the logs, then follow the steps in Chapter 4, "Simple Network Troubleshooting", to determine whether the data is reaching your firewall at all and, if it is not, the location on your network that could be causing the problem.

As a general rule, you won't be able to access the public NAT IP addresses from servers on your home network. Basic NAT testing requires you to ask a friend to try to connect to your home network from the Internet.

You can then use the logging output in /var/log/messages to make sure that the translations are occurring correctly and iptables isn't dropping the packets after translation occurs.

iptables Won't Start

The iptables startup script expects to find the /etc/sysconfig/iptables before it starts. If none exists, then symptoms include the firewall status always being stopped and the /etc/init.d/iptables script running without the typical [OK] or [FAILED] messages.

If you have just installed iptables and have never applied a policy, then you will face this problem. Unfortunately, running the service iptables save command before restarting won't help either. You have to create this file.

[root@bigboy tmp]# service iptables start [root@bigboy tmp]#  [root@bigboy tmp]# touch /etc/sysconfig/iptables [root@bigboy tmp]# chmod 600 /etc/sysconfig/iptables  [root@bigboy tmp]# service iptables start Applying iptables firewall rules: [  OK  ] [root@bigboy tmp]# 

Conclusion

A firewall is a critical part of any establishment that connects to an unprotected network such as the Internet, but a firewall is never sufficient. Web site security involves not just protection from corrupted packets or maliciously overwhelming volumes of traffic, but also involves daily data backups to help recovery from device failures, regular application patching, enforced password policies, restricted and monitored physical access to your servers, reliable power and cooling, secured cabling, redundant hardware, and, probably most importantly, well trained and motivated employees. Security should be viewed as anything that contributes to the desired risk-free functioning of your site, and it is well worth the money to invest in and learn from a book that specializes in the topic.

Senin, 11 Juli 2011

Mengatasi Masalah Fatal error: Call to undefined method wpdb::get_blog_prefix() in wp-admin/includes/user.php

Setelah update terbaru untuk ke WordPress 3.0.1 saya mengalami masalah ketika mencoba untuk mengakses beberapa link di dalam admin control panel. Pesan error yang muncul:

Fatal error: Call to undefined method wpdb::get_blog_prefix() in wp-admin/includes/user.php on line 260

Apa yang sebenarnya terjadi? Padahal saya baru saja Mengatasi Masalah PHP Fatal error: Call to undefined method wpdb::tables() yang terjadi saat upgrade WordPress 3.0.1.

Pemecahan Masalah

Mengikuti petunjuk yang saya temukan dari wordpress.org, saya mulai menonaktifkan cache plugin di blog saya. Saya menggunakan DB-Cache dan DB-Super-Cache. Setelah menonaktifkannya masalah terpecahkan. Jadi silahkan anda coba bila menemukan masalah yang sama.

Plugin-plugin Caching Database ini belum compatible dengan WordPress 3.0. Jadi sementara ini saya menunggu plugin-plugin ini melakukan pembaruan dan update.

Cara Install dan Membuat Server Di Komputer Lokal

Software Server Gratis XAMPP

Software Server Gratis XAMPP

Membuat server di komputer lokal bisa dilakukan dengan install software server di hardisk lokal komputer tersebut. Software server yang cukup populer dan gratis adalah XAMPP (singkatan dari Cross-Platform (X) Apache, MySQL, PHP and Perl) yang merupakan software open source.

Manfaat membuat server di komputer lokal umumnya untuk pengembangan aplikasi berbasis PHP dan Perl, tanpa harus menyewa server atau hosting berbayar (selain butuh modal lokasinya juga jauh), sehingga lebih hemat, cepat dan aman bekerja di komputer sendiri tanpa koneksi internet. WordPress adalah salah satu aplikasi berbasis PHP sehingga nantinya server ini bisa kita manfaatkan untuk membuat blog tanpa koneksi internet.Langkah-langkah install server XAMPP di server tergantung sistem operasi komputer yang kita gunakan. Langkah instalasi server XAMPP berikut lebih ditujukan pada pengguna Microsoft Windows Vista maupun XP.

1. Download software XAMPP terbaru di:

http://www.apachefriends.org/en/xampp.html
pilih versi software XAMPP

pilih versi software XAMPP

2. Pilih paket yang kita inginkan. Untuk pemula pilih saja “Basic Package“. Paket ini sudah berisi beragam aplikasi berguna dan tambahannya seperti phpMyAdmin (yang akan kita gunakan untuk install wordpress nantinya).

3. Pilih versi “Installer” dan download ke komputer dengan klik “Save File“.

4. Jalankan file yang telah kita download tadi (contohnya: “xampp-win32-1.7.1-installer.exe“).

5. Pilih bahasa yang ingin kita gunakan. Sayangnya belum ada pilihan bahasa Indonesia, jadi sebaiknya pilih “English” saja.

XAMPP Setting Instalasi

XAMPP Setting Instalasi

6. Klik “Next” pada halaman pertama “XAMPP Setup Wizard

7. Pilih lokasi instalasi yang kita inginkan. Defaultnya adalah di lokal hardisk. XAMPP menyarankan agar tidak menginstall software ini di folder “Program Files” (misalnya C:\Program Files\xampp).

8. Pada halaman berikutnya biarkan pilihan default yang ada, dan klik “Install

9. Instalasi selesai. Silahkan di cek dengan membuka aplikasi “XAMPP Control Panel” melalui menu program “Start > All Programs > Apache Friends > XAMPP > XAMPP Control Panel” atau klik filexampp-control.exe” di folder instalasi XAMPP.

Buka aplikasi server XAMPP

Buka aplikasi server XAMPP

10. Bila berhasil di install, akan muncul tampilan berikut. Klik “start” satu per satu yang ada di samping “Apache” dan “MySQL“.

11. Pada setiap tombol “start” yang diklik akan muncul peringatan dari windows firewall bilaƂ sedang aktif. Klik “Unblock” untuk mengijinkan aplikasi software ini berjalan.

Tampilan Sofware Server XAMPP

Tampilan Sofware Server XAMPP

13. Indikator kedua aplikasi “Apache” dan “MySQL” sudah jalan ,ditandai dengan warna hijau dan tulisan running di sampingnya. Cek server lokal yang telah kita buat dengan mengetikkan “localhost” (http://localhost) di browser yang kita gunakan (internet explorer, mozilla firefox, opera, dll). Jika instalasi benar harusnya muncul tampilan seperti berikut.

Sekarang kita sudah memiliki web server di komputer lokal yang bisa kita gunakan untuk beragam hal. Terutama kita akan gunakan untuk ngeblog tanpa koneksi internet, sebelum kita benar-benar siap untuk membuat blog kita. Dalam tulisan selanjutnya kita akan membahas bagaimana cara install wordpress di komputer lokal.

Make Money dari Blog @ Cara Install dan Membuat Server Di Komputer Lokal

Labels:

cara membuat server,cara membuat server sendiri,komputer server,membuat server sendiri,cara instal komputer,membuat server,cara menginstal komputer,cara buat server,membuat komputer server,cara install komputer,setting komputer server,server komputer,cara membuat server lokal,cara bikin server,instalasi server,cara setting komputer server,cara membuat komputer server,CARA MEMBUAT SERVER INTERNET,cara membuat server komputer,membuat server internet

Artikel Yang Berhubungan: