Xuân

Xuân

- = Chế Lan Viên =-

Tôi có chờ đâu, có đợi đâu 
Đem chi xuân lại gợi thêm sầu? 
Với tôi, tất cả như vô nghĩa 
Tất cả không ngoài nghĩa khổ đau! 

Ai đâu trở lại mùa thu trước 
Nhặt lấy cho tôi những lá vàng? 
Với của hoa tươi, muôn cánh rã, 
Về đây đem chắn nẻo xuân sang! 

Ai biết hồn tôi say mộng ảo 
Ý thu góp lại cản tình xuân? 
Có một người nghèo không biết tết 
Mang lì chiếc áo độ thu tàn! 

Có đứa trẻ thơ không biết khóc 
Vô tình bỗng nổi tiếng cười ran! 

Chao ôi! Mong nhớ! Ôi mong nhớ! 
Một cánh chim thu lạc cuối ngàn.
Tình mất

Tình mất

- = Huy Cận =-

Ôi! Những kẻ tôi chỉ chào một bận,
Chân xa mau, lòng chưa kịp giao thân,
Trên đường tôi nếu trở lại vài lần,
Chắc ta đã yêu nhau rồi, - hẳn chứ..
Một lời nói nếu có gan ướm thử;
Một bàn tay đừng lưỡng lự trao thơ;
Một lúc nhìn thêm, đôi lúc tình cờ,
Chắc có lẽ đã làm nên luyến ái...

Yêu biết mấy nếu có lần gặp lại!

Tôi vụng về, tôi ngơ ngác, nên chi
Người bên tôi mà để người đi,
Tôi làm nũng, quyết giữ lòng kiêu hãnh;
Người ở đó, tôi làm như ghẻ lạnh;
Người đi rồi, thôi mong mỏi gì đâu!
Những bàn tay đáng lẽ phải giao nhau,
Hờ hững thế! Không chịu cầm lưu luyến.

Ôi! Những kẻ cùng tôi không hứa hẹn!
Người không quen nhưng tôi chắc sẽ yêu;
Mặt vừa nhìn mà chân đã muốn theo;
Tình mới chép một hai dòng nhật ký;
Tên viết tắt, tin rằng lòng nhớ kỹ
Bạn một hôm đi đến rất tình cờ;
Tình quên đi ở trong những bức thơ
Viết không gửi, xếp nằm trong sách cũ;
Ôi! Bao kẻ chỉ một lần gặp gỡ!
Bởi vì sao lòng tôi rất thương đau
Khi nghĩ thầm: "nếu ta đã gần nhau!..."
Thăng Long thành hoài cổ

Thăng Long thành hoài cổ

-= Bà Huyện Thanh Quan =-

Tạo hóa gây chi cuộc hí trường
Đến nay thấm thoắt mấy tinh sương
Dấu xưa xe ngựa hồn thu thảo,
Nền cũ lâu đài bóng tịch dương,
Đá vẫn trơ gan cùng tuế nguyệt,
Nước còn cau mặt với tang thương.
Ngàn năm gương cũ soi kim cổ.
Cảnh đấy người đây luống đoạn trường
Giục giã

Giục giã

-= Xuân Diệu =-

Mau với chứ, vội vàng lên với chứ, 
Em, em ơi, tình non đã già rồi; 
Con chim hồng, trái tim nhỏ của tôi, 
Mau với chứ! Thời gian không đứng đợi.
Tình thổi gió, màu yêu lên phấp phới 
Nhưng đôi ngày, tình mới đã thành xưa, 
Nắng mọc chưa tin, hoa mọc không ngờ, 
Tình yêu đến, tình yêu đi ai biết! 
Trong gặp gỡ đã có mầm ly biệt: 
Những vườn xưa, nay đoạn tuyệt dấu hài 
Gấp đi em, anh rất sợ ngày mai; 
Đời trôi chảy, lòng ta không vĩnh viễn. 
Vừa xịch gối chăn, mộng vàng tan biến; 
Dung nhan xê động, sắc đẹp tan tành. 
Vàng son đương lộng lẫy buổi chiều xanh, 
Quay mặt lại: cả lầu chiều đã vỡ 
Vì chút mây đi, theo làn vút gió. 
Biết thế nào mà chậm rãi, em ơi? 
Sớm nay, sương xê xích cả chân trời, 
Giục hồng nhạn thiên di về cõi bắc. 
Ai nói trước lòng anh không phản trắc, 
Mà lòng em, sao lại chắc trơ trơ? 
Hái một mùa hoa lá thuở măng tơ, 
Đốt muôn nến sánh mặt trời chói lọi; 
Thà một phút huy hoàng rồi chợt tối, 
Còn hơn buồn le lói suốt trăm năm. 
Em vui đi, răng nở ánh trăng rằm, 
Anh hút nhụy của mỗi giờ tình tự. 
Mau với chứ! Vội vàng lên với chứ! 
Em, em ơi! Tình non sắp già rồi...
Bill Gates Hay Steve Jobs

Bill Gates Hay Steve Jobs

Đêm hôm trước có một chương trình phim phóng sự trên ti vi về Bill Gates và Steve Jobs. Chương trình hội tụ vào câu hỏi ai là nhà doanh nghiệp công nghệ tốt nhất. Điều gì sẽ xảy ra trong năm mươi hay một trăm năm nữa khi mọi người nhớ tới họ? Mọi người đã nói về Steve và Bill trong thời gian dài và từng người đều có ý kiến riêng của họ. Nếu bạn thích sản phẩm của Apple thì| Steve Jobs là tốt nhất còn nếu bạn thích sản phẩm của Microsoft thì Bill Gates là câu trả lời hiển nhiên.
Chương trình ti vi đã phỏng vấn hàng nghìn người ở Mĩ và châu Au và đa số trong họ đều tin Steve Jobs là tốt nhất. Họ nói về iPhone, iPads và mọi thứ lớn lao mà Apple đã tạo ra. Trong nhiều năm, Apple đã chi phối thị trường công nghệ với những sản phẩm thiết kế phát kiến giỏi nhất cũng như có tác động lớn lên xã hội. Một phụ nữ Italy nói: “Bill Gates có tiền và là người giầu nhất trên trái đất nhưng Steve Jobs không lo về tiền. Ông ấy là nhà phát minh, ông ấy là nghệ sĩ, và ông ấy tạo ra những thứ kì diệu cho mọi người. Ông ấy là Leonardo de Vinci, Michelangelo, và Donatello của thời hiện đại (Lưu ý: Các nghệ sĩ vĩ đại nhất người Italy của thời Phục hưng). Bill Gates có hàng tỉ đô la chứng khoán; Steve chỉ có lương $1 đô la nhưng ông ấy tận hưởng sáng tạo ra các thứ thu lại tiền.” Một người Đức khác nói: “Steve có cuộc sống khó khăn nhưng vượt qua chướng ngại và vươn lên vị trí của nhà phát minh vĩ đại nhất trên trái đất. Ông ấy tạo ra Apple; làm cách mạng hoá công nghiệp công nghệ; bị đá ra khỏi Apple bởi những người bạn riêng của ông ấy; rồi tạo ra công ti kì diệu khác tronh hoạt hình (Pixar); rồi quay lại và cứu Apple khỏi phá sản; tạo ra máy tính Mac, iPods, iPhones, iPads và thay đổi toàn thể ngành công nghiệp công nghệ lần thứ hai. Nếu ông ấy không là người tốt nhất thì còn ai khác?”
Nhưng khi chương trình ti vi hỏi người ở châu Á, cách nhìn thay đổi. Đa số thanh niên châu Á nói rằng Bill Gates là tốt nhất vì ông ấy có nhiều tiền. Khi phóng viên truyền hình nói rằng Steve Jobs cũng có tiền nhiều người trả lời: “Nhưng Bill có nhiều hơn, nhiều hơn nhiều. Bill được xếp hạng là người giầu thứ hai trên trái đất trong khi Steve được xếp hạng là một trăm hay đại loại như vậy. Ai có nhiều tiền người đó là tốt nhất.” Ở khắp châu Á, từ Bắc Kinh, Thượng Hải, Hồng Kông, Tokyo tới Seoul, Singapore, và Kuala Lumpur, đã số mọi người ngưỡng mộ Bill Gates khi họ ca ngợi ông ấy về thành công được đo theo giầu có. Ít người thậm chí nhắc tới Microsoft hay phần mềm mà ông ấy đã tạo ra. Phóng viên kết luận: “Dường như giới trẻ châu Á tất cả đều bị ám ảnh bởi tiền và giầu có. Ít người nhắc tới điều hai người này đã làm trong thế giới công nghệ nhưng họ chỉ nhìn vào thành công được đo bằng giầu có.”
Nhưng khi chương trình ti vi chiếu việc hỏi mọi người ở châu Phi và Nam Mĩ, ‎ sự kiện lại thay đổi theo chiều hướng khác đối với Bill Gates. Ở những nước này, Bill Gates có ưu thế lớn hơn so với Steve Jobs dưới dạng thiết lập di sản toàn cầu. Ở những nước này, mọi người không nói về phần mềm hay phần cứng, không nói về iPhones hay máy tính bảng nhưng nói về điều Bill Gates đã làm khác hoàn toàn với công nghệ. Họ ngưỡng mộ ông ấy vì nỗ lực của ông ấy xoá bệnh tật, chiến dịch chống sốt rét của ông ấy cho các làng vùng sâu vùng xa, chương trình tiêm chủng của ông cho trẻ em, công việc của ông ấy để cung cấp màn chống muỗi để ngăn cản muỗi lây nhiễm, phích nước giữ lạnh để giữ thuốc tiêm chủng trong vài tuần ở các khu vực sâu xa mà thậm chí điện cũng không có. Một người châu Phi nói: “Chúng tôi không quan tâm liệu một người có một tỉ đô la hay không nhưng quan tâm tới điều họ làm với số tiền đó. Bạn không thể ăn tất cả số tiền đó vì bạn sẽ có vài bữa ăn hàng ngày thôi, cũng như bất kì ai trên trái đất; bạn không thể mặc mọi thứ quần áo đắt tiền nhưng bạn sẽ mặc áo sơ mi và quần như bất kì ai trên trái đất cho nên sao bạn giữ tất cả số tiền đó làm gì? Chúng tôi chưa bao giờ thấy ông Jobs nhưng chúng tôi thấy ông và bà Gates nhiều lần vì họ tới các làng xa xôi của chúng tôi và giúp trẻ con của chúng tôi. Họ không cho chúng tôi tiền nhưng họ giúp chúng tôi làm nông nghiệp trên mảnh đất của chúng tôi tốt hơn bằng việc cung cấp phân bón và hạt giống tốt hơn cho các cây trồng của chúng tôi. Họ cung cấp chăm sóc y tế cho con cái chúng tôi để cho chúng tôi có thể tránh được bệnh tật. Với những người nghèo nhất trên trái đất, chúng tôi chỉ biết ông Gates và chúng tôi nghĩ ông ấy là tốt nhất.”
Chương trình ti vi kết luận: “Nếu chúng ta bỏ phiếu bầu, Bill Gates sẽ thắng là cái chắc. Ông ấy đã chiếm được trái tim và khối óc của những người nghèo nhất thế giới ở các khu vực đông dân cư ở châu Á, châu Phi và |Nam Mĩ. Nhóm này, được đại diện bởi hai phần ba số người trên trái đất đang được lợi từ tiến bộ của công nghệ. Cho dù họ không có laptop hay iPods, nhưng bây giờ họ có thể ngủ bên trong màn chống muỗi, có nước sạch qua các chai nước lọc, và có tiêm chủng cho con cái họ. Những người này có cái gì đó mà phần lớn chúng ta thậm chí không nghĩ tới nữa. Màn chống muỗi và chai nước lọc với họ cũng giống như điện thoại thông minh hay laptop với chúng ta vì chúng là cần thiết. Một người ở Bangladesh nói: “Chúng tôi đánh giá cao ông Gates và đã nói về xây dựng đài kỉ niệm cho ông ấy ở làng chúng tôi, vì ông ấy thường tới đây và cuộc sống của chúng tôi đã tốt lên hơn nhiều.” Người khác nói: “Ông ấy không nhìn xuống chúng tôi, ông ấy không ném tiền cho chúng tôi nhưng ông ấy nghe để hiểu nhu cầu của chúng tôi và làm nỗ lực để giúp đỡ. Ông ấy giúp chúng tôi cách chăm nom sức khoẻ của chúng tôi, chăm nom con cái chúng tôi và làm cho cuộc sống của chúng tôi tốt hơn.”
Phóng viên này kết luận: “Điều gì sẽ xảy ra trong năm mươi hay một trăm năm nữa? Tôi chắc sẽ có đài kỉ niệm dành cho Gates trong toàn thể thế giới thứ ba, đặc biệt ở các làng nghèo nhất. Steve Jobs có lẽ sẽ bị quên đi khi công nghệ thay đổi. Vào lúc đó không ai dùng iPods, iPhone, hay iPads mà cái gì đó khác. Gates cũng có thể không được nhớ là một người đã tạo ra Microsoft nhưng được nhớ là người có ảnh hưởng nhất của thế kỉ 21. Ông ấy có một trong những tổ chức phi lợi nhuận có ảnh hưởng nhất và đã trở thành tiếng nói vô địch về xoá bỏ bệnh tật ở thế giới đang phát triển. Ông ấy đã để tiền của ông ấy vào làm việc cho một chủ định và cho đi phần lớn nó. Điều đó đơn giản có nghĩa là điều này: Bạn có bao nhiêu tiền hay bạn sở hữu bao nhiêu công ti cũng không thành vấn đề nhưng sẽ khác biệt biết bao nếu bạn đã đóng góp cho xã hội và nhân loại. VÀ đó là điều mọi người sẽ nhớ tới bạn.”

—English version—

Bill Gates or Steve Jobs
Last night there was a TV documentary about Bill Gates and Steve Jobs. The show was focusing on the question about who is the best technology entrepreneur. What will happen in another fifty or hundred years as people remember them? People have talked about Steve and Bill for a long time and everyone has their own view. If you like Apple products then Steve Jobs is the best and if you like Microsoft products then Bill Gates is the obvious answer.
The TV show interviewed thousands of people in the U.S. and Europe and the majority of them believe Steve Jobs is the best. They talked about the iPhone, iPads and all the great things that Apple produced. For years, Apple dominated the technology market with the best innovative design products as well as has significant impact on society. One Italian woman said: “Bill Gates has the money and is the richest person on earth but Steve Jobs does not care about money. He is an inventor, he is an artist, and he creates wonderful things for people. He is the Leonardo de Vinci, the Michelangelo, and the Donatello of modern day (Note: Greatest Italian artists of the Renaissance age). Bill Gates has billion of dollars in stocks; Steve only has a salary of $1 dollar a year as he enjoys creating things than collect money.” Another German said: “Steve has difficult life but overcome obstacles and rises to the position of the greatest innovator on earth. He creates Apple; revolutionizes an technology industry; gets kick out of Apple by his own friends; then creates another wonderful company in animation (Pixar); then comes back and rescues Apple from bankruptcy; creates the Mac computer, iPods, iPhones, iPads and changes the whole technology industry the second time. If he is not the best then who else?”
But when the TV show asked people in Asia, the view changes. A majority young people in Asia said that Bill Gates is the best because he has a lot of money. When the TV reporter said that Steve Jobs also has money many people answered: “But Bill has more, much more. Bill is ranked as the second richest people on earth when Steve is ranked as number one hundred or so. Who has more money is the best.” Throughout Asia, from Beijing, Shanghai, Hong Kong, Tokyo to Seoul, Singapore, and Kuala Lumpur, the majority of people admired Bill Gates as they praised him for his success measured in wealth. Few people even mention about Microsoft or the software that he created. The reporter concluded: “It seems that these young Asian people are all obsessed by money and wealth. Few mentions about what these two people did in the technology world but they only look at success as measured by wealth.”
But when the TV show asked people in Africa and South America, the opinions change in different direction regarding Bill Gates. In these countries, Bill Gates has a significant advantage over Steve Jobs in terms of establishing a global legacy. In these countries, people do not talk about software or hardware, about iPhones or tablets but what Bill Gates has done completely different from technology. They admire him for his efforts to eradicate diseases, his anti-malaria campaign to remote villages, his vaccination program for children, his works to provide mosquito nets to prevent infectious mosquitoes, his refrigerated thermoses that keep vaccines cold for weeks in rural areas that do not even have electricity. An African said: “We do not care whether a person has billions of dollars or not but what they do with the money. You cannot eat all the money as you will have few meals a day, just like anyone on earth; you cannot wear all the expensive clothes but you will wear one shirt and pants just like anyone on earth so why are you keep all the money for? We never see Mr. Jobs but we see Mr. and Mrs. Gates many times as they come to our remote villages and help our children. They did not give us money but they help us to farm our land better by providing fertilizers and better seeds for our crops. They provide healthcares to our children so we can avoid diseases. For the poorest people on earth, we only know Mr. Gates and we think he is the best.”
The TV show concluded: “If we have vote, Bill Gates will win for sure. He already wins the heart and mind of the world’s poorest in the highly populated areas of Asia, Africa and South America. This group, represented two third of people on earth are benefiting from the advancement of technology. Even they do not have laptop or iPods yet, but they now can sleep inside mosquito nets, get clean water via filtered bottles, and have vaccination for their children. These people have something that most of us do not even think about anymore. A mosquito net and filtered water bottles to them are like the smartphone or laptop for us as they are the necessity. A people in Bangladesh said: “We appreciate Mr. Gates and have talked about building a monument for him in our village, since he came here often and our lives have been much better.” Another person said: “He does not look down on us, he did not throw money to us but he listens to understand our needs and make efforts to help. He helps us how to take care of our health, to take care of our children and make our lives better.”
The reporter concluded: “What will happen in the next fifty years or a hundred years? I am sure there will be monuments dedicated to Gates throughout the third world, especially in the poorest villages. Steve Jobs will probably be forgotten as technology will change. By that time nobody will use iPods, iPhone, or iPads but something else. Gates may also not be remembered as the person who created Microsoft but as one of the most influential people of the 21st century. He has one of the world’s most influential nonprofit organizations and has become a vocal champion for eradicating disease in the developing world. He has put his own money to work for a purpose and given away most of it. It simply means this: it doesn’t matter just how much money you have or how many companies you owned but how much of a difference you have contributed to society and humanity. AND that is what people will remember you.”
Source: _http://science-technology.vn/?p=3482_
Đời như ý

Đời như ý


Đời như ý
Nguyễn Ngọc Tư

Ai cũng hỏi, "Làm gì có chuyện đời như ý?". Chú Đời cười, hàng ria mép xoăn tít xồm xoàm quớt lên, tự hào, sao mà không? 

Nhìn vẻ mặt này không ai nghĩ chú mù, thấy sao mà tự tin, thanh thản quá chừng. Không ai biết chú khổ còn hơn... cô Lựu. Chú Đời dẫn cả nhà rời Chợ Cũ, Cầu Nhum lang thang lúc con Ý mới bồng nách. Gồng gánh như một gánh hát, chú ca cải lương, bán vé số kiến thiết. Vợ chú nửa điên nửa tỉnh, không biết có phải vui trong bụng lắm không mà suốt ngày cười ngẩn ngơ. Hai đứa con gái đứa mười, đứa tám tuổi phụ cha đem vé số tới mời từng sạp chợ. Đứa nào mặt mày cũng xấu xí, lem luốc, đen đúa, nên nghe cha tụi nó kêu con Như con Ý ai cũng cười. 

Một ngày của gia đình chú Đời bắt đầu từ sáng sớm, chú buộc vô mình sợi dây điện nối giữa cây đờn với cái loa con Như đang cầm, nó ghịt dây thì chú bước tới, chùng dây thì đứng lại. Con Ý nhỏ con chạy lăng xăng đằng trước, đứng coi búp bê người ta chưng tủ kiếng. Vợ chú vừa đi vừa ca hát đằng sau, nhặt hoa phượng để lên đầu. Cũng giống như những người hát rong khác, nhà chú có cả thảy bốn người nhưng trên con đường tấp nập, trông họ nhỏ nhoi, cô độc làm sao. 

Ở thành phố này có chừng đến ba bốn người hát rong, họ dìu dắt từng đôi, ở tận đằng xa, người ta nghe tiếng ca là biết gánh của ai rồi. Có đôi vợ chồng già ca mùi như Thanh Sang, Thanh Nga; có một đôi trẻ hơn, ông chồng đưa hơi như Trọng Hữu. Chú Đời ca dở, giọng hơi giòn, chói, thuộc lòng chỉ mấy bài "Chiếc áo người vợ hiền", "Con gái của mẹ"... nghe mắc chán. Nhưng chú đi đằng đầu phố, gió đàn lại cuối phố nghe tiếng được tiếng mất nhưng người ta biết ông "Đời Như Ý" sắp đi qua. Cái miệng của ông này sao mà lanh dữ vậy, luôn miệng gọi Ý con, con đừng có đi xa, con Như đi chậm một chút, ba theo muốn đứt hơi rồi, coi má con đâu. Mình ơi, mình à, mình lại gần tui nè. Rồi oang oang bảo vé độc đắc chiều nay nằm ngay đây, ngay trân chỗ này nè. Có hai ngàn một vé, ăn gói xôi chưa kịp mắc răng đã hết, mua giúp tờ vé số đặng giúp tui xóa đói giảm nghèo. Mua đi, để tui đi xin bà con cũng mắc... cho hà. Mấy ông chạy xe ôm nói chú rao làm sao mà láu cá quá, không biết mù thiệt hay mù giả mà sao cái miệng leo lẻo vậy. Chú gỡ mắt kiếng đen ra, cười với đôi mắt lạnh lẽo, sâu hút, "Mấy anh nghĩ vậy riết quen, em đui tối thiệt thòi, rên rỉ, than vãn cũng đâu hết thảm. Mà, em đang sung sướng quá chừng đây, kể lể nỗi gì". 

Theo chú nói thì chú sung sướng thật. Vợ chú đẹp, vui vẻ (vì cười hoài), có đi nhậu vợ chú cũng không chù ụ như vợ người ta. Không ngã lòng trước sự hào nhoáng xa hoa, chồng người ta sao mà đẹp trai, sao mà giàu hơn chồng mình. Chỉ cần mỗi bữa sáng, chú mua cho vợ hai ngàn đồng cà phê sữa là vợ mừng rưng rưng nước mắt. Chú sung sướng vì còn có hai chị em con Như con Ý, nhỏ xíu mà giỏi, dễ dạy, đẹp đẽ. Nghĩ vậy nên chú Đời phải vui, vui vì vừa lòng với những gì mình đang có. 

Những trưa nắng gia đình chú tạt vào hiên chợ Bách Hóa, nghỉ chân. Con Như lãnh tiền, chạy đi mua cơm về ăn. Họ ngồi giữa ngọn gió mát lồng lộng. Chú Đời lúc nào cũng ngồi ăn chậm rãi, nghe ngóng chung quanh như canh chừng, như bảo vệ bữa ăn thiêng liêng của nhà mình. Chú nghe tiếng đũa khua tinh tang, cuống quít lên miệng chén là biết đứa nào đói đứa nào không. Rồi cằn nhằn vợ, "Mình ăn chậm thôi, nghẹn bây giờ, đó, nghe ặc ặc rồi đó. Con Như lấy nước mà uống. Coi gỡ xương cho em Ý với, con". Bữa nào ăn cơm xong, chú cũng ngồi chải đầu cho ba mẹ con họ, ai đi ngang khen chơi, cha, bữa nay hai đứa nhỏ đẹp gái dữ, chú sướng quá cười hích hác. "Nó giống mẹ. Giống vợ em mới đẹp, giống em xấu hì. Mà, ngộ quá, con của mình, xấu mấy cũng thấy đẹp thấy thương". 

2. Quẩn quanh mấy chợ, mấy khu phố quen hoài bán không chạy như trước, chú Đời phải ráng đi tới tối mịt mới về. Giọng chú ngày càng khàn, nghe khen khét như nồi cơm quá lửa. Đi qua mấy quán nhậu, có người kêu vô, đưa ly rượu, chú trịnh trọng nâng ngang mày đa tạ, chỉ hít tới hít lui khen "Rượu ngon. Mùi đã thiệt" nhưng không uống, chú bảo lúc này giọng dở quá, hình như nghe không khỏe trong mình. 

Nên có lúc giọng ca của chú lật bật như hai hàm răng đánh vào nhau, chú biểu con Như đi mua Anagin về cho chú uống. Mấy cô tiểu thương trong chợ cằn nhằn, thằng cha mầy lúc này ca gì như là sốt rét, "Chiếc áo người vợ hiền" hay vậy mà ca lụm cụm như "chiếc áo bà già". Một bữa đi ngang qua trạm y tế phường, con Như dụ, nó nói trong trạm có khám bệnh miễn phí, nên nó dẫn chú vào. Lát sau, lúc từ phòng siêu âm bước ra, chú Đời giận quá, mặt xanh, tay chân run rẩy, "Ba đã nói có bịnh hoạn gì, làm tốn hết mười lăm ngàn đồng bạc". 

Chú Đời mau giận mà cũng mau quên. Bữa sau chú còn sắm đồ cho hai chị em con Như. Diện quần áo mới, tắm rửa kỳ cọ sạch sẽ, ai cũng bật ngửa, "vậy ra ông này mù mà tinh, ổng đâu có xạo, mấy đứa cũng ngộ gái quá chớ". Dì Liễu cũng khen. 

Dì Liễu bán xoong chảo ở trong chợ Bách Hóa, không có con nên thích con nít, hay rờ rờ đầu chị em Như, Ý, nói với mấy bà bạn, "tui khoái chị em con nhỏ này, nghèo vậy mà đàng hoàng, không đá cá lăn dưa". Con Như nghe thích lắm, về nói với ba, chú Đời hỏi, dì Liễu thích con hay thích con Ý. Như bảo thích bằng chang nhau. Cho con cục kẹo thì cũng cho con Ý một cục. Chú Đời thở dài, "Ba già rồi, hát ca hết ra hơi rồi, chắc là nuôi mấy má con con không nổi, hay là ba cho bả một đứa, nghen". 

Dì Liễu tính đâu chú nói chơi, con người quý con như mạng mình, nói cho là cho sao. Ai dè chú làm thiệt. Dì Liễu mừng lắm, những bữa chợ vắng có một đứa hủ hỉ, trông đồ cho mình ngủ cũng vui. Dì chọn con Ý vì khuôn mặt nó đẹp, sáng sủa chứ không buồn bã như con Như. Dì còn đi coi thầy, chọn ngày tốt để rước con Ý về. 

Hôm con Ý về với dì Liễu là rằm tháng Hai, chú Đời biểu con Ý mặc đồ mới, kéo nó ngồi vô lòng mình, chú chải tóc cho nó, chú chải lâu vì nó cứ tức tưởi liên hồi. Chú hỏi bữa nay con mặc áo màu gì, nó bảo màu xanh. Chú dặn lòng, mình sẽ nhớ hoài, lúc xa chú, con Ý mặc đồ xanh, mặc dù chú không biết màu xanh ra sao. Chú kêu vợ lại, biểu, "Mình hôn nó một cái đi, mai mốt nó không ở với nhà mình nữa. Mình đẻ ra nó mà tui không nuôi, mình đừng có giận". Vợ chú đâu có giận. Chỉ có con Như giận, nó nức nở, "con thương con Ý nhất nhà mà, ba". Chú không thương à? Thương, nhưng chú chắc dạ lắm, bước đi là đi một nước. Vợ chú rên ti tỉ, ngoái lại nhìn phía chợ hoài. Con Như vẫn khóc. Chú hỏi nó, "Con Ý có nhìn theo không, con". "Có, ba à, tội nghiệp nó quá". Dường như con đường có nhiều ổ gà sao nghe chông chênh quá. Chú Đời cắn môi bước tới. 

Nhưng đến chạng vạng, lúc quay về nhà trọ đã thấy con Ý ngồi lù ở cửa. Từ đó không cách gì bứt nó ra được. Chú năn nỉ nó quay lại với dì Liễu, nó không nghe. Chú lấy gậy đánh, nó cắn răng chịu. Chú đưa vợ với con Như trốn khỏi thị xã nó cũng biết cách lần theo. Bảy tuổi, con Ý cũng đã bảy năm lưu lạc giang hồ chớ giỡn. Cuối cùng, một đêm, chú bắt nó ngồi trước mặt mình, ôm lấy đôi vai xương xẩu của nó, chú nói cho con Ý nghe một câu chuyện đau lòng, chú nói nó không phải là con ruột của chú, chú lượm nó ở ngoài đống rác bệnh viện. Chú nuôi nó tới chừng này là để kiếm người bán lại. Dì Liễu cũng trả cho chú hai triệu chớ đâu có ít. Con Ý nhìn tệp tiền chú rút ra từ túi áo, mặt nó lạnh băng. Sáng sau, chú Đời đưa con Ý trở lại với dì Liễu. Lúc quay đi chú hỏi con Như, "Nó có nhìn theo không, con". Con Như nói không. Chú ừ, nấc khan một tiếng rồi cất tiếng ca, "Nuôi con khôn lớn không mong gì con nuôi lại mẹ...", sao mà nghe nghẹn ngào như đang khóc. 

Con Như sợ rồi sẽ tới phiên mình. Nó cuống quýt sống, cuống quýt yêu thương chú Đời. Nó ăn ít, lấy đồ cũ ra mặc như thể chứng minh rằng nuôi nó cũng không tốn kém gì mấy. Chú Đời hiểu lòng nó, hay hôn lên mái đầu khét nắng của nó, lặng lẽ thở dài. Lấy số tiền dì Liễu cho, chú Đời đưa vợ vào bệnh viện. Bác sĩ nói vợ chú bệnh đã quá lâu, không có hy vọng chữa lành, nhưng cứ ở lại điều trị một thời gian xem sao. Chú Đời ôm vợ vào lòng, ngồi ngay chỗ băng đá đằng trước, chú nắn đôi tay, rờ rẫm mãi lên mặt vợ, biểu: "Mình ở đây nghen, ráng mau hết bệnh về nấu cơm cho tôi ăn, nói chuyện với tôi chơi. Hồi cưới mình tới giờ, chưa khi nào mình nói câu nào tử tế với tôi, tôi cũng buồn lắm". Vợ chú cười. 

3. Cả gia đình lang thang đó giờ chỉ còn hai người. Đêm khuya trở giấc, chú Đời kéo mền đắp cho con Như, vô tình đôi tay chú quệt trúng hai hàng nước mắt. Chú biết nó thức, chú hỏi "Sao vậy, con đau bụng hả?". Nó tức tưởi, "Bây giờ chỉ còn có mình con, ba đừng bắt con đi đâu hết, để con dẫn đường cho ba, mua thuốc cho ba uống, phụ bán vé số, nghen ba". Chú ừ, bỏ con đi đâu bây giờ. 

Chú thường vòng qua chợ Bách Hóa, chú không hát, không dừng lại bán, chỉ kêu con Như tỏ mắt nhìn con Ý coi bữa nay nó mặc áo màu gì, mập ốm ra làm sao, tóc dài bao nhiêu rồi. Đứa con gái lớn buồn bã bảo, "em con mập lắm, trắng hơn hồi nó còn ở nhà mình. Nó cắt tóc tém, coi giống con trai lắm, nó nhìn thấy con mà giả đò như không thấy vậy, ba". Không mặc đồ xanh ba mua à? Không, lâu rồi nó không mặc nữa. Chú nghe vừa mừng vừa đau. Vậy là nó quên chú rồi, nó yên lòng bên người mẹ mới. Vậy là từ nay chú đã xa mãi đứa con này. Lụi hụi hết mùa nắng, giọng chú tắt khèn khẹt trong cổ họng, thậm chí không thể cất lời rao. Chú đờn cho con Như ca, tiếng ca ngọng ngịu và non nớt lắm, vô vọng cổ luôn bị đứt giữa chừng. Tội nghiệp, con nhỏ không có tài, ngáy còn lạc giọng mà ca nỗi gì. Những lúc ngồi bên con, nghe nó ăn giá sống cho họng bớt khan, chú Đời muốn khóc, thấy mình bất lực trước bệnh tật. Chú bảo, "Thôi, bỏ nghề, con". 

Đã thấu gần hết cái khổ của kẻ hát rong, đã mỏi đôi chân ròng rã, chú Đời bán cây đờn, cái loa với bộ bình ắc quy. Chú xin cho con Như đi chạy bàn, rửa chén ở quán hủ tiếu Nam Vang. Mới đầu nó không chịu, nó nói ba ở nhà một mình không được. Hồi đó ba buồn còn đờn lửng tửng chơi, bây giờ đờn cũng không còn. Nhưng rồi đến bữa cơm, nó đổi ý, nó không thể để chú Đời quẹt kho quẹt vầy hoài. Một bữa trưa, nó bưng tô nước thịt có nhúng nắm rau chạy về, chú Đời rầy nó làm vậy chi, ông bà chủ chắc không thích, nó cười, chú thím Sảnh biểu con đem về cho ba đó. Người ta thương con lắm. Chú Đời bảo, cuộc đời này, thiệt nhiều người tốt. 

Một bữa trưa, chú Đời bắt nó ngồi lâu với chú thêm một chút nữa. Chú lấy lược ra chải đầu cho nó, tóc nó đã dài chấm thắt lưng. Chú nói, không biết chừng nó mười tám hai mươi tuổi tóc dài cỡ nào hen. Con Như cười, chừng đó cho ba chải đầu, thắt bím cho con mệt luôn. Chú Đời bảo, từ đây tới đó còn lâu. Rồi chú than, sao mà chú nhớ vợ với con Ý quá chừng. Con Như bần thần, "Hồi đó, nhà mình vui biết bao nhiêu hén, ba". 

Ừ, vui. Trưa vầy, nếu không ở bên hông chợ thì cả nhà chú cũng tụm lại bên một gốc cây nào đó có bóng mát, nghỉ chân, ăn cơm. Hai đứa con nhỏ của chú bữa nào cũng không chịu ngủ lấy sức mà mải mê búng thun. Mở miệng ra rầy, con Ý nịnh, "để con nhổ tóc bạc cho ba". Nó nói đầu ba bạc nhiều lắm, rồi đặt sợi tóc lên bàn tay chú, trời ơi, sợi tóc mỏng tanh, nhẹ te vầy mà nó cũng thấy, con mắt nó sáng ghê. Rồi chú nhớ tới người vợ hay tựa đầu vào vai chú ngủ khì, trong trẻo, vô tư như trẻ con. Tự dưng chú Đời thèm được sống lại những buổi trưa ấy, những buổi trưa đã xa rồi, đã xa mất rồi. Chú biểu, "Mai con chạy ra chợ Bách Hóa, hỏi dì Liễu cho con Ý về, ba gặp một chút, sao... ba nhớ nó quá hà". Nhưng con Ý đâu còn ở chỗ dì Liễu nữa, dì nói nó đi rồi. Con Như tưởng dì giấu, cứ theo năn nỉ hoài, "tội nghiệp ba con mà, dì, cho nó về một chút thôi rồi mai mốt con không lại xin dì nữa". Dì Liễu vốn là người nhân hậu, dì chỉ biết nắm tay nó mà khóc ròng. 

Là thật. Con Ý đã bỏ nhà đi bụi đời là thật. Nó đi vì lâu rồi mà không được nhìn thấy người cha tội nghiệp ấy dắt chị nó lặng lẽ qua chợ. Nghĩa là ba nó đã không còn thương nhớ nữa. Vậy thì ở lại làm gì? Con Như quay về, nó phải dừng lại rất lâu, nó không biết phải nói thế nào cho chú Đời đừng đau xót. Nó ngập ngừng đứng chỗ cái hàng ba đầy rêu ướt, chợt nó nghe tiếng hát, trời ơi, là tiếng hát của má nó. "Ầu ơ. Đường dài ngựa chạy biệt tăm. Ơ... Phải duyên chồng vợ ngàn năm cũng chờ". Con Như mừng rỡ xô cửa bước vào, má nó đưa tay lên miệng ra hiệu im lặng, rồi thì thào: 

- Đừng la lớn. Mệt rồi. Ngủ đi. 

Con Như chạy lại ôm má nó, nó nghĩ chắc chú Đời giả bộ đây, trông con Ý thấy mồ mà không chịu dậy. Nó chọc lét vô mấy cái xương sườn của chú, nhưng chọc mãi, chọc mãi, chú không bao giờ thức nữa. 

Làm gì có chuyện đời như ý?
Dân ta phải biết sử ta - Việt Nam quốc sử diễn ca.

Dân ta phải biết sử ta - Việt Nam quốc sử diễn ca.


Dân ta phải biết sử ta 
Cho tường gốc tích nước nhà Việt Nam. 
Kể năm hơn bốn nghìn năm, 
Tổ tiên rực rỡ, anh em thuận hoà. 
Hồng Bàng là Tổ nước ta. 
Nước ta lúc ấy gọi là Văn Lang. 
Thiếu niên ta rất vẻ vang 
Trẻ con Phù Đổng tiếng vang muôn đời, 
Tuổi tuy chưa đến chín mười 
Ra tay cứu nước dẹp loài vô lương. 
An Dương Vương thế Hùng Vương, 
Quốc danh Âu Lạc cầm quyền trị dân. 
Nước tàu cậy thế đông người, 
Kéo quân áp bức giống nòi Việt Nam, 
Quân Tàu nhiều kẻ tham lam. 
Dân ta há dễ chịu làm tôi ngươi? 
Hai Bà Trưng có đại tại, 
Phất cờ khởi nghĩa giết người tà gian, 
Ra tay khôi phục giang san, 
Tiếng thơm dài tạc đá vàng nước ta. 
Tỉnh Thanh Hoá có một bà, 
Tên là Triệu Ẩu tuổi vừa đôi mươi, 
Tài năng dũng cảm hơn người, 
Khởi binh cứu nước muôn đời lưu phương. 
Phụ nữ ta chẳng tầm thường, 
Đánh Đông, dẹp Bắc làm gương để đời, 
Kể gần sáu trăm năm giời, 
Ta không đoàn kết bị người tính thôn 
Anh hùng thay ông Lý Bôn, 
Tài kiêm văn võ, sức hơn muôn người, 
Đánh Tàu đuổi sạch ra ngoài. 
Lập nên triều Lý sáu mươi năm liền. 
Vì Lý Phật Tử ngu hèn, 
Để cho Tàu lại xâm quyền nước ta. 
Thương dân cực khổ xót xa, 
Ông Mai Hắc Đế đứng ra đánh Tàu, 
Vì dân đoàn kết chưa sâu, 
Cho nên thất bại trước sau mấy lần. 
Ngô Quyền quê ở Đường Lâm, 
Cứu dân ra khỏi cát lầm ngàn năm. 
Đến hồi Thập nhị sứ quân 
Bốn phương loạn lạc, muôn dân cơ hàn. 
Động Hoa Lư có Tiên Hoàng, 
Nổi lên gây dựng triều đàng họ Đinh. 
Ra tài kiến thiết kinh dinh, 
Đến vua Phế Đế chỉ kinh hai đời. 
Lê Đại Hành nối lên ngôi. 
Đánh tan quân Tống, đuổi lui Xiêm Thành 
Vì con bạo ngược hoành hành, 
Ra đời thì đã tan tành nghiệp vương. 
Công Uẩn là kẻ phi thường, 
Dựng lên nhà Lý cầm quyền nước ta. 
Mở mang văn hoá nước nhà, 
Đắp đê để giữ ruộng nhà cho dân. 
Lý Thường Kiệt là hiền thần, 
Đuổi quân nhà Tống, phá quân Xiêm Thành. 
Tuổi già phỉ chí công danh, 
Mà lòng yêu nước trung thành không phai. 
Họ Lý truyền được chín đời, 
Hai trăm mười sáu năm giời thì tan. 
Nhà Trần thống trị giang san, 
Trị yên trong nước, đánh tan địch ngoài, 
Quân Nguyên binh giỏi tướng tài: 
Đánh đâu được đấy, dông dài Á, Âu, 
Tung hoành chiếm nửa Âu châu, 
Chiếm Cao Ly, lấy nước Tàu bao la, 
Lăm le muốn chiếm nước ta, 
Năm mươi vạn lính vượt qua biên thuỳ, 
Hải quân theo bể kéo đi, 
Hai đường vây kín BẮc Kỳ như nêm 
Dân ta nào có chịu hèn, 
Đồng tâm, hợp lực mấy phen đuổi Tàu. 
Ông Trần Hưng Đạo cầm đầu, 
Dùng mưu du kích đánh Tàu tan hoang, 
Mênh mông một giải Bạch Đằng, 
Nghìn thu soi rạng giống dòng quang vinh, 
Hai lần đại phá Nguyên binh, 
Làm cho Tàu phải thất kinh rụng rời. 
Quốc Toản là tre có tài, 
Mới mười sau tuổi ra oai trận tiền, 
Mấy lần đánh thắng quân Nguyên, 
Được phong làm tướng cầm quyền binh nhung. 
Thật là một đấng anh hùng, 
Trẻ con Nam Việt nên cùng noi theo. 
Đời Trần văn giỏi võ nhiều, 
Ngoài dân thịnh vượng, trong triều hiền minh. 
Mười hai đời được hiển vinh, 
Đến Trần Phế Đế nước mình suy vi. 
Cho con nhà Hồ Quý Ly, 
Giết vua tiếm vị một kỳ bảy niên. 
Tình hình trong nước không yên, 
Tàu qua xâm chiếm giữ quyền mấy lâu, 
Bao nhiêu của cải trân châu, 
Chúng vơ vét chở về Tàu sạch trơn. 
Lê Lợi khởi nghĩa Lam Sơn, 
Mặc dầu tướng ít binh đơn không nàn. 
Mấy phen sông Nhị núi Lam, 
Thanh gươm yên ngựa Bắc, Nam ngang tàng. 
Kìa Tuý Động nọ Chi Lăng, 
Đánh hai mươi vạn quân Minh tan tành. 
Mười năm sự nghiệp hoàn thành, 
Nước ta thoát khỏi cái vành nguy nan. 
Vì dân hăng hái kết đoàn, 
Nên khôi phục chóng giang san Lạc Hồng. 
Vua hiền có Lê Thánh Tôn, 
Mở mang bờ cõi đã khôn lại lành. 
Trăm năm truyền đến cung hoàng, 
Mạc Đăng Dung đã hoành hành chiếm ngôi 
Bấy giờ trong nước lôi thôi, 
Lê Nam, Mạc Bắc rạch đôi san hà, 
Bảy mươi năm nạn can qua 
Cuối đời mười sáu mạc đà suy vi. 
Từ đời mười sáu trở đi, 
Vua Lê, Chúa Trịnh chia vì khá lâu 
Nguyễn Nam, Trịnh Bắc đánh nhau, 
Thấy dân cực khổ mà đau đớn lòng. 
Dân gian có kẻ anh hùng, 
Anh em Nguyễn Nhạc nổi vùng Tây Sơn, 
Đóng đô ở đất Quy Nhơn, 
Đánh tan Trịnh, Nguyễn, cứu đảo huyền 
Nhà Lê cũng bị mất quyền, 
Ba trăm sáu chục năm truyền vị vưong. 
Nguyễn Huệ là kẻ phi thường, 
Mấy lần đánh đuổi giặc Xiêm, giặc Tàu, 
Ông đà chí cả mưu cao, 
Dân ta lại biết cùng nhau một lòng. 
Cho nên Tàu dẫu làm hung, 
Dân ta vẫn giữ non sông nước nhà. 
Tướng Tây Sơn có một bà, 
Bùi là nguyên họ, tên là Thị Xuân, 
Tay bà thống đốc ba quân, 
Đánh hơn mấy trận, địch nhân liệt là. 
Gia Long lại dấy can qua, 
Bị Tây Sơn đuổi, chạy ra nước ngoài. 
Tự mình đã chẳng có tài, 
Nhờ Tây qua cứu tính bài giải vây. 
Nay ta mất nước thế này, 
Cũng vì vua Nguyễn rước Tây vào nhà, 
Khác gì cõng rắn cắn gà, 
Rước voi dẫy mả, thiệt là ngu si. 
Từ năm Tân Hợi trở đi, 
Tây đà gây chuyện thị phi với mình. 
Vậy mà vua chúa triều đình, 
Khư khư cứ tưởng là mình khôn ngoan. 
Nay ta nước mất nhà tan 
Cũng vì những lũ vua quan ngu hèn. 
Năm Tự Đức thập nhất niên 
Nam Kỳ đã lọt dưới quyền giặc Tây. 
Hăm lăm năm sau trận này, 
Trung kỳ cũng mất, Bắc kỳ cũng tan, 
Ngàn năm gấm vóc giang san, 
Bị vua họ Nguyễn đem hàng cho Tây! 
Tội kia càng đắp càng đầy, 
Sự tình càng nghĩa càng cay đắng lòng. 
Nước ta nhiều kẻ tôi trung, 
Tấm lòng tiết nghĩa rạng cùng tuyết sương. 
Hoàng Diệu với Nguyễn Tri Phương 
Cùng thành còn mất làm gương để đời. 
Nước ta bị Pháp cướp rồi, 
Ngọn cờ khởi nghĩa nhiều nơi lẫy lừng; 
Trung kỳ đảng Phan Đình Phùng 
Ra tay đánh Pháp, vẫy vùng một phương. 
Mấy năm ra sức Cần Vương 
Bọn ông Tán Thuật nổi đường Hưng Yên, 
Giang san độc lập một miền, 
Ông Hoàng Hoa Thám đất Yên tung hoành. 
Anh em khố đỏ, khố xanh, 
Mưu khởi nghĩa tại Hà thành năm xưa, 
Tỉnh Thái Nguyên với Sầm Nưa, 
Kế nhau khởi nghĩa rủi chưa được toàn. 
Kìa Yên Bái, nọ Nghệ An 
Hai lần khởi nghĩa tiếng vang hoàn cầu. 
Nam Kỳ im lặng đã lâu, 
Năm kia khởi nghĩa đương đầu với Tây. 
Bắc Sơn đó, Đô Lương đây! 
Kéo cờ khởi nghĩa, đánh Tây bạo tàn. 
Xét trong lịch sử Việt Nam, 
Dân ta vốn cũng vẻ vang anh hùng. 
Nhiều phen đánh bắc dẹp đông, 
Oanh oanh liệt liệt con Rồng cháu Tiên. 
Ngày nay đến nỗi nghèo hèn, 
Vì ta chỉ biết lo yên một mình. 
Để người đè nén, xem khinh, 
Để người bóc lột ra tình tôi ngươi! 
Bây giờ Pháp mất nước rồi, 
Không đủ sức, không đủ người trị ta. 
Giặc Nhật Bản thì mới qua, 
Cái nền thống trị chưa ra mối mành. 
Lại cùng Tàu, Mỹ, Hà, Anh, 
Khắp nơi có cuộc chiến tranh rẫy rà. 
Ấy là dịp tốt cho ta, 
Nổi lên khôi phục nước nhà tổ tông. 
Người chúng ít, người mình đông 
Dân ta chỉ cốt đồng lòng là nên. 
Hỡi ai con cháu Rồng Tiên! 
Mau mau đoàn kết vững bền cùng nhau. 
Bất kỳ nam nũ, nghèo giàu, 
Bất kỳ già trẻ cùng nhau kết đoàn. 
Người giúp sức, kẻ giúp tiền, 
Cùng nhau giành lấy chủ quyền của ta. 
Trên vì nước, dưới vì nhà, 
Ấy là sự nghiệp, ấy là công danh. 
Chung ta có hội Việt Minh 
Đủ tài lãnh đạo chúng mình đấu tranh 
Mai sau sự nghiệp hoàn thành, 
Rõ tên Nam Việt, rạng danh Lạc Hồng 
Dân ta xin nhớ chữ đồng: 
Đồng tình, đồng sức, đồng lòng, đồng minh!

"Bài thơ này Bác Hồ làm trong những năm kháng chiến chống Pháp để cho mọi người nhớ về lịch sử Việt Nam với mong muốn giúp cho dân mình có thể học sử và nhớ sử tốt hơn"
How to Setup a Linux Firewall with PPPoE/NAT/iptables

How to Setup a Linux Firewall with PPPoE/NAT/iptables


PPPoE for Linux

Many Internet service providers are using the Point-to-Point Protocol over Ethernet (PPPoE) to provide residential Digital Subscriber Link (DSL) broadband Internet access. Most ISP’s do not support Linux and supply PPPoE clients only for Windows and Mac OS.
The PPPoE Protocol
PPPoE is a protocol for encapsulating PPP frames in Ethernet frames. PPP is a data-link-level protocol typically used to encapsulate network-level packets over an asynchronous serial line. This mode of usage is called asynchronous.
While PPP is a peer-to-peer protocol, PPPoE is initially a client-server protocol. The client (usually a personal computer) searches for a PPPoE server (called an access concentrator) and obtains the access concentrator’s MAC address and a session number. The process of setting up a PPPoE session is called discovery.
The Pseudo-TTY
The pppd program and the Linux kernel expect to transmit PPP frames over a TTY device. Luckily, UNIX (and Linux) support the concept of a pseudo-tty. This is a device which “looks” like a TTY, but instead of being connected to a physical terminal, it is connected to a UNIX process. Whenever something writes to the pseudo-tty, the data appears on the standard input of the back-end process. Whenever the back-end process writes to its standard output, the data may be read from the pseudo-tty.
Even more luckily, recent versions of pppd (2.3.7 and newer) support a pty option. This option automatically starts the back-end process and performs all the mundane operations required to connect it to a pseudo-tty. So to start the PPPoE link, you start pppd with the appropriate
pty option, which runs the pppoe executable connected to the pseudo-tty.
The MTU Problem
PPPoE introduces a real and annoying problem. The maximum Ethernet frame is 1518 bytes long. 14 bytes are consumed by the header, and 4 by the frame-check sequence, leaving 1500 bytes for the payload. For this reason, the Maximum Transmission Unit (MTU) of an Ethernet interface is usually 1500 bytes.
This is the largest IP datagram which can be transmitted over the interface without fragmentation. PPPoE adds another six bytes of overhead, and the PPP protocol field consumes two bytes, leaving 1492 bytes for the IP datagram. The MTU of PPPoE interfaces is therefore 1492 bytes.
When a TCP connection is initiated, each side can optionally specify the Maximum Segment Size (MSS). TCP chops a stream of data into segments, and MSS specifies the largest segment each side will accept. By default, the MSS is chosen as the MTU of the outgoing interface minus the usual size of the TCP and IP headers (40 bytes), which results in an MSS of 1460 bytes for an Ethernet interface.
TCP stacks try to avoid fragmentation, so they use an MSS which will not cause fragmentation on their outgoing interface. Unfortunately, there may be intermediate links with lower MTU’s which will cause fragmentation. Good TCP stacks perform path MTU discovery. In path MTU discovery, a TCP stack sets a special Don’t Fragment (DF) bit in the IP datagrams. Routers which cannot forward the datagram without fragmenting it are supposed to drop it and send an ICMP “Fragmentation-Required” datagram to the originating host.
The originating host then tries a lower MTU value. Unfortunately, many routers are anti-social and do not generate the fragmentation-required datagrams. Many firewalls are equally anti-social and drop all ICMP datagrams.
Now consider a client workstation on an Ethernet LAN connected to a PPPoE gateway. It opens a TCP connection to a web server. Because the Ethernet MTU is 1500, it suggests an MSS of 1460. The web server is also on an Ethernet and also suggests an MSS of 1460. The client then requests a web page. This request is typically small and reaches the web server. The server responds with many TCP segments, most of which are 1460 bytes long.
The maximum-sized segments result in 1500-byte IP datagrams and make their way to the DSL provider. The DSL provider cannot transmit a 1500-byte IP datagram over a PPPoE link, so it drops it (assume for now that the DF bit is set.) Furthermore, being anti-social, the DSL provider does not send an ICMP message to the web server.
The net result is that packets are silently dropped. The web client hangs waiting for data, and the web server keeps retransmitting until it finally gives up, or the connection is closed by the user aborting the web client.
One way around this is to artificially set an MSS for the default route on all LAN hosts behind the PPPoE gateway. This is annoying, as it requires changes on each host. Instead, rp-pppoe “listens in” on the MSS negotiation and modifies the MSS if it is too big. Adjusting the MSS is a hack. It breaks the concept of the transport-layer being end-to-end. It will not work with IPSec, because IPSec will not let you damage IP packets (they will fail to authenticate.) Nevertheless, it is a fairly effective solution to an ugly real-world problem, and is used by default in rp-pppoe.
Installation and Configuration of PPP / PPPoE
We setup a GENTOO 2005.0 Linux machine with RP-PPPoE, PPP and the Firewall Software iptables. The internal network 192.168.138.0 is mapped to the dynamically asigned IP address using NAT / IP-Masquerading.
  1. Download PPP from Sambas Site, on GENTOO Linux use:

    emerge ppp
    This creates the directory/etc/ppp
     
  2. Download RP-PPPoE from RoaringPenguin

    tar xzvf rp-pppoe-xxx.tar.gz
    cd src
    ./configure
    make
    make install

    cd /etc/ppp
    ls -l
    -rw-------  1 root root   37 Jul 25 09:59 chap-secrets
    -rw-------  1 root root    0 Jul 25 09:59 chap-secrets-bak
    -rw-------  1 root root   78 Jul 25 09:42 chap-secrets.example
    -rw-r--r--  1 root root  353 Jul 25 09:42 chat-default
    -rw-r--r--  1 root root  938 Jul 25 09:53 firewall-masq
    -rw-r--r--  1 root root  836 Jul 25 09:53 firewall-standalone
    -rwxr-xr-x  1 root root  931 Jul 25 09:42 ip-down*
    -rwxr-xr-x  1 root root 1081 Jul 25 09:42 ip-up*
    -rw-r--r--  1 root root    5 Jul 25 09:42 options
    -rw-r--r--  1 root root   53 Jul 25 09:42 options-pppoe
    -rw-r--r--  1 root root  238 Jul 25 09:42 options-pptp
    -rw-------  1 root root   37 Jul 25 09:59 pap-secrets
    -rw-------  1 root root    0 Jul 25 09:59 pap-secrets-bak
    -rw-------  1 root root   77 Jul 25 09:42 pap-secrets.example
    drwxr-xr-x  2 root root 4096 Jul 25 09:42 peers/
    drwxr-xr-x  2 root root 4096 Jul 25 09:53 plugins/
    -rw-r--r--  1 root root 4592 Jul 25 09:59 pppoe.conf
    -rw-------  1 root root 4562 Jul 25 09:59 pppoe.conf-bak
    -rw-r--r--  1 root root  104 Jul 25 09:53 pppoe-server-options
How to Connect
  1. Set up your Ethernet hardware

    First, make sure the Ethernet card you intend to use with the modem is visible to the Linux kernel.

    ifconfig eth0

    should display something like this:

    eth0 Link encap:Ethernet HWaddr 00:60:67:62:31:D4

    plust some more lines. Your HWaddr will be different. DO NOT assign an IP address to the Ethernet card. DO NOT configure the card to come up at boot time.
     Note, that the PPP-Interface (ppp0) is automatically setup by PPPoE/PPP, it cannot be setup manually.
     
  2. Configure various files

    Several files need editing. The easiest way to do this is to run the following command as root:

    adsl-setup

    Answer the questions and you should be all set. If you want to know what goes on behind, continue reading.
     
  3. Edit pap-secrets

    "xx.xyz@domain.ch" * "xxxxxxx"

    Edit the "pap-secrets" file, inserting your proper user-ID and password. Install the file (or copy the relevant lines) to /etc/ppp/pap-secrets. Your ISP may use CHAP authentication. In this case, add the line to /etc/ppp/chap-secrets.
     
  4. Edit pppoe.conf
    The file /etc/ppp/pppoe.conf contains configuration information for the ADSL connection.

    #***********************************************************************
    #
    # pppoe.conf
    #
    # Configuration file for rp-pppoe.  Edit as appropriate and install in
    # /etc/ppp/pppoe.conf
    #
    # NOTE: This file is used by the adsl-start, adsl-stop, adsl-connect and
    #       adsl-status shell scripts.  It is *not* used in any way by the
    #       "pppoe" executable.
    #
    # Copyright (C) 2000 Roaring Penguin Software Inc.
    #
    # This file may be distributed under the terms of the GNU General
    # Public License.
    #
    # LIC: GPL
    # $Id: pppoe.conf,v 1.10 2002/04/09 17:28:38 dfs Exp $
    #***********************************************************************

    # When you configure a variable, DO NOT leave spaces around the "=" sign.
    # Ethernet card connected to ADSL modem
    ETH='eth0'

    # ADSL user name.  You may have to supply "@provider.com"  Sympatico
    # users in Canada do need to include "@sympatico.ca"
    # Sympatico uses PAP authentication.  Make sure /etc/ppp/pap-secrets
    # contains the right username/password combination.
    # For Magma, use xxyyzz@magma.ca

    USER='xx.xyz@domain.ch'

    # Bring link up on demand?  Default is to leave link up all the time.
    # If you want the link to come up on demand, set DEMAND to a number indicating
    # the idle time after which the link is brought down.

    DEMAND=no
    #DEMAND=300

    # DNS type: SERVER=obtain from server; SPECIFY=use DNS1 and DNS2;
    # NOCHANGE=do not adjust.
    DNSTYPE=SPECIFY

    # Obtain DNS server addresses from the peer (recent versions of pppd only)
    # In old config files, this used to be called USEPEERDNS.  Changed to
    # PEERDNS for better Red Hat compatibility
    PEERDNS=no

    DNS1=195.186.4.111
    DNS2=195.186.1.111

    # Make the PPPoE connection your default route.  Set to
    # DEFAULTROUTE=no if you don't want this.

    DEFAULTROUTE=yes

    ### ONLY TOUCH THE FOLLOWING SETTINGS IF YOU'RE AN EXPERT

    # How long adsl-start waits for a new PPP interface to appear before
    # concluding something went wrong.  If you use 0, then adsl-start
    # exits immediately with a successful status and does not wait for the
    # link to come up.  Time is in seconds.
    #
    # WARNING WARNING WARNING:
    #
    # If you are using rp-pppoe on a physically-inaccessible host, set
    # CONNECT_TIMEOUT to 0.  This makes SURE that the machine keeps trying
    # to connect forever after adsl-start is called.  Otherwise, it will
    # give out after CONNECT_TIMEOUT seconds and will not attempt to
    # connect again, making it impossible to reach.

    CONNECT_TIMEOUT=30

    # How often in seconds adsl-start polls to check if link is up
    CONNECT_POLL=2

    # Specific desired AC Name
    ACNAME=

    # Specific desired service name
    SERVICENAME=

    # Character to echo at each poll.  Use PING="" if you don't want
    # anything echoed

    PING="."

    # File where the adsl-connect script writes its process-ID.
    # Three files are actually used:
    #   $PIDFILE       contains PID of adsl-connect script
    #   $PIDFILE.pppoe contains PID of pppoe process
    #   $PIDFILE.pppd  contains PID of pppd process

    CF_BASE=`basename $CONFIG`
    PIDFILE="/var/run/$CF_BASE-adsl.pid"

    # Do you want to use synchronous PPP?  "yes" or "no".  "yes" is much
    # easier on CPU usage, but may not work for you.  It is safer to use
    # "no", but you may want to experiment with "yes".  "yes" is generally
    # safe on Linux machines with the n_hdlc line discipline; unsafe on others.

    SYNCHRONOUS=no

    # Do you want to clamp the MSS?  Here's how to decide:
    # - If you have only a SINGLE computer connected to the ADSL modem, choose
    #   "no".
    # - If you have a computer acting as a gateway for a LAN, choose "1412".
    #   The setting of 1412 is safe for either setup, but uses slightly more
    #   CPU power.
    CLAMPMSS=1412
    #CLAMPMSS=no

    # LCP echo interval and failure count.
    LCP_INTERVAL=20
    LCP_FAILURE=3

    # PPPOE_TIMEOUT should be about 4*LCP_INTERVAL
    PPPOE_TIMEOUT=80

    # Firewalling: One of NONE, STANDALONE or MASQUERADE
    FIREWALL=NONE

    # Linux kernel-mode plugin for pppd.  If you want to try the kernel-mode
    # plugin, use LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so

    LINUX_PLUGIN=

    # Any extra arguments to pass to pppoe.  Normally, use a blank string
    # like this:

    PPPOE_EXTRA=""

    # Rumour has it that "Citizen's Communications" with a 3Com
    # HomeConnect ADSL Modem DualLink requires these extra options:

    # PPPOE_EXTRA="-f 3c12:3c13 -S ISP"

    # Any extra arguments to pass to pppd.  Normally, use a blank string
    # like this:
    PPPD_EXTRA=""

    ########## DON'T CHANGE BELOW UNLESS YOU KNOW WHAT YOU ARE DOING
    # If you wish to COMPLETELY overrride the pppd invocation:
    # Example:
    # OVERRIDE_PPPD_COMMAND="pppd call dsl"

    # If you want adsl-connect to exit when connection drops:
    # RETRY_ON_FAILURE=no
     
  5.  Set up DNS

    If you are using DNS servers supplied by your ISP, edit the file /etc/resolv.conf
     
  6. Bring up the connection at boot time (For GENTOO)

    #!/sbin/runscript
    depend() {
    need net
    use logger dns
    }

    # Paths to programs
    START=/usr/sbin/adsl-start
    STOP=/usr/sbin/adsl-stop
    STATUS=/usr/sbin/adsl-status

    start() {
    ebegin "Bringing up ADSL link"
    $START &>/dev/null
    touch /var/lock/subsys/adsl
    eend $?
    }

    stop() {
    ebegin "Shutting down ADSL link"
    $STOP &>/dev/null
    rm -f /var/lock/subsys/adsl
    eend $?
    }
     
  7. Commands to control the ADSL link
    As root, bring up the link by typing: adsl-start
    As root, bring down the link by typing: adsl-stop
    ps -ef
    /usr/sbin/adsl-connect
    /usr/sbin/pppd pty /usr/sbin/pppoe -p /var/run/pppoe.conf-adsl.pid.pppoe \
       -I eth0 -T 80 -U -m 1412 noipdefa
    /usr/sbin/pppoe -p /var/run/pppoe.conf-adsl.pid.pppoe \
       -I eth0 -T 80 -U -m 1412
    ifconfig -a
    eth0      Link encap:Ethernet  HWaddr 00:30:48:28:AA:4A
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:23529 errors:0 dropped:0 overruns:0 frame:0
              TX packets:18759 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:22942360 (21.8 Mb)  TX bytes:1973186 (1.8 Mb)
              Base address:0x3000 Memory:fc200000-fc220000

    eth1      Link encap:Ethernet  HWaddr 00:30:48:28:AA:4B
              inet addr:192.168.138.1  Bcast:192.168.138.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:18130 errors:0 dropped:0 overruns:0 frame:0
              TX packets:25373 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:1819853 (1.7 Mb)  TX bytes:21836499 (20.8 Mb)
              Base address:0x3040 Memory:fc220000-fc240000

    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:16 errors:0 dropped:0 overruns:0 frame:0
              TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:1590 (1.5 Kb)  TX bytes:1590 (1.5 Kb)

    ppp0      Link encap:Point-to-Point Protocol
              inet addr:213.3.5.17  P-t-P:195.186.253.131  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
              RX packets:21685 errors:0 dropped:0 overruns:0 frame:0
              TX packets:14272 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:3
              RX bytes:22260398 (21.2 Mb)  TX bytes:1314858 (1.2 Mb)
    netstat -nr
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    195.186.253.131 0.0.0.0         255.255.255.255 UH        0 0          0 ppp0
    192.168.138.0   0.0.0.0         255.255.255.0   U         0 0          0 eth1
    127.0.0.0       127.0.0.1       255.0.0.0       UG        0 0          0 lo
    0.0.0.0         195.186.253.131 0.0.0.0         UG        0 0          0 ppp0
    adsl-status
    adsl-status: Link is up and running on interface ppp0
    ppp0      Link encap:Point-to-Point Protocol
              inet addr:213.3.5.17  P-t-P:195.186.253.131  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
              RX packets:2432 errors:0 dropped:0 overruns:0 frame:0
              TX packets:2145 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:3
              RX bytes:628102 (613.3 Kb)  TX bytes:241917 (236.2 Kb)

Using A Zyxel Router as a Modem (Bridged Mode)

Connect to your Zyxel Router using TELNET. In Menu 1, change Route IP = No, Bridge = Yes.
In Menu 4, change Encapsulation to RFC 1483. Make sure VPI and VCI are setup correct for your Provider.
In Menu 11.2, change Route = None, Bridge = Yes.

Now, reboot the Modem ... it's now a Modem no more a Router. All settings are ignored, the Modem can no longer talk PPPoE!

Linux Routing

The first task to undertake when configuring the firewall ruleset is to turn on all the options you would like the kernel to use when processing IP packets. The very first thing is that you turn ip_forwarding off - it will be turned on after everything is done. We have set the following kernel options in the /etc/conf.d/local.start.
# /etc/conf.d/local.start:
# Setup Kernel Options for iptables/Firewall"

# If your firewall has a dynamic IP address, use this setting
echo 2 > /proc/sys/net/ipv4/ip_dynaddr

# Hardening settings:
if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
  for f in /proc/sys/net/ipv4/conf/*/accept_source_route
  do
   echo 0 > $f
  done
fi


# Do not respond to 'redirected' packets
if [ -e /proc/sys/net/ipv4/conf/all/send_redirects ]; then
  for f in /proc/sys/net/ipv4/conf/*/send_redirects
  do
   echo 0 > $f
  done
fi


# Do not reply to 'proxyarp' packets
if [ -e /proc/sys/net/ipv4/conf/all/proxy_arp ]; then
  for f in /proc/sys/net/ipv4/conf/*/proxy_arp
  do
   echo 0 > $f
  done
fi


# Detecting and stopping spoofed packets
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
  for f in /proc/sys/net/ipv4/conf/*/rp_filter
  do
   echo 1 > $f
  done
fi


# Ignore source routing (dictating what route the traffic will take)
# from the origin of the packet as dictated by the client

echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
  for f in /proc/sys/net/ipv4/conf/*/accept_source_route
  do
   echo 0 > $f
  done
fi


# Suppress ICMP redirects
if [ -e /proc/sys/net/ipv4/conf/all/accept_redirects ]; then
  for f in /proc/sys/net/ipv4/conf/*/accept_redirects
  do
   echo 0 > $f
  done
fi
if [ -e /proc/sys/net/ipv4/conf/all/send_redirects ]; then
  for f in /proc/sys/net/ipv4/conf/*/send_redirects
  do
   echo 0 > $f
  done
fi
if [ -e /proc/sys/net/ipv4/conf/all/secure_redirects ]; then
  for f in /proc/sys/net/ipv4/conf/*/secure_redirects
  do
   echo 0 > $f
  done
fi


echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 > /proc/sys/net/ipv4/ip_forward

NAT (Network Address Translation)

Normally, packets on a network travel from their source to their destination through many different links. None of these links really alter your packet: they just send it onward.
If one of these links were to do NAT, then they would alter the source or destinations of the packet as it passes through. As you can imagine, this is not how the system was designed to work, and hence NAT is always something of a crock. Usually the link doing NAT will remember how it mangled a packet, and when a reply packet passes through the other way, it will do the reverse mangling on that reply packet, so everything works.
Why Would I Want To Do NAT?
In a perfect world, you wouldn't. Meanwhile, the main reasons are:
  • Modem Connections To The Internet
Most ISPs give you a single IP address when you dial up to them. You can send out packets with any source address you want, but only replies to packets with this source IP address will return to you. If you want to use multiple different machines (such as a home network) to connect to the Internet through this one link, you'll need NAT.
This is by far the most common use of NAT today, commonly known as «masquerading» in the Linux world. I call this SNAT, because you change the source address of the first packet.
  • Multiple Servers
Sometimes you want to change where packets heading into your network will go. Frequently this is because (as above), you have only one IP address, but you want people to be able to get into the boxes behind the one with the real IP address. If you rewrite the destination of incoming packets, you can manage this. This type of NAT was called port-forwarding under previous versions of Linux.
  • Transparent Proxying
Sometimes you want to pretend that each packet which passes through your Linux box is destined for a program on the Linux box itself. This is used to make transparent proxies: a proxy is a program which stands between your network and the outside world, shuffling communication between the two. The transparent part is because your network won't even know it's talking to a proxy, unless of course, the proxy doesn't work. Squid can be configured to work this way, and it is called redirection or transparent proxying under previous Linux versions.
The Two Types of NAT
NAT is divided into two different types: Source NAT (SNAT) and Destination NAT (DNAT).
  • SNAT
Source NAT is when you alter the source address of the first packet: i.e. you are changing where the connection is coming from. Source NAT is always done post-routing, just before the packet goes out onto the wire. Masquerading is a specialized form of SNAT.
  • DNAT
Destination NAT is when you alter the destination address of the first packet: i.e. you are changing where the connection is going to. Destination NAT is always done before routing, when the packet first comes off the wire. Port forwarding, load sharing, and transparent proxying are all forms of DNAT.
Examples
Here are our NAT rules as examples.
# echo "Static NAT: Masquerade our Traffic"
# $IPTABLES -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

echo "Static NAT to IP: 213.3.5.17"
$IPTABLES -t nat -A POSTROUTING -o ppp0 -j SNAT --to 213.3.5.17


echo "DNAT Portforwarding: 25 --> 192.168.138.28:25"
$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 25 -j DNAT --to 192.168.138.28:25

echo "DNAT Portforwarding: 53 --> 192.168.138.20:25"
$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 53 -j DNAT --to 192.168.138.20:53
$IPTABLES -t nat -A PREROUTING -p udp -i ppp0 --dport 53 -j DNAT --to 192.168.138.20:53

echo "DNAT Portforwarding: 80 --> 192.168.138.21:80"
$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -j DNAT --to 192.168.138.21:80

Firewall with netfilter/iptables

netfilter and iptables are building blocks of a framework inside the Linux 2.4.x and 2.6.x kernel. This framework enables packet filtering, network address translation and other packet mangling. It is the re-designed and heavily improved successor of the previous Linux 2.2.x ipchains and Linux 2.0.x ipfwadm systems.
netfilter is a set of hooks inside the Linux kernel that allows kernel modules to register callback functions with the network stack. A registered callback function is then called back for every packet that traverses the respective hook within the network stack.
iptables is a generic table structure for the definition of rulesets. Each rule within an IP table consists of a number of classifiers (iptables matches) and one connected action (iptables target).
Main Features
  • stateless packet filtering (IPv4 and IPv6)
  • stateful packet filtering (IPv4)
  • all kinds of network address and port translation (NAT/NAPT)
  • flexible and extensible infrastructure
  • multiple layers of API's for 3rd party extensions
  • large number of plugins/modules kept in 'patch-o-matic' repository
What can I do with netfilter/iptables?
  • build internet firewalls based on stateless and stateful packet filtering
  • use NAT and masquerading for sharing internet access if you don't have enough public IP addresses
  • use NAT to implement transparent proxies
  • aid the tc and iproute2 systems used to build sophisticated QoS and policy routers
  • do further packet manipulation (mangling) like altering the TOS/DSCP/ECN bits of the IP header
An iptable tutortial can be found here.
Stateful Inspection and Connection Tracking
Stateful packet inspection uses the same fundamental packet screening technique that packet filtering does. In addition, it examines the packet header information from the network layer of the OSI model to the application layer to verify that the packet is part of a legitimate connection and the protocols are behaving as expected.
The stateful packet inspection process is accomplished in the following manner. As packets pass through the firewall, packet header information is examined and fed into a dynamic state table where it is stored. The packets are compared to pre-configured rules or filters and allow or deny decisions are made based on the results of the comparison. The data in the state table is then used to evaluate subsequent packets to verify that they are part of the same connection. In short, stateful packet inspection uses a two step process to determine whether or not packets will be allowed or denied. This method can make decisions based on one or more of the following:
  • Source IP address
  • Destination IP address
  • Protocol type (TCP/UDP)
  • Source port
  • Destination port
  • Connection state
The connection state is derived from information gathered in previous packets. It is an essential factor in making the decision for new communication attempts. Stateful packet inspection compares the packets against the rules or filters and then checks the dynamic state table to verify that the packets are part of a valid, established connection. By having the ability to "remember" the status of a connection, this method of packet screening is better equipped to guard against attacks than standard packet filtering.
Stateful packet inspection solutions offer sophisticated decision-making capabilities, yet they operate faster than other packet screening methods because they require little processing overhead. Allow and deny decisions are made at the lower levels of the OSI model.
Some newer stateful packet inspection firewalls maintain more advanced connection state information. Some are able to reassemble the packets as they pass through the firewall and perform additional processing such as content filtering.
Connection States
  • NEW

    This packet is trying to create a new connection. Unless you're running a server you shouldn't allow these on the input side.
     
  • RELATED

    This packet is related to the existing connection, and is passing in the original direction
    .
     
  • INVALID

    his packet doesn't match any connection
     
  • ESTABLISHED

    This packet is part of an existing connection
As a simple example, to forward across the firewall interfaces packets that are part of a pre-existing connection might look like this:
iptables -A FORWARD -m state -state ESTABLISHED,RELATED -j ACCEPT
Installation and Configuration
  1. Download iptables from netfilter.org, on GENTOO use

    emerge iptables
     
  2. Prepare the Kernel

    cd /usr/src/linux
    make menuconfig
    (Enable Network packet filtering in Networking options)
     
  3. Download Firewall Builder from fwbuilder.org

    With this tool, you can build the basic iptables rules. Here are our basic rules.
    #!/bin/sh

    # Akadia AG, Fichtenweg 10, 3672 Oberdiessbach
    # --------------------------------------------------------------------------
    # File:        firewall.fw
    #
    # Autor:       Martin Zahn, 28.07.2005
    #
    # Purpose:     Configuration file IPTABLES Firewall
    #
    # Location:    /home/zahn/iptables
    #
    # Load Rules:  ./firewall.fw
    # Save Rules:  /etc/init.d/iptables save
    #
    # --------------------------------------------------------------------------
    #

    PATH="/sbin:/usr/sbin:/bin:/usr/bin:${PATH}"
    export PATH

    log() {
      echo "$1"
      test -x "$LOGGER" && $LOGGER -p info "$1"
    }

    va_num=1
    add_addr() {
      addr=$1
      nm=$2
      dev=$3

      type=""
      aadd=""

      L=`$IP -4 link ls $dev | head -n1`
      if test -n "$L"; then
        OIFS=$IFS
        IFS=" /:,<"
        set $L
        type=$4
        IFS=$OIFS

        L=`$IP -4 addr ls $dev to $addr | grep inet | grep -v :`
        if test -n "$L"; then
          OIFS=$IFS
          IFS=" /"
          set $L
          aadd=$2
          IFS=$OIFS
        fi
      fi
      if test -z "$aadd"; then
        if test "$type" = "POINTOPOINT"; then
          $IP -4 addr add $addr dev $dev scope global label $dev:FWB${va_num}
          va_num=`expr $va_num + 1`
        fi
        if test "$type" = "BROADCAST"; then
          $IP -4 addr add $addr/$nm dev $dev brd + scope global label $dev:FWB${va_num}
          va_num=`expr $va_num + 1`
        fi
      fi
    }

    getInterfaceVarName() {
      echo $1 | sed 's/\./_/'
    }

    getaddr() {
      dev=$1
      name=$2
      L=`$IP -4 addr show dev $dev | grep inet | grep -v :`
      test -z "$L" && {
        eval "$name=''"
        return
      }
      OIFS=$IFS
      IFS=" /"
      set $L
      eval "$name=$2"
      IFS=$OIFS
    }

    getinterfaces() {
      NAME=$1
      $IP link show | grep ": $NAME" | while read L; do
        OIFS=$IFS
        IFS=" :"
        set $L
        IFS=$OIFS
        echo $2
      done
    }

    LSMOD="lsmod"
    MODPROBE="modprobe"
    IPTABLES="iptables"
    IPTABLES_RESTORE="iptables-restore"
    IP="ip"
    LOGGER="logger"

    getaddr ppp0  i_ppp0

    log 'Activating firewall script'

    echo "Cleanup iptables Rules"
    $IPTABLES -P OUTPUT  DROP
    $IPTABLES -P INPUT   DROP
    $IPTABLES -P FORWARD DROP
    # $IPTABLES -F
    # $IPTABLES -X

    cat /proc/net/ip_tables_names | while read table; do
      test "X$table" = "Xmangle" && continue
      $IPTABLES -t $table -L -n | while read c chain rest; do
          if test "X$c" = "XChain" ; then
            $IPTABLES -t $table -F $chain
          fi
      done
      $IPTABLES -t $table -X
    done

    # echo "Mainly for PPPoE, VPN and DSL (MTU Fix, activate it if you have)"
    # echo "Problems with large Downloads over PPPoE"
    # $IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    # $IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    #
    echo "Connection Tracking Rules"
    $IPTABLES -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPTABLES -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    #
    # echo "NAT: Masquerade our Traffic"
    # $IPTABLES -t nat -A POSTROUTING -o ppp0  -j MASQUERADE

    echo "Static NAT to IP: 213.3.5.17"
    $IPTABLES -t nat -A POSTROUTING -o ppp0 -j SNAT --to 213.3.5.17


    # echo "Portforwarding: 25 --> 192.168.138.28:25"$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 25 -j DNAT --to 192.168.138.28:25
    # echo "Portforwarding: 53 --> 192.168.138.28:25"$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 53 -j DNAT --to 192.168.138.28:53
    $IPTABLES -t nat -A PREROUTING -p udp -i ppp0 --dport 53 -j DNAT --to 192.168.138.28:53


    # echo "Portforwarding: 80,8080,8081 --> 192.168.138.28:80,8080,8081"
    $IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -j DNAT --to 192.168.138.28:80
    $IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 8080 -j DNAT --to 192.168.138.28:8080
    $IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 8081 -j DNAT --to 192.168.138.28:8081


    # echo "Portforwarding: 143 --> 192.168.138.28:143"$IPTABLES -t nat -A PREROUTING -p tcp -i ppp0 --dport 143 -j DNAT --to 192.168.138.28:143#echo "Anti Spoofing Rule"
    $IPTABLES -N ppp0_In_RULE_0
    test -n "$i_ppp0" && $IPTABLES -A INPUT  -i ppp0  -s $i_ppp0  -j ppp0_In_RULE_0
    $IPTABLES -A INPUT  -i ppp0  -s 192.168.138.1  -j ppp0_In_RULE_0
    $IPTABLES -A INPUT  -i ppp0  -s 192.168.138.0/24  -j ppp0_In_RULE_0
    test -n "$i_ppp0" && $IPTABLES -A FORWARD  -i ppp0  -s $i_ppp0  -j ppp0_In_RULE_0
    $IPTABLES -A FORWARD  -i ppp0  -s 192.168.138.1  -j ppp0_In_RULE_0
    $IPTABLES -A FORWARD  -i ppp0  -s 192.168.138.0/24  -j ppp0_In_RULE_0
    $IPTABLES -A ppp0_In_RULE_0   -j LOG  --log-level info --log-prefix "RULE 0 -- DENY "
    $IPTABLES -A ppp0_In_RULE_0   -j DROP

    #echo "Loopback (lo) Rules"
    $IPTABLES -A INPUT  -i lo  -m state --state NEW  -j ACCEPT
    $IPTABLES -A OUTPUT  -o lo  -m state --state NEW  -j ACCEPT

    #
    echo "Allow the following TCP Ports from Aynwhere"

    $IPTABLES -A OUTPUT  -p tcp -m tcp -m multiport --dports 22,80,443,25,143,8080,8081 \
      -m state --state NEW -j ACCEPT
    $IPTABLES -A INPUT   -p tcp -m tcp -m multiport --dports 22,80,443,25,143,8080,8081 \
      -m state --state NEW -j ACCEPT
    $IPTABLES -A FORWARD -p tcp -m tcp -m multiport --dports 22,80,443,25,143,8080,8081 \
      -m state --state NEW -j ACCEPT

    #
    echo "Allow DNS Zone Transfer only from 62.2.210.211"
    $IPTABLES -A OUTPUT  -p tcp -m tcp -d 62.2.210.211 --dport 53 -m state --state NEW -j ACCEPT
    $IPTABLES -A INPUT   -p tcp -m tcp -d 62.2.210.211 --dport 53 -m state --state NEW -j ACCEPT
    $IPTABLES -A FORWARD -p tcp -m tcp -d 62.2.210.211 --dport 53 -m state --state NEW -j ACCEPT
    #
    echo "Allow DNS Queries"
    $IPTABLES -A OUTPUT  -p udp -m udp  --dport 53 -m state --state NEW -j ACCEPT
    $IPTABLES -A INPUT   -p udp -m udp  --dport 53 -m state --state NEW -j ACCEPT
    $IPTABLES -A FORWARD -p udp -m udp  --dport 53 -m state --state NEW -j ACCEPT

    #
    echo "Allow NTP Time to setup the Date/Time from NTP Server"
    $IPTABLES -A OUTPUT  -p udp -m udp --dport 123 -m state --state NEW -j ACCEPT
    $IPTABLES -A INPUT   -p udp -m udp --dport 123 -m state --state NEW -j ACCEPT
    $IPTABLES -A FORWARD -p udp -m udp --dport 123 -m state --state NEW -j ACCEPT

    #
    echo "HSZ Rules"

    $IPTABLES -A INPUT  -s 192.168.138.0/24  -m state --state NEW  -j ACCEPT
    $IPTABLES -A OUTPUT  -s 192.168.138.0/24  -m state --state NEW  -j ACCEPT
    $IPTABLES -A FORWARD  -s 192.168.138.0/24  -m state --state NEW  -j ACCEPT

    #
    echo "Logging Rules"$IPTABLES -N RULE_2
    $IPTABLES -A OUTPUT  -j RULE_2
    $IPTABLES -A INPUT  -j RULE_2
    $IPTABLES -A FORWARD  -j RULE_2
    $IPTABLES -A RULE_2  -j LOG  --log-level info --log-prefix "RULE 2 -- DENY "
    $IPTABLES -A RULE_2  -j DROP
    #
    echo "Activate Routing"
    echo 1 > /proc/sys/net/ipv4/ip_forward
     
  4. Load and Save the Rules

    ./firewall.fw
    /etc/init.d/iptables save
    The iptables rules are saved and automatically loaded when the machine is booting the next time. The location of the saved rules are defined in/etc/conf.d/iptables (/var/lib/iptables/rules-save) for GENTOO linux.
Useful iptables Commands
iptables -L          (List Rules)
iptables -t nat -L   (List NAT Rules)

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             anywhere            tcp dpt:smtp to:192.168.138.28:25
DNAT       tcp  --  anywhere             anywhere            tcp dpt:domain to:192.168.138.20:53
DNAT       udp  --  anywhere             anywhere            udp dpt:domain to:192.168.138.20:53
DNAT       tcp  --  anywhere             anywhere            tcp dpt:www to:192.168.138.21:80

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  anywhere             anywhere            to:213.3.5.17

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
iptables -F    (Delete all rules)
iptables -X    (Delete all userdefined chains)

Source: www.akadia.com.